@hybridcore/ui 1.6.6 → 1.6.8

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.
@@ -1,20 +1,20 @@
1
- const s = "—", o = (n) => new Intl.NumberFormat(
1
+ const s = "—", l = (n) => new Intl.NumberFormat(
2
2
  "en-US",
3
3
  n === void 0 ? { maximumFractionDigits: 2 } : { minimumFractionDigits: n, maximumFractionDigits: n }
4
- ), l = (n, e, i = s) => {
5
- if (n == null || n === "") return i;
6
- const t = Number(n);
7
- if (Number.isNaN(t)) return String(n);
8
- const r = o(e == null ? void 0 : e.decimals).format(t);
4
+ ), a = (n, e, c = s) => {
5
+ if (n == null || n === "") return c;
6
+ const i = Number(n);
7
+ if (Number.isNaN(i)) return String(n);
8
+ const r = l(e == null ? void 0 : e.decimals).format(i);
9
9
  return `${(e == null ? void 0 : e.prefix) ?? ""}${r}${(e == null ? void 0 : e.suffix) ?? ""}`;
10
- }, d = (n) => {
10
+ }, b = (n) => {
11
11
  if (!n) return;
12
- const { prefix: e, suffix: i, decimals: t } = n;
13
- if (e === void 0 && i === void 0 && t === void 0)
12
+ const { prefix: e, suffix: c, decimals: i } = n;
13
+ if (e === void 0 && c === void 0 && i === void 0)
14
14
  return;
15
- const r = t === void 0 ? "#,###.##" : t <= 0 ? "#,##0" : `#,##0.${"0".repeat(t)}`, c = (u) => u ? `'${u.replace(/'/g, "")}'` : "";
16
- return `${c(e)}${r}${c(i)}`;
17
- }, v = (n) => n && n.replace(/[_-]+/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/\s+/g, " ").trim().replace(/\b\w/g, (e) => e.toUpperCase()), a = (n, e) => {
15
+ const r = i === void 0 ? "#,###.##" : i <= 0 ? "#,##0" : `#,##0.${"0".repeat(i)}`, u = (o) => o ? `'${o.replace(/'/g, "")}'` : "";
16
+ return `${u(e)}${r}${u(c)}`;
17
+ }, g = (n) => n && n.replace(/[_-]+/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/\s+/g, " ").trim().replace(/\b\w/g, (e) => e.toUpperCase()), d = (n, e) => {
18
18
  switch (e.op) {
19
19
  case "lt":
20
20
  return n < e.value;
@@ -33,17 +33,23 @@ const s = "—", o = (n) => new Intl.NumberFormat(
33
33
  default:
34
34
  return !1;
35
35
  }
36
- }, b = (n, e) => {
37
- const i = e == null ? void 0 : e.conditionalRules;
38
- if (!(i != null && i.length)) return {};
39
- const t = Number(n);
40
- if (Number.isNaN(t)) return {};
41
- const r = i.find((c) => a(t, c));
42
- return r ? { color: r.color, backgroundColor: r.backgroundColor } : {};
36
+ }, t = (n) => n || void 0, v = (n, e) => {
37
+ const c = {
38
+ color: t(e == null ? void 0 : e.color),
39
+ backgroundColor: t(e == null ? void 0 : e.backgroundColor)
40
+ }, i = e == null ? void 0 : e.conditionalRules;
41
+ if (!(i != null && i.length)) return c;
42
+ const r = Number(n);
43
+ if (Number.isNaN(r)) return c;
44
+ const u = i.find((o) => d(r, o));
45
+ return u ? {
46
+ color: t(u.color) ?? c.color,
47
+ backgroundColor: t(u.backgroundColor) ?? c.backgroundColor
48
+ } : c;
43
49
  };
44
50
  export {
45
- d as buildAmNumberFormat,
46
- l as formatValue,
47
- v as humanizeLabel,
48
- b as resolveConditionalStyle
51
+ b as buildAmNumberFormat,
52
+ a as formatValue,
53
+ g as humanizeLabel,
54
+ v as resolveConditionalStyle
49
55
  };
@@ -1,27 +1,52 @@
1
- import { camelCase as d, uniqBy as f } from "lodash";
2
- const D = (i) => {
3
- const t = /* @__PURE__ */ new Map(), s = [], r = [];
4
- return i.forEach((a, n) => {
5
- const m = a.label, o = (a.propertyId ?? d(a.label)) + n, c = [{ type: "date", value: "t" }];
6
- s.push({
7
- dataFieldName: o,
8
- fieldName: o,
9
- name: m,
1
+ import { camelCase as d, uniqBy as y } from "lodash";
2
+ const u = 864e5, M = [
3
+ { maxMs: 1.5 * 1e3, unit: "second" },
4
+ { maxMs: 1.5 * 6e4, unit: "minute" },
5
+ { maxMs: 1.5 * 36e5, unit: "hour" },
6
+ { maxMs: 1.5 * u, unit: "day" },
7
+ { maxMs: 10.5 * u, unit: "week" },
8
+ { maxMs: 45 * u, unit: "month" }
9
+ ], h = (s) => {
10
+ const a = [...s].filter((e) => typeof e == "number" && !Number.isNaN(e)).sort((e, t) => e - t);
11
+ let n = 1 / 0;
12
+ for (let e = 1; e < a.length; e++) {
13
+ const t = a[e] - a[e - 1];
14
+ t > 0 && t < n && (n = t);
15
+ }
16
+ if (!Number.isFinite(n)) return;
17
+ const o = M.find((e) => n <= e.maxMs);
18
+ return { timeUnit: o ? o.unit : "year", count: 1 };
19
+ }, v = (s) => {
20
+ const a = /* @__PURE__ */ new Map(), n = [], o = [];
21
+ s.forEach((t, r) => {
22
+ const l = t.label, m = (t.propertyId ?? d(t.label)) + r, p = [{ type: "date", value: "t" }];
23
+ n.push({
24
+ dataFieldName: m,
25
+ fieldName: m,
26
+ name: l,
10
27
  operator: "count"
11
- }), r.push(...c), a.type === "TIMESERIES" && Array.isArray(a.points) && a.points.forEach((l) => {
12
- const e = l.t;
13
- t.has(e) || t.set(e, { t: e });
14
- const p = t.get(e);
15
- p[o] = l.v;
28
+ }), o.push(...p), t.type === "TIMESERIES" && Array.isArray(t.points) && t.points.forEach((c) => {
29
+ const i = c.t;
30
+ a.has(i) || a.set(i, { t: i });
31
+ const f = a.get(i);
32
+ f[m] = c.v;
16
33
  });
17
- }), {
18
- data: Array.from(t.values()).sort(
19
- (a, n) => new Date(a.t).getTime() - new Date(n.t).getTime()
20
- ),
21
- values: s,
22
- dimensions: f(r, "value")
34
+ });
35
+ const e = Array.from(a.values()).sort(
36
+ (t, r) => new Date(t.t).getTime() - new Date(r.t).getTime()
37
+ );
38
+ return {
39
+ data: e,
40
+ values: n,
41
+ dimensions: y(o, "value"),
42
+ // SQL-query series carry no grain metadata, so infer it from the points'
43
+ // spacing — otherwise the axis falls back to a daily grain for monthly data.
44
+ baseInterval: h(
45
+ e.map((t) => new Date(t.t).getTime())
46
+ )
23
47
  };
24
48
  };
25
49
  export {
26
- D as adaptTemporalData
50
+ v as adaptTemporalData,
51
+ h as inferBaseInterval
27
52
  };
@@ -1,49 +1,66 @@
1
- import { useThemeProps as v } from "@mui/material";
2
- import { useMemo as P } from "react";
3
- import { adaptTemporalData as C } from "./helpers.js";
4
- const M = (l) => {
5
- const n = v({ props: l, name: "HCChartWrapper" }), {
6
- title: m,
7
- description: d,
8
- type: c,
9
- interval: i,
10
- data: a = [],
1
+ import { useThemeProps as P } from "@mui/material";
2
+ import { useMemo as U } from "react";
3
+ import { inferBaseInterval as w, adaptTemporalData as C } from "./helpers.js";
4
+ const m = {
5
+ "1M": "month",
6
+ "1W": "week",
7
+ "1D": "day",
8
+ "1Y": "year"
9
+ }, k = (c) => {
10
+ const p = P({ props: c, name: "HCChartWrapper" }), {
11
+ title: d,
12
+ description: f,
13
+ type: u,
14
+ interval: t,
15
+ data: r = [],
11
16
  dimensions: s = [],
12
- values: p = [],
13
- series: r = [],
14
- loading: f = !1,
15
- sx: u,
16
- ...h
17
- } = n, y = {
18
- ...P(() => {
19
- let t = { data: a, dimensions: s, values: p };
17
+ values: l = [],
18
+ series: a = [],
19
+ loading: h = !1,
20
+ sx: v,
21
+ ...T
22
+ } = p, g = {
23
+ ...U(() => {
24
+ let e = { data: r, dimensions: s, values: l };
20
25
  if (s.length > 0) {
21
- const o = s.find((e) => e.type === "date");
22
- if (o) {
23
- let e = o.value.split("/")[1] || i || "day";
24
- e === "1M" ? e = "month" : e === "1W" ? e = "week" : e === "1D" ? e = "day" : e === "1Y" && (e = "year"), t = {
25
- ...t,
26
- baseInterval: { timeUnit: e, count: 1 }
27
- };
26
+ const n = s.find((o) => o.type === "date");
27
+ if (n) {
28
+ const o = n.value.split("/")[1] || t;
29
+ let i;
30
+ if (o)
31
+ i = {
32
+ timeUnit: m[o] ?? o,
33
+ count: 1
34
+ };
35
+ else {
36
+ const I = n.value;
37
+ i = w(
38
+ r.map((D) => new Date(D[I]).getTime())
39
+ ) ?? { timeUnit: "day", count: 1 };
40
+ }
41
+ e = { ...e, baseInterval: i };
28
42
  }
29
- } else if (r.length > 0) {
30
- const o = C(r);
31
- t = { ...t, ...o };
43
+ } else if (a.length > 0) {
44
+ const n = C(a);
45
+ e = { ...e, ...n }, t && (e.baseInterval = {
46
+ timeUnit: m[t] ?? t,
47
+ count: 1
48
+ });
32
49
  }
33
- return t;
34
- }, [i, a, s, p, r]),
35
- ...h
36
- }, g = { ...n };
50
+ return e;
51
+ }, [t, r, s, l, a]),
52
+ ...T
53
+ }, y = { ...p };
37
54
  return {
38
- title: m,
39
- description: d,
40
- type: c,
41
- chartProps: y,
42
- loading: f,
43
- ownerState: g,
44
- sx: u
55
+ title: d,
56
+ description: f,
57
+ type: u,
58
+ chartProps: g,
59
+ loading: h,
60
+ ownerState: y,
61
+ sx: v
45
62
  };
46
63
  };
47
64
  export {
48
- M as useChartWrapperLogic
65
+ k as useChartWrapperLogic
49
66
  };
@@ -1,45 +1,46 @@
1
1
  import { R as B, A as I, T as d } from "../../../AnimatedTheme-jnasw6rT.js";
2
- import { useThemeProps as M, useTheme as z } from "@mui/material";
2
+ import { useThemeProps as M, useTheme as P } from "@mui/material";
3
3
  import X from "lodash";
4
- import { useId as P, useRef as V, useEffect as E } from "react";
5
- import { colorSetFromPalette as N, applyValueFormat as W } from "../_common/utils.js";
6
- import { c as i, p as q, a as k } from "../../../ColorSet-C7vpNXhM.js";
7
- import { X as H, V as U } from "../../../AxisRenderer-DTyLLA6c.js";
8
- import { S as _ } from "../../../Scrollbar-D86MJyr2.js";
9
- import { D as $ } from "../../../DateAxis-YX3QNIB-.js";
10
- import { A as C, a as j } from "../../../AxisRendererY-C_ItLPNV.js";
11
- import { C as G } from "../../../CategoryAxis-CwnfaGc8.js";
12
- import { C as J } from "../../../ColumnSeries-CjgdJ2QL.js";
13
- import { D as b } from "../../../DataProcessor-CHDO51q4.js";
14
- import { L as K } from "../../../LineSeries-Uiv5o56b.js";
15
- import { B as Q } from "../../../Bullet-DVczI2TD.js";
16
- import { C as Z } from "../../../Circle-Cy5s-pVc.js";
17
- import { X as ee } from "../../../XYCursor-C8WktvKM.js";
18
- import { L as te } from "../../../Legend-Dp_MKfS4.js";
19
- const Fe = (L) => {
20
- const h = M({ props: L, name: "HCColumnLineMix" }), {
4
+ import { useId as V, useRef as E, useEffect as N } from "react";
5
+ import { humanizeLabel as k } from "../_common/format.js";
6
+ import { colorSetFromPalette as W, applyValueFormat as q } from "../_common/utils.js";
7
+ import { c as l, p as H, a as C } from "../../../ColorSet-C7vpNXhM.js";
8
+ import { X as U, V as _ } from "../../../AxisRenderer-DTyLLA6c.js";
9
+ import { S as $ } from "../../../Scrollbar-D86MJyr2.js";
10
+ import { D as j } from "../../../DateAxis-YX3QNIB-.js";
11
+ import { A as b, a as G } from "../../../AxisRendererY-C_ItLPNV.js";
12
+ import { C as J } from "../../../CategoryAxis-CwnfaGc8.js";
13
+ import { C as K } from "../../../ColumnSeries-CjgdJ2QL.js";
14
+ import { D as L } from "../../../DataProcessor-CHDO51q4.js";
15
+ import { L as Q } from "../../../LineSeries-Uiv5o56b.js";
16
+ import { B as Z } from "../../../Bullet-DVczI2TD.js";
17
+ import { C as ee } from "../../../Circle-Cy5s-pVc.js";
18
+ import { X as te } from "../../../XYCursor-C8WktvKM.js";
19
+ import { L as re } from "../../../Legend-Dp_MKfS4.js";
20
+ const ke = (T) => {
21
+ const h = M({ props: T, name: "HCColumnLineMix" }), {
21
22
  dimensions: t,
22
- values: l,
23
- data: m,
24
- initDelay: T = 0,
25
- baseInterval: Y,
23
+ values: n,
24
+ data: p,
25
+ initDelay: Y = 0,
26
+ baseInterval: D,
26
27
  colors: g,
27
- sx: D,
28
- ...S
29
- } = h, a = z(), x = `hc-column-line-mix-${P().replace(/:/g, "")}`, c = V(null), w = t.length < 1 ? "ColumnLineMix requires at least 1 dimension" : null;
30
- E(() => {
28
+ sx: S,
29
+ ...O
30
+ } = h, a = P(), x = `hc-column-line-mix-${V().replace(/:/g, "")}`, c = E(null), w = t.length < 1 ? "ColumnLineMix requires at least 1 dimension" : null;
31
+ N(() => {
31
32
  if (w) return;
32
33
  let u;
33
34
  return u = setTimeout(() => {
34
35
  var y, A, v, F;
35
36
  const e = B.new(x);
36
37
  c.current = e, e.setThemes([I.new(e)]), e.interfaceColors.setAll({
37
- text: i(a.palette.text.primary),
38
- grid: i(a.palette.divider),
39
- stroke: i(a.palette.divider)
38
+ text: l(a.palette.text.primary),
39
+ grid: l(a.palette.divider),
40
+ stroke: l(a.palette.divider)
40
41
  });
41
42
  const r = e.container.children.push(
42
- H.new(e, {
43
+ U.new(e, {
43
44
  panX: !1,
44
45
  panY: !1,
45
46
  wheelX: "none",
@@ -48,53 +49,53 @@ const Fe = (L) => {
48
49
  layout: e.verticalLayout
49
50
  })
50
51
  );
51
- r.set("colors", N(e, g)), r.get("colors", {}).set("step", 3), r.set(
52
+ r.set("colors", W(e, g)), r.get("colors", {}).set("step", 3), r.set(
52
53
  "scrollbarX",
53
- _.new(e, { orientation: "horizontal" })
54
+ $.new(e, { orientation: "horizontal" })
54
55
  );
55
- let s, n = m;
56
- t[0].type === "date" ? (n = X.orderBy(m, [t[0].value]), s = r.xAxes.push(
57
- $.new(e, {
56
+ let s, m = p;
57
+ t[0].type === "date" ? (m = X.orderBy(p, [t[0].value]), s = r.xAxes.push(
58
+ j.new(e, {
58
59
  maxDeviation: 0.1,
59
60
  groupData: !1,
60
- baseInterval: Y || { timeUnit: "day", count: 1 },
61
- renderer: C.new(e, {}),
61
+ baseInterval: D || { timeUnit: "day", count: 1 },
62
+ renderer: b.new(e, {}),
62
63
  tooltip: d.new(e, {})
63
64
  })
64
65
  ), (y = s.get("renderer")) == null || y.grid.template.setAll({
65
- stroke: i(a.palette.divider),
66
+ stroke: l(a.palette.divider),
66
67
  strokeOpacity: 1
67
68
  })) : (s = r.xAxes.push(
68
- G.new(e, {
69
+ J.new(e, {
69
70
  categoryField: t[0].value,
70
- renderer: C.new(e, {}),
71
+ renderer: b.new(e, {}),
71
72
  tooltip: d.new(e, {})
72
73
  })
73
74
  ), (A = s.get("renderer")) == null || A.grid.template.setAll({
74
- stroke: i(a.palette.divider),
75
+ stroke: l(a.palette.divider),
75
76
  strokeOpacity: 1
76
77
  }), e.numberFormatter.setAll({
77
78
  numberFormat: "#",
78
79
  numericFields: ["valueX"]
79
- }), n = X.orderBy(m, [t[0].value]), s.data.setAll(n));
80
+ }), m = X.orderBy(p, [t[0].value]), s.data.setAll(m));
80
81
  const f = r.yAxes.push(
81
- U.new(e, {
82
+ _.new(e, {
82
83
  min: 0,
83
84
  extraMax: 0.1,
84
- renderer: j.new(e, { strokeOpacity: 0.1 })
85
+ renderer: G.new(e, { strokeOpacity: 0.1 })
85
86
  })
86
87
  );
87
88
  (v = f.get("renderer")) == null || v.grid.template.setAll({
88
- stroke: i(a.palette.divider),
89
+ stroke: l(a.palette.divider),
89
90
  strokeOpacity: 1
90
- }), l.forEach((p, R) => {
91
- if (R === 0) {
91
+ }), n.forEach((i, z) => {
92
+ if (z === 0) {
92
93
  const o = r.series.push(
93
- J.new(e, {
94
- name: p.name,
94
+ K.new(e, {
95
+ name: i.label ?? k(i.name),
95
96
  xAxis: s,
96
97
  yAxis: f,
97
- valueYField: p.dataFieldName,
98
+ valueYField: i.dataFieldName,
98
99
  ...t[0].type === "date" ? { valueXField: t[0].value } : { categoryXField: t[0].value },
99
100
  tooltip: d.new(e, {
100
101
  pointerOrientation: "horizontal",
@@ -103,19 +104,19 @@ const Fe = (L) => {
103
104
  })
104
105
  );
105
106
  o.columns.template.setAll({
106
- tooltipY: q(10),
107
+ tooltipY: H(10),
107
108
  templateField: "columnSettings"
108
- }), t[0].type === "date" && (o.data.processor = b.new(e, {
109
+ }), t[0].type === "date" && (o.data.processor = L.new(e, {
109
110
  dateFormat: "i",
110
111
  dateFields: [t[0].value]
111
- })), o.data.setAll(n), o.appear();
112
+ })), o.data.setAll(m), o.appear();
112
113
  } else {
113
114
  const o = r.series.push(
114
- K.new(e, {
115
- name: p.name,
115
+ Q.new(e, {
116
+ name: i.label ?? k(i.name),
116
117
  xAxis: s,
117
118
  yAxis: f,
118
- valueYField: p.dataFieldName,
119
+ valueYField: i.dataFieldName,
119
120
  ...t[0].type === "date" ? { valueXField: t[0].value } : { categoryXField: t[0].value },
120
121
  tooltip: d.new(e, {
121
122
  pointerOrientation: "horizontal",
@@ -126,12 +127,12 @@ const Fe = (L) => {
126
127
  o.strokes.template.setAll({
127
128
  strokeWidth: 3,
128
129
  templateField: "strokeSettings"
129
- }), t[0].type === "date" && (o.data.processor = b.new(e, {
130
+ }), t[0].type === "date" && (o.data.processor = L.new(e, {
130
131
  dateFormat: "i",
131
132
  dateFields: [t[0].value]
132
- })), o.data.setAll(n), o.bullets.push(function() {
133
- return Q.new(e, {
134
- sprite: Z.new(e, {
133
+ })), o.data.setAll(m), o.bullets.push(function() {
134
+ return Z.new(e, {
135
+ sprite: ee.new(e, {
135
136
  strokeWidth: 3,
136
137
  stroke: o.get("stroke"),
137
138
  radius: 5,
@@ -140,20 +141,20 @@ const Fe = (L) => {
140
141
  });
141
142
  });
142
143
  }
143
- }), r.set("cursor", ee.new(e, {})), r.children.push(
144
- te.new(e, {
145
- centerX: k,
146
- x: k
144
+ }), r.set("cursor", te.new(e, {})), r.children.push(
145
+ re.new(e, {
146
+ centerX: C,
147
+ x: C
147
148
  })
148
- ).data.setAll(r.series.values), W(e, (F = l == null ? void 0 : l[0]) == null ? void 0 : F.format), r.appear(1e3, 100);
149
- }, T), () => {
149
+ ).data.setAll(r.series.values), q(e, (F = n == null ? void 0 : n[0]) == null ? void 0 : F.format), r.appear(1e3, 100);
150
+ }, Y), () => {
150
151
  var e;
151
152
  u && clearTimeout(u), (e = c.current) == null || e.dispose(), c.current = null;
152
153
  };
153
- }, [m, t, l, a.palette.mode, g]);
154
- const O = { ...h };
155
- return { chartId: x, ownerState: O, sx: D, error: w, other: S };
154
+ }, [p, t, n, a.palette.mode, g]);
155
+ const R = { ...h };
156
+ return { chartId: x, ownerState: R, sx: S, error: w, other: O };
156
157
  };
157
158
  export {
158
- Fe as useColumnLineMixLogic
159
+ ke as useColumnLineMixLogic
159
160
  };