@svgrid/grid 3.0.1 → 3.0.2

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 (77) hide show
  1. package/dist/GridFooter.svelte +14 -5
  2. package/dist/GridFooter.svelte.d.ts +8 -0
  3. package/dist/GridMenus.svelte +18 -10
  4. package/dist/GridMenus.svelte.d.ts +2 -1
  5. package/dist/SvGrid.controller.svelte.d.ts +17 -0
  6. package/dist/SvGrid.controller.svelte.js +128 -14
  7. package/dist/SvGrid.css +79 -10
  8. package/dist/SvGrid.svelte +191 -186
  9. package/dist/SvGrid.types.d.ts +42 -1
  10. package/dist/SvGridChart.svelte +571 -41
  11. package/dist/SvGridChart.svelte.d.ts +63 -1
  12. package/dist/SvGridChartPanel.svelte +169 -21
  13. package/dist/SvGridChartView.svelte +9 -0
  14. package/dist/SvGridChartView.svelte.d.ts +7 -0
  15. package/dist/SvGroupCell.svelte +28 -3
  16. package/dist/SvGroupCell.svelte.d.ts +8 -0
  17. package/dist/SvRowGroupPanel.svelte +20 -4
  18. package/dist/SvRowGroupPanel.svelte.d.ts +8 -0
  19. package/dist/ai.d.ts +11 -2
  20. package/dist/ai.js +51 -7
  21. package/dist/cdn/GridMenus-DyFA-QxA.js +602 -0
  22. package/dist/cdn/{GridMenus-DFB6iwF8.js → GridMenus-M2XP9t0_.js} +152 -150
  23. package/dist/cdn/SvGridChart-DAb9RbRs.js +1480 -0
  24. package/dist/cdn/SvGridChart-Yl-IXZFO.js +1481 -0
  25. package/dist/cdn/SvGridChartPanel-DayQpDsR.js +834 -0
  26. package/dist/cdn/SvGridChartPanel-aqf8n-vJ.js +810 -0
  27. package/dist/cdn/{SvGridChartView-BhUEJ5ki.js → SvGridChartView-CxfakxR0.js} +5 -3
  28. package/dist/cdn/{SvGridChartView-00LPUHL1.js → SvGridChartView-Dm_YEx9L.js} +5 -3
  29. package/dist/cdn/cell-formatting-C2Hf5gqd.js +86 -0
  30. package/dist/cdn/chart-CKJRCPOk.js +1652 -0
  31. package/dist/cdn/{export-format-Cv1Dll6k.js → export-format-CUDLy2yn.js} +84 -168
  32. package/dist/cdn/{src-C8QjSaq-.js → src-BJ2opd0j.js} +3608 -3414
  33. package/dist/cdn/{src-D0hO2eYN.js → src-DNbz94Ct.js} +8617 -8423
  34. package/dist/cdn/svgrid.js +16 -15
  35. package/dist/cdn/svgrid.svelte-external.js +16 -15
  36. package/dist/cell-formatting.d.ts +7 -0
  37. package/dist/cell-formatting.js +7 -1
  38. package/dist/chart-export.d.ts +23 -2
  39. package/dist/chart-export.js +80 -6
  40. package/dist/chart.d.ts +410 -18
  41. package/dist/chart.js +824 -24
  42. package/dist/grid-icons.d.ts +49 -0
  43. package/dist/grid-icons.js +86 -0
  44. package/dist/index.d.ts +3 -2
  45. package/dist/index.js +3 -2
  46. package/package.json +11 -11
  47. package/src/GridFooter.svelte +14 -5
  48. package/src/GridMenus.svelte +18 -10
  49. package/src/SvGrid.controller.svelte.ts +146 -13
  50. package/src/SvGrid.css +79 -10
  51. package/src/SvGrid.svelte +191 -186
  52. package/src/SvGrid.types.ts +42 -1
  53. package/src/SvGridChart.svelte +571 -41
  54. package/src/SvGridChart.test.ts +243 -1
  55. package/src/SvGridChartPanel.svelte +169 -21
  56. package/src/SvGridChartView.svelte +9 -0
  57. package/src/SvGroupCell.svelte +28 -3
  58. package/src/SvRowGroupPanel.svelte +20 -4
  59. package/src/ai.test.ts +60 -1
  60. package/src/ai.ts +59 -6
  61. package/src/cell-formatting.ts +7 -1
  62. package/src/chart-export.test.ts +112 -0
  63. package/src/chart-export.ts +76 -8
  64. package/src/chart.test.ts +830 -1
  65. package/src/chart.ts +1053 -32
  66. package/src/grid-icons.test.ts +46 -0
  67. package/src/grid-icons.ts +184 -0
  68. package/src/icon-overrides.grid.test.ts +188 -0
  69. package/src/icon-seam.test.ts +100 -0
  70. package/src/index.ts +19 -0
  71. package/src/svgrid.charting.test.ts +120 -0
  72. package/dist/cdn/GridMenus-CYzOvmNQ.js +0 -600
  73. package/dist/cdn/SvGridChart-BEJmNNx9.js +0 -1203
  74. package/dist/cdn/SvGridChart-BwVos976.js +0 -1202
  75. package/dist/cdn/SvGridChartPanel-BOknOkrP.js +0 -561
  76. package/dist/cdn/SvGridChartPanel-D2PjII4O.js +0 -585
  77. package/dist/cdn/chart-i4XcXyHJ.js +0 -1214
@@ -1,561 +0,0 @@
1
- import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
- import { t } from "./SvGridChart-BEJmNNx9.js";
3
- import * as n from "svelte/internal/client";
4
- import "svelte/internal/disclose-version";
5
- import { fly as r } from "svelte/transition";
6
- import { cubicOut as i } from "svelte/easing";
7
- //#region src/chart-export.ts
8
- function a(e) {
9
- return e instanceof SVGSVGElement ? e : e.querySelector("svg.sv-grid-chart-svg") ?? e.querySelector("svg");
10
- }
11
- function o(e, t, n) {
12
- return getComputedStyle(e).getPropertyValue(t).trim() || n;
13
- }
14
- function s(e, t = {}) {
15
- let n = a(e);
16
- if (!n) throw Error("chartToSvgString: no <svg> found");
17
- let r = o(n, "--sg-fg", "#0f172a"), i = o(n, "--sg-muted", "#64748b"), s = o(n, "--sg-border", "#e2e8f0"), c = t.background ?? o(n, "--sg-bg", "#ffffff"), l = n.viewBox.baseVal, u = l && l.width ? l.width : n.clientWidth || 520, d = l && l.height ? l.height : n.clientHeight || 300, f = n.cloneNode(!0);
18
- f.setAttribute("width", String(u)), f.setAttribute("height", String(d)), f.setAttribute("xmlns", "http://www.w3.org/2000/svg");
19
- let p = [
20
- "fill",
21
- "fill-opacity",
22
- "stroke",
23
- "stroke-width",
24
- "stroke-opacity",
25
- "stroke-dasharray",
26
- "stroke-linecap",
27
- "stroke-linejoin",
28
- "opacity",
29
- "font-size",
30
- "font-family",
31
- "font-weight",
32
- "text-anchor"
33
- ], m = n.querySelectorAll("*"), h = f.querySelectorAll("*");
34
- for (let e = 0; e < m.length; e += 1) {
35
- let t = h[e];
36
- if (!t || !t.style) continue;
37
- let n = getComputedStyle(m[e]);
38
- for (let e of p) {
39
- let r = n.getPropertyValue(e);
40
- r && r !== "normal" && t.style.setProperty(e, r);
41
- }
42
- }
43
- f.querySelectorAll(".sv-grid-chart-hit").forEach((e) => e.remove());
44
- let g = document.createElementNS("http://www.w3.org/2000/svg", "style");
45
- g.textContent = `
46
- .sv-grid-chart-axis { fill: ${i}; font-size: 10px; font-family: sans-serif; }
47
- .sv-grid-chart-gridline { stroke: ${s}; stroke-width: 1; opacity: 0.6; }
48
- .sv-grid-chart-gridline.is-zero { stroke: ${i}; opacity: 0.9; }
49
- .sv-grid-chart-datalabel { fill: ${r}; font-size: 9.5px; font-weight: 600; font-family: sans-serif; }
50
- .sv-grid-chart-datalabel.on-bar { fill: #fff; }
51
- .sv-grid-chart-donut-total { fill: ${r}; font-size: 16px; font-weight: 800; font-family: sans-serif; }
52
- .sv-grid-chart-donut-label { fill: ${i}; font-size: 10px; font-family: sans-serif; }
53
- `, f.insertBefore(g, f.firstChild);
54
- let _ = document.createElementNS("http://www.w3.org/2000/svg", "rect");
55
- 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);
56
- }
57
- function c(e, t) {
58
- let n = document.createElement("a");
59
- n.href = e, n.download = t, document.body.appendChild(n), n.click(), n.remove();
60
- }
61
- function l(e, t = "chart.svg", n = {}) {
62
- let r = s(e, n), i = URL.createObjectURL(new Blob([r], { type: "image/svg+xml" }));
63
- c(i, t), setTimeout(() => URL.revokeObjectURL(i), 1e3);
64
- }
65
- function u(e, t = {}) {
66
- let n = s(e, t), r = t.scale ?? 2, i = a(e), o = i.viewBox.baseVal, c = (o && o.width ? o.width : i.clientWidth || 520) * r, l = (o && o.height ? o.height : i.clientHeight || 300) * r;
67
- return new Promise((e, t) => {
68
- let r = URL.createObjectURL(new Blob([n], { type: "image/svg+xml" })), i = new Image();
69
- i.onload = () => {
70
- let n = document.createElement("canvas");
71
- n.width = Math.round(c), n.height = Math.round(l);
72
- let a = n.getContext("2d");
73
- if (!a) {
74
- URL.revokeObjectURL(r), t(/* @__PURE__ */ Error("canvas 2d context unavailable"));
75
- return;
76
- }
77
- a.drawImage(i, 0, 0, n.width, n.height), URL.revokeObjectURL(r), n.toBlob((n) => n ? e(n) : t(/* @__PURE__ */ Error("toBlob failed")), "image/png");
78
- }, i.onerror = () => {
79
- URL.revokeObjectURL(r), t(/* @__PURE__ */ Error("failed to rasterize chart SVG"));
80
- }, i.src = r;
81
- });
82
- }
83
- async function d(e, t = "chart.png", n = {}) {
84
- let r = await u(e, n), i = URL.createObjectURL(r);
85
- c(i, t), setTimeout(() => URL.revokeObjectURL(i), 1e3);
86
- }
87
- var f = (e) => {
88
- let t = e == null ? "" : String(e);
89
- return /[",\n]/.test(t) ? `"${t.replace(/"/g, "\"\"")}"` : t;
90
- };
91
- function p(e) {
92
- let t = e.categories ?? [], n = e.series ?? [];
93
- return !t.length || !n.length ? "" : [["Category", ...n.map((e) => e.label)].map(f).join(","), ...t.map((e, t) => [e, ...n.map((e) => e.values[t] ?? "")].map(f).join(","))].join("\n");
94
- }
95
- function m(e, t = "chart.csv") {
96
- let n = p(e);
97
- if (!n) return !1;
98
- let r = URL.createObjectURL(new Blob([n], { type: "text/csv;charset=utf-8" }));
99
- return c(r, t), setTimeout(() => URL.revokeObjectURL(r), 1e3), !0;
100
- }
101
- //#endregion
102
- //#region src/SvGridChartPanel.svelte
103
- var h = /* @__PURE__ */ e({ default: () => T }), g = n.from_html("<div role=\"separator\" aria-label=\"Resize chart panel\"></div>"), _ = n.from_html("<button type=\"button\" class=\"sv-grid-chart-btn\">Clear filter</button>"), v = n.from_svg("<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>"), y = n.from_svg("<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line></svg>"), b = n.from_html("<div class=\"sv-grid-chart-export-menu\" role=\"menu\"><button type=\"button\" role=\"menuitem\">PNG image</button> <button type=\"button\" role=\"menuitem\">SVG vector</button> <button type=\"button\" role=\"menuitem\">CSV data</button> <button type=\"button\" role=\"menuitem\">Copy to clipboard</button></div>"), x = n.from_html("<button type=\"button\" aria-label=\"Chart with AI\" title=\"Chart with AI\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12 2l1.9 4.6L18.5 8.5 13.9 10.4 12 15l-1.9-4.6L5.5 8.5l4.6-1.9L12 2zm6 11l1 2.4 2.4 1-2.4 1L18 21l-1-2.6-2.4-1 2.4-1L18 13zM6 14l.8 2 2 .8-2 .8L6 20l-.8-2.4-2-.8 2-.8L6 14z\"></path></svg> AI</button>"), ee = n.from_html("<button type=\"button\" class=\"sv-grid-chart-icon-btn\" aria-label=\"Add chart\" title=\"Add chart\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line></svg></button>"), S = n.from_svg("<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3\"></path><path d=\"M21 8h-3a2 2 0 0 1-2-2V3\"></path><path d=\"M3 16h3a2 2 0 0 1 2 2v3\"></path><path d=\"M16 21v-3a2 2 0 0 1 2-2h3\"></path></svg>"), C = n.from_svg("<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3\"></path><path d=\"M21 8V5a2 2 0 0 0-2-2h-3\"></path><path d=\"M3 16v3a2 2 0 0 0 2 2h3\"></path><path d=\"M16 21h3a2 2 0 0 0 2-2v-3\"></path></svg>"), w = n.from_html("<button type=\"button\" class=\"sv-grid-chart-icon-btn\"><!></button> <button type=\"button\" class=\"sv-grid-chart-icon-btn\" aria-label=\"Dock chart\" title=\"Dock\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"></rect><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"></line></svg></button>", 1), te = n.from_html("<button type=\"button\" class=\"sv-grid-chart-icon-btn\" aria-label=\"Pop out chart\" title=\"Pop out\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h6v6\"></path><path d=\"M10 14 21 3\"></path><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path></svg></button>"), ne = n.from_html("<div><button type=\"button\" class=\"sv-grid-chart-tab-label\" role=\"tab\"> </button> <button type=\"button\" class=\"sv-grid-chart-tab-x\" title=\"Remove\">&times;</button></div>"), re = n.from_html("<div class=\"sv-grid-chart-tabs\" role=\"tablist\" aria-label=\"Charts\"></div>"), ie = n.from_html("<p class=\"sv-grid-chart-ai-msg is-error\"> </p>"), ae = n.from_html("<p class=\"sv-grid-chart-ai-msg\"> </p>"), oe = n.from_html("<div class=\"sv-grid-chart-ai\"><form class=\"sv-grid-chart-ai-row\"><input class=\"sv-grid-chart-ai-input\" type=\"text\" placeholder=\"Describe a chart, e.g. revenue by region stacked by product\"/> <button type=\"submit\" class=\"sv-grid-chart-btn\"> </button></form> <!></div>"), se = n.from_html("<option> </option>"), ce = n.from_html("<option> </option>"), le = n.from_html("<option> </option>"), ue = n.from_html("<label class=\"sv-grid-chart-ctl\"><span class=\"sv-grid-chart-ctl-lbl\">Split by</span> <select><option>(none)</option><!></select></label>"), de = n.from_html("<option> </option>"), fe = n.from_html("<option> </option>"), pe = n.from_html("<option> </option>"), me = n.from_html("<label class=\"sv-grid-chart-toggle\"><input type=\"checkbox\"/> Stacked</label>"), he = n.from_html("<label class=\"sv-grid-chart-toggle\" title=\"Logarithmic value axis - flattens wide-range data\"><input type=\"checkbox\"/> Log scale</label>"), ge = n.from_html("<label class=\"sv-grid-chart-toggle\" title=\"Space points by actual date - real time ticks and proportional gaps\"><input type=\"checkbox\"/> Date axis</label>"), _e = n.from_html("<label class=\"sv-grid-chart-ctl\"><span class=\"sv-grid-chart-ctl-lbl\">Type</span> <select></select></label> <label class=\"sv-grid-chart-ctl\"><span class=\"sv-grid-chart-ctl-lbl\">Group by</span> <select></select></label> <!> <label class=\"sv-grid-chart-ctl\"><span class=\"sv-grid-chart-ctl-lbl\">Value</span> <select></select></label> <label class=\"sv-grid-chart-ctl\"><span class=\"sv-grid-chart-ctl-lbl\">Aggregate</span> <select></select></label> <label class=\"sv-grid-chart-ctl\"><span class=\"sv-grid-chart-ctl-lbl\">Format</span> <select></select></label> <!> <label class=\"sv-grid-chart-toggle\"><input type=\"checkbox\"/> Labels</label> <!> <!>", 1), ve = n.from_html("<p class=\"sv-grid-chart-empty\"><!></p>"), ye = n.from_html("<div class=\"sv-grid-chart-float-resizer\" role=\"separator\" aria-label=\"Resize chart window\"></div>"), be = n.from_html("<section aria-label=\"Chart\"><!> <header class=\"sv-grid-chart-panel-head\"><div><svg class=\"sv-grid-chart-title-icon\" width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"10\"></line><line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"4\"></line><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"16\"></line></svg> <span class=\"sv-grid-chart-title\">Chart</span> <div class=\"sv-grid-chart-actions\"><!> <div class=\"sv-grid-chart-export\"><button type=\"button\" class=\"sv-grid-chart-icon-btn\" aria-label=\"Export chart\" title=\"Export\"><!></button> <!></div> <!> <!> <!> <button type=\"button\" class=\"sv-grid-chart-close\" aria-label=\"Close chart\">&times;</button></div></div> <!> <!> <div class=\"sv-grid-chart-controls\"><!></div></header> <div class=\"sv-grid-chart-panel-body\"><!></div> <!></section>");
104
- function T(e, a) {
105
- n.push(a, !0);
106
- let o = n.prop(a, "ctrl", 7), s = n.derived(() => o().chartingConfig), c = n.derived(() => o().chartCfg), f = n.derived(() => o().chartIsCustom), p = n.derived(() => n.get(s)?.position ?? "bottom"), h = n.derived(() => n.get(s)?.crossFilter !== !1), T = n.derived(() => o().chartSpec), E = n.derived(() => o().chartableColumns), D = n.derived(() => o().chartSize ?? (n.get(p) === "right" ? n.get(s)?.width ?? 340 : n.get(s)?.height ?? 260)), O = n.derived(() => o().chartFloating), k = n.derived(() => o().chartMaximized), A = n.derived(() => o().chartFloatRect), j = n.state(null);
107
- function M() {
108
- let e = n.get(j)?.offsetParent;
109
- return {
110
- w: e?.clientWidth ?? 800,
111
- h: e?.clientHeight ?? 520
112
- };
113
- }
114
- function xe() {
115
- if (!o().chartFloatRect) {
116
- let { w: e, h: t } = M(), n = Math.min(600, Math.max(360, e - 80)), r = Math.min(430, Math.max(260, t - 90));
117
- o().chartFloatRect = {
118
- x: Math.round((e - n) / 2),
119
- y: Math.round((t - r) / 2),
120
- w: n,
121
- h: r
122
- };
123
- }
124
- o().chartFloating = !0;
125
- }
126
- function Se() {
127
- o().chartFloating = !1, o().chartMaximized = !1;
128
- }
129
- let Ce = () => o().chartMaximized = !o().chartMaximized;
130
- function we(e) {
131
- if (!n.get(O) || n.get(k) || e.target?.closest("button")) return;
132
- let t = o().chartFloatRect;
133
- if (!t) return;
134
- e.preventDefault();
135
- let r = e.clientX, i = e.clientY, { w: a, h: s } = M(), c = (e) => {
136
- let n = Math.max(0, Math.min(a - t.w, t.x + e.clientX - r)), c = Math.max(0, Math.min(s - t.h, t.y + e.clientY - i));
137
- o().chartFloatRect = {
138
- x: n,
139
- y: c,
140
- w: t.w,
141
- h: t.h
142
- };
143
- }, l = () => {
144
- window.removeEventListener("pointermove", c), window.removeEventListener("pointerup", l);
145
- };
146
- window.addEventListener("pointermove", c), window.addEventListener("pointerup", l);
147
- }
148
- function Te(e) {
149
- let t = o().chartFloatRect;
150
- if (!t) return;
151
- e.preventDefault(), e.stopPropagation();
152
- let n = e.clientX, r = e.clientY;
153
- e.target.setPointerCapture?.(e.pointerId);
154
- let i = (e) => {
155
- o().chartFloatRect = {
156
- x: t.x,
157
- y: t.y,
158
- w: Math.max(300, t.w + e.clientX - n),
159
- h: Math.max(220, t.h + e.clientY - r)
160
- };
161
- }, a = () => {
162
- window.removeEventListener("pointermove", i), window.removeEventListener("pointerup", a);
163
- };
164
- window.addEventListener("pointermove", i), window.addEventListener("pointerup", a);
165
- }
166
- let Ee = n.derived(() => n.get(O) ? n.get(k) ? "left:12px; top:12px; right:12px; bottom:12px; width:auto; height:auto;" : n.get(A) ? `left:${n.get(A).x}px; top:${n.get(A).y}px; width:${n.get(A).w}px; height:${n.get(A).h}px;` : "" : n.get(p) === "right" ? `width:${n.get(D)}px` : `height:${n.get(D)}px`), N = n.state(0), P = n.state(0), De = n.derived(() => n.get(T) ? n.get(T).type === "pie" ? n.get(T).categories.length : n.get(T).series.length : 0), Oe = n.derived(() => (n.get(De) > 1 ? 36 : 0) + (n.get(c)?.export === !0 ? 30 : 0)), ke = n.derived(() => n.get(N) > 24 ? n.get(N) - 8 : void 0), Ae = n.derived(() => n.get(P) > 24 ? Math.max(120, n.get(P) - 8 - n.get(Oe)) : void 0), je = [
167
- {
168
- value: "bar",
169
- label: "Bar"
170
- },
171
- {
172
- value: "line",
173
- label: "Line"
174
- },
175
- {
176
- value: "area",
177
- label: "Area"
178
- },
179
- {
180
- value: "pie",
181
- label: "Pie"
182
- }
183
- ], Me = [
184
- {
185
- value: "sum",
186
- label: "Sum"
187
- },
188
- {
189
- value: "avg",
190
- label: "Average"
191
- },
192
- {
193
- value: "count",
194
- label: "Count"
195
- }
196
- ], Ne = [
197
- {
198
- value: "number",
199
- label: "Number"
200
- },
201
- {
202
- value: "currency",
203
- label: "Currency"
204
- },
205
- {
206
- value: "percent",
207
- label: "Percent"
208
- }
209
- ];
210
- function Pe(e) {
211
- n.get(h) && e.category != null && o().applyChartCrossFilter(String(e.category));
212
- }
213
- let F = n.state(null), I = n.state(!1), L = n.state(!1), R = () => n.get(F)?.querySelector("svg") ?? null, Fe = n.derived(() => !!(n.get(T) && n.get(T).categories?.length && n.get(T).series?.length));
214
- function Ie() {
215
- let e = R();
216
- e && d(e, "chart.png"), n.set(I, !1);
217
- }
218
- function Le() {
219
- let e = R();
220
- e && l(e, "chart.svg"), n.set(I, !1);
221
- }
222
- function Re() {
223
- n.get(T) && m(n.get(T), "chart.csv"), n.set(I, !1);
224
- }
225
- async function ze() {
226
- let e = R();
227
- if (n.set(I, !1), !(!e || typeof ClipboardItem > "u" || !navigator.clipboard?.write)) try {
228
- let t = await u(e);
229
- await navigator.clipboard.write([new ClipboardItem({ "image/png": t })]), n.set(L, !0), setTimeout(() => n.set(L, !1), 1400);
230
- } catch {}
231
- }
232
- n.user_effect(() => {
233
- if (!n.get(I)) return;
234
- let e = (e) => {
235
- e.target?.closest(".sv-grid-chart-export") || n.set(I, !1);
236
- };
237
- return window.addEventListener("pointerdown", e), () => window.removeEventListener("pointerdown", e);
238
- });
239
- let z = n.derived(() => !!o().chartAiHandler), B = n.state(!1), V = n.state(""), H = n.state(!1), U = n.state(""), W = n.state("");
240
- async function Be() {
241
- let e = o().chartAiHandler, t = n.get(V).trim();
242
- if (!(!e || !t || n.get(H))) {
243
- n.set(H, !0), n.set(U, ""), n.set(W, "");
244
- try {
245
- let r = await e(t);
246
- r ? (o().applyChartConfig(r), n.set(W, typeof r.rationale == "string" ? r.rationale : "", !0)) : n.set(U, "Couldn't build a chart from that request.");
247
- } catch (e) {
248
- n.set(U, e instanceof Error ? e.message : "Something went wrong.", !0);
249
- } finally {
250
- n.set(H, !1);
251
- }
252
- }
253
- }
254
- let G = n.state(!1);
255
- function Ve(e) {
256
- e.preventDefault(), n.set(G, !0);
257
- let t = n.get(p) === "right" ? e.clientX : e.clientY, r = n.get(D);
258
- e.target.setPointerCapture?.(e.pointerId);
259
- let i = (e) => {
260
- let i = n.get(p) === "right" ? t - e.clientX : t - e.clientY;
261
- o().chartSize = Math.max(160, Math.min(720, r + i));
262
- }, a = () => {
263
- n.set(G, !1), window.removeEventListener("pointermove", i), window.removeEventListener("pointerup", a);
264
- };
265
- window.addEventListener("pointermove", i), window.addEventListener("pointerup", a);
266
- }
267
- var K = be();
268
- let He;
269
- var Ue = n.child(K), We = (e) => {
270
- var t = g();
271
- let r;
272
- n.template_effect(() => {
273
- r = n.set_class(t, 1, "sv-grid-chart-resizer", null, r, { "is-dragging": n.get(G) }), n.set_attribute(t, "aria-orientation", n.get(p) === "right" ? "vertical" : "horizontal");
274
- }), n.delegated("pointerdown", t, Ve), n.append(e, t);
275
- };
276
- n.if(Ue, (e) => {
277
- n.get(O) || e(We);
278
- });
279
- var q = n.sibling(Ue, 2), J = n.child(q);
280
- let Ge;
281
- var Ke = n.sibling(n.child(J), 4), qe = n.child(Ke), Je = (e) => {
282
- var t = _();
283
- n.delegated("click", t, () => o().clearChartCrossFilter()), n.append(e, t);
284
- };
285
- n.if(qe, (e) => {
286
- n.get(h) && !n.get(f) && e(Je);
287
- });
288
- var Y = n.sibling(qe, 2), X = n.child(Y), Ye = n.child(X), Xe = (e) => {
289
- var t = v();
290
- n.append(e, t);
291
- }, Ze = (e) => {
292
- var t = y();
293
- n.append(e, t);
294
- };
295
- n.if(Ye, (e) => {
296
- n.get(L) ? e(Xe) : e(Ze, -1);
297
- }), n.reset(X);
298
- var Qe = n.sibling(X, 2), $e = (e) => {
299
- var t = b(), r = n.child(t), i = n.sibling(r, 2), a = n.sibling(i, 2), o = n.sibling(a, 2);
300
- n.reset(t), n.template_effect(() => a.disabled = !n.get(Fe)), n.delegated("click", r, Ie), n.delegated("click", i, Le), n.delegated("click", a, Re), n.delegated("click", o, ze), n.append(e, t);
301
- };
302
- n.if(Qe, (e) => {
303
- n.get(I) && e($e);
304
- }), n.reset(Y);
305
- var Z = n.sibling(Y, 2), et = (e) => {
306
- var t = x();
307
- let r;
308
- n.template_effect(() => {
309
- r = n.set_class(t, 1, "sv-grid-chart-btn sv-grid-chart-ai-btn", null, r, { "is-active": n.get(B) }), n.set_attribute(t, "aria-expanded", n.get(B));
310
- }), n.delegated("click", t, () => n.set(B, !n.get(B))), n.append(e, t);
311
- };
312
- n.if(Z, (e) => {
313
- n.get(z) && !n.get(f) && e(et);
314
- });
315
- var tt = n.sibling(Z, 2), nt = (e) => {
316
- var t = ee();
317
- n.delegated("click", t, () => o().addChart()), n.append(e, t);
318
- };
319
- n.if(tt, (e) => {
320
- n.get(f) || e(nt);
321
- });
322
- var rt = n.sibling(tt, 2), it = (e) => {
323
- var t = w(), r = n.first_child(t), i = n.child(r), a = (e) => {
324
- var t = S();
325
- n.append(e, t);
326
- }, o = (e) => {
327
- var t = C();
328
- n.append(e, t);
329
- };
330
- n.if(i, (e) => {
331
- n.get(k) ? e(a) : e(o, -1);
332
- }), n.reset(r);
333
- var s = n.sibling(r, 2);
334
- n.template_effect(() => {
335
- n.set_attribute(r, "aria-label", n.get(k) ? "Restore" : "Maximize"), n.set_attribute(r, "title", n.get(k) ? "Restore" : "Maximize");
336
- }), n.delegated("click", r, Ce), n.delegated("click", s, Se), n.append(e, t);
337
- }, at = (e) => {
338
- var t = te();
339
- n.delegated("click", t, xe), n.append(e, t);
340
- };
341
- n.if(rt, (e) => {
342
- n.get(O) ? e(it) : e(at, -1);
343
- });
344
- var ot = n.sibling(rt, 2);
345
- n.reset(Ke), n.reset(J);
346
- var st = n.sibling(J, 2), ct = (e) => {
347
- var t = re();
348
- n.each(t, 23, () => o().charts, (e) => e.id, (e, t, r) => {
349
- var i = ne();
350
- let a;
351
- var s = n.child(i), c = n.child(s, !0);
352
- n.reset(s);
353
- var l = n.sibling(s, 2);
354
- n.reset(i), n.template_effect(() => {
355
- a = n.set_class(i, 1, "sv-grid-chart-tab", null, a, { "is-active": n.get(r) === o().activeChartIndex }), n.set_attribute(s, "aria-selected", n.get(r) === o().activeChartIndex), n.set_text(c, n.get(t).title), n.set_attribute(l, "aria-label", `Remove ${n.get(t).title}`);
356
- }), n.delegated("click", s, () => o().activeChartIndex = n.get(r)), n.delegated("click", l, () => o().removeChart(n.get(r))), n.append(e, i);
357
- }), n.reset(t), n.append(e, t);
358
- };
359
- n.if(st, (e) => {
360
- !n.get(f) && o().charts.length > 1 && e(ct);
361
- });
362
- var lt = n.sibling(st, 2), ut = (e) => {
363
- var t = oe(), r = n.child(t), i = n.child(r);
364
- n.remove_input_defaults(i);
365
- var a = n.sibling(i, 2), o = n.child(a, !0);
366
- n.reset(a), n.reset(r);
367
- var s = n.sibling(r, 2), c = (e) => {
368
- var t = ie(), r = n.child(t, !0);
369
- n.reset(t), n.template_effect(() => n.set_text(r, n.get(U))), n.append(e, t);
370
- }, l = (e) => {
371
- var t = ae(), r = n.child(t, !0);
372
- n.reset(t), n.template_effect(() => n.set_text(r, n.get(W))), n.append(e, t);
373
- };
374
- n.if(s, (e) => {
375
- n.get(U) ? e(c) : n.get(W) && e(l, 1);
376
- }), n.reset(t), n.template_effect((e) => {
377
- i.disabled = n.get(H), a.disabled = e, n.set_text(o, n.get(H) ? "Thinking..." : "Chart it");
378
- }, [() => n.get(H) || !n.get(V).trim()]), n.event("submit", r, (e) => {
379
- e.preventDefault(), Be();
380
- }), n.bind_value(i, () => n.get(V), (e) => n.set(V, e)), n.append(e, t);
381
- };
382
- n.if(lt, (e) => {
383
- n.get(z) && n.get(B) && !n.get(f) && e(ut);
384
- });
385
- var Q = n.sibling(lt, 2), dt = n.child(Q), ft = (e) => {
386
- var t = _e(), r = n.first_child(t), i = n.sibling(n.child(r), 2);
387
- n.each(i, 21, () => je, (e) => e.value, (e, t) => {
388
- var r = se(), i = n.child(r, !0);
389
- n.reset(r);
390
- var a = {};
391
- n.template_effect(() => {
392
- n.set_text(i, n.get(t).label), a !== (a = n.get(t).value) && (r.value = (r.__value = n.get(t).value) ?? "");
393
- }), n.append(e, r);
394
- }), n.reset(i);
395
- var a;
396
- n.init_select(i), n.reset(r);
397
- var s = n.sibling(r, 2), c = n.sibling(n.child(s), 2);
398
- n.each(c, 21, () => n.get(E).dims, (e) => e.id, (e, t) => {
399
- var r = ce(), i = n.child(r, !0);
400
- n.reset(r);
401
- var a = {};
402
- n.template_effect(() => {
403
- n.set_text(i, n.get(t).label), a !== (a = n.get(t).id) && (r.value = (r.__value = n.get(t).id) ?? "");
404
- }), n.append(e, r);
405
- }), n.reset(c);
406
- var l;
407
- n.init_select(c), n.reset(s);
408
- var u = n.sibling(s, 2), d = (e) => {
409
- var t = ue(), r = n.sibling(n.child(t), 2), i = n.child(r);
410
- i.value = i.__value = "";
411
- var a = n.sibling(i);
412
- n.each(a, 17, () => n.get(E).dims, (e) => e.id, (e, t) => {
413
- var r = le(), i = n.child(r, !0);
414
- n.reset(r);
415
- var a = {};
416
- n.template_effect(() => {
417
- n.set_text(i, n.get(t).label), a !== (a = n.get(t).id) && (r.value = (r.__value = n.get(t).id) ?? "");
418
- }), n.append(e, r);
419
- }), n.reset(r);
420
- var s;
421
- n.init_select(r), n.reset(t), n.template_effect(() => {
422
- s !== (s = o().chartSeriesId ?? "") && (r.value = (r.__value = o().chartSeriesId ?? "") ?? "", n.select_option(r, o().chartSeriesId ?? ""));
423
- }), n.delegated("change", r, (e) => o().chartSeriesId = e.currentTarget.value || null), n.append(e, t);
424
- };
425
- n.if(u, (e) => {
426
- n.get(E).dims.length > 1 && e(d);
427
- });
428
- var f = n.sibling(u, 2), p = n.sibling(n.child(f), 2);
429
- n.each(p, 21, () => n.get(E).measures, (e) => e.id, (e, t) => {
430
- var r = de(), i = n.child(r, !0);
431
- n.reset(r);
432
- var a = {};
433
- n.template_effect(() => {
434
- n.set_text(i, n.get(t).label), a !== (a = n.get(t).id) && (r.value = (r.__value = n.get(t).id) ?? "");
435
- }), n.append(e, r);
436
- }), n.reset(p);
437
- var m;
438
- n.init_select(p), n.reset(f);
439
- var h = n.sibling(f, 2), g = n.sibling(n.child(h), 2);
440
- n.each(g, 21, () => Me, (e) => e.value, (e, t) => {
441
- var r = fe(), i = n.child(r, !0);
442
- n.reset(r);
443
- var a = {};
444
- n.template_effect(() => {
445
- n.set_text(i, n.get(t).label), a !== (a = n.get(t).value) && (r.value = (r.__value = n.get(t).value) ?? "");
446
- }), n.append(e, r);
447
- }), n.reset(g);
448
- var _;
449
- n.init_select(g), n.reset(h);
450
- var v = n.sibling(h, 2), y = n.sibling(n.child(v), 2);
451
- n.each(y, 21, () => Ne, (e) => e.value, (e, t) => {
452
- var r = pe(), i = n.child(r, !0);
453
- n.reset(r);
454
- var a = {};
455
- n.template_effect(() => {
456
- n.set_text(i, n.get(t).label), a !== (a = n.get(t).value) && (r.value = (r.__value = n.get(t).value) ?? "");
457
- }), n.append(e, r);
458
- }), n.reset(y);
459
- var b;
460
- n.init_select(y), n.reset(v);
461
- var x = n.sibling(v, 2), ee = (e) => {
462
- var t = me(), r = n.child(t);
463
- n.remove_input_defaults(r), n.next(), n.reset(t), n.template_effect(() => n.set_checked(r, o().chartStacked)), n.delegated("change", r, (e) => o().chartStacked = e.currentTarget.checked), n.append(e, t);
464
- };
465
- n.if(x, (e) => {
466
- o().chartType !== "pie" && e(ee);
467
- });
468
- var S = n.sibling(x, 2), C = n.child(S);
469
- n.remove_input_defaults(C), n.next(), n.reset(S);
470
- var w = n.sibling(S, 2), te = (e) => {
471
- var t = he(), r = n.child(t);
472
- n.remove_input_defaults(r), n.next(), n.reset(t), n.template_effect(() => n.set_checked(r, o().chartLogScale)), n.delegated("change", r, (e) => o().chartLogScale = e.currentTarget.checked), n.append(e, t);
473
- };
474
- n.if(w, (e) => {
475
- o().chartType !== "pie" && e(te);
476
- });
477
- var ne = n.sibling(w, 2), re = (e) => {
478
- var t = ge(), r = n.child(t);
479
- n.remove_input_defaults(r), n.next(), n.reset(t), n.template_effect(() => n.set_checked(r, o().chartTimeAxis)), n.delegated("change", r, (e) => o().chartTimeAxis = e.currentTarget.checked), n.append(e, t);
480
- };
481
- n.if(ne, (e) => {
482
- o().chartDimensionIsDate && o().chartType !== "pie" && e(re);
483
- }), n.template_effect(() => {
484
- a !== (a = o().chartType) && (i.value = (i.__value = o().chartType) ?? "", n.select_option(i, o().chartType)), l !== (l = o().chartDimensionId ?? "") && (c.value = (c.__value = o().chartDimensionId ?? "") ?? "", n.select_option(c, o().chartDimensionId ?? "")), m !== (m = o().chartMeasureId ?? "") && (p.value = (p.__value = o().chartMeasureId ?? "") ?? "", n.select_option(p, o().chartMeasureId ?? "")), _ !== (_ = o().chartReduce) && (g.value = (g.__value = o().chartReduce) ?? "", n.select_option(g, o().chartReduce)), b !== (b = o().chartValueFormat) && (y.value = (y.__value = o().chartValueFormat) ?? "", n.select_option(y, o().chartValueFormat)), n.set_checked(C, o().chartDataLabels);
485
- }), n.delegated("change", i, (e) => o().chartType = e.currentTarget.value), n.delegated("change", c, (e) => o().chartDimensionId = e.currentTarget.value || null), n.delegated("change", p, (e) => o().chartMeasureId = e.currentTarget.value || null), n.delegated("change", g, (e) => o().chartReduce = e.currentTarget.value), n.delegated("change", y, (e) => o().chartValueFormat = e.currentTarget.value), n.delegated("change", C, (e) => o().chartDataLabels = e.currentTarget.checked), n.append(e, t);
486
- };
487
- n.if(dt, (e) => {
488
- n.get(f) || e(ft);
489
- }), n.reset(Q), n.reset(q);
490
- var $ = n.sibling(q, 2), pt = n.child($), mt = (e) => {
491
- {
492
- let r = n.derived(() => n.get(c)?.zoom === !0), i = n.derived(() => n.get(c)?.brush === !0), a = n.derived(() => n.get(c)?.export === !0 || void 0);
493
- t(e, {
494
- get spec() {
495
- return n.get(T);
496
- },
497
- get width() {
498
- return n.get(ke);
499
- },
500
- get height() {
501
- return n.get(Ae);
502
- },
503
- onSelect: Pe,
504
- interactive: !0,
505
- legend: !0,
506
- get dataLabels() {
507
- return o().chartDataLabels;
508
- },
509
- get zoomable() {
510
- return n.get(r);
511
- },
512
- get brush() {
513
- return n.get(i);
514
- },
515
- get toolbar() {
516
- return n.get(a);
517
- }
518
- });
519
- }
520
- }, ht = (e) => {
521
- var t = ve(), r = n.child(t), i = (e) => {
522
- var t = n.text("Charting needs at least one text column (to group by) and one numeric column (to measure).");
523
- n.append(e, t);
524
- }, a = (e) => {
525
- var t = n.text("No data to chart.");
526
- n.append(e, t);
527
- };
528
- n.if(r, (e) => {
529
- !n.get(E).dims.length || !n.get(E).measures.length ? e(i) : e(a, -1);
530
- }), n.reset(t), n.append(e, t);
531
- };
532
- n.if(pt, (e) => {
533
- n.get(T) && (n.get(T).series.length || n.get(f)) ? e(mt) : e(ht, -1);
534
- }), n.reset($), n.bind_this($, (e) => n.set(F, e), () => n.get(F));
535
- var gt = n.sibling($, 2), _t = (e) => {
536
- var t = ye();
537
- n.delegated("pointerdown", t, Te), n.append(e, t);
538
- };
539
- n.if(gt, (e) => {
540
- n.get(O) && !n.get(k) && e(_t);
541
- }), n.reset(K), n.bind_this(K, (e) => n.set(j, e), () => n.get(j)), n.template_effect(() => {
542
- He = n.set_class(K, 1, "sv-grid-chart-panel", null, He, {
543
- "is-right": n.get(p) === "right" && !n.get(O),
544
- "is-bottom": n.get(p) === "bottom" && !n.get(O),
545
- "is-floating": n.get(O),
546
- "is-maximized": n.get(O) && n.get(k)
547
- }), n.set_style(K, n.get(Ee)), Ge = n.set_class(J, 1, "sv-grid-chart-drawer-title", null, Ge, { "is-drag-handle": n.get(O) && !n.get(k) }), n.set_attribute(X, "aria-expanded", n.get(I));
548
- }), n.delegated("pointerdown", J, we), n.delegated("click", X, () => n.set(I, !n.get(I))), n.delegated("click", ot, () => o().chartPanelOpen = !1), n.bind_element_size($, "clientWidth", (e) => n.set(N, e)), n.bind_element_size($, "clientHeight", (e) => n.set(P, e)), n.transition(3, K, () => r, () => ({
549
- x: !n.get(O) && n.get(p) === "right" ? n.get(D) : 0,
550
- y: !n.get(O) && n.get(p) === "bottom" ? n.get(D) : 0,
551
- duration: 180,
552
- easing: i
553
- })), n.append(e, K), n.pop();
554
- }
555
- n.delegate([
556
- "pointerdown",
557
- "click",
558
- "change"
559
- ]);
560
- //#endregion
561
- export { s as a, l as c, u as i, h as n, m as o, p as r, d as s, T as t };