@hybridcore/ui 1.6.20 → 1.6.22

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,25 +1,25 @@
1
- import { styled as i, alpha as g, Stack as C, Typography as c } from "@mui/material";
2
- import { Widget as u } from "../widget/styled.js";
3
- import { variantColor as l, resolvePaletteColor as d, trendColor as f } from "./helpers.js";
1
+ import { styled as t, alpha as g, Stack as C, Typography as l } from "@mui/material";
2
+ import { Widget as f } from "../widget/styled.js";
3
+ import { variantColor as s, resolvePaletteColor as d, trendColor as u } from "./helpers.js";
4
4
  const e = {
5
5
  shouldForwardProp: (o) => o !== "ownerState"
6
- }, v = i(u.Root, {
6
+ }, M = t(f.Root, {
7
7
  name: "HCMetricCard",
8
8
  slot: "Root",
9
9
  ...e
10
- })(({ theme: o, ownerState: n }) => {
11
- const a = l(o, n.variant), r = n.layout === "panel";
12
- let t;
13
- return a ? t = g(a, 0.05) : r && (t = o.palette.background.default), {
10
+ })(({ theme: o, ownerState: i }) => {
11
+ const n = s(o, i.variant), a = i.layout === "panel";
12
+ let r;
13
+ return n ? r = g(n, 0.05) : a && (r = o.palette.background.default), {
14
14
  position: "relative",
15
15
  overflow: "hidden",
16
16
  padding: o.spacing(1.5, 2),
17
- ...t && { backgroundColor: t },
17
+ ...r && { backgroundColor: r },
18
18
  [o.breakpoints.down("md")]: {
19
19
  padding: o.spacing(1.5)
20
20
  }
21
21
  };
22
- }), y = i(C, {
22
+ }), w = t(C, {
23
23
  name: "HCMetricCard",
24
24
  slot: "Content"
25
25
  })(() => ({
@@ -27,64 +27,79 @@ const e = {
27
27
  width: "100%",
28
28
  minWidth: 0,
29
29
  zIndex: 1
30
- })), k = i(c, {
30
+ })), m = t(l, {
31
31
  name: "HCMetricCard",
32
32
  slot: "Label"
33
33
  })(({ theme: o }) => ({
34
34
  color: o.palette.text.secondary,
35
35
  marginBottom: o.spacing(0.5),
36
- fontWeight: 500
37
- })), m = i(c, {
36
+ fontWeight: 500,
37
+ // Widgets live in a resizable grid with no character limit — clip to one line
38
+ // so a long label never wraps into a messy multi-row block. Full text on hover.
39
+ whiteSpace: "nowrap",
40
+ overflow: "hidden",
41
+ textOverflow: "ellipsis",
42
+ maxWidth: "100%",
43
+ minWidth: 0
44
+ })), y = t(l, {
38
45
  name: "HCMetricCard",
39
46
  slot: "Value",
40
47
  ...e
41
- })(({ theme: o, ownerState: n }) => {
42
- const a = d(o, n.calculatedValueColor), r = d(o, n.calculatedValueBg);
48
+ })(({ theme: o, ownerState: i }) => {
49
+ const n = d(o, i.calculatedValueColor), a = d(o, i.calculatedValueBg);
43
50
  return {
44
- color: a ?? l(o, n.variant) ?? o.palette.text.primary,
51
+ color: n ?? s(o, i.variant) ?? o.palette.text.primary,
45
52
  fontWeight: 500,
46
53
  marginBottom: o.spacing(0.5),
47
54
  whiteSpace: "nowrap",
48
- ...r && {
49
- backgroundColor: r,
55
+ overflow: "hidden",
56
+ textOverflow: "ellipsis",
57
+ maxWidth: "100%",
58
+ minWidth: 0,
59
+ ...a && {
60
+ backgroundColor: a,
50
61
  borderRadius: o.shape.borderRadius,
51
62
  padding: o.spacing(0, 0.75)
52
63
  },
53
64
  [o.breakpoints.down("md")]: { fontSize: "1.35rem" },
54
65
  [o.breakpoints.up("md")]: { fontSize: "2rem" }
55
66
  };
56
- }), S = i(c, {
67
+ }), W = t(l, {
57
68
  name: "HCMetricCard",
58
69
  slot: "SecondValue",
59
70
  ...e
60
- })(({ theme: o, ownerState: n }) => {
61
- const a = d(o, n.calculatedSecondValueColor), r = d(o, n.calculatedSecondValueBg);
71
+ })(({ theme: o, ownerState: i }) => {
72
+ const n = d(o, i.calculatedSecondValueColor), a = d(o, i.calculatedSecondValueBg);
62
73
  return {
63
- color: a ?? o.palette.text.secondary,
74
+ color: n ?? o.palette.text.secondary,
64
75
  fontWeight: 400,
65
76
  whiteSpace: "nowrap",
66
- ...r && {
67
- backgroundColor: r,
77
+ overflow: "hidden",
78
+ textOverflow: "ellipsis",
79
+ maxWidth: "100%",
80
+ minWidth: 0,
81
+ ...a && {
82
+ backgroundColor: a,
68
83
  borderRadius: o.shape.borderRadius,
69
84
  padding: o.spacing(0, 0.75)
70
85
  },
71
86
  [o.breakpoints.down("md")]: { fontSize: "0.95rem" },
72
87
  [o.breakpoints.up("md")]: { fontSize: "1.25rem" }
73
88
  };
74
- }), H = i("div", {
89
+ }), S = t("div", {
75
90
  name: "HCMetricCard",
76
91
  slot: "TrendContainer",
77
92
  ...e
78
- })(({ theme: o, ownerState: n }) => {
79
- const a = f(o, n.calculatedTrend), r = n.layout === "panel";
93
+ })(({ theme: o, ownerState: i }) => {
94
+ const n = u(o, i.calculatedTrend), a = i.layout === "panel";
80
95
  return {
81
96
  display: "inline-flex",
82
97
  alignItems: "center",
83
98
  gap: o.spacing(0.5),
84
99
  fontWeight: 500,
85
- color: a,
86
- ...r ? {
87
- backgroundColor: g(a, 0.14),
100
+ color: n,
101
+ ...a ? {
102
+ backgroundColor: g(n, 0.14),
88
103
  borderRadius: 999,
89
104
  padding: o.spacing(0.25, 1),
90
105
  fontSize: "0.8125rem",
@@ -97,45 +112,49 @@ const e = {
97
112
  }
98
113
  }
99
114
  };
100
- }), I = i(c, {
115
+ }), h = t(l, {
101
116
  name: "HCMetricCard",
102
117
  slot: "Description"
103
118
  })(({ theme: o }) => ({
104
119
  color: o.palette.text.secondary,
105
- display: "block",
106
120
  position: "relative",
107
- zIndex: 1
108
- })), R = i("div", {
121
+ zIndex: 1,
122
+ whiteSpace: "nowrap",
123
+ overflow: "hidden",
124
+ textOverflow: "ellipsis",
125
+ maxWidth: "100%",
126
+ minWidth: 0
127
+ })), k = t("div", {
109
128
  name: "HCMetricCard",
110
129
  slot: "Icon",
111
130
  ...e
112
- })(({ theme: o, ownerState: n }) => ({
131
+ })(({ theme: o, ownerState: i }) => ({
113
132
  display: "flex",
114
133
  alignItems: "center",
115
134
  justifyContent: "center",
116
- color: l(o, n.variant) ?? o.palette.text.secondary,
117
- marginRight: n.iconPosition === "left" ? o.spacing(2) : 0,
118
- marginLeft: n.iconPosition === "right" ? o.spacing(2) : 0,
135
+ color: s(o, i.variant) ?? o.palette.text.secondary,
136
+ marginRight: i.iconPosition === "left" ? o.spacing(2) : 0,
137
+ marginLeft: i.iconPosition === "right" ? o.spacing(2) : 0,
119
138
  [o.breakpoints.down("sm")]: {
120
139
  position: "absolute",
121
140
  top: o.spacing(2),
122
141
  left: o.spacing(2),
123
142
  margin: 0
124
143
  }
125
- })), w = i("div", {
144
+ })), H = t("div", {
126
145
  name: "HCMetricCard",
127
146
  slot: "CornerIcon",
128
147
  ...e
129
- })(({ theme: o, ownerState: n }) => {
130
- var s, p;
131
- const a = {}, r = (s = n.iconPosition) != null && s.startsWith("top") ? "top" : "bottom", t = (p = n.iconPosition) != null && p.endsWith("left") ? "left" : "right";
132
- return a[r] = o.spacing(2), a[t] = o.spacing(2), {
148
+ })(({ theme: o, ownerState: i }) => {
149
+ var c, p;
150
+ const n = {}, a = (c = i.iconPosition) != null && c.startsWith("top") ? "top" : "bottom", r = (p = i.iconPosition) != null && p.endsWith("left") ? "left" : "right";
151
+ return n[a] = o.spacing(2), n[r] = o.spacing(2), {
133
152
  position: "absolute",
134
- ...a,
135
- color: l(o, n.variant) ?? o.palette.text.secondary,
153
+ ...n,
154
+ color: s(o, i.variant) ?? o.palette.text.secondary,
136
155
  zIndex: 2
137
156
  };
138
- }), z = i("div", {
157
+ }), I = t("div", {
139
158
  name: "HCMetricCard",
140
159
  slot: "Chart"
141
160
  })(({ theme: o }) => ({
@@ -148,7 +167,7 @@ const e = {
148
167
  alignItems: "flex-end",
149
168
  overflow: "hidden",
150
169
  borderRadius: o.shape.borderRadius
151
- })), P = i("div", {
170
+ })), R = t("div", {
152
171
  name: "HCMetricCard",
153
172
  slot: "Panel"
154
173
  })(({ theme: o }) => ({
@@ -165,7 +184,7 @@ const e = {
165
184
  backgroundColor: o.palette.background.paper,
166
185
  boxShadow: o.shadows[1],
167
186
  overflow: "hidden"
168
- })), W = i("div", {
187
+ })), z = t("div", {
169
188
  name: "HCMetricCard",
170
189
  slot: "SideChart"
171
190
  })(() => ({
@@ -178,16 +197,16 @@ const e = {
178
197
  alignItems: "flex-end"
179
198
  }));
180
199
  export {
181
- z as MetricCardChartContainer,
182
- y as MetricCardContent,
183
- w as MetricCardCornerIconContainer,
184
- I as MetricCardDescription,
185
- R as MetricCardIconContainer,
186
- k as MetricCardLabel,
187
- P as MetricCardPanel,
188
- v as MetricCardRoot,
189
- S as MetricCardSecondValue,
190
- W as MetricCardSideChart,
191
- H as MetricCardTrendContainer,
192
- m as MetricCardValue
200
+ I as MetricCardChartContainer,
201
+ w as MetricCardContent,
202
+ H as MetricCardCornerIconContainer,
203
+ h as MetricCardDescription,
204
+ k as MetricCardIconContainer,
205
+ m as MetricCardLabel,
206
+ R as MetricCardPanel,
207
+ M as MetricCardRoot,
208
+ W as MetricCardSecondValue,
209
+ z as MetricCardSideChart,
210
+ S as MetricCardTrendContainer,
211
+ y as MetricCardValue
193
212
  };
@@ -1,15 +1,15 @@
1
- import { jsx as t, jsxs as e, Fragment as m } from "react/jsx-runtime";
2
- import { Stack as x, Skeleton as d } from "@mui/material";
1
+ import { jsx as t, jsxs as r, Fragment as m } from "react/jsx-runtime";
2
+ import { Stack as x, Skeleton as d, Tooltip as e } from "@mui/material";
3
3
  import { useStatusIndicatorLogic as v } from "./logic.js";
4
- import { StatusIndicatorRoot as o, StatusIndicatorCaption as b, StatusIndicatorDescription as f, StatusIndicatorIconContainer as h, StatusIndicatorContent as g, StatusIndicatorLabel as u, StatusIndicatorValue as I, StatusIndicatorBadge as w } from "./styled.js";
5
- const j = (i) => {
6
- const { state: S } = v(i), { ownerState: n, variant: r, activeLabel: c, Icon: a } = S;
4
+ import { StatusIndicatorRoot as o, StatusIndicatorCaption as g, StatusIndicatorDescription as f, StatusIndicatorIconContainer as u, StatusIndicatorContent as w, StatusIndicatorLabel as I, StatusIndicatorValue as S, StatusIndicatorBadge as L, StatusIndicatorBadgeLabel as y } from "./styled.js";
5
+ const B = (i) => {
6
+ const { state: b } = v(i), { ownerState: n, variant: l, activeLabel: a, Icon: c } = b;
7
7
  if (i.loading)
8
- return /* @__PURE__ */ t(o, { ownerState: n, sx: i.sx, children: /* @__PURE__ */ e(
8
+ return /* @__PURE__ */ t(o, { ownerState: n, sx: i.sx, children: /* @__PURE__ */ r(
9
9
  x,
10
10
  {
11
11
  spacing: 1,
12
- alignItems: r === "prominent" ? "center" : "flex-start",
12
+ alignItems: l === "prominent" ? "center" : "flex-start",
13
13
  children: [
14
14
  /* @__PURE__ */ t(d, { variant: "text", width: "50%" }),
15
15
  /* @__PURE__ */ t(d, { variant: "circular", width: 40, height: 40 }),
@@ -17,28 +17,28 @@ const j = (i) => {
17
17
  ]
18
18
  }
19
19
  ) });
20
- const l = i.caption && /* @__PURE__ */ t(b, { variant: "caption", children: i.caption }), s = i.description && /* @__PURE__ */ t(f, { variant: "body2", children: i.description });
21
- return r === "split" ? /* @__PURE__ */ e(o, { ownerState: n, sx: i.sx, children: [
22
- a && /* @__PURE__ */ t(h, { ownerState: n, children: /* @__PURE__ */ t(a, { size: 28 }) }),
23
- /* @__PURE__ */ e(g, { children: [
24
- i.label && /* @__PURE__ */ t(u, { variant: "body2", children: i.label }),
25
- /* @__PURE__ */ t(I, { variant: "h5", ownerState: n, children: c }),
26
- l,
20
+ const h = i.caption && /* @__PURE__ */ t(e, { title: i.caption, children: /* @__PURE__ */ t(g, { variant: "caption", children: i.caption }) }), s = i.description && /* @__PURE__ */ t(e, { title: i.description, children: /* @__PURE__ */ t(f, { variant: "body2", children: i.description }) });
21
+ return l === "split" ? /* @__PURE__ */ r(o, { ownerState: n, sx: i.sx, children: [
22
+ c && /* @__PURE__ */ t(u, { ownerState: n, children: /* @__PURE__ */ t(c, { size: 28 }) }),
23
+ /* @__PURE__ */ r(w, { children: [
24
+ i.label && /* @__PURE__ */ t(e, { title: i.label, children: /* @__PURE__ */ t(I, { variant: "body2", children: i.label }) }),
25
+ /* @__PURE__ */ t(e, { title: a, children: /* @__PURE__ */ t(S, { variant: "h5", ownerState: n, children: a }) }),
26
+ h,
27
27
  s
28
28
  ] })
29
- ] }) : /* @__PURE__ */ e(o, { ownerState: n, sx: i.sx, children: [
30
- i.label && /* @__PURE__ */ t(u, { variant: "body2", children: i.label }),
31
- r === "prominent" ? /* @__PURE__ */ e(m, { children: [
32
- a && /* @__PURE__ */ t(h, { ownerState: n, children: /* @__PURE__ */ t(a, { size: 48 }) }),
33
- /* @__PURE__ */ t(I, { variant: "h4", ownerState: n, children: c })
34
- ] }) : /* @__PURE__ */ e(w, { ownerState: n, children: [
35
- a && /* @__PURE__ */ t(a, { size: 18 }),
36
- c
37
- ] }),
38
- l,
29
+ ] }) : /* @__PURE__ */ r(o, { ownerState: n, sx: i.sx, children: [
30
+ i.label && /* @__PURE__ */ t(e, { title: i.label, children: /* @__PURE__ */ t(I, { variant: "body2", children: i.label }) }),
31
+ l === "prominent" ? /* @__PURE__ */ r(m, { children: [
32
+ c && /* @__PURE__ */ t(u, { ownerState: n, children: /* @__PURE__ */ t(c, { size: 48 }) }),
33
+ /* @__PURE__ */ t(e, { title: a, children: /* @__PURE__ */ t(S, { variant: "h4", ownerState: n, children: a }) })
34
+ ] }) : /* @__PURE__ */ t(e, { title: a, children: /* @__PURE__ */ r(L, { ownerState: n, children: [
35
+ c && /* @__PURE__ */ t(c, { size: 18 }),
36
+ /* @__PURE__ */ t(y, { children: a })
37
+ ] }) }),
38
+ h,
39
39
  s
40
40
  ] });
41
41
  };
42
42
  export {
43
- j as StatusIndicator
43
+ B as StatusIndicator
44
44
  };
@@ -1,65 +1,72 @@
1
- import { styled as a, Typography as i, alpha as l } from "@mui/material";
2
- import { resolvePaletteColor as r } from "../metric-card/helpers.js";
3
- import { Widget as d } from "../widget/styled.js";
4
- const s = {
1
+ import { styled as n, Typography as r, alpha as s } from "@mui/material";
2
+ import { resolvePaletteColor as a } from "../metric-card/helpers.js";
3
+ import { Widget as c } from "../widget/styled.js";
4
+ const l = {
5
5
  shouldForwardProp: (t) => t !== "ownerState"
6
- }, C = a(d.Root, {
6
+ }, g = n(c.Root, {
7
7
  name: "HCStatusIndicator",
8
8
  slot: "Root",
9
- ...s
9
+ ...l
10
10
  })(({ theme: t, ownerState: o }) => {
11
- const n = {
11
+ const e = {
12
12
  padding: t.spacing(2),
13
13
  display: "flex",
14
14
  gap: t.spacing(0.5)
15
15
  };
16
16
  return o.variant === "prominent" ? {
17
- ...n,
17
+ ...e,
18
18
  flexDirection: "column",
19
19
  alignItems: "center",
20
20
  justifyContent: "center",
21
21
  textAlign: "center"
22
22
  } : o.variant === "split" ? {
23
- ...n,
23
+ ...e,
24
24
  flexDirection: "row",
25
25
  alignItems: "center",
26
26
  gap: t.spacing(2)
27
27
  } : {
28
- ...n,
28
+ ...e,
29
29
  flexDirection: "column",
30
30
  alignItems: "flex-start",
31
31
  justifyContent: "center"
32
32
  };
33
- }), f = a(i, {
33
+ }), x = n(r, {
34
34
  name: "HCStatusIndicator",
35
35
  slot: "Label"
36
36
  })(({ theme: t }) => ({
37
37
  color: t.palette.text.secondary,
38
- fontWeight: 500
39
- })), I = a("div", {
38
+ fontWeight: 500,
39
+ // Widgets live in a resizable grid with no character limit — clip to one line
40
+ // so long text never overflows or wraps into a messy block. Full text on hover.
41
+ whiteSpace: "nowrap",
42
+ overflow: "hidden",
43
+ textOverflow: "ellipsis",
44
+ maxWidth: "100%",
45
+ minWidth: 0
46
+ })), m = n("div", {
40
47
  name: "HCStatusIndicator",
41
48
  slot: "IconContainer",
42
- ...s
49
+ ...l
43
50
  })(({ theme: t, ownerState: o }) => {
44
- const n = r(t, o.resolvedColor) ?? t.palette.text.primary, e = {
51
+ const e = a(t, o.resolvedColor) ?? t.palette.text.primary, i = {
45
52
  display: "flex",
46
53
  alignItems: "center",
47
54
  justifyContent: "center",
48
- color: n
55
+ color: e
49
56
  };
50
57
  if (o.variant === "split") {
51
- const c = r(t, o.resolvedBackgroundColor) ?? l(n, 0.12);
58
+ const d = a(t, o.resolvedBackgroundColor) ?? s(e, 0.12);
52
59
  return {
53
- ...e,
60
+ ...i,
54
61
  flexShrink: 0,
55
62
  width: 56,
56
63
  height: 56,
57
64
  borderRadius: t.shape.borderRadius * 2,
58
- backgroundColor: c
65
+ backgroundColor: d
59
66
  };
60
67
  }
61
- return e;
62
- }), x = a("div", {
68
+ return i;
69
+ }), C = n("div", {
63
70
  name: "HCStatusIndicator",
64
71
  slot: "Content"
65
72
  })(() => ({
@@ -67,48 +74,77 @@ const s = {
67
74
  flexDirection: "column",
68
75
  minWidth: 0,
69
76
  flex: 1
70
- })), m = a(i, {
77
+ })), h = n(r, {
71
78
  name: "HCStatusIndicator",
72
79
  slot: "Value",
73
- ...s
80
+ ...l
74
81
  })(({ theme: t, ownerState: o }) => ({
75
82
  fontWeight: 600,
76
83
  lineHeight: 1.2,
77
- color: r(t, o.resolvedColor) ?? t.palette.text.primary
78
- })), y = a("div", {
84
+ color: a(t, o.resolvedColor) ?? t.palette.text.primary,
85
+ whiteSpace: "nowrap",
86
+ overflow: "hidden",
87
+ textOverflow: "ellipsis",
88
+ maxWidth: "100%",
89
+ minWidth: 0
90
+ })), I = n("div", {
79
91
  name: "HCStatusIndicator",
80
92
  slot: "Badge",
81
- ...s
93
+ ...l
82
94
  })(({ theme: t, ownerState: o }) => {
83
- const n = r(t, o.resolvedColor) ?? t.palette.text.primary, e = r(t, o.resolvedBackgroundColor) ?? l(n, 0.12);
95
+ const e = a(t, o.resolvedColor) ?? t.palette.text.primary, i = a(t, o.resolvedBackgroundColor) ?? s(e, 0.12);
84
96
  return {
85
97
  display: "inline-flex",
86
98
  alignItems: "center",
87
99
  gap: t.spacing(0.75),
88
100
  padding: t.spacing(0.5, 1.25),
89
101
  borderRadius: 999,
90
- backgroundColor: e,
91
- color: n,
92
- fontWeight: 600
102
+ backgroundColor: i,
103
+ color: e,
104
+ fontWeight: 600,
105
+ maxWidth: "100%",
106
+ overflow: "hidden",
107
+ // The icon must never shrink; only the label text ellipsizes.
108
+ "& > svg": { flexShrink: 0 }
93
109
  };
94
- }), S = a(i, {
110
+ }), v = n("span", {
111
+ name: "HCStatusIndicator",
112
+ slot: "BadgeLabel"
113
+ })(() => ({
114
+ flex: "0 1 auto",
115
+ minWidth: 0,
116
+ overflow: "hidden",
117
+ textOverflow: "ellipsis",
118
+ whiteSpace: "nowrap"
119
+ })), S = n(r, {
95
120
  name: "HCStatusIndicator",
96
121
  slot: "Caption"
97
122
  })(({ theme: t }) => ({
98
- color: t.palette.text.secondary
99
- })), v = a(i, {
123
+ color: t.palette.text.secondary,
124
+ whiteSpace: "nowrap",
125
+ overflow: "hidden",
126
+ textOverflow: "ellipsis",
127
+ maxWidth: "100%",
128
+ minWidth: 0
129
+ })), w = n(r, {
100
130
  name: "HCStatusIndicator",
101
131
  slot: "Description"
102
132
  })(({ theme: t }) => ({
103
- color: t.palette.text.secondary
133
+ color: t.palette.text.secondary,
134
+ whiteSpace: "nowrap",
135
+ overflow: "hidden",
136
+ textOverflow: "ellipsis",
137
+ maxWidth: "100%",
138
+ minWidth: 0
104
139
  }));
105
140
  export {
106
- y as StatusIndicatorBadge,
141
+ I as StatusIndicatorBadge,
142
+ v as StatusIndicatorBadgeLabel,
107
143
  S as StatusIndicatorCaption,
108
- x as StatusIndicatorContent,
109
- v as StatusIndicatorDescription,
110
- I as StatusIndicatorIconContainer,
111
- f as StatusIndicatorLabel,
112
- C as StatusIndicatorRoot,
113
- m as StatusIndicatorValue
144
+ C as StatusIndicatorContent,
145
+ w as StatusIndicatorDescription,
146
+ m as StatusIndicatorIconContainer,
147
+ x as StatusIndicatorLabel,
148
+ g as StatusIndicatorRoot,
149
+ h as StatusIndicatorValue
114
150
  };
package/dist/main.d.ts CHANGED
@@ -97,7 +97,7 @@ export declare interface BaseInterval {
97
97
  count: number;
98
98
  }
99
99
 
100
- export declare const Button: (props: ButtonProps) => JSX_2.Element;
100
+ export declare const Button: (props: ButtonProps & default_2.RefAttributes<HTMLButtonElement>) => default_2.ReactNode | null;
101
101
 
102
102
  export declare type ButtonComponentOverride<Theme = unknown> = {
103
103
  defaultProps?: Partial<ButtonProps>;
@@ -232,6 +232,7 @@ export declare interface ChartDimension {
232
232
 
233
233
  export declare type ChartNameType =
234
234
  | "HeatLegend"
235
+ | "Histogram"
235
236
  | "XYChart"
236
237
  | "XYChartHorizontal"
237
238
  | "MultipleValueAxes"
@@ -955,6 +956,36 @@ export declare interface HighlightLineChartProps {
955
956
  sx?: SxProps<Theme>;
956
957
  }
957
958
 
959
+ export declare const Histogram: (inProps: HistogramProps) => JSX_2.Element;
960
+
961
+ export declare type HistogramComponentOverride<Theme = unknown> = {
962
+ defaultProps?: Partial<HistogramProps>;
963
+ styleOverrides?: ComponentsOverrides_2<Theme>["HCHistogram"];
964
+ };
965
+
966
+ export declare type HistogramProps = ChartProps & {
967
+ /**
968
+ * Explicit bin width, in dimension units. When omitted, the width is inferred
969
+ * from the smallest positive gap between adjacent bin starts — correct for
970
+ * uniformly pre-binned data (e.g. 250-wide buckets). Set this when bins are
971
+ * non-uniform, or when a single bin makes the gap impossible to infer.
972
+ */
973
+ binWidth?: number;
974
+ /**
975
+ * Fractional gap between adjacent bars, `0`–`1`. `0` (default) makes bars
976
+ * touch edge-to-edge — the defining histogram look. Raise it toward a spaced
977
+ * bar chart if a visual separation is wanted.
978
+ */
979
+ barGap?: number;
980
+ /**
981
+ * Draw the frequency (Y) axis on a logarithmic scale. Useful when one bin
982
+ * dwarfs the rest (e.g. a large zero/overflow bucket) and a linear axis would
983
+ * flatten every other bar. Zero-count bins are treated as the axis floor, so
984
+ * they simply render as no bar. Default `false` (linear, zero-baselined).
985
+ */
986
+ logarithmic?: boolean;
987
+ };
988
+
958
989
  /**
959
990
  * Turn a raw field key into a human label: snake_case / kebab-case / camelCase
960
991
  * → Title Case (e.g. "total_revenue" / "totalRevenue" → "Total Revenue"). Used
@@ -2690,6 +2721,22 @@ declare module "@mui/material/styles" {
2690
2721
 
2691
2722
 
2692
2723
 
2724
+ declare module "@mui/material/styles" {
2725
+ interface ComponentNameToClassKey {
2726
+ HCHistogram: "root";
2727
+ }
2728
+
2729
+ interface ComponentsPropsList {
2730
+ HCHistogram: Partial<HistogramProps>;
2731
+ }
2732
+
2733
+ interface Components<Theme = unknown> {
2734
+ HCHistogram?: HistogramComponentOverride<Theme>;
2735
+ }
2736
+ }
2737
+
2738
+
2739
+
2693
2740
  declare module "@mui/material/styles" {
2694
2741
  interface ComponentNameToClassKey {
2695
2742
  HCLineChart: "root";
@@ -3649,6 +3696,7 @@ declare module "@mui/material/styles" {
3649
3696
  | "content"
3650
3697
  | "value"
3651
3698
  | "badge"
3699
+ | "badgeLabel"
3652
3700
  | "caption"
3653
3701
  | "description";
3654
3702
  }