@xiee/utils 1.14.80 → 1.14.82
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/css/lt-plot.css +28 -0
- package/css/lt-plot.min.css +1 -1
- package/css/lt-plot.min.css.map +1 -1
- package/js/lt-plot.js +125 -1
- package/js/lt-plot.min.js +1 -1
- package/js/lt-plot.min.js.map +1 -1
- package/package.json +1 -1
package/css/lt-plot.css
CHANGED
|
@@ -25,4 +25,32 @@
|
|
|
25
25
|
text { fill: #666; font-size: 11px; }
|
|
26
26
|
.lt-eb-axis-label { fill: #333; font-size: 12px; }
|
|
27
27
|
}
|
|
28
|
+
.lt-spark {
|
|
29
|
+
vertical-align: middle;
|
|
30
|
+
color: #4682b4; /* line/bars inherit this via currentColor; override inline */
|
|
31
|
+
.lt-spark-line { fill: none; stroke: currentColor; stroke-width: 1; }
|
|
32
|
+
.lt-spark-bar { fill: currentColor; }
|
|
33
|
+
}
|
|
34
|
+
.lt-dot {
|
|
35
|
+
position: relative; /* paint above the absolutely-positioned gridlines */
|
|
36
|
+
vertical-align: middle;
|
|
37
|
+
color: #333;
|
|
38
|
+
/* default only the dots without a per-column fill= attribute, so that
|
|
39
|
+
attribute still shows; override either via `color` or `.lt-dot circle` */
|
|
40
|
+
circle:not([fill]) { fill: currentColor; }
|
|
41
|
+
}
|
|
42
|
+
.lt-dot-legend {
|
|
43
|
+
margin-top: 3px; /* small gap below the axis, since the cell has no padding */
|
|
44
|
+
font-size: 11px;
|
|
45
|
+
color: #666;
|
|
46
|
+
i {
|
|
47
|
+
display: inline-block;
|
|
48
|
+
width: 8px;
|
|
49
|
+
height: 8px;
|
|
50
|
+
margin-right: 2px;
|
|
51
|
+
border-radius: 50%;
|
|
52
|
+
vertical-align: middle;
|
|
53
|
+
}
|
|
54
|
+
span { margin-right: 6px; white-space: nowrap; }
|
|
55
|
+
}
|
|
28
56
|
}
|
package/css/lt-plot.min.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.lt-table{& .lt-eb-cell{text-align:left;padding:0;position:relative}& .lt-eb-grid-bg{position:absolute;top:0;left:0;& line{stroke:#eee}}& .lt-eb{vertical-align:middle;position:relative;& line{stroke:#888}& circle{fill:#333}& .lt-eb-ref{stroke:#ccc}}& .lt-eb-axis{margin-top:3px;display:block;& line{stroke:#888}& text{fill:#666;font-size:11px}& .lt-eb-axis-label{fill:#333;font-size:12px}}}
|
|
1
|
+
.lt-table{& .lt-eb-cell{text-align:left;padding:0;position:relative}& .lt-eb-grid-bg{position:absolute;top:0;left:0;& line{stroke:#eee}}& .lt-eb{vertical-align:middle;position:relative;& line{stroke:#888}& circle{fill:#333}& .lt-eb-ref{stroke:#ccc}}& .lt-eb-axis{margin-top:3px;display:block;& line{stroke:#888}& text{fill:#666;font-size:11px}& .lt-eb-axis-label{fill:#333;font-size:12px}}& .lt-spark{vertical-align:middle;color:#4682b4;& .lt-spark-line{fill:none;stroke:currentColor;stroke-width:1px}& .lt-spark-bar{fill:currentColor}}& .lt-dot{vertical-align:middle;color:#333;position:relative;& circle:not([fill]){fill:currentColor}}& .lt-dot-legend{color:#666;margin-top:3px;font-size:11px;& i{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:2px;display:inline-block}& span{white-space:nowrap;margin-right:6px}}}
|
|
2
2
|
/*# sourceMappingURL=lt-plot.min.css.map */
|
package/css/lt-plot.min.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"AACA,UACE,0DAKA,gDAIE,oBAEF,iDAGE,mBACA,mBACA,0BAEF,2CAGE,mBACA,gCACA","sources":["lt-plot.css"],"sourcesContent":["/* lt-plot.css — styles for inline graphics cells (see lt-plot.js). */\n.lt-table {\n .lt-eb-cell {\n position: relative;\n padding: 0; /* so the gridline background fills the whole cell */\n text-align: left; /* keep the plot flush left, aligned with the gridlines */\n }\n .lt-eb-grid-bg {\n position: absolute;\n left: 0;\n top: 0;\n line { stroke: #eee; }\n }\n .lt-eb {\n position: relative;\n vertical-align: middle;\n line { stroke: #888; }\n circle { fill: #333; }\n .lt-eb-ref { stroke: #ccc; }\n }\n .lt-eb-axis {\n display: block;\n margin-top: 3px; /* small gap below the body, since the cell has no padding */\n line { stroke: #888; }\n text { fill: #666; font-size: 11px; }\n .lt-eb-axis-label { fill: #333; font-size: 12px; }\n }\n}\n"],"names":[]}
|
|
1
|
+
{"version":3,"mappings":"AACA,UACE,0DAKA,gDAIE,oBAEF,iDAGE,mBACA,mBACA,0BAEF,2CAGE,mBACA,gCACA,8CAEF,gDAGE,gEACA,mCAEF,6DAME,wCAEF,0DAIE,uGAQA","sources":["lt-plot.css"],"sourcesContent":["/* lt-plot.css — styles for inline graphics cells (see lt-plot.js). */\n.lt-table {\n .lt-eb-cell {\n position: relative;\n padding: 0; /* so the gridline background fills the whole cell */\n text-align: left; /* keep the plot flush left, aligned with the gridlines */\n }\n .lt-eb-grid-bg {\n position: absolute;\n left: 0;\n top: 0;\n line { stroke: #eee; }\n }\n .lt-eb {\n position: relative;\n vertical-align: middle;\n line { stroke: #888; }\n circle { fill: #333; }\n .lt-eb-ref { stroke: #ccc; }\n }\n .lt-eb-axis {\n display: block;\n margin-top: 3px; /* small gap below the body, since the cell has no padding */\n line { stroke: #888; }\n text { fill: #666; font-size: 11px; }\n .lt-eb-axis-label { fill: #333; font-size: 12px; }\n }\n .lt-spark {\n vertical-align: middle;\n color: #4682b4; /* line/bars inherit this via currentColor; override inline */\n .lt-spark-line { fill: none; stroke: currentColor; stroke-width: 1; }\n .lt-spark-bar { fill: currentColor; }\n }\n .lt-dot {\n position: relative; /* paint above the absolutely-positioned gridlines */\n vertical-align: middle;\n color: #333;\n /* default only the dots without a per-column fill= attribute, so that\n attribute still shows; override either via `color` or `.lt-dot circle` */\n circle:not([fill]) { fill: currentColor; }\n }\n .lt-dot-legend {\n margin-top: 3px; /* small gap below the axis, since the cell has no padding */\n font-size: 11px;\n color: #666;\n i {\n display: inline-block;\n width: 8px;\n height: 8px;\n margin-right: 2px;\n border-radius: 50%;\n vertical-align: middle;\n }\n span { margin-right: 6px; white-space: nowrap; }\n }\n}\n"],"names":[]}
|
package/js/lt-plot.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/* lt-plot.js — inline graphics cells for lt tables (error bars, sparklines,
|
|
1
|
+
/* lt-plot.js — inline graphics cells for lt tables (error bars, sparklines,
|
|
2
|
+
* dot plots, …).
|
|
2
3
|
* Registers cell renderers on LT.cells; the core runtime (lt.js) consults them
|
|
3
4
|
* while building the <table>, so a plot draws for every render path (static,
|
|
4
5
|
* Node-baked, and the interactive per-page rebuild) with no plot code in core.
|
|
@@ -141,6 +142,129 @@
|
|
|
141
142
|
foot: (eb, u) => eb.axis ? svgAxis(eb, u) : ""
|
|
142
143
|
};
|
|
143
144
|
|
|
145
|
+
// Padding (px) inside a sparkline SVG, so the line/bars never touch the edge.
|
|
146
|
+
const SP_PAD = 2;
|
|
147
|
+
const round1 = n => Math.round(n * 10) / 10; // 0.1px, to keep coords short
|
|
148
|
+
const q = v => `"${v}"`; // double-quote an SVG attribute value
|
|
149
|
+
|
|
150
|
+
// A row's series for a sparkline: when a single column is named and its cell
|
|
151
|
+
// is an array (a list-column), that array is the series; otherwise each named
|
|
152
|
+
// column contributes one point, read left to right across the row. Non-finite
|
|
153
|
+
// entries become null (a gap in the line, a skipped bar). `u` carries the core
|
|
154
|
+
// helpers (esc/isNum/str).
|
|
155
|
+
function spSeries(sp, data, r, u) {
|
|
156
|
+
const cell = data[sp.cols[0]]?.[r - 1];
|
|
157
|
+
const raw = sp.cols.length === 1 && Array.isArray(cell)
|
|
158
|
+
? cell : sp.cols.map(c => data[c]?.[r - 1]);
|
|
159
|
+
return raw.map(v => u.isNum(v) ? +v : null);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Inline SVG sparkline (line or bar) for a cell. The series is scaled to the
|
|
163
|
+
// shared [min,max] when the spec gives one, else to the row's own finite
|
|
164
|
+
// range; a flat series sits on the mid-line. Points are spaced evenly across
|
|
165
|
+
// the width. Nulls break the line into separate subpaths (and drop bars).
|
|
166
|
+
function svgSparkline(sp, data, r, u) {
|
|
167
|
+
const vals = spSeries(sp, data, r, u), fin = vals.filter(v => v != null);
|
|
168
|
+
if (!fin.length) return "";
|
|
169
|
+
const W = sp.width, H = sp.height, n = vals.length;
|
|
170
|
+
const lo = sp.min != null ? sp.min : Math.min(...fin),
|
|
171
|
+
hi = sp.max != null ? sp.max : Math.max(...fin);
|
|
172
|
+
const xAt = i => round1(n > 1 ? SP_PAD + i / (n - 1) * (W - 2 * SP_PAD) : W / 2),
|
|
173
|
+
yAt = v => round1(hi > lo
|
|
174
|
+
? H - SP_PAD - (v - lo) / (hi - lo) * (H - 2 * SP_PAD) : H / 2);
|
|
175
|
+
// the line/bars inherit `currentColor`, so one color prop styles either
|
|
176
|
+
const style = sp.color ? ` style="color:${u.esc(sp.color)}"` : "";
|
|
177
|
+
let body;
|
|
178
|
+
if (sp.kind === "bar") {
|
|
179
|
+
// one equal-width slot per value; each bar is centered in its slot and
|
|
180
|
+
// grows from a zero baseline when the scale straddles 0, else the bottom.
|
|
181
|
+
const slot = (W - 2 * SP_PAD) / n, bw = round1(Math.max(1, slot * 0.8)),
|
|
182
|
+
base = yAt(lo < 0 && hi > 0 ? 0 : lo);
|
|
183
|
+
body = vals.map((v, i) => {
|
|
184
|
+
if (v == null) return "";
|
|
185
|
+
const yv = yAt(v), x = round1(SP_PAD + i * slot + (slot - bw) / 2);
|
|
186
|
+
return `<rect class="lt-spark-bar" x=${q(x)} y=${q(Math.min(yv, base))} ` +
|
|
187
|
+
`width=${q(bw)} height=${q(Math.max(1, Math.abs(base - yv)))}/>`;
|
|
188
|
+
}).join("");
|
|
189
|
+
} else {
|
|
190
|
+
let d = "", pen = false;
|
|
191
|
+
vals.forEach((v, i) => {
|
|
192
|
+
if (v == null) { pen = false; return; }
|
|
193
|
+
d += `${pen ? "L" : "M"}${xAt(i)} ${yAt(v)}`;
|
|
194
|
+
pen = true;
|
|
195
|
+
});
|
|
196
|
+
body = `<path class="lt-spark-line" d="${d}"/>`;
|
|
197
|
+
}
|
|
198
|
+
return `<svg class="lt-spark" width="${W}" height="${H}"${style}>${body}` +
|
|
199
|
+
`<title>${u.esc(fin.map(u.str).join(", "))}</title></svg>`;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Sparkline cell renderer. columns = one list-column, or several numeric
|
|
203
|
+
// columns read across the row; the plot is drawn in the first column's cells.
|
|
204
|
+
cells.sparkline = {
|
|
205
|
+
resolve(op) {
|
|
206
|
+
const cols = op.columns || [], v = cols[0];
|
|
207
|
+
if (!v) return {};
|
|
208
|
+
return { [v]: {
|
|
209
|
+
col: v, cols, kind: op.kind, min: op.min, max: op.max,
|
|
210
|
+
color: op.color, width: op.width || 120, height: op.height || 20
|
|
211
|
+
} };
|
|
212
|
+
},
|
|
213
|
+
cell: (sp, data, r, u) => svgSparkline(sp, data, r, u)
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// Inline SVG dot plot for a cell: one dot per column, each at its value on the
|
|
217
|
+
// column group's shared [min,max] scale, so a row with N columns shows N dots
|
|
218
|
+
// laid out horizontally on one baseline. When colors are given, each dot takes
|
|
219
|
+
// its column's color (see dotLegend for the key). Non-finite values draw no
|
|
220
|
+
// dot. Reuses the error-bar scale (ebX) and padding.
|
|
221
|
+
function svgDotplot(dp, data, r, u) {
|
|
222
|
+
const H = dp.height, y = H / 2, x = v => ebX(dp, v);
|
|
223
|
+
let s = `<svg class="lt-dot" width="${dp.width}" height="${H}">`;
|
|
224
|
+
const titles = [];
|
|
225
|
+
dp.cols.forEach((c, i) => {
|
|
226
|
+
const v = data[c]?.[r - 1];
|
|
227
|
+
if (!u.isNum(v)) return;
|
|
228
|
+
// the per-column color is a fill= presentation attribute; the stylesheet
|
|
229
|
+
// only defaults dots that lack it (:not([fill])), so this color shows but
|
|
230
|
+
// user CSS (a stylesheet rule) can still override it
|
|
231
|
+
const col = dp.colors?.[i], fl = col ? ` fill="${u.esc(col)}"` : "";
|
|
232
|
+
s += `<circle${fl} cx="${x(v)}" cy="${y}" r="3"/>`;
|
|
233
|
+
titles.push((dp.labels?.[i] ? dp.labels[i] + ": " : "") + u.str(v));
|
|
234
|
+
});
|
|
235
|
+
return s + `<title>${u.esc(titles.join("\n"))}</title></svg>`;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Color key for a colored dot plot, drawn once in the footer under the axis: a
|
|
239
|
+
// swatch + label per column. "" when the plot is monochrome (no colors).
|
|
240
|
+
function dotLegend(dp, u) {
|
|
241
|
+
if (!dp.colors) return "";
|
|
242
|
+
const items = dp.cols.map((c, i) =>
|
|
243
|
+
`<span><i style="background:${u.esc(dp.colors[i])}"></i>` +
|
|
244
|
+
`${u.esc(dp.labels?.[i] ?? c)}</span>`).join("");
|
|
245
|
+
return `<div class="lt-dot-legend">${items}</div>`;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Dot-plot cell renderer. columns = the value columns (one dot each); the plot
|
|
249
|
+
// is drawn in the first column's cells on a scale shared across them. Shares
|
|
250
|
+
// the error-bar axis/gridline machinery (ticks, svgGrid, svgAxis, lt-eb-cell).
|
|
251
|
+
cells.dotplot = {
|
|
252
|
+
resolve(op) {
|
|
253
|
+
const cols = op.columns || [], v = cols[0];
|
|
254
|
+
if (!v) return {};
|
|
255
|
+
const dp = {
|
|
256
|
+
col: v, cols, colors: op.colors, labels: op.labels,
|
|
257
|
+
min: op.min, max: op.max, axisLabel: op.axis_label,
|
|
258
|
+
width: op.width || 160, height: op.height || 16
|
|
259
|
+
};
|
|
260
|
+
if (op.axis) dp.ticks = niceTicks(dp.min, dp.max, nAxisTicks(dp));
|
|
261
|
+
return { [v]: dp };
|
|
262
|
+
},
|
|
263
|
+
cellClass: dp => dp.ticks ? "lt-eb-cell" : "",
|
|
264
|
+
cell: (dp, data, r, u) => (dp.ticks ? svgGrid(dp) : "") + svgDotplot(dp, data, r, u),
|
|
265
|
+
foot: (dp, u) => (dp.ticks ? svgAxis(dp, u) : "") + dotLegend(dp, u)
|
|
266
|
+
};
|
|
267
|
+
|
|
144
268
|
// If core already built a table before this module loaded (a doc where an
|
|
145
269
|
// earlier plain table pulled in lt.js first, so its renderer was missing),
|
|
146
270
|
// re-render any mounted table that uses a renderer we just registered. Tables
|
package/js/lt-plot.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(t=>{"use strict";const
|
|
1
|
+
(t=>{"use strict";const l=t.LT||(t.LT={}),e=l.cells||(l.cells={});if(e.errorbar)return;function s(t,l,e=5){if(!(l>t))return[t];const s=(t,l)=>{const e=Math.floor(Math.log10(t)),s=t/10**e;return(l?s<1.5?1:s<3?2:s<7?5:10:s<=1?1:s<=2?2:s<=5?5:10)*10**e},n=s(s(l-t,!1)/(e-1),!0),i=Math.max(0,-Math.floor(Math.log10(n))),o=[];for(let e=Math.ceil(t/n)*n;e<=l+n/2;e+=n)o.push(+e.toFixed(i));return o}function n(t){const l=t.width-8,e=11*Math.max(String(t.min).length,String(t.max).length)*.6+11;return Math.max(2,Math.min(8,Math.floor(l/e)+1))}const i=(t,l)=>{const e=t.width-8,s=t.max-t.min,n=s>0?4+(l-t.min)/s*e:t.width/2;return Math.round(10*Math.max(4,Math.min(t.width-4,n)))/10};function o(t){let l=`<svg class="lt-eb-grid-bg" width="${t.width}" height="100%" viewBox="0 0 ${t.width} 10" preserveAspectRatio="none">`;for(const e of t.ticks)l+=`<line x1="${i(t,e)}" y1="0" x2="${i(t,e)}" y2="10"/>`;return l+"</svg>"}function r(t,l){const e=t.width,s=t.axisLabel,n=s?32:18,o=l=>i(t,l);let r=`<svg class="lt-eb-axis" width="${e}" height="${n}" overflow="visible"><line x1="4" y1="1" x2="${e-4}" y2="1"/>`;for(const s of t.ticks||[]){const t=o(s);r+=`<line x1="${t}" y1="0" x2="${t}" y2="4"/><text x="${t}" y="15" text-anchor="${t<=4?"start":t>=e-4?"end":"middle"}">${l.esc(l.str(s))}</text>`}return s&&(r+=`<text class="lt-eb-axis-label" x="${e/2}" y="${n-4}" text-anchor="middle">${l.esc(s)}</text>`),r+"</svg>"}e.errorbar={resolve(t){const[l,e,i]=t.columns||[];if(!l)return{};const o={col:l,lo:e,hi:i,min:t.min,max:t.max,ref:t.ref,axis:t.axis,axisLabel:t.axis_label,width:t.width||160,height:t.height||16};return t.axis&&(o.ticks=s(o.min,o.max,n(o))),{[l]:o}},cellClass:t=>t.ticks?"lt-eb-cell":"",cell:(t,l,e,s)=>(t.ticks?o(t):"")+function(t,l,e,s){const n=t=>{const n=l[t]?.[e-1];return s.isNum(n)?n:null},o=n(t.col),r=n(t.lo),c=n(t.hi);if(null==o&&null==r&&null==c)return"";const a=t.height,h=a/2,u=l=>i(t,l),$=Math.min(4,(a-1)/2);let x=`<svg class="lt-eb" width="${t.width}" height="${a}">`;if(null!=t.ref&&(x+=`<line class="lt-eb-ref" x1="${u(t.ref)}" y1="0" x2="${u(t.ref)}" y2="${a}"/>`),null!=r&&null!=c){const t=u(r),l=u(c);x+=`<line x1="${t}" y1="${h}" x2="${l}" y2="${h}"/><line x1="${t}" y1="${h-$}" x2="${t}" y2="${h+$}"/><line x1="${l}" y1="${h-$}" x2="${l}" y2="${h+$}"/>`}null!=o&&(x+=`<circle cx="${u(o)}" cy="${h}" r="3"/>`);const m=null!=r&&null!=c?` (${s.str(r)}, ${s.str(c)})`:"";return x+=`<title>${s.esc((null!=o?s.str(o):"")+m)}</title></svg>`,x}(t,l,e,s),foot:(t,l)=>t.axis?r(t,l):""};const c=t=>Math.round(10*t)/10,a=t=>`"${t}"`;function h(t,l,e,s){const n=function(t,l,e,s){const n=l[t.cols[0]]?.[e-1];return(1===t.cols.length&&Array.isArray(n)?n:t.cols.map(t=>l[t]?.[e-1])).map(t=>s.isNum(t)?+t:null)}(t,l,e,s),i=n.filter(t=>null!=t);if(!i.length)return"";const o=t.width,r=t.height,h=n.length,u=null!=t.min?t.min:Math.min(...i),$=null!=t.max?t.max:Math.max(...i),x=t=>c($>u?r-2-(t-u)/($-u)*(r-4):r/2),m=t.color?` style="color:${s.esc(t.color)}"`:"";let d;if("bar"===t.kind){const t=(o-4)/h,l=c(Math.max(1,.8*t)),e=x(u<0&&$>0?0:u);d=n.map((s,n)=>{if(null==s)return"";const i=x(s),o=c(2+n*t+(t-l)/2);return`<rect class="lt-spark-bar" x=${a(o)} y=${a(Math.min(i,e))} width=${a(l)} height=${a(Math.max(1,Math.abs(e-i)))}/>`}).join("")}else{let t="",l=!1;n.forEach((e,s)=>{null!=e?(t+=`${l?"L":"M"}${(t=>c(h>1?2+t/(h-1)*(o-4):o/2))(s)} ${x(e)}`,l=!0):l=!1}),d=`<path class="lt-spark-line" d="${t}"/>`}return`<svg class="lt-spark" width="${o}" height="${r}"${m}>${d}<title>${s.esc(i.map(s.str).join(", "))}</title></svg>`}function u(t,l,e,s){const n=t.height,o=n/2;let r=`<svg class="lt-dot" width="${t.width}" height="${n}">`;const c=[];return t.cols.forEach((n,a)=>{const h=l[n]?.[e-1];if(!s.isNum(h))return;const u=t.colors?.[a],$=u?` fill="${s.esc(u)}"`:"";r+=`<circle${$} cx="${(l=>i(t,l))(h)}" cy="${o}" r="3"/>`,c.push((t.labels?.[a]?t.labels[a]+": ":"")+s.str(h))}),r+`<title>${s.esc(c.join("\n"))}</title></svg>`}e.sparkline={resolve(t){const l=t.columns||[],e=l[0];return e?{[e]:{col:e,cols:l,kind:t.kind,min:t.min,max:t.max,color:t.color,width:t.width||120,height:t.height||20}}:{}},cell:(t,l,e,s)=>h(t,l,e,s)},e.dotplot={resolve(t){const l=t.columns||[],e=l[0];if(!e)return{};const i={col:e,cols:l,colors:t.colors,labels:t.labels,min:t.min,max:t.max,axisLabel:t.axis_label,width:t.width||160,height:t.height||16};return t.axis&&(i.ticks=s(i.min,i.max,n(i))),{[e]:i}},cellClass:t=>t.ticks?"lt-eb-cell":"",cell:(t,l,e,s)=>(t.ticks?o(t):"")+u(t,l,e,s),foot:(t,l)=>(t.ticks?r(t,l):"")+function(t,l){return t.colors?`<div class="lt-dot-legend">${t.cols.map((e,s)=>`<span><i style="background:${l.esc(t.colors[s])}"></i>${l.esc(t.labels?.[s]??e)}</span>`).join("")}</div>`:""}(t,l)};const $=t.document;if($)for(const t of $.querySelectorAll(".lt-table"))(t._ltSpec?.ops||[]).some(t=>e[t.type])&&l.refresh?.(t)})(window);
|
|
2
2
|
//# sourceMappingURL=lt-plot.min.js.map
|
package/js/lt-plot.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["root","LT","cells","errorbar","
|
|
1
|
+
{"version":3,"names":["root","LT","cells","errorbar","niceTicks","lo","hi","n","niceNum","x","round","e","Math","floor","log10","f","d","dec","max","ticks","v","ceil","push","toFixed","nAxisTicks","eb","inner","width","per","String","min","length","ebX","span","p","svgGrid","s","t","svgAxis","u","W","lbl","axisLabel","H","xt","esc","str","resolve","op","columns","col","ref","axis","axis_label","height","cellClass","cell","data","r","num","k","isNum","est","y","cap","xl","xh","ci","svgErrorbar","foot","round1","q","svgSparkline","sp","vals","cols","Array","isArray","map","c","spSeries","fin","filter","yAt","style","color","body","kind","slot","bw","base","i","yv","abs","join","pen","forEach","xAt","svgDotplot","dp","titles","colors","fl","labels","sparkline","dotplot","dotLegend","doc","document","tbl","querySelectorAll","_ltSpec","ops","some","o","type","refresh","window"],"sources":["lt-plot.js"],"mappings":"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","ignoreList":[]}
|