@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.
- package/README.md +2 -1
- package/dist/GridMenus.svelte +44 -2
- package/dist/SvChartMenu.svelte +69 -0
- package/dist/SvChartMenu.svelte.d.ts +11 -0
- package/dist/SvChartPanes.svelte +113 -0
- package/dist/SvChartPanes.svelte.d.ts +20 -0
- package/dist/SvGrid.controller.svelte.d.ts +110 -39
- package/dist/SvGrid.controller.svelte.js +655 -200
- package/dist/SvGrid.css +105 -2
- package/dist/SvGrid.svelte +386 -514
- package/dist/SvGrid.types.d.ts +210 -9
- package/dist/SvGridCellEditor.svelte +17 -0
- package/dist/SvGridChart.svelte +2257 -329
- package/dist/SvGridChart.svelte.d.ts +6 -106
- package/dist/SvGridChart.types.d.ts +338 -0
- package/dist/SvGridChart.types.js +1 -0
- package/dist/SvGridChartBuilder.svelte +323 -0
- package/dist/SvGridChartBuilder.svelte.d.ts +34 -0
- package/dist/SvGridChartPanel.svelte +221 -275
- package/dist/SvGridChartPickers.svelte +417 -0
- package/dist/SvGridChartPickers.svelte.d.ts +70 -0
- package/dist/SvGridChartView.svelte +13 -14
- package/dist/SvModal.svelte +7 -1
- package/dist/SvModal.svelte.d.ts +5 -0
- package/dist/ai.d.ts +40 -8
- package/dist/ai.js +135 -24
- package/dist/aria.d.ts +11 -0
- package/dist/build-api.js +108 -22
- package/dist/cdn/GridMenus-7kbpnnBW.js +635 -0
- package/dist/cdn/GridMenus-BL7ZgQvU.js +636 -0
- package/dist/cdn/SvChartMenu-Bl6PBbkT.js +58 -0
- package/dist/cdn/SvChartMenu-FBSMINA6.js +59 -0
- package/dist/cdn/{SvDateRangeInput-DMLKmGEc.js → SvDateRangeInput-BeU_TkbQ.js} +15 -14
- package/dist/cdn/{SvDateRangeInput-CaOuMs8O.js → SvDateRangeInput-yX8vzleW.js} +38 -37
- package/dist/cdn/{SvDateTimePicker-sonaH0oh.js → SvDateTimePicker-DQwt4UAs.js} +139 -180
- package/dist/cdn/SvDateTimePicker-vNU6bZ-q.js +775 -0
- package/dist/cdn/{SvGridCellEditor-CjEJMJKc.js → SvGridCellEditor-B1p-vCK5.js} +188 -178
- package/dist/cdn/{SvGridCellEditor-BWnTi2N7.js → SvGridCellEditor-D_0q4xAu.js} +98 -88
- package/dist/cdn/SvGridChart-C3EWAZaM.js +3574 -0
- package/dist/cdn/SvGridChart-DzLkSwCH.js +3572 -0
- package/dist/cdn/SvGridChartBuilder-BE2T1ykB.js +783 -0
- package/dist/cdn/SvGridChartBuilder-CfII62sZ.js +784 -0
- package/dist/cdn/SvGridChartPanel-CCX5_Wgd.js +675 -0
- package/dist/cdn/SvGridChartPanel-xf4sWVTo.js +699 -0
- package/dist/cdn/SvGridChartView-CfuXmY5I.js +48 -0
- package/dist/cdn/SvGridChartView-DYwabQWj.js +47 -0
- package/dist/cdn/SvMenuList-CLN8OuIK.js +452 -0
- package/dist/cdn/SvMenuList-DkGhNKjf.js +451 -0
- package/dist/cdn/SvModal-BAE-pjZX.js +396 -0
- package/dist/cdn/SvModal-CIZWCcad.js +397 -0
- package/dist/cdn/chart-Dz7SqMXH.js +4341 -0
- package/dist/cdn/chart-export-BXqueeWJ.js +135 -0
- package/dist/cdn/chart-export-pdf-DONFUnNY.js +110 -0
- package/dist/cdn/chart-panel-messages-CUbf2R4i.js +1052 -0
- package/dist/cdn/chart-panel-messages-CmNrMdsr.js +1053 -0
- package/dist/cdn/chart-summary-BJW_tg_X.js +138 -0
- package/dist/cdn/chart-trend-CaN9mDEV.js +50 -0
- package/dist/cdn/chart-validate-HcOVFAfJ.js +188 -0
- package/dist/cdn/{column-resize-DsfNXMom.js → column-resize-DpmOLfRp.js} +3 -3
- package/dist/cdn/{date-format-BnnHlqGw.js → date-format-CtquV-p3.js} +583 -603
- package/dist/cdn/{date-format-BNii4zeD.js → date-format-D6KFzU_W.js} +347 -367
- package/dist/cdn/dismissable-DAHetSNk.js +44 -0
- package/dist/cdn/editor-contract-LXgQJAgd.js +22 -0
- package/dist/cdn/focus-trap-BBOQYBma.js +65 -0
- package/dist/cdn/{row-resize-BRcimkUT.js → row-resize-niQCp040.js} +44 -36
- package/dist/cdn/{src-DNbz94Ct.js → src-BKhZ6eXd.js} +10227 -9787
- package/dist/cdn/{src-BJ2opd0j.js → src-V1uu8iE9.js} +6568 -6128
- package/dist/cdn/svgrid.js +26 -15
- package/dist/cdn/svgrid.svelte-external.js +26 -15
- package/dist/chart-axes.d.ts +53 -0
- package/dist/chart-axes.js +351 -0
- package/dist/chart-cartesian.d.ts +88 -0
- package/dist/chart-cartesian.js +1862 -0
- package/dist/chart-decimate.d.ts +51 -0
- package/dist/chart-decimate.js +199 -0
- package/dist/chart-export-pdf.d.ts +47 -0
- package/dist/chart-export-pdf.js +187 -0
- package/dist/chart-export.d.ts +2 -1
- package/dist/chart-export.js +18 -3
- package/dist/chart-financial.d.ts +91 -0
- package/dist/chart-financial.js +175 -0
- package/dist/chart-flow.d.ts +10 -0
- package/dist/chart-flow.js +298 -0
- package/dist/chart-format.d.ts +18 -0
- package/dist/chart-format.js +65 -0
- package/dist/chart-grid.d.ts +8 -0
- package/dist/chart-grid.js +190 -0
- package/dist/chart-hierarchy.d.ts +17 -0
- package/dist/chart-hierarchy.js +146 -0
- package/dist/chart-indicators.d.ts +115 -0
- package/dist/chart-indicators.js +389 -0
- package/dist/chart-messages.d.ts +95 -0
- package/dist/chart-messages.js +92 -0
- package/dist/chart-motion.d.ts +16 -0
- package/dist/chart-motion.js +141 -0
- package/dist/chart-panel-messages.d.ts +265 -0
- package/dist/chart-panel-messages.js +285 -0
- package/dist/chart-pivot.d.ts +87 -0
- package/dist/chart-pivot.js +156 -0
- package/dist/chart-polar.d.ts +25 -0
- package/dist/chart-polar.js +700 -0
- package/dist/chart-samples.d.ts +16 -0
- package/dist/chart-samples.js +153 -0
- package/dist/chart-scale.d.ts +113 -0
- package/dist/chart-scale.js +405 -0
- package/dist/chart-stats.d.ts +111 -0
- package/dist/chart-stats.js +419 -0
- package/dist/chart-stream.d.ts +45 -0
- package/dist/chart-stream.js +91 -0
- package/dist/chart-summary.d.ts +27 -0
- package/dist/chart-summary.js +205 -0
- package/dist/chart-sync.svelte.d.ts +32 -0
- package/dist/chart-sync.svelte.js +23 -0
- package/dist/chart-table.d.ts +35 -0
- package/dist/chart-table.js +165 -0
- package/dist/chart-trend.d.ts +19 -0
- package/dist/chart-trend.js +61 -0
- package/dist/chart-types.d.ts +1456 -0
- package/dist/chart-types.js +6 -0
- package/dist/chart-validate.d.ts +43 -0
- package/dist/chart-validate.js +272 -0
- package/dist/chart-zoom.d.ts +40 -0
- package/dist/chart-zoom.js +145 -0
- package/dist/chart.d.ts +186 -865
- package/dist/chart.js +460 -2204
- package/dist/clipboard.d.ts +1 -0
- package/dist/clipboard.js +137 -18
- package/dist/column-resize.d.ts +3 -0
- package/dist/column-resize.js +4 -1
- package/dist/columns.js +3 -0
- package/dist/command-context.d.ts +19 -0
- package/dist/command-context.js +116 -0
- package/dist/core.d.ts +7 -0
- package/dist/createPopoverSelect.svelte.d.ts +2 -2
- package/dist/editing.d.ts +2 -8
- package/dist/editing.js +262 -33
- package/dist/fill-patterns.d.ts +0 -5
- package/dist/fill-patterns.js +56 -2
- package/dist/grid-messages.d.ts +10 -3
- package/dist/grid-messages.js +5 -0
- package/dist/history.d.ts +83 -0
- package/dist/history.js +133 -0
- package/dist/index.d.ts +24 -6
- package/dist/index.js +20 -2
- package/dist/keyboard-handlers.js +88 -31
- package/dist/keyboard.d.ts +55 -0
- package/dist/keyboard.js +132 -0
- package/dist/menus.d.ts +3 -1
- package/dist/menus.js +7 -2
- package/dist/merges.d.ts +97 -0
- package/dist/merges.js +147 -0
- package/dist/row-resize.d.ts +3 -0
- package/dist/row-resize.js +14 -0
- package/dist/scroll-sync.d.ts +1 -0
- package/dist/scroll-sync.js +24 -0
- package/dist/selection.d.ts +16 -0
- package/dist/selection.js +108 -16
- package/dist/shortcut-registry.d.ts +145 -0
- package/dist/shortcut-registry.js +44 -0
- package/dist/svgrid-wrapper.types.d.ts +213 -22
- package/dist/virtualization/virtualizer.js +38 -17
- package/package.json +6 -1
- package/src/GridMenus.svelte +44 -2
- package/src/SvChartMenu.svelte +69 -0
- package/src/SvChartPanes.svelte +113 -0
- package/src/SvChartPanes.test.ts +66 -0
- package/src/SvGrid.controller.svelte.ts +629 -172
- package/src/SvGrid.css +105 -2
- package/src/SvGrid.svelte +386 -514
- package/src/SvGrid.types.ts +188 -8
- package/src/SvGridCellEditor.svelte +17 -0
- package/src/SvGridChart.svelte +2257 -329
- package/src/SvGridChart.test.ts +1419 -1
- package/src/SvGridChart.types.ts +336 -0
- package/src/SvGridChartBuilder.svelte +323 -0
- package/src/SvGridChartPanel.svelte +221 -275
- package/src/SvGridChartPickers.svelte +417 -0
- package/src/SvGridChartView.svelte +13 -14
- package/src/SvModal.svelte +7 -1
- package/src/SvModal.test.ts +9 -0
- package/src/ai.test.ts +57 -2
- package/src/ai.ts +166 -22
- package/src/aria.d.ts +11 -0
- package/src/build-api.coverage.test.ts +184 -0
- package/src/build-api.ts +107 -18
- package/src/chart-axes.test.ts +573 -0
- package/src/chart-axes.ts +342 -0
- package/src/chart-cartesian.ts +1863 -0
- package/src/chart-decimate.test.ts +249 -0
- package/src/chart-decimate.ts +186 -0
- package/src/chart-export-pdf.test.ts +91 -0
- package/src/chart-export-pdf.ts +207 -0
- package/src/chart-export.test.ts +14 -0
- package/src/chart-export.ts +13 -3
- package/src/chart-financial.ts +208 -0
- package/src/chart-flow.ts +286 -0
- package/src/chart-format.ts +67 -0
- package/src/chart-grid.ts +179 -0
- package/src/chart-hierarchy.ts +135 -0
- package/src/chart-indicators.test.ts +443 -0
- package/src/chart-indicators.ts +384 -0
- package/src/chart-messages.test.ts +21 -0
- package/src/chart-messages.ts +184 -0
- package/src/chart-motion.test.ts +71 -0
- package/src/chart-motion.ts +148 -0
- package/src/chart-panel-messages.test.ts +29 -0
- package/src/chart-panel-messages.ts +550 -0
- package/src/chart-pivot.test.ts +54 -0
- package/src/chart-pivot.ts +225 -0
- package/src/chart-polar.ts +674 -0
- package/src/chart-samples.ts +106 -0
- package/src/chart-scale.ts +394 -0
- package/src/chart-series-types.test.ts +714 -0
- package/src/chart-stats.ts +409 -0
- package/src/chart-stream.test.ts +75 -0
- package/src/chart-stream.ts +114 -0
- package/src/chart-summary.test.ts +90 -0
- package/src/chart-summary.ts +197 -0
- package/src/chart-sync.svelte.ts +41 -0
- package/src/chart-table.test.ts +76 -0
- package/src/chart-table.ts +178 -0
- package/src/chart-trend.ts +47 -0
- package/src/chart-types.ts +1309 -0
- package/src/chart-validate.test.ts +100 -0
- package/src/chart-validate.ts +247 -0
- package/src/chart-zoom.test.ts +137 -0
- package/src/chart-zoom.ts +124 -0
- package/src/chart.coverage.test.ts +81 -0
- package/src/chart.test.ts +56 -3
- package/src/chart.ts +557 -2784
- package/src/clipboard.test.ts +151 -0
- package/src/clipboard.ts +145 -16
- package/src/column-resize.ts +7 -1
- package/src/columns.ts +2 -0
- package/src/command-context.test.ts +200 -0
- package/src/command-context.ts +137 -0
- package/src/core.ts +7 -0
- package/src/editing.test.ts +281 -3
- package/src/editing.ts +256 -38
- package/src/fill-patterns.test.ts +35 -0
- package/src/fill-patterns.ts +56 -2
- package/src/grid-messages.ts +16 -3
- package/src/history.test.ts +196 -0
- package/src/history.ts +162 -0
- package/src/icon-seam.test.ts +3 -2
- package/src/index.ts +150 -2
- package/src/keyboard-handlers.coverage.test.ts +126 -6
- package/src/keyboard-handlers.ts +91 -30
- package/src/keyboard-shortcuts.seam.test.ts +200 -0
- package/src/keyboard.test.ts +124 -1
- package/src/keyboard.ts +142 -0
- package/src/menus.test.ts +26 -0
- package/src/menus.ts +10 -3
- package/src/merges.test.ts +112 -0
- package/src/merges.ts +168 -0
- package/src/pivot.grid.test.ts +40 -5
- package/src/row-resize.test.ts +44 -0
- package/src/row-resize.ts +17 -0
- package/src/scroll-sync.test.ts +42 -1
- package/src/scroll-sync.ts +25 -0
- package/src/selection.multi-range.test.ts +34 -0
- package/src/selection.test.ts +30 -2
- package/src/selection.ts +111 -19
- package/src/shortcut-registry.test.ts +97 -0
- package/src/shortcut-registry.ts +181 -0
- package/src/svgrid-wrapper.types.ts +184 -13
- package/src/svgrid.behavior.test.ts +135 -0
- package/src/svgrid.charting.test.ts +513 -3
- package/src/svgrid.context-menu.test.ts +31 -0
- package/src/svgrid.new-features.wrapper.test.ts +10 -3
- package/src/virtualization/virtualizer.ts +39 -17
- package/dist/cdn/GridMenus-DyFA-QxA.js +0 -602
- package/dist/cdn/GridMenus-M2XP9t0_.js +0 -603
- package/dist/cdn/SvDateTimePicker-CCbDZNZB.js +0 -816
- package/dist/cdn/SvGridChart-DAb9RbRs.js +0 -1480
- package/dist/cdn/SvGridChart-Yl-IXZFO.js +0 -1481
- package/dist/cdn/SvGridChartPanel-DayQpDsR.js +0 -834
- package/dist/cdn/SvGridChartPanel-aqf8n-vJ.js +0 -810
- package/dist/cdn/SvGridChartView-CxfakxR0.js +0 -56
- package/dist/cdn/SvGridChartView-Dm_YEx9L.js +0 -55
- 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
|
+
"&": "&",
|
|
100
|
+
"<": "<",
|
|
101
|
+
">": ">"
|
|
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 };
|