evui 3.16.0 → 3.17.1

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/dist/index.js CHANGED
@@ -12366,9 +12366,8 @@ const st = /* @__PURE__ */ oC(lC), aC = {
12366
12366
  * realTimeScatter 의 기본 동작이다(별도 옵션 없이 항상 동작). 가시 범위 밖으로 완전히 밀려나고
12367
12367
  * 신규 점도 끊긴 series 가 누적 저장소·범례에 무한정 남지 않도록 자동 정리한다.
12368
12368
  * 제거 조건(AND)을 만족하면 즉시 제거한다(grace 없음):
12369
- * - (a) 가시 윈도우 `[globalToTime - range, globalToTime]` 안에 점이 하나도 없음.
12370
- * ring 버퍼는 윈도우 밖 점을 비우고 점은 항상 `<= toTime` 에 존재하므로,
12371
- * `ds.toTime < windowStart` 가 (a)와 정확히 등가다(series 별 최신 누적 x 로 O(1) short-circuit).
12369
+ * - (a) 렌더되는 가시 윈도우 안에 점이 하나도 없음. 좌단은 렌더 좌단(series minMax.minX)과
12370
+ * 같은 값을 써야 등가다 — 아래 `visibleStart` 주석 참고.
12372
12371
  * - (b) 이번 수신 틱에 그 series 의 신규 점이 없음(`!datas[sId]?.length`).
12373
12372
  * 이번 틱에 점을 보낸 series 는 (오래된 점이라도) 활성으로 보고 보존한다.
12374
12373
  * "series 키 부재"로는 판정하지 않는다 — 죽은 키가 data.series/data.data 에 남아 있을 수 있어서다.
@@ -12386,7 +12385,7 @@ const st = /* @__PURE__ */ oC(lC), aC = {
12386
12385
  const f = e[n[u]].toTime || 0;
12387
12386
  f > i && (i = f);
12388
12387
  }
12389
- const s = ((r = this.options.realTimeScatter) == null ? void 0 : r.range) || 300, o = i - s * 1e3, l = [];
12388
+ const s = ((r = this.options.realTimeScatter) == null ? void 0 : r.range) || 300, o = i - (s - 1) * 1e3, l = [];
12390
12389
  for (let u = 0; u < n.length; u++) {
12391
12390
  const f = n[u], m = e[f].toTime < o, b = !((c = t[f]) != null && c.length);
12392
12391
  m && b && l.push(f);
@@ -13262,6 +13261,8 @@ const st = /* @__PURE__ */ oC(lC), aC = {
13262
13261
  // 'outside'(plot 밖 우측 여백) | 'innerStart'(plot 안 좌측) | 'innerEnd'(plot 안 우측)
13263
13262
  showValue: !1,
13264
13263
  // true → "text value" 합성 (value = 축 formatter)
13264
+ valueFormatter: null,
13265
+ // showValue=true 일 때 값 포맷 override. (value) => string. null 이면 축 formatter 사용
13265
13266
  responsive: {
13266
13267
  valueOnlyBelow: null,
13267
13268
  // plot 너비 < 이 값 → value만
@@ -15774,7 +15775,14 @@ class Zi {
15774
15775
  * @returns {object}
15775
15776
  */
15776
15777
  getNormalizedLabelOptions(e, n, i = null) {
15777
- const s = ot({}, n, nd), o = this.ctx, { maxWidth: l, responsive: a } = s, r = s.fontSize > 20 ? 20 : s.fontSize, c = e.chartWidth, d = a == null ? void 0 : a.valueOnlyBelow, h = a == null ? void 0 : a.hideBelow, u = !z.isNullOrUndefined(h) && c < h, f = !u && !z.isNullOrUndefined(d) && c < d, p = s.text != null ? String(s.text) : "", m = !z.isNullOrUndefined(i) && Number.isFinite(+i), b = s.showValue && m ? String(this.getLabelFormat(i)) : "";
15778
+ const s = ot({}, n, nd), o = this.ctx, { maxWidth: l, responsive: a } = s, r = s.fontSize > 20 ? 20 : s.fontSize, c = e.chartWidth, d = a == null ? void 0 : a.valueOnlyBelow, h = a == null ? void 0 : a.hideBelow, u = !z.isNullOrUndefined(h) && c < h, f = !u && !z.isNullOrUndefined(d) && c < d, p = s.text != null ? String(s.text) : "", m = !z.isNullOrUndefined(i) && Number.isFinite(+i);
15779
+ let b = "";
15780
+ if (s.showValue && m)
15781
+ if (typeof s.valueFormatter == "function") {
15782
+ const I = s.valueFormatter(i);
15783
+ b = I == null ? String(this.getLabelFormat(i)) : String(I);
15784
+ } else
15785
+ b = String(this.getLabelFormat(i));
15778
15786
  let v;
15779
15787
  s.showValue ? v = f ? b : [p, b].filter((I) => I).join(" ") : v = p, o.save(), o.font = z.getLabelStyle({ ...s, fontSize: r });
15780
15788
  let g = v, S = l ?? o.measureText(g).width;
@@ -27166,7 +27174,7 @@ const Ws = /* @__PURE__ */ Ie(tI, [["render", lI]]);
27166
27174
  Ws.install = (t) => {
27167
27175
  t.component(Ws.name, Ws);
27168
27176
  };
27169
- const aI = "3.15.0", rI = [
27177
+ const aI = "3.17.0", rI = [
27170
27178
  ss,
27171
27179
  os,
27172
27180
  pi,