@svgrid/grid 3.0.2 → 3.0.4

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 (281) hide show
  1. package/README.md +2 -1
  2. package/dist/GridMenus.svelte +44 -2
  3. package/dist/SvChartMenu.svelte +69 -0
  4. package/dist/SvChartMenu.svelte.d.ts +11 -0
  5. package/dist/SvChartPanes.svelte +113 -0
  6. package/dist/SvChartPanes.svelte.d.ts +20 -0
  7. package/dist/SvGrid.controller.svelte.d.ts +110 -39
  8. package/dist/SvGrid.controller.svelte.js +655 -200
  9. package/dist/SvGrid.css +105 -2
  10. package/dist/SvGrid.svelte +386 -514
  11. package/dist/SvGrid.types.d.ts +210 -9
  12. package/dist/SvGridCellEditor.svelte +17 -0
  13. package/dist/SvGridChart.svelte +2257 -329
  14. package/dist/SvGridChart.svelte.d.ts +6 -106
  15. package/dist/SvGridChart.types.d.ts +338 -0
  16. package/dist/SvGridChart.types.js +1 -0
  17. package/dist/SvGridChartBuilder.svelte +323 -0
  18. package/dist/SvGridChartBuilder.svelte.d.ts +34 -0
  19. package/dist/SvGridChartPanel.svelte +221 -275
  20. package/dist/SvGridChartPickers.svelte +417 -0
  21. package/dist/SvGridChartPickers.svelte.d.ts +70 -0
  22. package/dist/SvGridChartView.svelte +13 -14
  23. package/dist/SvModal.svelte +7 -1
  24. package/dist/SvModal.svelte.d.ts +5 -0
  25. package/dist/ai.d.ts +40 -8
  26. package/dist/ai.js +135 -24
  27. package/dist/aria.d.ts +11 -0
  28. package/dist/build-api.js +108 -22
  29. package/dist/cdn/GridMenus-7kbpnnBW.js +635 -0
  30. package/dist/cdn/GridMenus-BL7ZgQvU.js +636 -0
  31. package/dist/cdn/SvChartMenu-Bl6PBbkT.js +58 -0
  32. package/dist/cdn/SvChartMenu-FBSMINA6.js +59 -0
  33. package/dist/cdn/{SvDateRangeInput-DMLKmGEc.js → SvDateRangeInput-BeU_TkbQ.js} +15 -14
  34. package/dist/cdn/{SvDateRangeInput-CaOuMs8O.js → SvDateRangeInput-yX8vzleW.js} +38 -37
  35. package/dist/cdn/{SvDateTimePicker-sonaH0oh.js → SvDateTimePicker-DQwt4UAs.js} +139 -180
  36. package/dist/cdn/SvDateTimePicker-vNU6bZ-q.js +775 -0
  37. package/dist/cdn/{SvGridCellEditor-CjEJMJKc.js → SvGridCellEditor-B1p-vCK5.js} +188 -178
  38. package/dist/cdn/{SvGridCellEditor-BWnTi2N7.js → SvGridCellEditor-D_0q4xAu.js} +98 -88
  39. package/dist/cdn/SvGridChart-C3EWAZaM.js +3574 -0
  40. package/dist/cdn/SvGridChart-DzLkSwCH.js +3572 -0
  41. package/dist/cdn/SvGridChartBuilder-BE2T1ykB.js +783 -0
  42. package/dist/cdn/SvGridChartBuilder-CfII62sZ.js +784 -0
  43. package/dist/cdn/SvGridChartPanel-CCX5_Wgd.js +675 -0
  44. package/dist/cdn/SvGridChartPanel-xf4sWVTo.js +699 -0
  45. package/dist/cdn/SvGridChartView-CfuXmY5I.js +48 -0
  46. package/dist/cdn/SvGridChartView-DYwabQWj.js +47 -0
  47. package/dist/cdn/SvMenuList-CLN8OuIK.js +452 -0
  48. package/dist/cdn/SvMenuList-DkGhNKjf.js +451 -0
  49. package/dist/cdn/SvModal-BAE-pjZX.js +396 -0
  50. package/dist/cdn/SvModal-CIZWCcad.js +397 -0
  51. package/dist/cdn/chart-Dz7SqMXH.js +4341 -0
  52. package/dist/cdn/chart-export-BXqueeWJ.js +135 -0
  53. package/dist/cdn/chart-export-pdf-DONFUnNY.js +110 -0
  54. package/dist/cdn/chart-panel-messages-CUbf2R4i.js +1052 -0
  55. package/dist/cdn/chart-panel-messages-CmNrMdsr.js +1053 -0
  56. package/dist/cdn/chart-summary-BJW_tg_X.js +138 -0
  57. package/dist/cdn/chart-trend-CaN9mDEV.js +50 -0
  58. package/dist/cdn/chart-validate-HcOVFAfJ.js +188 -0
  59. package/dist/cdn/{column-resize-DsfNXMom.js → column-resize-DpmOLfRp.js} +3 -3
  60. package/dist/cdn/{date-format-BnnHlqGw.js → date-format-CtquV-p3.js} +583 -603
  61. package/dist/cdn/{date-format-BNii4zeD.js → date-format-D6KFzU_W.js} +347 -367
  62. package/dist/cdn/dismissable-DAHetSNk.js +44 -0
  63. package/dist/cdn/editor-contract-LXgQJAgd.js +22 -0
  64. package/dist/cdn/focus-trap-BBOQYBma.js +65 -0
  65. package/dist/cdn/{row-resize-BRcimkUT.js → row-resize-niQCp040.js} +44 -36
  66. package/dist/cdn/{src-DNbz94Ct.js → src-BKhZ6eXd.js} +10227 -9787
  67. package/dist/cdn/{src-BJ2opd0j.js → src-V1uu8iE9.js} +6568 -6128
  68. package/dist/cdn/svgrid.js +26 -15
  69. package/dist/cdn/svgrid.svelte-external.js +26 -15
  70. package/dist/chart-axes.d.ts +53 -0
  71. package/dist/chart-axes.js +351 -0
  72. package/dist/chart-cartesian.d.ts +88 -0
  73. package/dist/chart-cartesian.js +1862 -0
  74. package/dist/chart-decimate.d.ts +51 -0
  75. package/dist/chart-decimate.js +199 -0
  76. package/dist/chart-export-pdf.d.ts +47 -0
  77. package/dist/chart-export-pdf.js +187 -0
  78. package/dist/chart-export.d.ts +2 -1
  79. package/dist/chart-export.js +18 -3
  80. package/dist/chart-financial.d.ts +91 -0
  81. package/dist/chart-financial.js +175 -0
  82. package/dist/chart-flow.d.ts +10 -0
  83. package/dist/chart-flow.js +298 -0
  84. package/dist/chart-format.d.ts +18 -0
  85. package/dist/chart-format.js +65 -0
  86. package/dist/chart-grid.d.ts +8 -0
  87. package/dist/chart-grid.js +190 -0
  88. package/dist/chart-hierarchy.d.ts +17 -0
  89. package/dist/chart-hierarchy.js +146 -0
  90. package/dist/chart-indicators.d.ts +115 -0
  91. package/dist/chart-indicators.js +389 -0
  92. package/dist/chart-messages.d.ts +95 -0
  93. package/dist/chart-messages.js +92 -0
  94. package/dist/chart-motion.d.ts +16 -0
  95. package/dist/chart-motion.js +141 -0
  96. package/dist/chart-panel-messages.d.ts +265 -0
  97. package/dist/chart-panel-messages.js +285 -0
  98. package/dist/chart-pivot.d.ts +87 -0
  99. package/dist/chart-pivot.js +156 -0
  100. package/dist/chart-polar.d.ts +25 -0
  101. package/dist/chart-polar.js +700 -0
  102. package/dist/chart-samples.d.ts +16 -0
  103. package/dist/chart-samples.js +153 -0
  104. package/dist/chart-scale.d.ts +113 -0
  105. package/dist/chart-scale.js +405 -0
  106. package/dist/chart-stats.d.ts +111 -0
  107. package/dist/chart-stats.js +419 -0
  108. package/dist/chart-stream.d.ts +45 -0
  109. package/dist/chart-stream.js +91 -0
  110. package/dist/chart-summary.d.ts +27 -0
  111. package/dist/chart-summary.js +205 -0
  112. package/dist/chart-sync.svelte.d.ts +32 -0
  113. package/dist/chart-sync.svelte.js +23 -0
  114. package/dist/chart-table.d.ts +35 -0
  115. package/dist/chart-table.js +165 -0
  116. package/dist/chart-trend.d.ts +19 -0
  117. package/dist/chart-trend.js +61 -0
  118. package/dist/chart-types.d.ts +1456 -0
  119. package/dist/chart-types.js +6 -0
  120. package/dist/chart-validate.d.ts +43 -0
  121. package/dist/chart-validate.js +272 -0
  122. package/dist/chart-zoom.d.ts +40 -0
  123. package/dist/chart-zoom.js +145 -0
  124. package/dist/chart.d.ts +186 -865
  125. package/dist/chart.js +460 -2204
  126. package/dist/clipboard.d.ts +1 -0
  127. package/dist/clipboard.js +137 -18
  128. package/dist/column-resize.d.ts +3 -0
  129. package/dist/column-resize.js +4 -1
  130. package/dist/columns.js +3 -0
  131. package/dist/command-context.d.ts +19 -0
  132. package/dist/command-context.js +116 -0
  133. package/dist/core.d.ts +7 -0
  134. package/dist/createPopoverSelect.svelte.d.ts +2 -2
  135. package/dist/editing.d.ts +2 -8
  136. package/dist/editing.js +262 -33
  137. package/dist/fill-patterns.d.ts +0 -5
  138. package/dist/fill-patterns.js +56 -2
  139. package/dist/grid-messages.d.ts +10 -3
  140. package/dist/grid-messages.js +5 -0
  141. package/dist/history.d.ts +83 -0
  142. package/dist/history.js +133 -0
  143. package/dist/index.d.ts +24 -6
  144. package/dist/index.js +20 -2
  145. package/dist/keyboard-handlers.js +88 -31
  146. package/dist/keyboard.d.ts +55 -0
  147. package/dist/keyboard.js +132 -0
  148. package/dist/menus.d.ts +3 -1
  149. package/dist/menus.js +7 -2
  150. package/dist/merges.d.ts +97 -0
  151. package/dist/merges.js +147 -0
  152. package/dist/row-resize.d.ts +3 -0
  153. package/dist/row-resize.js +14 -0
  154. package/dist/scroll-sync.d.ts +1 -0
  155. package/dist/scroll-sync.js +24 -0
  156. package/dist/selection.d.ts +16 -0
  157. package/dist/selection.js +108 -16
  158. package/dist/shortcut-registry.d.ts +145 -0
  159. package/dist/shortcut-registry.js +44 -0
  160. package/dist/svgrid-wrapper.types.d.ts +213 -22
  161. package/dist/virtualization/virtualizer.js +38 -17
  162. package/package.json +6 -1
  163. package/src/GridMenus.svelte +44 -2
  164. package/src/SvChartMenu.svelte +69 -0
  165. package/src/SvChartPanes.svelte +113 -0
  166. package/src/SvChartPanes.test.ts +66 -0
  167. package/src/SvGrid.controller.svelte.ts +629 -172
  168. package/src/SvGrid.css +105 -2
  169. package/src/SvGrid.svelte +386 -514
  170. package/src/SvGrid.types.ts +188 -8
  171. package/src/SvGridCellEditor.svelte +17 -0
  172. package/src/SvGridChart.svelte +2257 -329
  173. package/src/SvGridChart.test.ts +1419 -1
  174. package/src/SvGridChart.types.ts +336 -0
  175. package/src/SvGridChartBuilder.svelte +323 -0
  176. package/src/SvGridChartPanel.svelte +221 -275
  177. package/src/SvGridChartPickers.svelte +417 -0
  178. package/src/SvGridChartView.svelte +13 -14
  179. package/src/SvModal.svelte +7 -1
  180. package/src/SvModal.test.ts +9 -0
  181. package/src/ai.test.ts +57 -2
  182. package/src/ai.ts +166 -22
  183. package/src/aria.d.ts +11 -0
  184. package/src/build-api.coverage.test.ts +184 -0
  185. package/src/build-api.ts +107 -18
  186. package/src/chart-axes.test.ts +573 -0
  187. package/src/chart-axes.ts +342 -0
  188. package/src/chart-cartesian.ts +1863 -0
  189. package/src/chart-decimate.test.ts +249 -0
  190. package/src/chart-decimate.ts +186 -0
  191. package/src/chart-export-pdf.test.ts +91 -0
  192. package/src/chart-export-pdf.ts +207 -0
  193. package/src/chart-export.test.ts +14 -0
  194. package/src/chart-export.ts +13 -3
  195. package/src/chart-financial.ts +208 -0
  196. package/src/chart-flow.ts +286 -0
  197. package/src/chart-format.ts +67 -0
  198. package/src/chart-grid.ts +179 -0
  199. package/src/chart-hierarchy.ts +135 -0
  200. package/src/chart-indicators.test.ts +443 -0
  201. package/src/chart-indicators.ts +384 -0
  202. package/src/chart-messages.test.ts +21 -0
  203. package/src/chart-messages.ts +184 -0
  204. package/src/chart-motion.test.ts +71 -0
  205. package/src/chart-motion.ts +148 -0
  206. package/src/chart-panel-messages.test.ts +29 -0
  207. package/src/chart-panel-messages.ts +550 -0
  208. package/src/chart-pivot.test.ts +54 -0
  209. package/src/chart-pivot.ts +225 -0
  210. package/src/chart-polar.ts +674 -0
  211. package/src/chart-samples.ts +106 -0
  212. package/src/chart-scale.ts +394 -0
  213. package/src/chart-series-types.test.ts +714 -0
  214. package/src/chart-stats.ts +409 -0
  215. package/src/chart-stream.test.ts +75 -0
  216. package/src/chart-stream.ts +114 -0
  217. package/src/chart-summary.test.ts +90 -0
  218. package/src/chart-summary.ts +197 -0
  219. package/src/chart-sync.svelte.ts +41 -0
  220. package/src/chart-table.test.ts +76 -0
  221. package/src/chart-table.ts +178 -0
  222. package/src/chart-trend.ts +47 -0
  223. package/src/chart-types.ts +1309 -0
  224. package/src/chart-validate.test.ts +100 -0
  225. package/src/chart-validate.ts +247 -0
  226. package/src/chart-zoom.test.ts +137 -0
  227. package/src/chart-zoom.ts +124 -0
  228. package/src/chart.coverage.test.ts +81 -0
  229. package/src/chart.test.ts +56 -3
  230. package/src/chart.ts +557 -2784
  231. package/src/clipboard.test.ts +151 -0
  232. package/src/clipboard.ts +145 -16
  233. package/src/column-resize.ts +7 -1
  234. package/src/columns.ts +2 -0
  235. package/src/command-context.test.ts +200 -0
  236. package/src/command-context.ts +137 -0
  237. package/src/core.ts +7 -0
  238. package/src/editing.test.ts +281 -3
  239. package/src/editing.ts +256 -38
  240. package/src/fill-patterns.test.ts +35 -0
  241. package/src/fill-patterns.ts +56 -2
  242. package/src/grid-messages.ts +16 -3
  243. package/src/history.test.ts +196 -0
  244. package/src/history.ts +162 -0
  245. package/src/icon-seam.test.ts +3 -2
  246. package/src/index.ts +150 -2
  247. package/src/keyboard-handlers.coverage.test.ts +126 -6
  248. package/src/keyboard-handlers.ts +91 -30
  249. package/src/keyboard-shortcuts.seam.test.ts +200 -0
  250. package/src/keyboard.test.ts +124 -1
  251. package/src/keyboard.ts +142 -0
  252. package/src/menus.test.ts +26 -0
  253. package/src/menus.ts +10 -3
  254. package/src/merges.test.ts +112 -0
  255. package/src/merges.ts +168 -0
  256. package/src/pivot.grid.test.ts +40 -5
  257. package/src/row-resize.test.ts +44 -0
  258. package/src/row-resize.ts +17 -0
  259. package/src/scroll-sync.test.ts +42 -1
  260. package/src/scroll-sync.ts +25 -0
  261. package/src/selection.multi-range.test.ts +34 -0
  262. package/src/selection.test.ts +30 -2
  263. package/src/selection.ts +111 -19
  264. package/src/shortcut-registry.test.ts +97 -0
  265. package/src/shortcut-registry.ts +181 -0
  266. package/src/svgrid-wrapper.types.ts +184 -13
  267. package/src/svgrid.behavior.test.ts +135 -0
  268. package/src/svgrid.charting.test.ts +513 -3
  269. package/src/svgrid.context-menu.test.ts +31 -0
  270. package/src/svgrid.new-features.wrapper.test.ts +10 -3
  271. package/src/virtualization/virtualizer.ts +39 -17
  272. package/dist/cdn/GridMenus-DyFA-QxA.js +0 -602
  273. package/dist/cdn/GridMenus-M2XP9t0_.js +0 -603
  274. package/dist/cdn/SvDateTimePicker-CCbDZNZB.js +0 -816
  275. package/dist/cdn/SvGridChart-DAb9RbRs.js +0 -1480
  276. package/dist/cdn/SvGridChart-Yl-IXZFO.js +0 -1481
  277. package/dist/cdn/SvGridChartPanel-DayQpDsR.js +0 -834
  278. package/dist/cdn/SvGridChartPanel-aqf8n-vJ.js +0 -810
  279. package/dist/cdn/SvGridChartView-CxfakxR0.js +0 -56
  280. package/dist/cdn/SvGridChartView-Dm_YEx9L.js +0 -55
  281. package/dist/cdn/chart-CKJRCPOk.js +0 -1652
@@ -0,0 +1,135 @@
1
+ //#region src/chart-export.ts
2
+ function e(e) {
3
+ return e instanceof SVGSVGElement ? e : e.querySelector("svg.sv-grid-chart-svg") ?? e.querySelector("svg");
4
+ }
5
+ function t(e, t, n) {
6
+ return getComputedStyle(e).getPropertyValue(t).trim() || n;
7
+ }
8
+ function n(n, r = {}) {
9
+ let i = e(n);
10
+ if (!i) throw Error("chartToSvgString: no <svg> found");
11
+ let a = t(i, "--sg-fg", "#0f172a"), o = t(i, "--sg-muted", "#64748b"), s = t(i, "--sg-border", "#e2e8f0"), c = r.background ?? t(i, "--sg-bg", "#ffffff"), l = i.viewBox.baseVal, u = l && l.width ? l.width : i.clientWidth || 520, d = l && l.height ? l.height : i.clientHeight || 300, f = i.cloneNode(!0);
12
+ f.setAttribute("width", String(u)), f.setAttribute("height", String(d)), f.setAttribute("xmlns", "http://www.w3.org/2000/svg");
13
+ let p = [
14
+ "fill",
15
+ "fill-opacity",
16
+ "stroke",
17
+ "stroke-width",
18
+ "stroke-opacity",
19
+ "stroke-dasharray",
20
+ "stroke-linecap",
21
+ "stroke-linejoin",
22
+ "opacity",
23
+ "font-size",
24
+ "font-family",
25
+ "font-weight",
26
+ "text-anchor"
27
+ ], m = i.querySelectorAll("*"), h = f.querySelectorAll("*");
28
+ for (let e = 0; e < m.length; e += 1) {
29
+ let t = h[e];
30
+ if (!t || !t.style) continue;
31
+ let n = getComputedStyle(m[e]);
32
+ for (let e of p) {
33
+ let r = n.getPropertyValue(e);
34
+ r && r !== "normal" && t.style.setProperty(e, r);
35
+ }
36
+ }
37
+ f.querySelectorAll(".sv-grid-chart-hit").forEach((e) => e.remove());
38
+ let g = document.createElementNS("http://www.w3.org/2000/svg", "style");
39
+ g.textContent = `
40
+ .sv-grid-chart-axis { fill: ${o}; font-size: 10px; font-family: sans-serif; }
41
+ .sv-grid-chart-gridline { stroke: ${s}; stroke-width: 1; opacity: 0.6; }
42
+ .sv-grid-chart-gridline.is-zero { stroke: ${o}; opacity: 0.9; }
43
+ .sv-grid-chart-datalabel { fill: ${a}; font-size: 9.5px; font-weight: 600; font-family: sans-serif; }
44
+ .sv-grid-chart-datalabel.on-bar { fill: #fff; }
45
+ .sv-grid-chart-donut-total { fill: ${a}; font-size: 16px; font-weight: 800; font-family: sans-serif; }
46
+ .sv-grid-chart-donut-label { fill: ${o}; font-size: 10px; font-family: sans-serif; }
47
+ `, f.insertBefore(g, f.firstChild);
48
+ let _ = document.createElementNS("http://www.w3.org/2000/svg", "rect");
49
+ return _.setAttribute("x", "0"), _.setAttribute("y", "0"), _.setAttribute("width", String(u)), _.setAttribute("height", String(d)), _.setAttribute("fill", c), f.insertBefore(_, g.nextSibling), new XMLSerializer().serializeToString(f);
50
+ }
51
+ function r(e, t) {
52
+ let n = document.createElement("a");
53
+ n.href = e, n.download = t, document.body.appendChild(n), n.click(), n.remove();
54
+ }
55
+ function i(e, t = "chart.svg", i = {}) {
56
+ let a = n(e, i), o = URL.createObjectURL(new Blob([a], { type: "image/svg+xml" }));
57
+ r(o, t), setTimeout(() => URL.revokeObjectURL(o), 1e3);
58
+ }
59
+ function a(t, r = {}) {
60
+ let i = n(t, r), a = r.scale ?? 2, o = e(t), s = o.viewBox.baseVal, c = (s && s.width ? s.width : o.clientWidth || 520) * a, l = (s && s.height ? s.height : o.clientHeight || 300) * a;
61
+ return new Promise((e, t) => {
62
+ let n = URL.createObjectURL(new Blob([i], { type: "image/svg+xml" })), r = new Image();
63
+ r.onload = () => {
64
+ let i = document.createElement("canvas");
65
+ i.width = Math.round(c), i.height = Math.round(l);
66
+ let a = i.getContext("2d");
67
+ if (!a) {
68
+ URL.revokeObjectURL(n), t(/* @__PURE__ */ Error("canvas 2d context unavailable"));
69
+ return;
70
+ }
71
+ a.drawImage(r, 0, 0, i.width, i.height), URL.revokeObjectURL(n), i.toBlob((n) => n ? e(n) : t(/* @__PURE__ */ Error("toBlob failed")), "image/png");
72
+ }, r.onerror = () => {
73
+ URL.revokeObjectURL(n), t(/* @__PURE__ */ Error("failed to rasterize chart SVG"));
74
+ }, r.src = n;
75
+ });
76
+ }
77
+ async function o(e, t = "chart.png", n = {}) {
78
+ let i = await a(e, n), o = URL.createObjectURL(i);
79
+ r(o, t), setTimeout(() => URL.revokeObjectURL(o), 1e3);
80
+ }
81
+ var s = (e) => {
82
+ let t = e == null || typeof e == "number" && !Number.isFinite(e) ? "" : String(e);
83
+ return /[",\n]/.test(t) ? `"${t.replace(/"/g, "\"\"")}"` : t;
84
+ };
85
+ function c(e) {
86
+ let t = e.series ?? [];
87
+ if (t.some((e) => e.points?.length)) {
88
+ let e = [
89
+ "Series",
90
+ "X",
91
+ "Y",
92
+ "Size",
93
+ "Label"
94
+ ].map(s).join(","), n = [];
95
+ for (let e of t) for (let t of e.points ?? []) n.push([
96
+ e.label,
97
+ t.x,
98
+ t.y,
99
+ t.r ?? "",
100
+ t.label ?? ""
101
+ ].map(s).join(","));
102
+ return n.length ? [e, ...n].join("\n") : "";
103
+ }
104
+ let n = e.categories ?? [];
105
+ if (!n.length || !t.length) return "";
106
+ let r = ["Category"];
107
+ for (let e of t) e.ohlc ? r.push(`${e.label} Open`, `${e.label} High`, `${e.label} Low`, `${e.label} Close`, ...e.volumes ? [`${e.label} Volume`] : []) : e.boxes ? r.push(`${e.label} Min`, `${e.label} Q1`, `${e.label} Median`, `${e.label} Q3`, `${e.label} Max`, `${e.label} Outliers`) : e.errors ? r.push(e.label, `${e.label} Low`, `${e.label} High`) : e.lowValues ? r.push(`${e.label} low`, `${e.label} high`) : e.targets ? r.push(e.label, `${e.label} target`) : r.push(e.label);
108
+ let i = n.map((e, n) => {
109
+ let r = [e];
110
+ for (let e of t) if (e.ohlc) {
111
+ let t = e.ohlc[n];
112
+ r.push(t?.o ?? "", t?.h ?? "", t?.l ?? "", t?.c ?? ""), e.volumes && r.push(e.volumes[n] ?? "");
113
+ } else if (e.boxes) {
114
+ let t = e.boxes[n];
115
+ r.push(t?.min ?? "", t?.q1 ?? "", t?.median ?? "", t?.q3 ?? "", t?.max ?? "", t?.outliers?.join(" ") ?? "");
116
+ } else if (e.errors) {
117
+ let t = e.values[n], i = e.errors[n], a = i == null ? "" : typeof i == "number" ? (t ?? 0) - Math.abs(i) : Math.min(i.lo, i.hi), o = i == null ? "" : typeof i == "number" ? (t ?? 0) + Math.abs(i) : Math.max(i.lo, i.hi);
118
+ r.push(t ?? "", a, o);
119
+ } else e.lowValues ? r.push(e.lowValues[n] ?? "", e.values[n] ?? "") : e.targets ? r.push(e.values[n] ?? "", e.targets[n] ?? "") : r.push(e.values[n] ?? "");
120
+ return r.map(s).join(",");
121
+ });
122
+ return [r.map(s).join(","), ...i].join("\n");
123
+ }
124
+ function l(e) {
125
+ let t = e.series ?? [];
126
+ return t.some((e) => e.points?.length) ? !0 : !!(e.categories?.length && t.length);
127
+ }
128
+ function u(e, t = "chart.csv") {
129
+ let n = c(e);
130
+ if (!n) return !1;
131
+ let i = URL.createObjectURL(new Blob([n], { type: "text/csv;charset=utf-8" }));
132
+ return r(i, t), setTimeout(() => URL.revokeObjectURL(i), 1e3), !0;
133
+ }
134
+ //#endregion
135
+ export { u as a, n as i, c as n, o, a as r, i as s, l as t };
@@ -0,0 +1,110 @@
1
+ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
+ import { i as t, r as n } from "./chart-export-BXqueeWJ.js";
3
+ //#region src/chart-export-pdf.ts
4
+ var r = /* @__PURE__ */ e({
5
+ buildChartPdf: () => l,
6
+ chartToPdfBlob: () => u,
7
+ downloadChartPdf: () => d,
8
+ printChart: () => f
9
+ }), i = {
10
+ A4: [595.28, 841.89],
11
+ Letter: [612, 792]
12
+ };
13
+ function a(e) {
14
+ let t = new Uint8Array(e.length);
15
+ for (let n = 0; n < e.length; n += 1) {
16
+ let r = e.charCodeAt(n);
17
+ t[n] = r < 256 ? r : 63;
18
+ }
19
+ return t;
20
+ }
21
+ function o(e) {
22
+ return "(" + e.replace(/[\\()]/g, (e) => "\\" + e).replace(/[\r\n]+/g, " ") + ")";
23
+ }
24
+ function s(e, t) {
25
+ return e.length * t * .5;
26
+ }
27
+ function c(e, t, n) {
28
+ return new Promise((r, i) => {
29
+ let a = URL.createObjectURL(e), o = new Image();
30
+ o.onload = () => {
31
+ let e = document.createElement("canvas");
32
+ e.width = o.naturalWidth || o.width, e.height = o.naturalHeight || o.height;
33
+ let s = e.getContext("2d");
34
+ if (!s) {
35
+ URL.revokeObjectURL(a), i(/* @__PURE__ */ Error("canvas 2d context unavailable"));
36
+ return;
37
+ }
38
+ s.fillStyle = t, s.fillRect(0, 0, e.width, e.height), s.drawImage(o, 0, 0), URL.revokeObjectURL(a), e.toBlob((t) => {
39
+ if (!t) {
40
+ i(/* @__PURE__ */ Error("toBlob failed"));
41
+ return;
42
+ }
43
+ t.arrayBuffer().then((t) => r({
44
+ bytes: new Uint8Array(t),
45
+ width: e.width,
46
+ height: e.height
47
+ }), i);
48
+ }, "image/jpeg", n);
49
+ }, o.onerror = () => {
50
+ URL.revokeObjectURL(a), i(/* @__PURE__ */ Error("failed to decode chart PNG"));
51
+ }, o.src = a;
52
+ });
53
+ }
54
+ function l(e, t = {}) {
55
+ let [n, r] = i[t.page ?? "A4"], c = t.orientation ? t.orientation === "landscape" : e.width / e.height > n / r, l = c ? r : n, u = c ? n : r, d = (t.title ?? "").trim(), f = (t.subtitle ?? "").trim(), p = (t.caption ?? "").trim(), m = u - 40, h = [], g = (e, t, n) => {
56
+ m -= t + 4, h.push(`BT /F1 ${t} Tf ${n} g 40 ${m.toFixed(2)} Td ${o(e)} Tj ET`);
57
+ };
58
+ d && g(d, 16, 0), f && g(f, 11, .4), (d || f) && (m -= 8);
59
+ let _ = p ? 20 : 0, v = l - 80, y = m - 40 - _, b = Math.min(v / e.width, y / e.height), x = e.width * b, S = e.height * b, C = 40 + (v - x) / 2, w = m - S;
60
+ if (h.push(`q ${x.toFixed(2)} 0 0 ${S.toFixed(2)} ${C.toFixed(2)} ${w.toFixed(2)} cm /Im1 Do Q`), p) {
61
+ let e = s(p, 9) > v ? p.slice(0, Math.floor(v / 4.5) - 3) + "..." : p;
62
+ h.push(`BT /F1 9 Tf 0.4 g 40 ${36 .toFixed(2)} Td ${o(e)} Tj ET`);
63
+ }
64
+ let T = h.join("\n"), E = [], D = [], O = 0, k = (e) => {
65
+ E.push(e), O += e.length;
66
+ };
67
+ k("%PDF-1.4\n%âãÏÓ\n");
68
+ let A = (e, t, n) => {
69
+ D[e] = O, k(`${e} 0 obj\n${t}\n`), n && (k("stream\n"), k(n), k("\nendstream\n")), k("endobj\n");
70
+ };
71
+ A(1, "<< /Type /Catalog /Pages 2 0 R >>"), A(2, "<< /Type /Pages /Kids [3 0 R] /Count 1 >>"), A(3, `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${l.toFixed(2)} ${u.toFixed(2)}] /Resources << /XObject << /Im1 4 0 R >> /Font << /F1 5 0 R >> >> /Contents 6 0 R >>`), A(4, `<< /Type /XObject /Subtype /Image /Width ${e.width} /Height ${e.height} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${e.bytes.length} >>`, e.bytes), A(5, "<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >>"), A(6, `<< /Length ${T.length} >>`, a(T));
72
+ let j = O;
73
+ k("xref\n0 7\n0000000000 65535 f \n");
74
+ for (let e = 1; e <= 6; e += 1) k(`${String(D[e]).padStart(10, "0")} 00000 n \n`);
75
+ k(`trailer\n<< /Size 7 /Root 1 0 R >>\nstartxref\n${j}\n%%EOF\n`);
76
+ let M = new Uint8Array(new ArrayBuffer(O)), N = 0;
77
+ for (let e of E) {
78
+ let t = typeof e == "string" ? a(e) : e;
79
+ M.set(t, N), N += t.length;
80
+ }
81
+ return M;
82
+ }
83
+ async function u(e, t = {}) {
84
+ let r = e instanceof SVGSVGElement ? e : e.querySelector("svg.sv-grid-chart-svg") ?? e.querySelector("svg"), i = t.background ?? (r && getComputedStyle(r).getPropertyValue("--sg-bg").trim() || "#ffffff"), a = l(await c(await n(e, {
85
+ ...t,
86
+ background: i,
87
+ scale: t.scale ?? 2
88
+ }), i, t.quality ?? .92), t);
89
+ return new Blob([a.buffer], { type: "application/pdf" });
90
+ }
91
+ async function d(e, t = "chart.pdf", n = {}) {
92
+ let r = await u(e, n), i = URL.createObjectURL(r), a = document.createElement("a");
93
+ a.href = i, a.download = t, document.body.appendChild(a), a.click(), a.remove(), setTimeout(() => URL.revokeObjectURL(i), 1e3);
94
+ }
95
+ function f(e, n = {}) {
96
+ let r = t(e, n), i = window.open("", "_blank", "width=900,height=700");
97
+ if (!i) return !1;
98
+ let a = (e) => e.replace(/[&<>]/g, (e) => ({
99
+ "&": "&amp;",
100
+ "<": "&lt;",
101
+ ">": "&gt;"
102
+ })[e]);
103
+ i.document.write(`<!doctype html><html><head><meta charset="utf-8"><title>${a(n.title ?? "Chart")}</title><style>body{margin:24px;font-family:system-ui,sans-serif}h1{font-size:16px;margin:0 0 12px}svg{max-width:100%;height:auto}@page{margin:12mm}</style></head><body>` + (n.title ? `<h1>${a(n.title)}</h1>` : "") + r + "</body></html>"), i.document.close();
104
+ let o = () => {
105
+ i.focus(), i.print();
106
+ };
107
+ return i.document.readyState === "complete" ? setTimeout(o, 50) : i.addEventListener("load", () => setTimeout(o, 50)), !0;
108
+ }
109
+ //#endregion
110
+ export { f as a, d as i, u as n, r, l as t };