@k2b/ui 0.50.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 (294) hide show
  1. package/dist/base.css +32 -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/Dropdown.js +43 -10
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/command-dock.js +47 -0
  10. package/dist/browser/actions/command-dock.js.map +1 -0
  11. package/dist/browser/actions/command-items.js +84 -0
  12. package/dist/browser/actions/command-items.js.map +1 -0
  13. package/dist/browser/actions/command-messages.js +42 -0
  14. package/dist/browser/actions/command-messages.js.map +1 -0
  15. package/dist/browser/actions/index.js +1 -0
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/charts/core/area.js +3 -5
  18. package/dist/browser/charts/core/area.js.map +1 -1
  19. package/dist/browser/charts/core/calendar.js +1 -1
  20. package/dist/browser/charts/core/calendar.js.map +1 -1
  21. package/dist/browser/charts/core/chart-messages.js +17 -0
  22. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  23. package/dist/browser/charts/core/hbar-layout.js +118 -0
  24. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  25. package/dist/browser/charts/core/hbar.js +39 -0
  26. package/dist/browser/charts/core/hbar.js.map +1 -0
  27. package/dist/browser/charts/core/index.js +7 -2
  28. package/dist/browser/charts/core/index.js.map +1 -1
  29. package/dist/browser/charts/core/map.js +116 -0
  30. package/dist/browser/charts/core/map.js.map +1 -0
  31. package/dist/browser/charts/core/registry.js +22 -15
  32. package/dist/browser/charts/core/registry.js.map +1 -1
  33. package/dist/browser/charts/core/render-size.js +13 -0
  34. package/dist/browser/charts/core/render-size.js.map +1 -0
  35. package/dist/browser/charts/core/render.js +20 -10
  36. package/dist/browser/charts/core/render.js.map +1 -1
  37. package/dist/browser/charts/core/snapshot.js +3 -3
  38. package/dist/browser/charts/core/snapshot.js.map +1 -1
  39. package/dist/browser/charts/core/svg-renderers.js +2406 -0
  40. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  41. package/dist/browser/charts/core/svg.js +4 -2525
  42. package/dist/browser/charts/core/svg.js.map +1 -1
  43. package/dist/browser/charts/core/types.js +0 -2
  44. package/dist/browser/charts/core/types.js.map +1 -1
  45. package/dist/browser/charts/core/waterfall.js +162 -0
  46. package/dist/browser/charts/core/waterfall.js.map +1 -0
  47. package/dist/browser/charts/description.js +2 -0
  48. package/dist/browser/charts/description.js.map +1 -0
  49. package/dist/browser/charts.js.map +1 -1
  50. package/dist/browser/content/Chart.js +14 -628
  51. package/dist/browser/content/Chart.js.map +1 -1
  52. package/dist/browser/content/ChartRoot.js +632 -0
  53. package/dist/browser/content/ChartRoot.js.map +1 -0
  54. package/dist/browser/content/ChartSparkline.js +24 -0
  55. package/dist/browser/content/ChartSparkline.js.map +1 -0
  56. package/dist/browser/content/FileView.js +111 -61
  57. package/dist/browser/content/FileView.js.map +1 -1
  58. package/dist/browser/content/Lightbox.js +8 -8
  59. package/dist/browser/content/Lightbox.js.map +1 -1
  60. package/dist/browser/content/MapView.js +30 -28
  61. package/dist/browser/content/MapView.js.map +1 -1
  62. package/dist/browser/content/PdfPreview.js +84 -52
  63. package/dist/browser/content/PdfPreview.js.map +1 -1
  64. package/dist/browser/content/PdfViewer.js +588 -0
  65. package/dist/browser/content/PdfViewer.js.map +1 -0
  66. package/dist/browser/content/chart-bar.js +246 -16
  67. package/dist/browser/content/chart-bar.js.map +1 -1
  68. package/dist/browser/content/chart-inspection-core.js +22 -21
  69. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  70. package/dist/browser/content/chart-line-gaps.js +1 -1
  71. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  72. package/dist/browser/content/chart-message-catalog.js +10 -0
  73. package/dist/browser/content/chart-message-catalog.js.map +1 -1
  74. package/dist/browser/content/chart-state-timeline.js +1 -1
  75. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  76. package/dist/browser/content/chart-svg.js +2 -1
  77. package/dist/browser/content/chart-svg.js.map +1 -1
  78. package/dist/browser/content/index.js +1 -0
  79. package/dist/browser/content/index.js.map +1 -1
  80. package/dist/browser/content/pdf-document.js +29 -0
  81. package/dist/browser/content/pdf-document.js.map +1 -0
  82. package/dist/browser/content/pdf-limits.js +31 -0
  83. package/dist/browser/content/pdf-limits.js.map +1 -0
  84. package/dist/browser/content/pdf-messages.js +34 -2
  85. package/dist/browser/content/pdf-messages.js.map +1 -1
  86. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  87. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  88. package/dist/browser/inputs/ChoiceInputs.js +94 -51
  89. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  90. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  91. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  92. package/dist/browser/inputs/DatePicker.js +113 -98
  93. package/dist/browser/inputs/DatePicker.js.map +1 -1
  94. package/dist/browser/inputs/PeriodPicker.js +874 -0
  95. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  96. package/dist/browser/inputs/index.js +4 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/input-messages.js +8 -2
  99. package/dist/browser/inputs/input-messages.js.map +1 -1
  100. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  101. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  102. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  103. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  104. package/dist/browser/inputs/period-picker-messages.js +71 -0
  105. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  106. package/dist/browser/inputs/period.js +263 -0
  107. package/dist/browser/inputs/period.js.map +1 -0
  108. package/dist/browser/layout/DetailPanel.js +147 -120
  109. package/dist/browser/layout/DetailPanel.js.map +1 -1
  110. package/dist/browser/layout/Discussion.js +101 -108
  111. package/dist/browser/layout/Discussion.js.map +1 -1
  112. package/dist/browser/layout/index.js.map +1 -1
  113. package/dist/browser/surfaces/DescriptionList.js +5 -2
  114. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  115. package/dist/browser/surfaces/StatCell.js +19 -14
  116. package/dist/browser/surfaces/StatCell.js.map +1 -1
  117. package/dist/browser/surfaces/delta-badge.js +16 -2
  118. package/dist/browser/surfaces/delta-badge.js.map +1 -1
  119. package/dist/browser/widgets/DashboardFrame.js +310 -0
  120. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  121. package/dist/browser/widgets/index.js +1 -0
  122. package/dist/browser/widgets/index.js.map +1 -1
  123. package/dist/licenses/pdfjs-dist.txt +177 -0
  124. package/dist/ssr/actions/Button.js.map +1 -1
  125. package/dist/ssr/actions/CommandList.js +638 -0
  126. package/dist/ssr/actions/CommandList.js.map +1 -0
  127. package/dist/ssr/actions/CommandMenu.js +197 -0
  128. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  129. package/dist/ssr/actions/Dropdown.js +43 -10
  130. package/dist/ssr/actions/Dropdown.js.map +1 -1
  131. package/dist/ssr/actions/command-dock.js +47 -0
  132. package/dist/ssr/actions/command-dock.js.map +1 -0
  133. package/dist/ssr/actions/command-items.js +84 -0
  134. package/dist/ssr/actions/command-items.js.map +1 -0
  135. package/dist/ssr/actions/command-messages.js +42 -0
  136. package/dist/ssr/actions/command-messages.js.map +1 -0
  137. package/dist/ssr/actions/index.js +1 -0
  138. package/dist/ssr/actions/index.js.map +1 -1
  139. package/dist/ssr/charts/core/area.js +3 -5
  140. package/dist/ssr/charts/core/area.js.map +1 -1
  141. package/dist/ssr/charts/core/calendar.js +1 -1
  142. package/dist/ssr/charts/core/calendar.js.map +1 -1
  143. package/dist/ssr/charts/core/chart-messages.js +17 -0
  144. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  145. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  146. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  147. package/dist/ssr/charts/core/hbar.js +39 -0
  148. package/dist/ssr/charts/core/hbar.js.map +1 -0
  149. package/dist/ssr/charts/core/index.js +7 -2
  150. package/dist/ssr/charts/core/index.js.map +1 -1
  151. package/dist/ssr/charts/core/map.js +116 -0
  152. package/dist/ssr/charts/core/map.js.map +1 -0
  153. package/dist/ssr/charts/core/registry.js +22 -15
  154. package/dist/ssr/charts/core/registry.js.map +1 -1
  155. package/dist/ssr/charts/core/render-size.js +13 -0
  156. package/dist/ssr/charts/core/render-size.js.map +1 -0
  157. package/dist/ssr/charts/core/render.js +20 -10
  158. package/dist/ssr/charts/core/render.js.map +1 -1
  159. package/dist/ssr/charts/core/snapshot.js +3 -3
  160. package/dist/ssr/charts/core/snapshot.js.map +1 -1
  161. package/dist/ssr/charts/core/svg-renderers.js +2406 -0
  162. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  163. package/dist/ssr/charts/core/svg.js +4 -2525
  164. package/dist/ssr/charts/core/svg.js.map +1 -1
  165. package/dist/ssr/charts/core/types.js +0 -2
  166. package/dist/ssr/charts/core/types.js.map +1 -1
  167. package/dist/ssr/charts/core/waterfall.js +162 -0
  168. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  169. package/dist/ssr/charts/description.js +2 -0
  170. package/dist/ssr/charts/description.js.map +1 -0
  171. package/dist/ssr/charts.js.map +1 -1
  172. package/dist/ssr/content/Chart.js +14 -471
  173. package/dist/ssr/content/Chart.js.map +1 -1
  174. package/dist/ssr/content/ChartRoot.js +475 -0
  175. package/dist/ssr/content/ChartRoot.js.map +1 -0
  176. package/dist/ssr/content/ChartSparkline.js +24 -0
  177. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  178. package/dist/ssr/content/FileView.js +56 -7
  179. package/dist/ssr/content/FileView.js.map +1 -1
  180. package/dist/ssr/content/Lightbox.js +8 -8
  181. package/dist/ssr/content/Lightbox.js.map +1 -1
  182. package/dist/ssr/content/MapView.js +9 -9
  183. package/dist/ssr/content/MapView.js.map +1 -1
  184. package/dist/ssr/content/PdfPreview.js +49 -20
  185. package/dist/ssr/content/PdfPreview.js.map +1 -1
  186. package/dist/ssr/content/PdfViewer.js +484 -0
  187. package/dist/ssr/content/PdfViewer.js.map +1 -0
  188. package/dist/ssr/content/chart-bar.js +246 -16
  189. package/dist/ssr/content/chart-bar.js.map +1 -1
  190. package/dist/ssr/content/chart-inspection-core.js +22 -21
  191. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  192. package/dist/ssr/content/chart-line-gaps.js +1 -1
  193. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  194. package/dist/ssr/content/chart-message-catalog.js +10 -0
  195. package/dist/ssr/content/chart-message-catalog.js.map +1 -1
  196. package/dist/ssr/content/chart-state-timeline.js +1 -1
  197. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  198. package/dist/ssr/content/chart-svg.js +2 -1
  199. package/dist/ssr/content/chart-svg.js.map +1 -1
  200. package/dist/ssr/content/index.js +1 -0
  201. package/dist/ssr/content/index.js.map +1 -1
  202. package/dist/ssr/content/pdf-document.js +29 -0
  203. package/dist/ssr/content/pdf-document.js.map +1 -0
  204. package/dist/ssr/content/pdf-limits.js +31 -0
  205. package/dist/ssr/content/pdf-limits.js.map +1 -0
  206. package/dist/ssr/content/pdf-messages.js +34 -2
  207. package/dist/ssr/content/pdf-messages.js.map +1 -1
  208. package/dist/ssr/inputs/ChoiceInputs.js +49 -12
  209. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  210. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  211. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  212. package/dist/ssr/inputs/DatePicker.js +14 -9
  213. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  214. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  215. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  216. package/dist/ssr/inputs/index.js +4 -1
  217. package/dist/ssr/inputs/index.js.map +1 -1
  218. package/dist/ssr/inputs/input-messages.js +8 -2
  219. package/dist/ssr/inputs/input-messages.js.map +1 -1
  220. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  221. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  222. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  223. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  224. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  225. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  226. package/dist/ssr/inputs/period.js +263 -0
  227. package/dist/ssr/inputs/period.js.map +1 -0
  228. package/dist/ssr/layout/DetailPanel.js +27 -4
  229. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  230. package/dist/ssr/layout/Discussion.js +16 -2
  231. package/dist/ssr/layout/Discussion.js.map +1 -1
  232. package/dist/ssr/layout/index.js.map +1 -1
  233. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  234. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  235. package/dist/ssr/surfaces/StatCell.js +4 -5
  236. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  237. package/dist/ssr/surfaces/delta-badge.js +16 -2
  238. package/dist/ssr/surfaces/delta-badge.js.map +1 -1
  239. package/dist/ssr/widgets/DashboardFrame.js +200 -0
  240. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  241. package/dist/ssr/widgets/index.js +1 -0
  242. package/dist/ssr/widgets/index.js.map +1 -1
  243. package/dist/styles.css +1 -1
  244. package/dist/types/actions/Button.d.ts +1 -1
  245. package/dist/types/actions/CommandList.d.ts +120 -0
  246. package/dist/types/actions/CommandMenu.d.ts +39 -0
  247. package/dist/types/actions/Dropdown.d.ts +17 -0
  248. package/dist/types/actions/command-dock.d.ts +8 -0
  249. package/dist/types/actions/command-items.d.ts +134 -0
  250. package/dist/types/actions/command-messages.d.ts +19 -0
  251. package/dist/types/actions/index.d.ts +3 -0
  252. package/dist/types/charts/core/calendar.d.ts +1 -1
  253. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  254. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  255. package/dist/types/charts/core/hbar.d.ts +13 -0
  256. package/dist/types/charts/core/index.d.ts +7 -2
  257. package/dist/types/charts/core/map.d.ts +3 -0
  258. package/dist/types/charts/core/registry.d.ts +17 -11
  259. package/dist/types/charts/core/render-size.d.ts +7 -0
  260. package/dist/types/charts/core/render.d.ts +1 -4
  261. package/dist/types/charts/core/snapshot.d.ts +2 -2
  262. package/dist/types/charts/core/svg-renderers.d.ts +722 -0
  263. package/dist/types/charts/core/svg.d.ts +4 -698
  264. package/dist/types/charts/core/types.d.ts +1 -12
  265. package/dist/types/charts/core/waterfall.d.ts +68 -0
  266. package/dist/types/charts/description.d.ts +226 -0
  267. package/dist/types/charts.d.ts +1 -0
  268. package/dist/types/content/Chart.d.ts +3 -91
  269. package/dist/types/content/ChartRoot.d.ts +92 -0
  270. package/dist/types/content/ChartSparkline.d.ts +5 -0
  271. package/dist/types/content/PdfViewer.d.ts +32 -0
  272. package/dist/types/content/chart-bar.d.ts +95 -2
  273. package/dist/types/content/index.d.ts +2 -0
  274. package/dist/types/content/pdf-document.d.ts +5 -0
  275. package/dist/types/content/pdf-engine.d.ts +9 -0
  276. package/dist/types/content/pdf-limits.d.ts +43 -0
  277. package/dist/types/content/pdf-messages.d.ts +16 -0
  278. package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
  279. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  280. package/dist/types/inputs/DatePicker.d.ts +22 -0
  281. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  282. package/dist/types/inputs/index.d.ts +8 -2
  283. package/dist/types/inputs/input-messages.d.ts +3 -0
  284. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  285. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  286. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  287. package/dist/types/inputs/period.d.ts +134 -0
  288. package/dist/types/layout/DetailPanel.d.ts +12 -0
  289. package/dist/types/layout/index.d.ts +1 -1
  290. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  291. package/dist/types/surfaces/StatCell.d.ts +6 -1
  292. package/dist/types/widgets/DashboardFrame.d.ts +58 -0
  293. package/dist/types/widgets/index.d.ts +1 -0
  294. package/package.json +2 -1
@@ -17,15 +17,4 @@ export type ChartDatum = {
17
17
  formatted?: string;
18
18
  }[];
19
19
  };
20
- /** Serializable number presentation, compatible with the editor's NumberFormat contract. */
21
- export type ChartNumberFormat = {
22
- style?: "number" | "percent" | "currency";
23
- currency?: string;
24
- unit?: string;
25
- decimals?: number;
26
- compact?: boolean;
27
- };
28
- export type ChartDateFormat = {
29
- date: "day" | "minute" | "second";
30
- };
31
- export type ChartFormat = ChartNumberFormat | ChartDateFormat;
20
+ export type { ChartDateFormat, ChartFormat, ChartNumberFormat } from "../description";
@@ -0,0 +1,68 @@
1
+ import type { ChartDatum } from "./types";
2
+ export type WaterfallOptions = {
3
+ start: {
4
+ label: string;
5
+ value: number;
6
+ };
7
+ steps: {
8
+ label: string;
9
+ value: number;
10
+ }[];
11
+ end: {
12
+ label: string;
13
+ };
14
+ title?: string;
15
+ subtitle?: string;
16
+ className?: string;
17
+ /** Formats balances and absolute changes. */
18
+ format?: (value: number) => string;
19
+ locale?: string;
20
+ /** Displayed width in CSS pixels; defaults to the SVG width. Stretching hosts pass their layout width. */
21
+ displayWidth?: number;
22
+ };
23
+ export type WaterfallBar = {
24
+ label: string;
25
+ value: number;
26
+ from: number;
27
+ to: number;
28
+ total: boolean;
29
+ };
30
+ /** Totals rest on zero; each change starts at the previous running balance. */
31
+ export declare function waterfallLayout(spec: WaterfallOptions, size: {
32
+ width: number;
33
+ height: number;
34
+ }): {
35
+ bars: WaterfallBar[];
36
+ balance: number;
37
+ scale: {
38
+ domain: [number, number];
39
+ ticks: number[];
40
+ };
41
+ left: number;
42
+ right: number;
43
+ top: number;
44
+ bottom: number;
45
+ slot: number;
46
+ ratio: number;
47
+ project: (value: number) => number;
48
+ format: {
49
+ (value: number): string;
50
+ (value: number | bigint): string;
51
+ (value: number | bigint | Intl.StringNumericLiteral): string;
52
+ };
53
+ amount: (bar: WaterfallBar) => string;
54
+ datum: (bar: WaterfallBar, index: number, center: number, formattedAmount: string) => ChartDatum;
55
+ };
56
+ export type WaterfallLayout = ReturnType<typeof waterfallLayout>;
57
+ /** Pure SVG, including presentation attributes for PDF and hosts outside .k2b-ui. */
58
+ export declare function renderWaterfallSvg(spec: WaterfallOptions & {
59
+ width: number;
60
+ height: number;
61
+ inspect?: boolean;
62
+ }, responsive?: boolean): string;
63
+ /** Draw the geometry already reserved by a host before its drawing module loads. */
64
+ export declare function renderWaterfallLayoutSvg(spec: WaterfallOptions & {
65
+ width: number;
66
+ height: number;
67
+ inspect?: boolean;
68
+ }, g: WaterfallLayout, responsive?: boolean): string;
@@ -0,0 +1,226 @@
1
+ /** JSON number formatting. Functions belong to the rendering host, never the saved description. */
2
+ export type ChartNumberFormat = {
3
+ style?: "number" | "percent" | "currency";
4
+ currency?: string;
5
+ unit?: string;
6
+ decimals?: number;
7
+ compact?: boolean;
8
+ };
9
+ export type ChartDateFormat = {
10
+ date: "day" | "minute" | "second";
11
+ };
12
+ export type ChartFormat = ChartNumberFormat | ChartDateFormat;
13
+ export type ChartLimits = {
14
+ maxSeries: number;
15
+ maxValues: number;
16
+ maxMarks: number;
17
+ };
18
+ export type ChartDescriptionAxis = {
19
+ label?: string;
20
+ domain?: number[];
21
+ ticks?: number;
22
+ scale?: "linear" | "log";
23
+ format?: ChartFormat;
24
+ };
25
+ type Reference = {
26
+ value: number | string;
27
+ axis?: "x" | "y";
28
+ label?: string;
29
+ style?: "solid" | "dashed" | "dotted";
30
+ tone?: "neutral" | "info" | "success" | "warning" | "danger";
31
+ };
32
+ type Threshold = {
33
+ value: number;
34
+ label?: string;
35
+ };
36
+ type Series<N> = {
37
+ label?: string;
38
+ data: {
39
+ x: N | string;
40
+ y: N;
41
+ }[];
42
+ role?: "reference";
43
+ };
44
+ type Common = {
45
+ title: string;
46
+ subtitle?: string;
47
+ tooltip?: {
48
+ label?: string;
49
+ format?: ChartNumberFormat;
50
+ };
51
+ };
52
+ type Variants<N> = {
53
+ kind: "waterfall";
54
+ start: {
55
+ label: string;
56
+ value: number;
57
+ };
58
+ steps: {
59
+ label: string;
60
+ value: number;
61
+ }[];
62
+ end: {
63
+ label: string;
64
+ };
65
+ format?: ChartNumberFormat;
66
+ } | {
67
+ kind: "area";
68
+ layout: "stacked";
69
+ normalize?: boolean;
70
+ x: (number | string)[];
71
+ series: {
72
+ label: string;
73
+ data: (number | null)[];
74
+ }[];
75
+ legend?: boolean;
76
+ format?: ChartNumberFormat;
77
+ } | {
78
+ kind: "bar";
79
+ data: {
80
+ label: string;
81
+ value: N;
82
+ }[];
83
+ x?: string[];
84
+ series?: {
85
+ label: string;
86
+ data: (number | null)[];
87
+ }[];
88
+ layout?: "columns" | "rows" | "grouped" | "stacked";
89
+ normalize?: boolean;
90
+ compare?: {
91
+ label: string;
92
+ data: (number | null)[];
93
+ };
94
+ xAxis?: Pick<ChartDescriptionAxis, "label"> & {
95
+ ordered?: boolean;
96
+ };
97
+ yAxis?: ChartDescriptionAxis;
98
+ colorByBar?: boolean;
99
+ showValues?: boolean;
100
+ legend?: boolean;
101
+ references?: Reference[];
102
+ } | {
103
+ kind: "hbar";
104
+ series: string[];
105
+ rows: {
106
+ group?: string;
107
+ label: string;
108
+ values: (number | null)[];
109
+ }[];
110
+ legend?: boolean;
111
+ format?: ChartNumberFormat;
112
+ } | {
113
+ kind: "line";
114
+ series: (Series<N> & {
115
+ style?: "solid" | "dashed" | "dotted";
116
+ })[];
117
+ xAxis?: ChartDescriptionAxis;
118
+ yAxis?: ChartDescriptionAxis;
119
+ legend?: boolean;
120
+ area?: boolean;
121
+ smooth?: boolean;
122
+ references?: Reference[];
123
+ } | {
124
+ kind: "scatter";
125
+ series: Series<N>[];
126
+ xAxis?: ChartDescriptionAxis;
127
+ yAxis?: ChartDescriptionAxis;
128
+ legend?: boolean;
129
+ references?: Reference[];
130
+ } | {
131
+ kind: "pie" | "donut";
132
+ data: {
133
+ label: string;
134
+ value: N;
135
+ }[];
136
+ legend?: boolean;
137
+ showLabels?: boolean;
138
+ format?: ChartNumberFormat;
139
+ } | {
140
+ kind: "histogram";
141
+ data: N[];
142
+ bins?: number | number[];
143
+ references?: Reference[];
144
+ } | {
145
+ kind: "gauge";
146
+ value: N;
147
+ min?: number;
148
+ max?: number;
149
+ label?: string;
150
+ unit?: string;
151
+ format?: ChartNumberFormat;
152
+ thresholds?: Threshold[];
153
+ } | {
154
+ kind: "sparkline";
155
+ data: N[];
156
+ area?: boolean;
157
+ } | {
158
+ kind: "boxplot";
159
+ data: {
160
+ label: string;
161
+ values: N[];
162
+ }[];
163
+ yAxis?: ChartDescriptionAxis;
164
+ references?: Reference[];
165
+ } | {
166
+ kind: "heatmap";
167
+ layout: "calendar";
168
+ data: [string, N | null][];
169
+ scale: "sequential" | "diverging";
170
+ label?: string;
171
+ format?: ChartNumberFormat;
172
+ locale?: string;
173
+ } | {
174
+ kind: "heatmap";
175
+ layout?: undefined;
176
+ data: {
177
+ x: string;
178
+ y: string;
179
+ value: N;
180
+ }[];
181
+ format?: ChartNumberFormat;
182
+ showValues?: boolean;
183
+ min?: number;
184
+ max?: number;
185
+ } | {
186
+ kind: "barGauge";
187
+ data: {
188
+ label: string;
189
+ value: N;
190
+ min?: number;
191
+ max?: number;
192
+ }[];
193
+ min?: number;
194
+ max?: number;
195
+ unit?: string;
196
+ format?: ChartNumberFormat;
197
+ thresholds?: Threshold[];
198
+ } | {
199
+ kind: "stat";
200
+ value: N;
201
+ format?: ChartNumberFormat;
202
+ unit?: string;
203
+ delta?: N;
204
+ better?: "up" | "down";
205
+ sparkline?: N[];
206
+ };
207
+ /** Portable chart node. Dates are ISO text and missing observations are null, never zero. */
208
+ export type ChartDescription = Common & (Exclude<Variants<number | null>, {
209
+ kind: "bar";
210
+ }> | (Omit<Extract<Variants<number | null>, {
211
+ kind: "bar";
212
+ }>, "data"> & {
213
+ data?: {
214
+ label: string;
215
+ value: number | null;
216
+ }[];
217
+ }));
218
+ /** Validated renderer input. The portable validator normalizes null gaps to non-finite numbers for drawing. */
219
+ export type ChartInput = Common & (Exclude<Variants<number>, {
220
+ kind: "stat";
221
+ }> | (Omit<Extract<Variants<number>, {
222
+ kind: "stat";
223
+ }>, "delta"> & {
224
+ delta: number | undefined;
225
+ }));
226
+ export {};
@@ -2,6 +2,7 @@
2
2
  * Drawing helpers and portable chart contracts. Import the Solid Chart component from `@k2b/ui`.
3
3
  */
4
4
  export * from "./charts/core";
5
+ export type * from "./charts/description";
5
6
  export type { ChartKindProps, ChartLabels, ChartProps, ChartRenderOptions } from "./content/Chart";
6
7
  export { type BarChartLayout, type BarChartOptions, barChartLayout, renderBarChartSvg } from "./content/chart-bar";
7
8
  export { calendarInspectionNavigation, mountCalendarScroll } from "./content/chart-calendar";
@@ -1,96 +1,8 @@
1
- import type { JSX } from "solid-js";
1
+ import { type JSX } from "solid-js";
2
2
  import { chartKinds } from "../charts/core/registry";
3
- import { type ChartDrawingOptions } from "../charts/core/render";
4
- import type { ChartCursor } from "./chart-cursor";
5
- import { type ChartDatumRef, type ChartKind, type ChartSelection, type ChartTooltipFormatter } from "./chart-inspection-core";
6
- /**
7
- * Chart — Solid interaction and sizing around the portable UI chart core.
8
- *
9
- * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;
10
- * Solid's `innerHTML` is reactive, so any time a prop (signal, store
11
- * slice, derived value) changes, the SVG re-renders. No manual
12
- * subscription, no imperative DOM patching. Trade-off: every change
13
- * is a full SVG re-build, not a diff — fine for dashboard cadences
14
- * (poll, websocket, store updates). Don't use this for 60fps streaming.
15
- *
16
- * **Sizing.** The server and browser render the same logical viewBox. CSS
17
- * fits Cartesian plots to the container and preserves text/marker sizes;
18
- * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain
19
- * their aspect ratio. No measurement
20
- * or hydration redraw is needed. The caller sizes the wrapper, for example
21
- * `style={{ height: "14rem" }}`. State timelines derive their default height
22
- * from the row count and legend via `stateTimelineHeight()`.
23
- *
24
- * **Why so thin.** The props are a discriminated union over each
25
- * registered core chart renderer — `kind: "line"` brings in exactly the params
26
- * `charts.line` expects, `kind: "bar"` brings in `charts.bar`'s, etc.
27
- * Options stay aligned with the core renderer without renaming. Every chart provides
28
- * renderer-owned inspection, tooltips and optional selection by default.
29
- * `interactive` adds bounded pan / zoom and reset controls to maps and state timelines.
30
- * When a core renderer gains an option, it is automatically available at every
31
- * callsite.
32
- *
33
- * **Theming.** The core renderers use `currentColor` for axes / ticks /
34
- * tick labels — set the wrapping element's `color` and everything
35
- * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS
36
- * custom properties; override on the parent for per-chart palettes.
37
- *
38
- * ```tsx
39
- * <Chart kind="line" style={{ height: "12rem" }}
40
- * series={[{ data: points() }]}
41
- * yAxis={{ format: v => `€${v}k` }} />
42
- *
43
- * <Chart kind="donut" style={{ height: "12rem" }} data={slices()} />
44
- *
45
- * <Chart kind="sparkline" style={{ width: "6rem", height: "1.5rem" }} data={trend()} />
46
- *
47
- * <Chart kind="map" style={{ height: "16rem" }} series={locations()} interactive />
48
- * ```
49
- */
50
- /** All registered chart kinds. */
51
- export type { ChartKind } from "./chart-inspection-core";
52
- export type ChartLabels = Partial<{
53
- empty: string;
54
- series: string;
55
- interactiveMap: string;
56
- interactiveTimeline: string;
57
- interactiveLine: string;
58
- interactiveChart: string;
59
- zoomIn: string;
60
- zoomOut: string;
61
- resetMap: string;
62
- resetTimeline: string;
63
- }>;
64
- /**
65
- * Per-kind props: `kind` discriminator + the exact options that
66
- * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper
67
- * owns those — CSS fits a stable coordinate space to the box). Solid's
68
- * component model handles discriminated unions natively, so callsites
69
- * get full type safety.
70
- */
71
- export type ChartProps = {
72
- [K in ChartKind]: Extract<ChartDrawingOptions, {
73
- kind: K;
74
- }> & {
75
- class?: string;
76
- style?: JSX.CSSProperties | string;
77
- labels?: ChartLabels;
78
- /**
79
- * Navigation for maps and state timelines: pan, zoom and reset controls.
80
- * Arrows pan; Alt+arrows inspect. Every chart shows tooltips and keyboard
81
- * inspection without this prop.
82
- */
83
- interactive?: boolean;
84
- onSelect?: (selection: ChartSelection) => void;
85
- /** Controlled highlight; indices belong to this exact input snapshot. */
86
- selected?: ChartDatumRef | null;
87
- /** Customize the always-on tooltip with a title and labeled text rows. */
88
- tooltip?: ChartTooltipFormatter;
89
- /** Optional shared X cursor for line charts. */
90
- cursor?: ChartCursor;
91
- };
92
- }[ChartKind];
3
+ import { type ChartKind, type ChartProps } from "./ChartRoot";
93
4
  export { type ChartRenderOptions, chartRenderHeight, renderChartSvg } from "../charts/core/render";
5
+ export type { ChartKind, ChartLabels, ChartProps } from "./ChartRoot";
94
6
  declare const ChartRoot: (props: ChartProps) => JSX.Element;
95
7
  type KindProps<T> = T extends unknown ? Omit<T, "kind"> : never;
96
8
  export type ChartKindProps<K extends ChartKind> = KindProps<Extract<ChartProps, {
@@ -0,0 +1,92 @@
1
+ import type { JSX } from "solid-js";
2
+ import type { ChartDrawingOptions } from "../charts/core/render";
3
+ import type { ChartCursor } from "./chart-cursor";
4
+ import { type ChartDatumRef, type ChartKind, type ChartSelection, type ChartTooltipFormatter } from "./chart-inspection-core";
5
+ /**
6
+ * Chart — Solid interaction and sizing around the portable UI chart core.
7
+ *
8
+ * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;
9
+ * Solid's `innerHTML` is reactive, so any time a prop (signal, store
10
+ * slice, derived value) changes, the SVG re-renders. No manual
11
+ * subscription, no imperative DOM patching. Trade-off: every change
12
+ * is a full SVG re-build, not a diff — fine for dashboard cadences
13
+ * (poll, websocket, store updates). Don't use this for 60fps streaming.
14
+ *
15
+ * **Sizing.** The server and browser render the same logical viewBox. CSS
16
+ * fits Cartesian plots to the container and preserves text/marker sizes;
17
+ * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain
18
+ * their aspect ratio. No measurement
19
+ * or hydration redraw is needed. The caller sizes the wrapper, for example
20
+ * `style={{ height: "14rem" }}`. State timelines derive their default height
21
+ * from the row count and legend via `stateTimelineHeight()`.
22
+ *
23
+ * **Why so thin.** The props are a discriminated union over each
24
+ * registered core chart renderer — `kind: "line"` brings in exactly the params
25
+ * `charts.line` expects, `kind: "bar"` brings in `charts.bar`'s, etc.
26
+ * Options stay aligned with the core renderer without renaming. Every chart provides
27
+ * renderer-owned inspection, tooltips and optional selection by default.
28
+ * `interactive` adds bounded pan / zoom and reset controls to maps and state timelines.
29
+ * When a core renderer gains an option, it is automatically available at every
30
+ * callsite.
31
+ *
32
+ * **Theming.** The core renderers use `currentColor` for axes / ticks /
33
+ * tick labels — set the wrapping element's `color` and everything
34
+ * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS
35
+ * custom properties; override on the parent for per-chart palettes.
36
+ *
37
+ * ```tsx
38
+ * <Chart kind="line" style={{ height: "12rem" }}
39
+ * series={[{ data: points() }]}
40
+ * yAxis={{ format: v => `€${v}k` }} />
41
+ *
42
+ * <Chart kind="donut" style={{ height: "12rem" }} data={slices()} />
43
+ *
44
+ * <Chart kind="sparkline" style={{ width: "6rem", height: "1.5rem" }} data={trend()} />
45
+ *
46
+ * <Chart kind="map" style={{ height: "16rem" }} series={locations()} interactive />
47
+ * ```
48
+ */
49
+ /** All registered chart kinds. */
50
+ export type { ChartKind } from "./chart-inspection-core";
51
+ export type ChartLabels = Partial<{
52
+ empty: string;
53
+ series: string;
54
+ interactiveMap: string;
55
+ interactiveTimeline: string;
56
+ interactiveLine: string;
57
+ interactiveChart: string;
58
+ zoomIn: string;
59
+ zoomOut: string;
60
+ resetMap: string;
61
+ resetTimeline: string;
62
+ }>;
63
+ /**
64
+ * Per-kind props: `kind` discriminator + the exact options that
65
+ * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper
66
+ * owns those — CSS fits a stable coordinate space to the box). Solid's
67
+ * component model handles discriminated unions natively, so callsites
68
+ * get full type safety.
69
+ */
70
+ export type ChartProps = {
71
+ [K in ChartKind]: Extract<ChartDrawingOptions, {
72
+ kind: K;
73
+ }> & {
74
+ class?: string;
75
+ style?: JSX.CSSProperties | string;
76
+ labels?: ChartLabels;
77
+ /**
78
+ * Navigation for maps and state timelines: pan, zoom and reset controls.
79
+ * Arrows pan; Alt+arrows inspect. Every chart shows tooltips and keyboard
80
+ * inspection without this prop.
81
+ */
82
+ interactive?: boolean;
83
+ onSelect?: (selection: ChartSelection) => void;
84
+ /** Controlled highlight; indices belong to this exact input snapshot. */
85
+ selected?: ChartDatumRef | null;
86
+ /** Customize the always-on tooltip with a title and labeled text rows. */
87
+ tooltip?: ChartTooltipFormatter;
88
+ /** Optional shared X cursor for line charts. */
89
+ cursor?: ChartCursor;
90
+ };
91
+ }[ChartKind];
92
+ export declare const renderChartRoot: (props: ChartProps, renderChartSvg: typeof import("../charts/core/render").renderChartSvg) => JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { type ChartProps } from "./ChartRoot";
2
+ /** The same chart host and SVG for stat trends, without the catalog dispatcher. */
3
+ export declare function ChartSparkline(props: Omit<Extract<ChartProps, {
4
+ kind: "sparkline";
5
+ }>, "kind">): import("solid-js").JSX.Element;
@@ -0,0 +1,32 @@
1
+ import { type JSX } from "solid-js";
2
+ import { type PdfPageSize } from "./pdf-document";
3
+ export type PdfViewerProps = {
4
+ /** The PDF itself. A new value opens that document. */
5
+ data: Blob | ArrayBuffer;
6
+ /** The document's name, for the scroll area and the page images. */
7
+ title: string;
8
+ /** Without the zoom bar, always fit to the width. Defaults to `true`. */
9
+ zoom?: boolean;
10
+ /** Shows only this page (zero-based) instead of all pages one below the other. */
11
+ page?: number;
12
+ /** The first visible page is drawn; a host can drop its loading state. */
13
+ onReady?: () => void;
14
+ /** The document could not be opened, or a page could not be drawn and has no image yet. */
15
+ onError?: (error: unknown) => void;
16
+ class?: string;
17
+ };
18
+ /** Steps for − and + in percent; Ctrl or ⌘ with the wheel and two fingers zoom freely between the first and the last. */
19
+ export declare const PDF_ZOOM_STEPS: readonly [25, 50, 75, 100, 125, 150, 200, 300];
20
+ /** The next zoom step above or below `percent`; at either end it stays there. */
21
+ export declare const nextPdfZoomStep: (percent: number, direction: 1 | -1) => number;
22
+ /**
23
+ * The page width most pages share, at a tie the first page's. "Width" fits every page to the area, so a landscape page
24
+ * among portrait ones never scrolls sideways; percentages and fixed zoom follow this common width.
25
+ */
26
+ export declare const commonPageWidth: (pages: readonly PdfPageSize[]) => number;
27
+ /**
28
+ * A PDF drawn by pdf.js in every browser: pages as images in one scroll area, an invisible text layer over each page
29
+ * to select, copy, and find text, and a small zoom bar. Only pages near the view are drawn and carry text; the others
30
+ * keep their size, so the scroll bar is right from the start. Printing and forms stay with the browser's own viewer.
31
+ */
32
+ export default function PdfViewer(props: PdfViewerProps): JSX.Element;
@@ -1,10 +1,23 @@
1
- import { type AxisOptions, type BarItem, type ReferenceLine } from "../charts/core/svg";
1
+ import { type AxisOptions, type BarItem, type ReferenceLine } from "../charts/core/svg-renderers";
2
2
  /**
3
3
  * Bar chart options: stdlib's `charts.bar` options plus a title for the category axis and a separate value format.
4
4
  * The wrapper owns size and inspection.
5
5
  */
6
6
  export type BarChartOptions = {
7
- data: BarItem[];
7
+ data?: BarItem[];
8
+ /** Aligned categories and series. Null observations are gaps. */
9
+ x?: string[];
10
+ series?: {
11
+ label: string;
12
+ data: (number | null)[];
13
+ }[];
14
+ layout?: "columns" | "rows" | "grouped" | "stacked";
15
+ normalize?: boolean;
16
+ locale?: string;
17
+ compare?: {
18
+ label: string;
19
+ data: (number | null)[];
20
+ };
8
21
  /** Value axis. `label` titles it, `format` writes its ticks and, without `valueFormat`, the printed values. */
9
22
  yAxis?: AxisOptions;
10
23
  /**
@@ -43,11 +56,23 @@ export type BarChartOptions = {
43
56
  export type BarChartLayout = "columns" | "rows";
44
57
  /** Estimated width of `text` at `size` pixels in the UI sans font with tabular figures; a little wide on purpose. */
45
58
  export declare const chartTextWidth: (text: string, size?: number) => number;
59
+ /** Split a label into at most `lines` lines of `maxPx`; the last line ends with an ellipsis when the label is longer. */
60
+ export declare const wrapLabel: (label: string, maxPx: number, lines: number) => {
61
+ lines: string[];
62
+ truncated: boolean;
63
+ };
64
+ type Scale = {
65
+ domain: [number, number];
66
+ ticks: number[];
67
+ log: boolean;
68
+ };
69
+ export declare const headerHeight: (opts: BarChartOptions) => number;
46
70
  /** The layout a bar chart takes and its logical height, so server and browser reserve the same box. */
47
71
  export declare const barChartLayout: (opts: BarChartOptions, width?: number) => {
48
72
  layout: BarChartLayout;
49
73
  height: number;
50
74
  };
75
+ export declare const renderHeader: (opts: BarChartOptions, width: number) => string;
51
76
  /**
52
77
  * Render a bar chart in which every category has its label. Few short labels stand below vertical columns; otherwise
53
78
  * each category becomes a horizontal row with its label left of the bar and its value at the bar's end. Rows grow the
@@ -58,3 +83,71 @@ export declare const renderBarChartSvg: (opts: BarChartOptions & {
58
83
  height: number;
59
84
  inspect?: boolean;
60
85
  }) => string;
86
+ /** Stable wrapping legend slots reserve the widest total or category value before interaction. */
87
+ export declare function barSeriesLegend(entries: {
88
+ label: string;
89
+ data: (number | null)[];
90
+ }[], format: (v: number) => string, width?: number, displayWidth?: number, maxHeight?: number): {
91
+ items: {
92
+ label: string;
93
+ data: (number | null)[];
94
+ total: number | null;
95
+ x: number;
96
+ y: number;
97
+ labelWidth: number;
98
+ valueX: number;
99
+ }[];
100
+ hidden: number;
101
+ height: number;
102
+ };
103
+ /** Category geometry shared by SVG, server snapshots and browser inspection. */
104
+ export declare function seriesBarLayout(opts: BarChartOptions, size?: {
105
+ width: number;
106
+ height: number;
107
+ }): {
108
+ width: number;
109
+ height: number;
110
+ columns: {
111
+ label: string;
112
+ index: number;
113
+ center: number;
114
+ current: {
115
+ seriesIndex: number;
116
+ raw: number | null | undefined;
117
+ value: number | null;
118
+ base: number;
119
+ }[];
120
+ total: number;
121
+ previous: number | null | undefined;
122
+ }[];
123
+ totals: (number | null)[];
124
+ scale: Scale;
125
+ left: number;
126
+ right: number;
127
+ top: number;
128
+ bottom: number;
129
+ slot: number;
130
+ y: (value: number) => number;
131
+ format: (value: number) => string;
132
+ units: number;
133
+ entries: {
134
+ label: string;
135
+ data: (number | null)[];
136
+ }[];
137
+ legend: boolean;
138
+ legendLayout: {
139
+ items: {
140
+ label: string;
141
+ data: (number | null)[];
142
+ total: number | null;
143
+ x: number;
144
+ y: number;
145
+ labelWidth: number;
146
+ valueX: number;
147
+ }[];
148
+ hidden: number;
149
+ height: number;
150
+ };
151
+ barWidthPx: number;
152
+ };
153
+ export {};
@@ -60,6 +60,8 @@ export { type MarkdownLinkInput, type MarkdownReference, type MarkdownReferenceK
60
60
  export { Pagination, type PaginationProps } from "./Pagination";
61
61
  export type { PdfPreviewProps, PdfPreviewRequest } from "./PdfPreview";
62
62
  export { default as PdfPreview } from "./PdfPreview";
63
+ export type { PdfViewerProps } from "./PdfViewer";
64
+ export { default as PdfViewer } from "./PdfViewer";
63
65
  export type { RangeOption, RangePickerProps } from "./RangePicker";
64
66
  export { default as RangePicker } from "./RangePicker";
65
67
  export { ReactionBar, type ReactionBarItem, type ReactionBarProps } from "./ReactionBar";
@@ -0,0 +1,5 @@
1
+ import { type PdfDocumentHandle } from "./pdf-limits";
2
+ export type { PdfDocumentHandle, PdfPageImage, PdfPageSize } from "./pdf-limits";
3
+ export { PDF_LIMITS, PDF_TOO_LARGE, pageImageWidth } from "./pdf-limits";
4
+ /** Opens a PDF; `null` after an abort. Throws `PDF_TOO_LARGE` past `PDF_LIMITS`, or pdf.js's error for a broken file. */
5
+ export declare const openPdfDocument: (data: Blob | ArrayBuffer, signal: AbortSignal) => Promise<PdfDocumentHandle | null>;