@divami-artefacts/ai-design-system 1.0.4 → 1.0.5
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/ai-design-system.css +2 -0
- package/dist/components/trend/Trend.d.ts +2 -0
- package/dist/components/trend/index.d.ts +2 -0
- package/dist/components/trend/styles.d.ts +1 -0
- package/dist/components/trend/types.d.ts +5 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +373 -265
- package/dist/types/index.d.ts +3 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -729,21 +729,21 @@ var _e = 680, ve = 220, ye = [
|
|
|
729
729
|
right: 64,
|
|
730
730
|
top: 16,
|
|
731
731
|
bottom: 38
|
|
732
|
-
},
|
|
733
|
-
function
|
|
732
|
+
}, be = 88, B = 18;
|
|
733
|
+
function xe({ data: e, "data-testid": t }) {
|
|
734
734
|
let n = a(null), r = a(/* @__PURE__ */ new Map()), { hoveredRef: i, tooltip: o, hitZonesRef: l } = C(n, {
|
|
735
735
|
width: _e,
|
|
736
736
|
height: ve
|
|
737
|
-
}), { contractors: d = [], totals: h } = e, g = d.length, _ = Math.max(...d.map((e) => e.total ?? 0), 1), y = _e - z.left -
|
|
737
|
+
}), { contractors: d = [], totals: h } = e, g = d.length, _ = Math.max(...d.map((e) => e.total ?? 0), 1), y = _e - z.left - be - z.right, b = g > 1 ? (ve - z.top - z.bottom - g * B) / (g - 1) : 0;
|
|
738
738
|
return ue(n, _e, ve, (e, t) => {
|
|
739
739
|
M(r.current, i.current), l.current = [], d.forEach((n, i) => {
|
|
740
|
-
let a = ye[i % ye.length], o = j(t, i, g, D), s = z.top + i * (
|
|
741
|
-
e.font = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", e.fillStyle = d > 0 ? a : f.color, e.textAlign = "right", e.textBaseline = "middle", e.fillText(n.abbreviation ?? n.name.slice(0, 6), c - 8, s +
|
|
740
|
+
let a = ye[i % ye.length], o = j(t, i, g, D), s = z.top + i * (B + b), c = z.left + be, d = r.current.get(n.id) ?? 0, p = (n.base ?? 0) / _ * y * o, h = (n.total ?? 0) / _ * y * o, x = h - p;
|
|
741
|
+
e.font = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", e.fillStyle = d > 0 ? a : f.color, e.textAlign = "right", e.textBaseline = "middle", e.fillText(n.abbreviation ?? n.name.slice(0, 6), c - 8, s + B / 2), e.fillStyle = m(u.bd, .25), e.beginPath(), e.roundRect(c, s, y, B, 4), e.fill(), p > 0 && (d > 0 && v(e, c + p / 2, s + B / 2, p * .3, a, .1 * d), e.fillStyle = m(a, .5 + d * .15), e.beginPath(), e.roundRect(c, s, p, B, 4), e.fill()), x > 2 && (e.fillStyle = m(a, .22 + d * .08), e.beginPath(), e.roundRect(c + p, s, x, B, [
|
|
742
742
|
0,
|
|
743
743
|
4,
|
|
744
744
|
4,
|
|
745
745
|
0
|
|
746
|
-
]), e.fill(), e.setLineDash([2, 3]), e.strokeStyle = m(a, .55), e.lineWidth = 1, e.beginPath(), e.moveTo(c + p, s + 3), e.lineTo(c + p, s +
|
|
746
|
+
]), e.fill(), e.setLineDash([2, 3]), e.strokeStyle = m(a, .55), e.lineWidth = 1, e.beginPath(), e.moveTo(c + p, s + 3), e.lineTo(c + p, s + B - 3), e.stroke(), e.setLineDash([])), d > 0 && h > 0 && (e.strokeStyle = m(a, .5 * d), e.lineWidth = 1, e.setLineDash([]), e.beginPath(), e.roundRect(c, s, h, B, 4), e.stroke()), o > .35 && (e.globalAlpha = Math.min(1, (o - .35) / .4), e.font = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", e.fillStyle = d > 0 ? a : u.t2, e.textAlign = "left", e.textBaseline = "middle", e.fillText(`£${n.total ?? 0}M`, c + h + 6, s + B / 2), e.globalAlpha = 1), T(l.current, n.id, c, s, Math.max(h, 1), B, {
|
|
747
747
|
label: n.name,
|
|
748
748
|
value: `£${n.total ?? 0}M total`,
|
|
749
749
|
sublabel: `Base £${n.base ?? 0}M + Var £${n.variation ?? 0}M · ${n.percentage ?? 0}% committed`,
|
|
@@ -751,7 +751,7 @@ function be({ data: e, "data-testid": t }) {
|
|
|
751
751
|
});
|
|
752
752
|
});
|
|
753
753
|
let n = ve - 14;
|
|
754
|
-
e.textBaseline = "middle", e.font = "400 12px 'Satoshi Variable', 'DM Sans', sans-serif", e.textAlign = "left", e.fillStyle = m(u.cyan, .5), e.beginPath(), e.roundRect(z.left +
|
|
754
|
+
e.textBaseline = "middle", e.font = "400 12px 'Satoshi Variable', 'DM Sans', sans-serif", e.textAlign = "left", e.fillStyle = m(u.cyan, .5), e.beginPath(), e.roundRect(z.left + be, n - 3, 14, 6, 2), e.fill(), e.fillStyle = p.color, e.fillText("base value", z.left + be + 18, n), e.fillStyle = m(u.cyan, .22), e.beginPath(), e.roundRect(z.left + be + 94, n - 3, 14, 6, 2), e.fill(), e.setLineDash([2, 3]), e.strokeStyle = m(u.cyan, .5), e.lineWidth = .5, e.beginPath(), e.moveTo(z.left + be + 101, n - 3), e.lineTo(z.left + be + 101, n + 3), e.stroke(), e.setLineDash([]), e.fillStyle = p.color, e.fillText("approved variations", z.left + be + 112, n), e.font = "400 12px 'Satoshi Variable', 'DM Sans', sans-serif", e.textAlign = "right", e.fillStyle = p.color, e.fillText(`Portfolio: £${h?.total ?? 0}M`, _e - 8, n);
|
|
755
755
|
}, !0, { easing: D }), /* @__PURE__ */ c("div", {
|
|
756
756
|
"data-testid": t,
|
|
757
757
|
style: {
|
|
@@ -778,88 +778,88 @@ function be({ data: e, "data-testid": t }) {
|
|
|
778
778
|
}
|
|
779
779
|
//#endregion
|
|
780
780
|
//#region src/components/contractorRank/ContractorRank.tsx
|
|
781
|
-
var
|
|
781
|
+
var Se = 780, V = 240, Ce = 12, we = 10, Te = [
|
|
782
782
|
"Highest exposure",
|
|
783
783
|
"Elevated risk",
|
|
784
784
|
"Moderate exposure",
|
|
785
785
|
"Moderate exposure",
|
|
786
786
|
"Low exposure"
|
|
787
787
|
];
|
|
788
|
-
function
|
|
789
|
-
let r = a(null), i = a(0), o = a(/* @__PURE__ */ new Map()), { hoveredRef: l, tooltip:
|
|
790
|
-
width:
|
|
791
|
-
height:
|
|
792
|
-
}),
|
|
788
|
+
function Ee({ contractors: e = [], "data-testid": t }) {
|
|
789
|
+
let r = a(null), i = a(0), o = a(/* @__PURE__ */ new Map()), { hoveredRef: l, tooltip: p, hitZonesRef: h } = C(r, {
|
|
790
|
+
width: Se,
|
|
791
|
+
height: V
|
|
792
|
+
}), g = [...e].sort((e, t) => (t.count ?? 0) - (e.count ?? 0)).slice(0, 5), y = g.reduce((e, t) => e + (t.count ?? 0), 0);
|
|
793
793
|
return n(() => {
|
|
794
794
|
let e = r.current;
|
|
795
795
|
if (!e) return;
|
|
796
|
-
let t = _(e,
|
|
796
|
+
let t = _(e, Se, V);
|
|
797
797
|
i.current = 0;
|
|
798
|
-
let n = Math.min(5,
|
|
798
|
+
let n = Math.min(5, g.length), a = (Se - 2 * Ce - (n - 1) * we) / n, s = V * .84, c = V * .08, p, x = () => {
|
|
799
799
|
i.current++;
|
|
800
800
|
let e = i.current;
|
|
801
|
-
t.clearRect(0, 0,
|
|
801
|
+
t.clearRect(0, 0, Se, V), h.current = [], o.current.forEach((e, t) => {
|
|
802
802
|
let n = t === l.current ? 1 : 0, r = e + (n - e) * .12;
|
|
803
803
|
Math.abs(r - n) < .005 ? n === 0 ? o.current.delete(t) : o.current.set(t, 1) : o.current.set(t, r);
|
|
804
|
-
}), l.current && !o.current.has(l.current) && o.current.set(l.current, 0),
|
|
805
|
-
let i = r === 0, l =
|
|
806
|
-
t.fillStyle = m(l, .08 +
|
|
807
|
-
let
|
|
808
|
-
|
|
809
|
-
let
|
|
810
|
-
T(
|
|
804
|
+
}), l.current && !o.current.has(l.current) && o.current.set(l.current, 0), g.forEach((n, r) => {
|
|
805
|
+
let i = r === 0, l = r === 0 ? u.red : r === 1 ? u.amber : d[r % d.length], p = Ce + r * (a + we), g = o.current.get(n.id) ?? 0, _ = g * 8, b = p - _ / 2, x = a + _, S = i ? A(e, .04, 3e-4) * .06 + .06 : 0;
|
|
806
|
+
t.fillStyle = m(l, .08 + g * .07), t.beginPath(), t.roundRect(b, c, x, s, 6), t.fill(), t.strokeStyle = m(l, .2 + g * .4 + S), t.lineWidth = i ? 1.5 : 1, t.stroke(), (g > .01 || i) && v(t, b + x / 2, c + s / 2, x * .55, l, S + g * .14), t.font = "bold " + f.font, t.textAlign = "left", t.textBaseline = "top", t.fillStyle = m(l, .5 + g * .35), t.fillText(`#${r + 1}`, b + 7, c + 6);
|
|
807
|
+
let C = Math.min(a * .28, s * .32, 72), w = b + x / 2, E = c + s * .38, D = t.createRadialGradient(w, E - C * .2, 0, w, E, C);
|
|
808
|
+
D.addColorStop(0, m(l, .5 + g * .2)), D.addColorStop(1, m(l, .2 + g * .1)), t.beginPath(), t.arc(w, E, C, 0, Math.PI * 2), t.fillStyle = D, t.fill(), t.strokeStyle = m(l, .4 + g * .3), t.lineWidth = 1, t.stroke(), t.font = "bold " + f.font, t.textAlign = "center", t.textBaseline = "middle", t.fillStyle = m(u.t1, .9), t.fillText(n.abbreviation ?? n.name.slice(0, 6), w, E), t.font = "bold 14px 'Satoshi Variable', 'DM Sans', sans-serif", t.textBaseline = "alphabetic", t.fillStyle = m(l, .9 + g * .1), t.fillText(String(n.count ?? 0), w, c + s * .76), t.font = f.font, t.fillStyle = f.color, t.fillText("open EWs", w, c + s * .88);
|
|
809
|
+
let O = Math.round((n.count ?? 0) / (y || 1) * 100), k = Te[r] ?? "Low exposure";
|
|
810
|
+
T(h.current, n.id, p, c, a, s, {
|
|
811
811
|
label: n.name,
|
|
812
|
-
value: `${n.count ?? 0} open · ${
|
|
813
|
-
sublabel: `Rank #${r + 1} · ${
|
|
812
|
+
value: `${n.count ?? 0} open · ${O}% of total`,
|
|
813
|
+
sublabel: `Rank #${r + 1} · ${k}`,
|
|
814
814
|
color: l
|
|
815
815
|
});
|
|
816
|
-
}), b(t,
|
|
816
|
+
}), b(t, Se, V, e, .015), p = requestAnimationFrame(x);
|
|
817
817
|
};
|
|
818
|
-
return
|
|
819
|
-
}, [
|
|
818
|
+
return x(), () => cancelAnimationFrame(p);
|
|
819
|
+
}, [g, y]), /* @__PURE__ */ c("div", {
|
|
820
820
|
"data-testid": t,
|
|
821
821
|
style: {
|
|
822
822
|
position: "relative",
|
|
823
|
-
width:
|
|
824
|
-
height:
|
|
823
|
+
width: Se,
|
|
824
|
+
height: V
|
|
825
825
|
},
|
|
826
826
|
children: [/* @__PURE__ */ s("canvas", {
|
|
827
827
|
ref: r,
|
|
828
828
|
role: "img",
|
|
829
829
|
"aria-label": "Contractor rank — open EW count per contractor",
|
|
830
830
|
style: {
|
|
831
|
-
width:
|
|
832
|
-
height:
|
|
831
|
+
width: Se,
|
|
832
|
+
height: V,
|
|
833
833
|
display: "block",
|
|
834
834
|
borderRadius: 8
|
|
835
835
|
}
|
|
836
836
|
}), /* @__PURE__ */ s(S, {
|
|
837
|
-
...
|
|
838
|
-
parentW:
|
|
839
|
-
parentH:
|
|
837
|
+
...p,
|
|
838
|
+
parentW: Se,
|
|
839
|
+
parentH: V
|
|
840
840
|
})]
|
|
841
841
|
});
|
|
842
842
|
}
|
|
843
843
|
//#endregion
|
|
844
844
|
//#region src/components/ewCategory/EWCategory.tsx
|
|
845
|
-
var
|
|
846
|
-
function
|
|
845
|
+
var H = 680, U = 260;
|
|
846
|
+
function De({ categories: e = [], "data-testid": t }) {
|
|
847
847
|
let r = a(null), i = a(0), o = a(/* @__PURE__ */ new Map()), { hoveredRef: l, tooltip: d, hitZonesRef: f } = C(r, {
|
|
848
|
-
width:
|
|
849
|
-
height:
|
|
848
|
+
width: H,
|
|
849
|
+
height: U
|
|
850
850
|
});
|
|
851
851
|
return n(() => {
|
|
852
852
|
let t = r.current;
|
|
853
853
|
if (!t) return;
|
|
854
|
-
let n = _(t,
|
|
854
|
+
let n = _(t, H, U);
|
|
855
855
|
i.current = 0;
|
|
856
|
-
let a = e.length, s = Math.max(...e.map((e) => e.count), 1), c = s, d =
|
|
856
|
+
let a = e.length, s = Math.max(...e.map((e) => e.count), 1), c = s, d = H * .05, p = U * .1, h = H * .9 / a, g = U * .7 / c, x = e.reduce((e, t) => e + t.count, 0), S, C = () => {
|
|
857
857
|
i.current++;
|
|
858
858
|
let t = i.current;
|
|
859
|
-
n.clearRect(0, 0,
|
|
859
|
+
n.clearRect(0, 0, H, U), f.current = [], o.current.forEach((e, t) => {
|
|
860
860
|
let n = t === l.current ? 1 : 0, r = e + (n - e) * .12;
|
|
861
861
|
Math.abs(r - n) < .005 ? n === 0 ? o.current.delete(t) : o.current.set(t, 1) : o.current.set(t, r);
|
|
862
|
-
}), l.current && !o.current.has(l.current) && o.current.set(l.current, 0), y(n,
|
|
862
|
+
}), l.current && !o.current.has(l.current) && o.current.set(l.current, 0), y(n, H, U, t, 40, m(u.blue, .04)), e.forEach((e, r) => {
|
|
863
863
|
let i = e.count === s, a = i ? u.cyan : u.blue, l = o.current.get(`${e.category}-col`) ?? 0;
|
|
864
864
|
for (let u = 0; u < c; u++) {
|
|
865
865
|
let c = d + r * h + h / 2, _ = p + u * g + g / 2, y = Math.min(h, g) * .38;
|
|
@@ -877,36 +877,36 @@ function Ee({ categories: e = [], "data-testid": t }) {
|
|
|
877
877
|
}
|
|
878
878
|
let _ = p + c * g + 16;
|
|
879
879
|
n.font = `${i ? "bold " : ""}9px 'JetBrains Mono', monospace`, n.textAlign = "center", n.textBaseline = "alphabetic", n.fillStyle = i ? u.cyan : m(u.t2, .65), n.fillText(e.category, d + r * h + h / 2, _);
|
|
880
|
-
}), b(n,
|
|
880
|
+
}), b(n, H, U, t, .015), S = requestAnimationFrame(C);
|
|
881
881
|
};
|
|
882
882
|
return C(), () => cancelAnimationFrame(S);
|
|
883
883
|
}, [e]), /* @__PURE__ */ c("div", {
|
|
884
884
|
"data-testid": t,
|
|
885
885
|
style: {
|
|
886
886
|
position: "relative",
|
|
887
|
-
width:
|
|
888
|
-
height:
|
|
887
|
+
width: H,
|
|
888
|
+
height: U
|
|
889
889
|
},
|
|
890
890
|
children: [/* @__PURE__ */ s("canvas", {
|
|
891
891
|
ref: r,
|
|
892
892
|
role: "img",
|
|
893
893
|
"aria-label": "Early Warning count by category — breathing dot grid",
|
|
894
894
|
style: {
|
|
895
|
-
width:
|
|
896
|
-
height:
|
|
895
|
+
width: H,
|
|
896
|
+
height: U,
|
|
897
897
|
display: "block",
|
|
898
898
|
borderRadius: 8
|
|
899
899
|
}
|
|
900
900
|
}), /* @__PURE__ */ s(S, {
|
|
901
901
|
...d,
|
|
902
|
-
parentW:
|
|
903
|
-
parentH:
|
|
902
|
+
parentW: H,
|
|
903
|
+
parentH: U
|
|
904
904
|
})]
|
|
905
905
|
});
|
|
906
906
|
}
|
|
907
907
|
//#endregion
|
|
908
908
|
//#region src/components/lineChart/LineChart.tsx
|
|
909
|
-
function
|
|
909
|
+
function Oe({ rows: e = [], className: t, colors: n }) {
|
|
910
910
|
return /* @__PURE__ */ s(te, {
|
|
911
911
|
rows: e,
|
|
912
912
|
variant: "line",
|
|
@@ -916,7 +916,7 @@ function De({ rows: e = [], className: t, colors: n }) {
|
|
|
916
916
|
}
|
|
917
917
|
//#endregion
|
|
918
918
|
//#region src/components/constants.ts
|
|
919
|
-
var
|
|
919
|
+
var ke = [
|
|
920
920
|
"#36BFFA",
|
|
921
921
|
"#16B364",
|
|
922
922
|
"#D444F1",
|
|
@@ -925,7 +925,7 @@ var Oe = [
|
|
|
925
925
|
"#7A5AF8",
|
|
926
926
|
"#EF6820",
|
|
927
927
|
"#D92D20"
|
|
928
|
-
],
|
|
928
|
+
], Ae = {
|
|
929
929
|
nodes: [
|
|
930
930
|
{
|
|
931
931
|
id: "supplier-x",
|
|
@@ -968,8 +968,8 @@ var Oe = [
|
|
|
968
968
|
};
|
|
969
969
|
//#endregion
|
|
970
970
|
//#region src/components/miniBars/MiniBars.tsx
|
|
971
|
-
function
|
|
972
|
-
let r = n?.slices ??
|
|
971
|
+
function je({ rows: e = [], className: t, colors: n }) {
|
|
972
|
+
let r = n?.slices ?? ke;
|
|
973
973
|
return /* @__PURE__ */ s("div", {
|
|
974
974
|
className: ["d3-mini-bars", t].filter(Boolean).join(" "),
|
|
975
975
|
children: e.map(([e, t, n], i) => /* @__PURE__ */ c("div", {
|
|
@@ -995,7 +995,7 @@ function Ae({ rows: e = [], className: t, colors: n }) {
|
|
|
995
995
|
width: Math.max(0, Math.min(100, t)),
|
|
996
996
|
height: "12",
|
|
997
997
|
rx: "6",
|
|
998
|
-
className: `d3-mini-fill tone-${i %
|
|
998
|
+
className: `d3-mini-fill tone-${i % ke.length}`,
|
|
999
999
|
fill: r[i % r.length]
|
|
1000
1000
|
})]
|
|
1001
1001
|
})
|
|
@@ -1007,24 +1007,24 @@ function Ae({ rows: e = [], className: t, colors: n }) {
|
|
|
1007
1007
|
}
|
|
1008
1008
|
//#endregion
|
|
1009
1009
|
//#region src/components/nceTree/NCETree.tsx
|
|
1010
|
-
var
|
|
1011
|
-
function
|
|
1010
|
+
var Me = 680, Ne = 320;
|
|
1011
|
+
function Pe({ total: e = 0, byContractor: t = [], "data-testid": r }) {
|
|
1012
1012
|
let i = a(null), o = a(/* @__PURE__ */ new Map()), l = a(0), { hoveredRef: p, tooltip: h, hitZonesRef: g } = C(i, {
|
|
1013
|
-
width:
|
|
1014
|
-
height:
|
|
1013
|
+
width: Me,
|
|
1014
|
+
height: Ne
|
|
1015
1015
|
});
|
|
1016
1016
|
return n(() => {
|
|
1017
1017
|
let n = i.current;
|
|
1018
1018
|
if (!n) return;
|
|
1019
|
-
let r = _(n,
|
|
1019
|
+
let r = _(n, Me, Ne);
|
|
1020
1020
|
l.current = 0;
|
|
1021
|
-
let a =
|
|
1021
|
+
let a = Ne / 2, s = Me - 80, c = Math.max(...t.map((e) => e.count ?? 0)), h = (Ne - 60) / (t.length - 1), y = t.map((e, t) => ({
|
|
1022
1022
|
x: s,
|
|
1023
1023
|
y: 30 + t * h
|
|
1024
1024
|
})), b, x = () => {
|
|
1025
1025
|
l.current++;
|
|
1026
1026
|
let n = l.current;
|
|
1027
|
-
r.clearRect(0, 0,
|
|
1027
|
+
r.clearRect(0, 0, Me, Ne);
|
|
1028
1028
|
let i = E(Math.min(n / 72, 1));
|
|
1029
1029
|
M(o.current, p.current), g.current = [], v(r, 88, a, 48 * i, u.blue, .15 * i), t.forEach((n, l) => {
|
|
1030
1030
|
let p = d[l % d.length], h = j(i, l, t.length, E), _ = y[l], b = o.current.get(n.id) ?? 0, x = Math.max(1.5, (n.count ?? 0) / c * 6);
|
|
@@ -1051,42 +1051,42 @@ function Ne({ total: e = 0, byContractor: t = [], "data-testid": r }) {
|
|
|
1051
1051
|
"data-testid": r,
|
|
1052
1052
|
style: {
|
|
1053
1053
|
position: "relative",
|
|
1054
|
-
width:
|
|
1055
|
-
height:
|
|
1054
|
+
width: Me,
|
|
1055
|
+
height: Ne
|
|
1056
1056
|
},
|
|
1057
1057
|
children: [/* @__PURE__ */ s("canvas", {
|
|
1058
1058
|
ref: i,
|
|
1059
1059
|
role: "img",
|
|
1060
1060
|
"aria-label": "NCE fault tree — NCEs per contractor as branching tree",
|
|
1061
1061
|
style: {
|
|
1062
|
-
width:
|
|
1063
|
-
height:
|
|
1062
|
+
width: Me,
|
|
1063
|
+
height: Ne,
|
|
1064
1064
|
display: "block"
|
|
1065
1065
|
}
|
|
1066
1066
|
}), /* @__PURE__ */ s(S, {
|
|
1067
1067
|
...h,
|
|
1068
|
-
parentW:
|
|
1069
|
-
parentH:
|
|
1068
|
+
parentW: Me,
|
|
1069
|
+
parentH: Ne
|
|
1070
1070
|
})]
|
|
1071
1071
|
});
|
|
1072
1072
|
}
|
|
1073
1073
|
//#endregion
|
|
1074
1074
|
//#region src/components/pieChart/PieChart.tsx
|
|
1075
|
-
var
|
|
1076
|
-
function
|
|
1075
|
+
var Fe = 192, Ie = Fe, Le = Fe + 80;
|
|
1076
|
+
function Re({ rows: e = [], variant: t, className: r, colors: i }) {
|
|
1077
1077
|
let o = a(null), f = a(/* @__PURE__ */ new Map()), p = a(0), h = i?.slices ?? d, { hoveredRef: y, tooltip: b, hitZonesRef: x } = C(o, {
|
|
1078
|
-
width:
|
|
1079
|
-
height:
|
|
1078
|
+
width: Ie,
|
|
1079
|
+
height: Le
|
|
1080
1080
|
});
|
|
1081
1081
|
return n(() => {
|
|
1082
1082
|
let n = o.current;
|
|
1083
1083
|
if (!n) return;
|
|
1084
|
-
let r = _(n,
|
|
1084
|
+
let r = _(n, Ie, Le);
|
|
1085
1085
|
p.current = 0;
|
|
1086
|
-
let i =
|
|
1086
|
+
let i = Ie / 2, a = Fe / 2, s = Fe * .4, c = t === "donut" ? Fe * .21 : 0, l = e.reduce((e, t) => e + (t.pricing ?? 0), 0) || 1, d, b = () => {
|
|
1087
1087
|
p.current++;
|
|
1088
1088
|
let n = p.current;
|
|
1089
|
-
r.clearRect(0, 0,
|
|
1089
|
+
r.clearRect(0, 0, Ie, Le);
|
|
1090
1090
|
let o = 1 - (1 - Math.min(n / 48, 1)) ** 3;
|
|
1091
1091
|
M(f.current, y.current), x.current = [];
|
|
1092
1092
|
let _ = -Math.PI / 2;
|
|
@@ -1100,10 +1100,10 @@ function Le({ rows: e = [], variant: t, className: r, colors: i }) {
|
|
|
1100
1100
|
let O = A(n, .03, 3e-4), k = s + b * 6 + (b > 0 ? O * 2 : 0);
|
|
1101
1101
|
r.beginPath(), r.moveTo(i + Math.cos(_) * c, a + Math.sin(_) * c), r.arc(i, a, k, _, g), c > 0 ? r.arc(i, a, c, g, _, !0) : r.lineTo(i, a), r.closePath(), r.fillStyle = m(y, .7 + b * .2), r.fill(), r.strokeStyle = m(u.bg, .8), r.lineWidth = 1.5, r.stroke(), _ = g;
|
|
1102
1102
|
}), t === "donut" && e.length > 0 && v(r, i, a, c * .8, u.blue, .06);
|
|
1103
|
-
let S =
|
|
1103
|
+
let S = Fe + 12;
|
|
1104
1104
|
e.forEach((e, t) => {
|
|
1105
1105
|
let n = h[t % h.length], i = (e.pricing ?? 0) / l, a = f.current.get(e.id ?? `sl-${t}`) ?? 0, o = S + t * 18;
|
|
1106
|
-
r.beginPath(), r.arc(8, o, 4, 0, Math.PI * 2), r.fillStyle = m(n, .8 + a * .2), r.fill(), r.font = "9px 'JetBrains Mono', monospace", r.fillStyle = m(u.t2, .7 + a * .2), r.textAlign = "left", r.fillText(e.vendor, 18, o + 3.5), r.font = "bold 9px 'JetBrains Mono', monospace", r.fillStyle = g(u.t3, n, a), r.textAlign = "right", r.fillText(`${e.pricing ?? 0} (${Math.round(i * 100)}%)`,
|
|
1106
|
+
r.beginPath(), r.arc(8, o, 4, 0, Math.PI * 2), r.fillStyle = m(n, .8 + a * .2), r.fill(), r.font = "9px 'JetBrains Mono', monospace", r.fillStyle = m(u.t2, .7 + a * .2), r.textAlign = "left", r.fillText(e.vendor, 18, o + 3.5), r.font = "bold 9px 'JetBrains Mono', monospace", r.fillStyle = g(u.t3, n, a), r.textAlign = "right", r.fillText(`${e.pricing ?? 0} (${Math.round(i * 100)}%)`, Ie - 4, o + 3.5);
|
|
1107
1107
|
}), d = requestAnimationFrame(b);
|
|
1108
1108
|
};
|
|
1109
1109
|
return b(), () => cancelAnimationFrame(d);
|
|
@@ -1117,30 +1117,30 @@ function Le({ rows: e = [], variant: t, className: r, colors: i }) {
|
|
|
1117
1117
|
children: /* @__PURE__ */ c("div", {
|
|
1118
1118
|
style: {
|
|
1119
1119
|
position: "relative",
|
|
1120
|
-
width:
|
|
1121
|
-
height:
|
|
1120
|
+
width: Ie,
|
|
1121
|
+
height: Le
|
|
1122
1122
|
},
|
|
1123
1123
|
children: [/* @__PURE__ */ s("canvas", {
|
|
1124
1124
|
ref: o,
|
|
1125
1125
|
role: "img",
|
|
1126
1126
|
"aria-label": `${t} chart`,
|
|
1127
1127
|
style: {
|
|
1128
|
-
width:
|
|
1129
|
-
height:
|
|
1128
|
+
width: Ie,
|
|
1129
|
+
height: Le,
|
|
1130
1130
|
display: "block",
|
|
1131
1131
|
borderRadius: 8
|
|
1132
1132
|
}
|
|
1133
1133
|
}), /* @__PURE__ */ s(S, {
|
|
1134
1134
|
...b,
|
|
1135
|
-
parentW:
|
|
1136
|
-
parentH:
|
|
1135
|
+
parentW: Ie,
|
|
1136
|
+
parentH: Le
|
|
1137
1137
|
})]
|
|
1138
1138
|
})
|
|
1139
1139
|
});
|
|
1140
1140
|
}
|
|
1141
1141
|
//#endregion
|
|
1142
1142
|
//#region src/components/sankey/SankeySvg.tsx
|
|
1143
|
-
function
|
|
1143
|
+
function ze(e, t, n, r) {
|
|
1144
1144
|
let i = new Set(t.map((e) => e.source)), a = new Set(t.map((e) => e.target)), o = /* @__PURE__ */ new Map(), s = [];
|
|
1145
1145
|
for (e.forEach((e) => {
|
|
1146
1146
|
i.has(e.id) && !a.has(e.id) && s.push({
|
|
@@ -1185,8 +1185,8 @@ function Re(e, t, n, r) {
|
|
|
1185
1185
|
});
|
|
1186
1186
|
}), f;
|
|
1187
1187
|
}
|
|
1188
|
-
function
|
|
1189
|
-
let y = a(null), x = a(/* @__PURE__ */ new Map()), E = a(0), D = a([]), O = g?.nodes ?? d, k = g?.links ?? u.bd, j = g?.activeLinks ?? u.blue, ee = g?.activeNodes ?? u.blue, N = i(() =>
|
|
1188
|
+
function Be({ nodes: e, links: t, width: r = 960, height: o = 280, ariaLabel: f, selectedEntity: p, className: h, colors: g }) {
|
|
1189
|
+
let y = a(null), x = a(/* @__PURE__ */ new Map()), E = a(0), D = a([]), O = g?.nodes ?? d, k = g?.links ?? u.bd, j = g?.activeLinks ?? u.blue, ee = g?.activeNodes ?? u.blue, N = i(() => ze(e, t, r, o), [
|
|
1190
1190
|
e,
|
|
1191
1191
|
t,
|
|
1192
1192
|
r,
|
|
@@ -1286,7 +1286,7 @@ function ze({ nodes: e, links: t, width: r = 960, height: o = 280, ariaLabel: f,
|
|
|
1286
1286
|
}
|
|
1287
1287
|
//#endregion
|
|
1288
1288
|
//#region src/canvas/CausalFlowCanvas.tsx
|
|
1289
|
-
var
|
|
1289
|
+
var Ve = [
|
|
1290
1290
|
{
|
|
1291
1291
|
x: .13,
|
|
1292
1292
|
y: .48
|
|
@@ -1319,7 +1319,7 @@ var Be = [
|
|
|
1319
1319
|
x: .92,
|
|
1320
1320
|
y: .22
|
|
1321
1321
|
}
|
|
1322
|
-
],
|
|
1322
|
+
], He = [
|
|
1323
1323
|
u.blue,
|
|
1324
1324
|
u.cyan,
|
|
1325
1325
|
u.orange,
|
|
@@ -1328,7 +1328,7 @@ var Be = [
|
|
|
1328
1328
|
u.green,
|
|
1329
1329
|
u.amber,
|
|
1330
1330
|
u.t2
|
|
1331
|
-
],
|
|
1331
|
+
], Ue = [
|
|
1332
1332
|
26,
|
|
1333
1333
|
24,
|
|
1334
1334
|
24,
|
|
@@ -1338,21 +1338,21 @@ var Be = [
|
|
|
1338
1338
|
22,
|
|
1339
1339
|
22
|
|
1340
1340
|
];
|
|
1341
|
-
function
|
|
1341
|
+
function We(e, t) {
|
|
1342
1342
|
let n = 1 - t;
|
|
1343
1343
|
return {
|
|
1344
1344
|
x: n * n * n * e.p0.x + 3 * n * n * t * e.p1.x + 3 * n * t * t * e.p2.x + t * t * t * e.p3.x,
|
|
1345
1345
|
y: n * n * n * e.p0.y + 3 * n * n * t * e.p1.y + 3 * n * t * t * e.p2.y + t * t * t * e.p3.y
|
|
1346
1346
|
};
|
|
1347
1347
|
}
|
|
1348
|
-
function
|
|
1348
|
+
function Ge(e, t) {
|
|
1349
1349
|
let n = 1 - t, r = 3 * n * n * (e.p1.x - e.p0.x) + 6 * n * t * (e.p2.x - e.p1.x) + 3 * t * t * (e.p3.x - e.p2.x), i = 3 * n * n * (e.p1.y - e.p0.y) + 6 * n * t * (e.p2.y - e.p1.y) + 3 * t * t * (e.p3.y - e.p2.y), a = Math.sqrt(r * r + i * i) || 1;
|
|
1350
1350
|
return {
|
|
1351
1351
|
x: -i / a,
|
|
1352
1352
|
y: r / a
|
|
1353
1353
|
};
|
|
1354
1354
|
}
|
|
1355
|
-
function
|
|
1355
|
+
function Ke(e, t) {
|
|
1356
1356
|
let n = t.x - e.x, r = t.y - e.y;
|
|
1357
1357
|
return {
|
|
1358
1358
|
p0: {
|
|
@@ -1373,7 +1373,7 @@ function Ge(e, t) {
|
|
|
1373
1373
|
}
|
|
1374
1374
|
};
|
|
1375
1375
|
}
|
|
1376
|
-
function
|
|
1376
|
+
function qe({ nodes: e, links: t, width: r = 960, height: o = 280, selectedEntity: l }) {
|
|
1377
1377
|
let d = a(null), f = a(0), p = a([]), { hoveredRef: h, tooltip: x, hitZonesRef: T } = C(d, {
|
|
1378
1378
|
width: r,
|
|
1379
1379
|
height: o
|
|
@@ -1381,15 +1381,15 @@ function Ke({ nodes: e, links: t, width: r = 960, height: o = 280, selectedEntit
|
|
|
1381
1381
|
let t = /* @__PURE__ */ new Map();
|
|
1382
1382
|
return e.forEach((e, n) => t.set(e.id, n)), t;
|
|
1383
1383
|
}, [e]), O = i(() => t.length > 0 ? Math.max(...t.map((e) => e.value)) : 100, [t]), k = (e) => O > 1 ? e / 100 : e, j = i(() => e.map((e, t) => {
|
|
1384
|
-
let n =
|
|
1384
|
+
let n = Ve[t % Ve.length];
|
|
1385
1385
|
return {
|
|
1386
1386
|
id: e.id,
|
|
1387
1387
|
label: e.name,
|
|
1388
1388
|
sub: e.valueLabel ?? "",
|
|
1389
1389
|
x: n.x * r,
|
|
1390
1390
|
y: n.y * o,
|
|
1391
|
-
r:
|
|
1392
|
-
color:
|
|
1391
|
+
r: Ue[t % Ue.length],
|
|
1392
|
+
color: He[t % He.length]
|
|
1393
1393
|
};
|
|
1394
1394
|
}), [
|
|
1395
1395
|
e,
|
|
@@ -1411,7 +1411,7 @@ function Ke({ nodes: e, links: t, width: r = 960, height: o = 280, selectedEntit
|
|
|
1411
1411
|
if (t.clearRect(0, 0, r, o), T.current = [], y(t, r, o, e, 50, m(u.blue, .05)), M.forEach((e, n) => {
|
|
1412
1412
|
let r = j[e.fromIdx], i = j[e.toIdx];
|
|
1413
1413
|
if (!r || !i) return;
|
|
1414
|
-
let a = !!l && (r.id === l || i.id === l), o = g(r.color, i.color, .5), s = a ? .18 : .05, c = a ? .25 : .1, d =
|
|
1414
|
+
let a = !!l && (r.id === l || i.id === l), o = g(r.color, i.color, .5), s = a ? .18 : .05, c = a ? .25 : .1, d = Ke(r, i);
|
|
1415
1415
|
t.beginPath(), t.moveTo(d.p0.x, d.p0.y), t.bezierCurveTo(d.p1.x, d.p1.y, d.p2.x, d.p2.y, d.p3.x, d.p3.y), t.strokeStyle = m(o, s), t.lineWidth = 16, t.lineCap = "round", t.stroke(), t.strokeStyle = m(o, c), t.lineWidth = 1.5, t.stroke();
|
|
1416
1416
|
for (let t = 0; t < e.conf * 2.5; t++) Math.random() < .45 && p.current.push({
|
|
1417
1417
|
edgeIdx: n,
|
|
@@ -1420,7 +1420,7 @@ function Ke({ nodes: e, links: t, width: r = 960, height: o = 280, selectedEntit
|
|
|
1420
1420
|
off: (Math.random() - .5) * 13,
|
|
1421
1421
|
sz: .7 + Math.random() * 2
|
|
1422
1422
|
});
|
|
1423
|
-
let f =
|
|
1423
|
+
let f = We(d, .5), h = `${Math.round(e.conf * 100)}%`;
|
|
1424
1424
|
t.font = "bold 12px 'JetBrains Mono', monospace", t.textBaseline = "middle";
|
|
1425
1425
|
let _ = t.measureText(h).width + 14;
|
|
1426
1426
|
t.fillStyle = "rgba(10,16,24,0.88)", t.beginPath(), t.roundRect(f.x - _ / 2, f.y - 11, _, 22, 6), t.fill(), t.strokeStyle = m(u.cyan, .25), t.lineWidth = 1, t.stroke(), t.fillStyle = m(u.cyan, .9), t.textAlign = "center", t.fillText(h, f.x, f.y);
|
|
@@ -1430,7 +1430,7 @@ function Ke({ nodes: e, links: t, width: r = 960, height: o = 280, selectedEntit
|
|
|
1430
1430
|
if (!n) return !1;
|
|
1431
1431
|
let r = j[n.fromIdx], i = j[n.toIdx];
|
|
1432
1432
|
if (!r || !i) return !1;
|
|
1433
|
-
let a =
|
|
1433
|
+
let a = Ke(r, i), o = We(a, e.t), s = Ge(a, e.t), c = o.x + s.x * e.off, l = o.y + s.y * e.off, u = Math.sin(e.t * Math.PI) * .7, d = g(r.color, i.color, e.t);
|
|
1434
1434
|
return v(t, c, l, e.sz * 3, d, u * .1), t.beginPath(), t.arc(c, l, e.sz, 0, Math.PI * 2), t.fillStyle = m(d, u), t.fill(), !0;
|
|
1435
1435
|
}), p.current.length > 350 && (p.current = p.current.slice(-350)), j.forEach((n, r) => {
|
|
1436
1436
|
let i = l === n.id, a = h.current === `node-${r}`, o = A(e, .03, 3e-4) * .1 + 1, s = n.r * o * (i ? 1.15 : 1);
|
|
@@ -1487,10 +1487,10 @@ function Ke({ nodes: e, links: t, width: r = 960, height: o = 280, selectedEntit
|
|
|
1487
1487
|
}
|
|
1488
1488
|
//#endregion
|
|
1489
1489
|
//#region src/components/sankey/ProcessSankey.tsx
|
|
1490
|
-
function
|
|
1491
|
-
return /* @__PURE__ */ s(
|
|
1492
|
-
nodes:
|
|
1493
|
-
links:
|
|
1490
|
+
function Je({ selectedEntity: e, colors: t }) {
|
|
1491
|
+
return /* @__PURE__ */ s(qe, {
|
|
1492
|
+
nodes: Ae.nodes,
|
|
1493
|
+
links: Ae.links,
|
|
1494
1494
|
width: 960,
|
|
1495
1495
|
height: 280,
|
|
1496
1496
|
selectedEntity: e
|
|
@@ -1498,7 +1498,7 @@ function qe({ selectedEntity: e, colors: t }) {
|
|
|
1498
1498
|
}
|
|
1499
1499
|
//#endregion
|
|
1500
1500
|
//#region src/components/sankey/RankingSankey.tsx
|
|
1501
|
-
function
|
|
1501
|
+
function Ye({ rows: e = [], className: t, colors: n }) {
|
|
1502
1502
|
let { nodes: r, links: a } = i(() => {
|
|
1503
1503
|
let t = e.slice(0, 5);
|
|
1504
1504
|
return {
|
|
@@ -1516,7 +1516,7 @@ function Je({ rows: e = [], className: t, colors: n }) {
|
|
|
1516
1516
|
}))
|
|
1517
1517
|
};
|
|
1518
1518
|
}, [e]);
|
|
1519
|
-
return /* @__PURE__ */ s(
|
|
1519
|
+
return /* @__PURE__ */ s(Be, {
|
|
1520
1520
|
nodes: r,
|
|
1521
1521
|
links: a,
|
|
1522
1522
|
width: 760,
|
|
@@ -1528,20 +1528,20 @@ function Je({ rows: e = [], className: t, colors: n }) {
|
|
|
1528
1528
|
}
|
|
1529
1529
|
//#endregion
|
|
1530
1530
|
//#region src/components/quotationBalance/QuotationBalance.tsx
|
|
1531
|
-
var
|
|
1532
|
-
function
|
|
1531
|
+
var Xe = 500, Ze = 320;
|
|
1532
|
+
function Qe({ accepted: e, submitted: t, "data-testid": r }) {
|
|
1533
1533
|
let i = a(null), o = a(0);
|
|
1534
1534
|
return n(() => {
|
|
1535
1535
|
let n = i.current;
|
|
1536
1536
|
if (!n) return;
|
|
1537
|
-
let r = _(n,
|
|
1537
|
+
let r = _(n, Xe, Ze);
|
|
1538
1538
|
o.current = 0;
|
|
1539
|
-
let a =
|
|
1539
|
+
let a = Xe / 2, s = Math.max(e.value, t.value), c = (e.value - t.value) / s * 14, l, d = () => {
|
|
1540
1540
|
o.current++;
|
|
1541
1541
|
let n = o.current;
|
|
1542
|
-
r.clearRect(0, 0,
|
|
1542
|
+
r.clearRect(0, 0, Xe, Ze);
|
|
1543
1543
|
let i = E(Math.min(n / 80, 1)), p = c * k(Math.min(n / 80, 1)) * Math.PI / 180;
|
|
1544
|
-
r.strokeStyle = m(u.bd, .5 * i), r.lineWidth = 2, r.beginPath(), r.moveTo(a, 100), r.lineTo(a,
|
|
1544
|
+
r.strokeStyle = m(u.bd, .5 * i), r.lineWidth = 2, r.beginPath(), r.moveTo(a, 100), r.lineTo(a, Ze - 80), r.stroke(), r.beginPath(), r.arc(a, 100, 5 * i, 0, Math.PI * 2), r.fillStyle = u.t2, r.fill();
|
|
1545
1545
|
let h = {
|
|
1546
1546
|
x: a - Math.cos(p) * 160,
|
|
1547
1547
|
y: 100 + Math.sin(-p) * 160
|
|
@@ -1567,23 +1567,23 @@ function Ze({ accepted: e, submitted: t, "data-testid": r }) {
|
|
|
1567
1567
|
6
|
|
1568
1568
|
]), r.fill(), r.stroke(), r.strokeStyle = m(u.t3, .35 * i), r.lineWidth = 1, [-90 / 3, 90 / 3].forEach((e) => {
|
|
1569
1569
|
r.beginPath(), r.moveTo(g.x + e, g.y + 4), r.lineTo(g.x + e, x), r.stroke();
|
|
1570
|
-
}), i > .5 && (r.globalAlpha = Math.min(1, (i - .5) / .5), r.font = "bold 14px 'JetBrains Mono', monospace", r.fillStyle = u.amber, r.textAlign = "center", r.fillText(t.label, g.x, x + b + 18), r.font = f.font, r.fillStyle = f.color, r.fillText("Submitted", g.x, x + b + 32), r.fillText(`${t.count} quotations`, g.x, x + b + 44), r.globalAlpha = 1), i > .85 && Math.abs(c) > 1 && (r.globalAlpha = Math.min(1, (i - .85) / .15) * .6, r.font = f.font, r.fillStyle = f.color, r.textAlign = "center", r.fillText(`${Math.abs(c).toFixed(1)}° tilt toward accepted`, a,
|
|
1570
|
+
}), i > .5 && (r.globalAlpha = Math.min(1, (i - .5) / .5), r.font = "bold 14px 'JetBrains Mono', monospace", r.fillStyle = u.amber, r.textAlign = "center", r.fillText(t.label, g.x, x + b + 18), r.font = f.font, r.fillStyle = f.color, r.fillText("Submitted", g.x, x + b + 32), r.fillText(`${t.count} quotations`, g.x, x + b + 44), r.globalAlpha = 1), i > .85 && Math.abs(c) > 1 && (r.globalAlpha = Math.min(1, (i - .85) / .15) * .6, r.font = f.font, r.fillStyle = f.color, r.textAlign = "center", r.fillText(`${Math.abs(c).toFixed(1)}° tilt toward accepted`, a, Ze - 12), r.globalAlpha = 1), l = requestAnimationFrame(d);
|
|
1571
1571
|
};
|
|
1572
1572
|
return d(), () => cancelAnimationFrame(l);
|
|
1573
1573
|
}, [e, t]), /* @__PURE__ */ s("div", {
|
|
1574
1574
|
"data-testid": r,
|
|
1575
1575
|
style: {
|
|
1576
1576
|
position: "relative",
|
|
1577
|
-
width:
|
|
1578
|
-
height:
|
|
1577
|
+
width: Xe,
|
|
1578
|
+
height: Ze
|
|
1579
1579
|
},
|
|
1580
1580
|
children: /* @__PURE__ */ s("canvas", {
|
|
1581
1581
|
ref: i,
|
|
1582
1582
|
role: "img",
|
|
1583
1583
|
"aria-label": "Quotation balance — accepted vs submitted quotation value",
|
|
1584
1584
|
style: {
|
|
1585
|
-
width:
|
|
1586
|
-
height:
|
|
1585
|
+
width: Xe,
|
|
1586
|
+
height: Ze,
|
|
1587
1587
|
display: "block"
|
|
1588
1588
|
}
|
|
1589
1589
|
})
|
|
@@ -1591,25 +1591,25 @@ function Ze({ accepted: e, submitted: t, "data-testid": r }) {
|
|
|
1591
1591
|
}
|
|
1592
1592
|
//#endregion
|
|
1593
1593
|
//#region src/components/quotationTrend/QuotationTrend.tsx
|
|
1594
|
-
var
|
|
1595
|
-
function
|
|
1594
|
+
var $e = 680, W = 280;
|
|
1595
|
+
function et({ trend: e = [], "data-testid": t }) {
|
|
1596
1596
|
let r = a(null), i = a(/* @__PURE__ */ new Map()), o = a(0), { hoveredRef: l, tooltip: d, hitZonesRef: p } = C(r, {
|
|
1597
|
-
width:
|
|
1598
|
-
height:
|
|
1597
|
+
width: $e,
|
|
1598
|
+
height: W
|
|
1599
1599
|
});
|
|
1600
1600
|
return n(() => {
|
|
1601
1601
|
let t = r.current;
|
|
1602
1602
|
if (!t) return;
|
|
1603
|
-
let n = _(t,
|
|
1603
|
+
let n = _(t, $e, W);
|
|
1604
1604
|
o.current = 0;
|
|
1605
|
-
let a =
|
|
1605
|
+
let a = $e - 54 - 28, s = W - 30 - 54, c = Math.max(...e.map((e) => e.count), 1), d = e.length, h = d > 1 ? a / (d - 1) : a, g = e.map((e, t) => ({
|
|
1606
1606
|
x: 54 + t * h,
|
|
1607
1607
|
y: 30 + s - e.count / c * s,
|
|
1608
1608
|
point: e
|
|
1609
1609
|
})), y, b = () => {
|
|
1610
1610
|
o.current++;
|
|
1611
1611
|
let e = o.current;
|
|
1612
|
-
n.clearRect(0, 0,
|
|
1612
|
+
n.clearRect(0, 0, $e, W);
|
|
1613
1613
|
let t = E(Math.min(e / 72, 1));
|
|
1614
1614
|
M(i.current, l.current), p.current = [], [
|
|
1615
1615
|
.25,
|
|
@@ -1619,7 +1619,7 @@ function $e({ trend: e = [], "data-testid": t }) {
|
|
|
1619
1619
|
].forEach((e) => {
|
|
1620
1620
|
let t = 30 + s - e * s;
|
|
1621
1621
|
n.strokeStyle = m(u.bd, .18), n.lineWidth = 1, n.setLineDash([3, 5]), n.beginPath(), n.moveTo(54, t), n.lineTo(54 + a, t), n.stroke(), n.setLineDash([]), n.font = f.font, n.fillStyle = f.color, n.textAlign = "right", n.fillText(String(Math.round(c * e)), 48, t + 3);
|
|
1622
|
-
}), n.save(), n.translate(12, 30 + s / 2), n.rotate(-Math.PI / 2), n.font = f.font, n.fillStyle = f.color, n.textAlign = "center", n.fillText("Submissions", 0, 0), n.restore(), n.font = f.font, n.fillStyle = f.color, n.textAlign = "center", n.fillText("Week", 54 + a / 2,
|
|
1622
|
+
}), n.save(), n.translate(12, 30 + s / 2), n.rotate(-Math.PI / 2), n.font = f.font, n.fillStyle = f.color, n.textAlign = "center", n.fillText("Submissions", 0, 0), n.restore(), n.font = f.font, n.fillStyle = f.color, n.textAlign = "center", n.fillText("Week", 54 + a / 2, W - 6), n.strokeStyle = m(u.bd, .3), n.lineWidth = 1, n.setLineDash([]), n.beginPath(), n.moveTo(54, 30 + s), n.lineTo(54 + a, 30 + s), n.stroke();
|
|
1623
1623
|
let r = t * (d - 1), h = Math.floor(r) + 1;
|
|
1624
1624
|
if (h >= 2) {
|
|
1625
1625
|
n.beginPath(), n.moveTo(g[0].x, 30 + s), n.lineTo(g[0].x, g[0].y);
|
|
@@ -1647,60 +1647,170 @@ function $e({ trend: e = [], "data-testid": t }) {
|
|
|
1647
1647
|
color: u.cyan
|
|
1648
1648
|
}), a > 0 && x(n, e.x, 30, 30 + s, m(u.cyan, .15 * a));
|
|
1649
1649
|
let o = e.point.count === c;
|
|
1650
|
-
(a > 0 || o) && v(n, e.x, e.y, 14, u.cyan, (o ? .3 : 0) + a * .25), n.beginPath(), n.arc(e.x, e.y, a > 0 ? 5 : 3.5, 0, Math.PI * 2), n.fillStyle = m(u.cyan, a > 0 ? 1 : .8), n.fill(), (a > 0 || o) && (n.font = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", n.fillStyle = u.cyan, n.textAlign = "center", n.fillText(String(e.point.count), e.x, e.y - 10)), n.font = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", n.fillStyle = a > 0 ? u.cyan : f.color, n.textAlign = "center", n.fillText(e.point.week, e.x,
|
|
1650
|
+
(a > 0 || o) && v(n, e.x, e.y, 14, u.cyan, (o ? .3 : 0) + a * .25), n.beginPath(), n.arc(e.x, e.y, a > 0 ? 5 : 3.5, 0, Math.PI * 2), n.fillStyle = m(u.cyan, a > 0 ? 1 : .8), n.fill(), (a > 0 || o) && (n.font = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", n.fillStyle = u.cyan, n.textAlign = "center", n.fillText(String(e.point.count), e.x, e.y - 10)), n.font = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", n.fillStyle = a > 0 ? u.cyan : f.color, n.textAlign = "center", n.fillText(e.point.week, e.x, W - 54 + 14);
|
|
1651
1651
|
}), y = requestAnimationFrame(b);
|
|
1652
1652
|
};
|
|
1653
1653
|
return b(), () => cancelAnimationFrame(y);
|
|
1654
|
-
}, [e]), /* @__PURE__ */
|
|
1654
|
+
}, [e]), /* @__PURE__ */ s("div", {
|
|
1655
1655
|
"data-testid": t,
|
|
1656
|
+
className: "trend-scroll",
|
|
1656
1657
|
style: {
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
height: G
|
|
1658
|
+
width: "100%",
|
|
1659
|
+
overflowX: "auto"
|
|
1660
1660
|
},
|
|
1661
|
-
children:
|
|
1662
|
-
ref: r,
|
|
1663
|
-
role: "img",
|
|
1664
|
-
"aria-label": "Quotation submission trend — weekly count over 12 weeks",
|
|
1661
|
+
children: /* @__PURE__ */ c("div", {
|
|
1665
1662
|
style: {
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1663
|
+
position: "relative",
|
|
1664
|
+
width: $e,
|
|
1665
|
+
height: W
|
|
1666
|
+
},
|
|
1667
|
+
children: [/* @__PURE__ */ s("canvas", {
|
|
1668
|
+
ref: r,
|
|
1669
|
+
role: "img",
|
|
1670
|
+
"aria-label": "Trend chart — count over time",
|
|
1671
|
+
style: {
|
|
1672
|
+
width: $e,
|
|
1673
|
+
height: W,
|
|
1674
|
+
display: "block"
|
|
1675
|
+
}
|
|
1676
|
+
}), /* @__PURE__ */ s(S, {
|
|
1677
|
+
...d,
|
|
1678
|
+
parentW: $e,
|
|
1679
|
+
parentH: W
|
|
1680
|
+
})]
|
|
1681
|
+
})
|
|
1682
|
+
});
|
|
1683
|
+
}
|
|
1684
|
+
//#endregion
|
|
1685
|
+
//#region src/components/trend/Trend.tsx
|
|
1686
|
+
var tt = 680, G = 280, nt = 54, rt = 28, it = 64, at = "500 14px 'Satoshi Variable', 'DM Sans', sans-serif", ot = 12;
|
|
1687
|
+
function st({ trend: e = [], "data-testid": t }) {
|
|
1688
|
+
let r = a(null), o = a(/* @__PURE__ */ new Map()), l = a(0), d = i(() => {
|
|
1689
|
+
if (e.length <= 1) return it;
|
|
1690
|
+
let t = document.createElement("canvas").getContext("2d");
|
|
1691
|
+
if (!t) return it;
|
|
1692
|
+
t.font = at;
|
|
1693
|
+
let n = Math.max(...e.map((e) => t.measureText(e.week).width));
|
|
1694
|
+
return Math.max(it, n + ot);
|
|
1695
|
+
}, [e]), p = Math.max(tt, nt + rt + Math.max(0, e.length - 1) * d), { hoveredRef: h, tooltip: g, hitZonesRef: y } = C(r, {
|
|
1696
|
+
width: p,
|
|
1697
|
+
height: G
|
|
1698
|
+
});
|
|
1699
|
+
return n(() => {
|
|
1700
|
+
let t = r.current;
|
|
1701
|
+
if (!t) return;
|
|
1702
|
+
let n = _(t, p, G);
|
|
1703
|
+
l.current = 0;
|
|
1704
|
+
let i = nt, a = rt, s = p - i - a, c = G - 30 - 54, g = Math.max(...e.map((e) => e.count), 1), b = e.length, S = b > 1 ? Math.max(s / (b - 1), d) : s, C = e.map((e, t) => ({
|
|
1705
|
+
x: i + t * S,
|
|
1706
|
+
y: 30 + c - e.count / g * c,
|
|
1707
|
+
point: e
|
|
1708
|
+
})), T, D = () => {
|
|
1709
|
+
l.current++;
|
|
1710
|
+
let e = l.current;
|
|
1711
|
+
n.clearRect(0, 0, p, G);
|
|
1712
|
+
let t = E(Math.min(e / 72, 1));
|
|
1713
|
+
M(o.current, h.current), y.current = [], [
|
|
1714
|
+
.25,
|
|
1715
|
+
.5,
|
|
1716
|
+
.75,
|
|
1717
|
+
1
|
|
1718
|
+
].forEach((e) => {
|
|
1719
|
+
let t = 30 + c - e * c;
|
|
1720
|
+
n.strokeStyle = m(u.bd, .18), n.lineWidth = 1, n.setLineDash([3, 5]), n.beginPath(), n.moveTo(i, t), n.lineTo(i + s, t), n.stroke(), n.setLineDash([]), n.font = f.font, n.fillStyle = f.color, n.textAlign = "right", n.fillText(String(Math.round(g * e)), i - 6, t + 3);
|
|
1721
|
+
}), n.save(), n.translate(12, 30 + c / 2), n.rotate(-Math.PI / 2), n.font = f.font, n.fillStyle = f.color, n.textAlign = "center", n.fillText("Count", 0, 0), n.restore(), n.font = f.font, n.fillStyle = f.color, n.textAlign = "center", n.fillText("Period", i + s / 2, G - 6), n.strokeStyle = m(u.bd, .3), n.lineWidth = 1, n.setLineDash([]), n.beginPath(), n.moveTo(i, 30 + c), n.lineTo(i + s, 30 + c), n.stroke();
|
|
1722
|
+
let r = t * (b - 1), a = Math.floor(r) + 1;
|
|
1723
|
+
if (a >= 2) {
|
|
1724
|
+
n.beginPath(), n.moveTo(C[0].x, 30 + c), n.lineTo(C[0].x, C[0].y);
|
|
1725
|
+
for (let e = 1; e < a; e++) {
|
|
1726
|
+
let t = r - Math.floor(r), i = e < a - 1 ? C[e].x : C[e - 1].x + (C[e].x - C[e - 1].x) * (e === Math.ceil(r) ? t : 1), o = e < a - 1 ? C[e].y : C[e - 1].y + (C[e].y - C[e - 1].y) * (e === Math.ceil(r) ? t : 1);
|
|
1727
|
+
n.lineTo(i, o);
|
|
1728
|
+
}
|
|
1729
|
+
let e = C[Math.min(a - 1, b - 1)];
|
|
1730
|
+
n.lineTo(e.x, 30 + c), n.closePath();
|
|
1731
|
+
let t = n.createLinearGradient(0, 30, 0, 30 + c);
|
|
1732
|
+
t.addColorStop(0, m(u.cyan, .22)), t.addColorStop(1, m(u.cyan, .02)), n.fillStyle = t, n.fill();
|
|
1669
1733
|
}
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1734
|
+
n.beginPath();
|
|
1735
|
+
for (let e = 0; e < a; e++) {
|
|
1736
|
+
let t = r - Math.floor(r), i = e === a - 1 && e > 0 && e === Math.ceil(r), o = e === 0 || e < a - 1 ? C[e].x : C[e - 1].x + (C[e].x - C[e - 1].x) * (i ? t : 1), s = e === 0 || e < a - 1 ? C[e].y : C[e - 1].y + (C[e].y - C[e - 1].y) * (i ? t : 1);
|
|
1737
|
+
e === 0 ? n.moveTo(o, s) : n.lineTo(o, s);
|
|
1738
|
+
}
|
|
1739
|
+
n.strokeStyle = m(u.cyan, .85), n.lineWidth = 2, n.stroke(), C.forEach((e, t) => {
|
|
1740
|
+
if (t >= a) return;
|
|
1741
|
+
let r = `pt-${t}`, i = o.current.get(r) ?? 0;
|
|
1742
|
+
w(y.current, r, e.x, e.y, 10, {
|
|
1743
|
+
label: e.point.week,
|
|
1744
|
+
value: `${e.point.count} submissions`,
|
|
1745
|
+
sublabel: `£${e.point.value}M value`,
|
|
1746
|
+
color: u.cyan
|
|
1747
|
+
}), i > 0 && x(n, e.x, 30, 30 + c, m(u.cyan, .15 * i));
|
|
1748
|
+
let s = e.point.count === g;
|
|
1749
|
+
(i > 0 || s) && v(n, e.x, e.y, 14, u.cyan, (s ? .3 : 0) + i * .25), n.beginPath(), n.arc(e.x, e.y, i > 0 ? 5 : 3.5, 0, Math.PI * 2), n.fillStyle = m(u.cyan, i > 0 ? 1 : .8), n.fill(), (i > 0 || s) && (n.font = at, n.fillStyle = u.cyan, n.textAlign = "center", n.fillText(String(e.point.count), e.x, e.y - 10)), n.font = at, n.fillStyle = i > 0 ? u.cyan : f.color, n.textAlign = "center", n.fillText(e.point.week, e.x, G - 54 + 14);
|
|
1750
|
+
}), T = requestAnimationFrame(D);
|
|
1751
|
+
};
|
|
1752
|
+
return D(), () => cancelAnimationFrame(T);
|
|
1753
|
+
}, [
|
|
1754
|
+
e,
|
|
1755
|
+
p,
|
|
1756
|
+
d
|
|
1757
|
+
]), /* @__PURE__ */ s("div", {
|
|
1758
|
+
"data-testid": t,
|
|
1759
|
+
className: "trend-scroll",
|
|
1760
|
+
style: {
|
|
1761
|
+
width: "100%",
|
|
1762
|
+
overflowX: "auto"
|
|
1763
|
+
},
|
|
1764
|
+
children: /* @__PURE__ */ c("div", {
|
|
1765
|
+
style: {
|
|
1766
|
+
position: "relative",
|
|
1767
|
+
width: p,
|
|
1768
|
+
height: G
|
|
1769
|
+
},
|
|
1770
|
+
children: [/* @__PURE__ */ s("canvas", {
|
|
1771
|
+
ref: r,
|
|
1772
|
+
role: "img",
|
|
1773
|
+
"aria-label": "Trend chart — count over time",
|
|
1774
|
+
style: {
|
|
1775
|
+
width: p,
|
|
1776
|
+
height: G,
|
|
1777
|
+
display: "block"
|
|
1778
|
+
}
|
|
1779
|
+
}), /* @__PURE__ */ s(S, {
|
|
1780
|
+
...g,
|
|
1781
|
+
parentW: p,
|
|
1782
|
+
parentH: G
|
|
1783
|
+
})]
|
|
1784
|
+
})
|
|
1675
1785
|
});
|
|
1676
1786
|
}
|
|
1677
1787
|
//#endregion
|
|
1678
1788
|
//#region src/components/severityBands/SeverityBands.tsx
|
|
1679
|
-
var K = 680,
|
|
1789
|
+
var K = 680, ct = 240, lt = {
|
|
1680
1790
|
Critical: u.red,
|
|
1681
1791
|
High: u.orange,
|
|
1682
1792
|
Medium: u.amber,
|
|
1683
1793
|
Low: u.green
|
|
1684
1794
|
};
|
|
1685
|
-
function
|
|
1795
|
+
function ut({ severities: e = [], "data-testid": t }) {
|
|
1686
1796
|
let r = a(null), i = a(/* @__PURE__ */ new Map()), o = a(0), { hoveredRef: l, tooltip: d, hitZonesRef: p } = C(r, {
|
|
1687
1797
|
width: K,
|
|
1688
|
-
height:
|
|
1798
|
+
height: ct
|
|
1689
1799
|
});
|
|
1690
1800
|
return n(() => {
|
|
1691
1801
|
let t = r.current;
|
|
1692
1802
|
if (!t) return;
|
|
1693
|
-
let n = _(t, K,
|
|
1803
|
+
let n = _(t, K, ct);
|
|
1694
1804
|
o.current = 0;
|
|
1695
|
-
let a = e.reduce((e, t) => e + t.count, 0), s = K - 28 - 28, c =
|
|
1805
|
+
let a = e.reduce((e, t) => e + t.count, 0), s = K - 28 - 28, c = ct - 50 - 52, d = e.map((e) => e.count / a * s), h, g = () => {
|
|
1696
1806
|
o.current++;
|
|
1697
1807
|
let t = o.current;
|
|
1698
|
-
n.clearRect(0, 0, K,
|
|
1808
|
+
n.clearRect(0, 0, K, ct);
|
|
1699
1809
|
let r = D(Math.min(t / 60, 1));
|
|
1700
1810
|
M(i.current, l.current), p.current = [], n.strokeStyle = m(u.bd, .2), n.lineWidth = 1, n.beginPath(), n.rect(28, 50, s, c), n.stroke(), n.strokeStyle = m(u.t4, .15), n.lineWidth = 1, n.setLineDash([4, 4]), n.beginPath(), n.moveTo(K / 2, 50), n.lineTo(K / 2, 50 + c), n.stroke(), n.setLineDash([]);
|
|
1701
1811
|
let _ = 28;
|
|
1702
1812
|
e.forEach((e, t) => {
|
|
1703
|
-
let o =
|
|
1813
|
+
let o = lt[e.severity] ?? u.blue, s = d[t];
|
|
1704
1814
|
s * r;
|
|
1705
1815
|
let l = i.current.get(e.severity) ?? 0, h = _ + s / 2, g = s * .85;
|
|
1706
1816
|
h - g / 2;
|
|
@@ -1725,7 +1835,7 @@ function nt({ severities: e = [], "data-testid": t }) {
|
|
|
1725
1835
|
style: {
|
|
1726
1836
|
position: "relative",
|
|
1727
1837
|
width: K,
|
|
1728
|
-
height:
|
|
1838
|
+
height: ct
|
|
1729
1839
|
},
|
|
1730
1840
|
children: [/* @__PURE__ */ s("canvas", {
|
|
1731
1841
|
ref: r,
|
|
@@ -1733,24 +1843,24 @@ function nt({ severities: e = [], "data-testid": t }) {
|
|
|
1733
1843
|
"aria-label": "Early Warning severity distribution — prism spectrum bands",
|
|
1734
1844
|
style: {
|
|
1735
1845
|
width: K,
|
|
1736
|
-
height:
|
|
1846
|
+
height: ct,
|
|
1737
1847
|
display: "block"
|
|
1738
1848
|
}
|
|
1739
1849
|
}), /* @__PURE__ */ s(S, {
|
|
1740
1850
|
...d,
|
|
1741
1851
|
parentW: K,
|
|
1742
|
-
parentH:
|
|
1852
|
+
parentH: ct
|
|
1743
1853
|
})]
|
|
1744
1854
|
});
|
|
1745
1855
|
}
|
|
1746
1856
|
//#endregion
|
|
1747
1857
|
//#region src/components/statusArc/StatusArc.tsx
|
|
1748
|
-
var q = 460, J = 300,
|
|
1858
|
+
var q = 460, J = 300, dt = {
|
|
1749
1859
|
Open: u.red,
|
|
1750
1860
|
Submitted: u.amber,
|
|
1751
1861
|
Closed: u.green
|
|
1752
1862
|
};
|
|
1753
|
-
function
|
|
1863
|
+
function ft({ segments: e = [], title: t, "data-testid": r }) {
|
|
1754
1864
|
let i = a(null), o = a(0), l = a(/* @__PURE__ */ new Map()), { hoveredRef: d, tooltip: p, hitZonesRef: h } = C(i, {
|
|
1755
1865
|
width: q,
|
|
1756
1866
|
height: J
|
|
@@ -1767,14 +1877,14 @@ function it({ segments: e = [], title: t, "data-testid": r }) {
|
|
|
1767
1877
|
let n = t === d.current ? 1 : 0, r = e + (n - e) * .12;
|
|
1768
1878
|
Math.abs(r - n) < .005 ? n === 0 ? l.current.delete(t) : l.current.set(t, 1) : l.current.set(t, r);
|
|
1769
1879
|
}), d.current && !l.current.has(d.current) && l.current.set(d.current, 0), y(n, q, J, t, 40, m(u.blue, .04)), e.forEach((e, i) => {
|
|
1770
|
-
let o = i / 3 * Math.PI * 2 - Math.PI / 2, c = r + Math.cos(o) * s, l = a + Math.sin(o) * s, d =
|
|
1880
|
+
let o = i / 3 * Math.PI * 2 - Math.PI / 2, c = r + Math.cos(o) * s, l = a + Math.sin(o) * s, d = dt[e.status] ?? u.blue, h = 2 + e.count / p * 8;
|
|
1771
1881
|
n.beginPath(), n.moveTo(r, a), n.lineTo(c, l), n.strokeStyle = m(d, .08), n.lineWidth = h * 2, n.stroke(), n.beginPath(), n.moveTo(r, a), n.lineTo(c, l), n.strokeStyle = m(d, .25), n.lineWidth = 1, n.stroke();
|
|
1772
1882
|
let g = (t * .005 + i * .33) % 1, _ = r + (c - r) * g, y = a + (l - a) * g;
|
|
1773
1883
|
v(n, _, y, 6, d, .4), n.beginPath(), n.arc(_, y, 2, 0, Math.PI * 2), n.fillStyle = m(d, .8), n.fill();
|
|
1774
1884
|
let b = (r + c) / 2, x = (a + l) / 2;
|
|
1775
1885
|
n.font = "bold " + f.font, n.textAlign = "center", n.textBaseline = "middle", n.fillStyle = m(d, .85), n.fillText(String(e.count), b, x);
|
|
1776
1886
|
}), e.forEach((e, t) => {
|
|
1777
|
-
let i = t / 3 * Math.PI * 2 - Math.PI / 2, o = r + Math.cos(i) * s, d = a + Math.sin(i) * s, g =
|
|
1887
|
+
let i = t / 3 * Math.PI * 2 - Math.PI / 2, o = r + Math.cos(i) * s, d = a + Math.sin(i) * s, g = dt[e.status] ?? u.blue, _ = 10 + e.count / p * 18, y = l.current.get(e.status) ?? 0;
|
|
1778
1888
|
v(n, o, d, _ * 2.5, g, .2 + y * .15);
|
|
1779
1889
|
let b = n.createRadialGradient(o, d - _ * .2, 0, o, d, _);
|
|
1780
1890
|
b.addColorStop(0, m(g, .8 + y * .2)), b.addColorStop(1, m(g, .4 + y * .1)), n.beginPath(), n.arc(o, d, _, 0, Math.PI * 2), n.fillStyle = b, n.fill(), n.font = "bold " + f.font, n.textAlign = "center", n.textBaseline = "middle", n.fillStyle = m(u.t1, .9), n.fillText(e.status, o, d), w(h.current, e.status, o, d, _ + 6, {
|
|
@@ -1820,8 +1930,8 @@ function it({ segments: e = [], title: t, "data-testid": r }) {
|
|
|
1820
1930
|
}
|
|
1821
1931
|
//#endregion
|
|
1822
1932
|
//#region src/components/trendChart/TrendChart.tsx
|
|
1823
|
-
var
|
|
1824
|
-
function
|
|
1933
|
+
var pt = 280, Y = 96;
|
|
1934
|
+
function mt({ points: e = [], className: t, colors: r }) {
|
|
1825
1935
|
let o = a(null), d = a(/* @__PURE__ */ new Map()), f = a(0), p = i(() => e.map(([e, t]) => {
|
|
1826
1936
|
let n = String(t).match(/-?\d+(\.\d+)?/);
|
|
1827
1937
|
return {
|
|
@@ -1829,18 +1939,18 @@ function ot({ points: e = [], className: t, colors: r }) {
|
|
|
1829
1939
|
value: n ? Number(n[0]) : 0
|
|
1830
1940
|
};
|
|
1831
1941
|
}), [e]), { mouseRef: h, hoveredRef: g, tooltip: y, hitZonesRef: b } = C(o, {
|
|
1832
|
-
width:
|
|
1942
|
+
width: pt,
|
|
1833
1943
|
height: Y
|
|
1834
1944
|
});
|
|
1835
1945
|
return n(() => {
|
|
1836
1946
|
let e = o.current;
|
|
1837
1947
|
if (!e) return;
|
|
1838
|
-
let t = _(e,
|
|
1948
|
+
let t = _(e, pt, Y);
|
|
1839
1949
|
f.current = 0;
|
|
1840
1950
|
let n = r?.line ?? u.blue, i = r?.point ?? u.blue, a = r?.axisLine ?? u.bd, s, c = () => {
|
|
1841
1951
|
f.current++;
|
|
1842
1952
|
let e = f.current;
|
|
1843
|
-
if (t.clearRect(0, 0,
|
|
1953
|
+
if (t.clearRect(0, 0, pt, Y), p.length < 2) {
|
|
1844
1954
|
s = requestAnimationFrame(c);
|
|
1845
1955
|
return;
|
|
1846
1956
|
}
|
|
@@ -1849,8 +1959,8 @@ function ot({ points: e = [], className: t, colors: r }) {
|
|
|
1849
1959
|
right: 12,
|
|
1850
1960
|
top: 16,
|
|
1851
1961
|
bottom: 20
|
|
1852
|
-
}, o =
|
|
1853
|
-
if (M(d.current, g.current), b.current = [], t.strokeStyle = m(a, .3), t.lineWidth = .5, t.setLineDash([]), t.beginPath(), t.moveTo(r.left, Y - r.bottom), t.lineTo(
|
|
1962
|
+
}, o = pt - r.left - r.right, l = Y - r.top - r.bottom, _ = p.map((e) => e.value), y = Math.min(..._), S = Math.max(..._) - y || 1, C = (e) => r.left + e / (p.length - 1) * o, T = (e) => r.top + (1 - (e - y) / S) * l, E = 1 - (1 - Math.min(e / 48, 1)) ** 3, D = Math.max(2, Math.floor(E * p.length));
|
|
1963
|
+
if (M(d.current, g.current), b.current = [], t.strokeStyle = m(a, .3), t.lineWidth = .5, t.setLineDash([]), t.beginPath(), t.moveTo(r.left, Y - r.bottom), t.lineTo(pt - r.right, Y - r.bottom), t.stroke(), t.font = "9px 'JetBrains Mono', monospace", t.fillStyle = m(u.t4, .9), t.textAlign = "center", p.forEach((e, n) => {
|
|
1854
1964
|
t.fillText(e.label.replace("Day ", "D"), C(n), Y - 4);
|
|
1855
1965
|
}), h.current.over && g.current) {
|
|
1856
1966
|
let e = parseInt(g.current.split("-")[1]);
|
|
@@ -1887,7 +1997,7 @@ function ot({ points: e = [], className: t, colors: r }) {
|
|
|
1887
1997
|
children: /* @__PURE__ */ c("div", {
|
|
1888
1998
|
style: {
|
|
1889
1999
|
position: "relative",
|
|
1890
|
-
width:
|
|
2000
|
+
width: pt,
|
|
1891
2001
|
height: Y
|
|
1892
2002
|
},
|
|
1893
2003
|
children: [/* @__PURE__ */ s("canvas", {
|
|
@@ -1895,14 +2005,14 @@ function ot({ points: e = [], className: t, colors: r }) {
|
|
|
1895
2005
|
role: "img",
|
|
1896
2006
|
"aria-label": "trend chart",
|
|
1897
2007
|
style: {
|
|
1898
|
-
width:
|
|
2008
|
+
width: pt,
|
|
1899
2009
|
height: Y,
|
|
1900
2010
|
display: "block",
|
|
1901
2011
|
borderRadius: 8
|
|
1902
2012
|
}
|
|
1903
2013
|
}), /* @__PURE__ */ s(S, {
|
|
1904
2014
|
...y,
|
|
1905
|
-
parentW:
|
|
2015
|
+
parentW: pt,
|
|
1906
2016
|
parentH: Y
|
|
1907
2017
|
})]
|
|
1908
2018
|
})
|
|
@@ -1910,21 +2020,21 @@ function ot({ points: e = [], className: t, colors: r }) {
|
|
|
1910
2020
|
}
|
|
1911
2021
|
//#endregion
|
|
1912
2022
|
//#region src/components/variationSplit/VariationSplit.tsx
|
|
1913
|
-
var
|
|
1914
|
-
function
|
|
2023
|
+
var ht = 680, gt = 320;
|
|
2024
|
+
function _t({ contractors: e = [], "data-testid": t }) {
|
|
1915
2025
|
let r = a(null), i = a(/* @__PURE__ */ new Map()), o = a(0), { hoveredRef: l, tooltip: f, hitZonesRef: h } = C(r, {
|
|
1916
|
-
width:
|
|
1917
|
-
height:
|
|
2026
|
+
width: ht,
|
|
2027
|
+
height: gt
|
|
1918
2028
|
});
|
|
1919
2029
|
return n(() => {
|
|
1920
2030
|
let t = r.current;
|
|
1921
2031
|
if (!t) return;
|
|
1922
|
-
let n = _(t,
|
|
2032
|
+
let n = _(t, ht, gt);
|
|
1923
2033
|
o.current = 0;
|
|
1924
|
-
let a =
|
|
2034
|
+
let a = ht - 60 - 28, s = Math.max(...e.map((e) => (e.implemented ?? 0) + (e.unimplemented ?? 0))), c = e.length * 40 - 14, f = 16 + (gt - 16 - 32 - c) / 2, g, y = () => {
|
|
1925
2035
|
o.current++;
|
|
1926
2036
|
let t = o.current;
|
|
1927
|
-
n.clearRect(0, 0,
|
|
2037
|
+
n.clearRect(0, 0, ht, gt);
|
|
1928
2038
|
let r = D(Math.min(t / 60, 1));
|
|
1929
2039
|
M(i.current, l.current), h.current = [], e.forEach((t, o) => {
|
|
1930
2040
|
let c = d[o % d.length], l = j(r, o, e.length, D), p = f + o * 40, g = (t.implemented ?? 0) + (t.unimplemented ?? 0), _ = (t.implemented ?? 0) / s * a * l, y = (t.unimplemented ?? 0) / s * a * l, b = `${t.id}-impl`, x = `${t.id}-un`, S = i.current.get(b) ?? 0, C = i.current.get(x) ?? 0;
|
|
@@ -1958,39 +2068,39 @@ function lt({ contractors: e = [], "data-testid": t }) {
|
|
|
1958
2068
|
"data-testid": t,
|
|
1959
2069
|
style: {
|
|
1960
2070
|
position: "relative",
|
|
1961
|
-
width:
|
|
1962
|
-
height:
|
|
2071
|
+
width: ht,
|
|
2072
|
+
height: gt
|
|
1963
2073
|
},
|
|
1964
2074
|
children: [/* @__PURE__ */ s("canvas", {
|
|
1965
2075
|
ref: r,
|
|
1966
2076
|
role: "img",
|
|
1967
2077
|
"aria-label": "Implemented vs unimplemented variations per contractor — split bar",
|
|
1968
2078
|
style: {
|
|
1969
|
-
width:
|
|
1970
|
-
height:
|
|
2079
|
+
width: ht,
|
|
2080
|
+
height: gt,
|
|
1971
2081
|
display: "block"
|
|
1972
2082
|
}
|
|
1973
2083
|
}), /* @__PURE__ */ s(S, {
|
|
1974
2084
|
...f,
|
|
1975
|
-
parentW:
|
|
1976
|
-
parentH:
|
|
2085
|
+
parentW: ht,
|
|
2086
|
+
parentH: gt
|
|
1977
2087
|
})]
|
|
1978
2088
|
});
|
|
1979
2089
|
}
|
|
1980
2090
|
//#endregion
|
|
1981
2091
|
//#region src/components/weeklyFlow/WeeklyFlow.tsx
|
|
1982
|
-
var
|
|
1983
|
-
function
|
|
2092
|
+
var vt = 800, yt = 360;
|
|
2093
|
+
function bt({ contractors: e = [], "data-testid": t }) {
|
|
1984
2094
|
let r = a(null), i = a(/* @__PURE__ */ new Map()), o = a(0), { hoveredRef: l, tooltip: f, hitZonesRef: p } = C(r, {
|
|
1985
|
-
width:
|
|
1986
|
-
height:
|
|
2095
|
+
width: vt,
|
|
2096
|
+
height: yt
|
|
1987
2097
|
});
|
|
1988
2098
|
return n(() => {
|
|
1989
2099
|
let t = r.current;
|
|
1990
2100
|
if (!t) return;
|
|
1991
|
-
let n = _(t,
|
|
2101
|
+
let n = _(t, vt, yt);
|
|
1992
2102
|
o.current = 0;
|
|
1993
|
-
let a = e.reduce((e, t) => e + (t.base ?? 0), 0), s = e.reduce((e, t) => e + (t.variation ?? 0), 0), c = e.reduce((e, t) => e + (t.total ?? 0), 0), f =
|
|
2103
|
+
let a = e.reduce((e, t) => e + (t.base ?? 0), 0), s = e.reduce((e, t) => e + (t.variation ?? 0), 0), c = e.reduce((e, t) => e + (t.total ?? 0), 0), f = yt - 20 - 26, h = f - 6 * (e.length - 1), g = 20, y = e.map((e, t) => {
|
|
1994
2104
|
let n = Math.max(24, (e.total ?? 0) / (c || 1) * h), r = {
|
|
1995
2105
|
x: 100 - 110 / 2,
|
|
1996
2106
|
y: g,
|
|
@@ -2018,16 +2128,16 @@ function ft({ contractors: e = [], "data-testid": t }) {
|
|
|
2018
2128
|
}, k, A = () => {
|
|
2019
2129
|
o.current++;
|
|
2020
2130
|
let t = o.current;
|
|
2021
|
-
n.clearRect(0, 0,
|
|
2131
|
+
n.clearRect(0, 0, vt, yt);
|
|
2022
2132
|
let r = E(Math.min(t / 80, 1));
|
|
2023
2133
|
if (M(i.current, l.current), p.current = [], e.forEach((t, o) => {
|
|
2024
2134
|
let c = y[o], l = j(r, o, e.length, E), u = i.current.get(t.id) ?? 0;
|
|
2025
2135
|
if (l < .01) return;
|
|
2026
2136
|
let d = (t.base ?? 0) / (t.total || 1), f = (t.variation ?? 0) / (t.total || 1), p = c.h * d, m = c.h * f, h = c.y + p / 2, g = c.y + p + m / 2, _ = Math.max(2, (t.base ?? 0) / a * x), v = Math.max(2, (t.variation ?? 0) / s * S), b = w.y + e.slice(0, o).reduce((e, t) => e + (t.base ?? 0) / a * x, 0) + _ / 2, C = D.y + e.slice(0, o).reduce((e, t) => e + (t.variation ?? 0) / s * S, 0) + v / 2, T = u * .2 + .18;
|
|
2027
|
-
|
|
2137
|
+
xt(n, c.x + 110, h, 420 - 110 / 2, b, _ * l, c.color, T), xt(n, c.x + 110, g, 420 - 110 / 2, C, v * l, c.color, T * .75);
|
|
2028
2138
|
}), r > .3) {
|
|
2029
2139
|
let e = Math.min(1, (r - .3) / .7), t = O.y + a / c * f / 2, i = O.y + f - s / c * f / 2;
|
|
2030
|
-
|
|
2140
|
+
xt(n, 475, w.cy, 720 - 110 / 2, t, x * e, u.blue, .25 * e), xt(n, 475, D.cy, 720 - 110 / 2, i, S * e, u.amber, .22 * e);
|
|
2031
2141
|
}
|
|
2032
2142
|
if ([
|
|
2033
2143
|
"Contractors",
|
|
@@ -2039,7 +2149,7 @@ function ft({ contractors: e = [], "data-testid": t }) {
|
|
|
2039
2149
|
420,
|
|
2040
2150
|
720
|
|
2041
2151
|
][t];
|
|
2042
|
-
n.font = "400 12px 'Satoshi Variable', 'DM Sans', sans-serif", n.fillStyle = m(u.t3, .5), n.textAlign = "center", n.fillText(e, r,
|
|
2152
|
+
n.font = "400 12px 'Satoshi Variable', 'DM Sans', sans-serif", n.fillStyle = m(u.t3, .5), n.textAlign = "center", n.fillText(e, r, yt - 8);
|
|
2043
2153
|
}), e.forEach((t, a) => {
|
|
2044
2154
|
let o = y[a], s = j(r, a, e.length, E), c = i.current.get(t.id) ?? 0;
|
|
2045
2155
|
T(p.current, t.id, o.x, o.y, 110, o.h, {
|
|
@@ -2063,33 +2173,33 @@ function ft({ contractors: e = [], "data-testid": t }) {
|
|
|
2063
2173
|
"data-testid": t,
|
|
2064
2174
|
style: {
|
|
2065
2175
|
position: "relative",
|
|
2066
|
-
width:
|
|
2067
|
-
height:
|
|
2176
|
+
width: vt,
|
|
2177
|
+
height: yt
|
|
2068
2178
|
},
|
|
2069
2179
|
children: [/* @__PURE__ */ s("canvas", {
|
|
2070
2180
|
ref: r,
|
|
2071
2181
|
role: "img",
|
|
2072
2182
|
"aria-label": "Weekly report flow — base value and variations per contractor flowing to total commitment",
|
|
2073
2183
|
style: {
|
|
2074
|
-
width:
|
|
2075
|
-
height:
|
|
2184
|
+
width: vt,
|
|
2185
|
+
height: yt,
|
|
2076
2186
|
display: "block"
|
|
2077
2187
|
}
|
|
2078
2188
|
}), /* @__PURE__ */ s(S, {
|
|
2079
2189
|
...f,
|
|
2080
|
-
parentW:
|
|
2081
|
-
parentH:
|
|
2190
|
+
parentW: vt,
|
|
2191
|
+
parentH: yt
|
|
2082
2192
|
})]
|
|
2083
2193
|
});
|
|
2084
2194
|
}
|
|
2085
|
-
function
|
|
2195
|
+
function xt(e, t, n, r, i, a, o, s) {
|
|
2086
2196
|
let c = (t + r) / 2;
|
|
2087
2197
|
e.beginPath(), e.moveTo(t, n - a / 2), e.bezierCurveTo(c, n - a / 2, c, i - a / 2, r, i - a / 2), e.lineTo(r, i + a / 2), e.bezierCurveTo(c, i + a / 2, c, n + a / 2, t, n + a / 2), e.closePath(), e.fillStyle = m(o, s), e.fill();
|
|
2088
2198
|
}
|
|
2089
2199
|
//#endregion
|
|
2090
2200
|
//#region src/components/visualizationRenderer/VisualizationRenderer.tsx
|
|
2091
|
-
function
|
|
2092
|
-
return e.type === "line" ? /* @__PURE__ */ s(
|
|
2201
|
+
function St({ config: e, className: t }) {
|
|
2202
|
+
return e.type === "line" ? /* @__PURE__ */ s(Oe, {
|
|
2093
2203
|
rows: e.rows,
|
|
2094
2204
|
className: t
|
|
2095
2205
|
}) : e.type === "area" ? /* @__PURE__ */ s(ne, {
|
|
@@ -2098,77 +2208,77 @@ function mt({ config: e, className: t }) {
|
|
|
2098
2208
|
}) : e.type === "bar" ? /* @__PURE__ */ s(ie, {
|
|
2099
2209
|
rows: e.rows,
|
|
2100
2210
|
className: t
|
|
2101
|
-
}) : e.type === "pie" ? /* @__PURE__ */ s(
|
|
2211
|
+
}) : e.type === "pie" ? /* @__PURE__ */ s(Re, {
|
|
2102
2212
|
rows: e.rows,
|
|
2103
2213
|
variant: "pie",
|
|
2104
2214
|
className: t
|
|
2105
|
-
}) : e.type === "donut" ? /* @__PURE__ */ s(
|
|
2215
|
+
}) : e.type === "donut" ? /* @__PURE__ */ s(Re, {
|
|
2106
2216
|
rows: e.rows,
|
|
2107
2217
|
variant: "donut",
|
|
2108
2218
|
className: t
|
|
2109
|
-
}) : e.type === "sankey" ? /* @__PURE__ */ s(
|
|
2219
|
+
}) : e.type === "sankey" ? /* @__PURE__ */ s(Ye, {
|
|
2110
2220
|
rows: e.rows,
|
|
2111
2221
|
className: t
|
|
2112
|
-
}) : e.type === "flow" ? /* @__PURE__ */ s(
|
|
2222
|
+
}) : e.type === "flow" ? /* @__PURE__ */ s(Je, {
|
|
2113
2223
|
selectedEntity: e.selectedEntity,
|
|
2114
2224
|
className: t
|
|
2115
|
-
}) : e.type === "trend" ? /* @__PURE__ */ s(
|
|
2225
|
+
}) : e.type === "trend" ? /* @__PURE__ */ s(mt, {
|
|
2116
2226
|
points: e.points,
|
|
2117
2227
|
className: t
|
|
2118
|
-
}) : e.type === "mini-bars" ? /* @__PURE__ */ s(
|
|
2228
|
+
}) : e.type === "mini-bars" ? /* @__PURE__ */ s(je, {
|
|
2119
2229
|
rows: e.rows,
|
|
2120
2230
|
className: t
|
|
2121
|
-
}) : e.type === "contract-value-orb" ? /* @__PURE__ */ s(
|
|
2231
|
+
}) : e.type === "contract-value-orb" ? /* @__PURE__ */ s(xe, { data: e.data }) : e.type === "contract-bars" ? /* @__PURE__ */ s(ge, { contractors: e.contractors }) : e.type === "commitment-race" ? /* @__PURE__ */ s(oe, { contractors: e.contractors }) : e.type === "status-arc" ? /* @__PURE__ */ s(ft, {
|
|
2122
2232
|
segments: e.segments,
|
|
2123
2233
|
title: e.title
|
|
2124
|
-
}) : e.type === "ew-category" ? /* @__PURE__ */ s(
|
|
2234
|
+
}) : e.type === "ew-category" ? /* @__PURE__ */ s(De, { categories: e.categories }) : e.type === "contractor-rank" ? /* @__PURE__ */ s(Ee, { contractors: e.contractors }) : e.type === "severity-bands" ? /* @__PURE__ */ s(ut, { severities: e.severities }) : e.type === "nce-tree" ? /* @__PURE__ */ s(Pe, {
|
|
2125
2235
|
total: e.total,
|
|
2126
2236
|
byContractor: e.byContractor
|
|
2127
2237
|
}) : e.type === "compensation-gauge" ? /* @__PURE__ */ s(le, {
|
|
2128
2238
|
pct: e.pct,
|
|
2129
2239
|
confirmed: e.confirmed,
|
|
2130
2240
|
total: e.total
|
|
2131
|
-
}) : e.type === "variation-split" ? /* @__PURE__ */ s(
|
|
2241
|
+
}) : e.type === "variation-split" ? /* @__PURE__ */ s(_t, { contractors: e.contractors }) : e.type === "quotation-balance" ? /* @__PURE__ */ s(Qe, {
|
|
2132
2242
|
accepted: e.accepted,
|
|
2133
2243
|
submitted: e.submitted
|
|
2134
|
-
}) : e.type === "quotation-trend" ? /* @__PURE__ */ s(
|
|
2244
|
+
}) : e.type === "quotation-trend" ? /* @__PURE__ */ s(et, { trend: e.trend }) : e.type === "trend-view" ? /* @__PURE__ */ s(st, { trend: e.trend }) : e.type === "weekly-flow" ? /* @__PURE__ */ s(bt, { contractors: e.contractors }) : /* @__PURE__ */ s("div", {
|
|
2135
2245
|
className: "viz-empty",
|
|
2136
2246
|
children: "Visualization unavailable"
|
|
2137
2247
|
});
|
|
2138
2248
|
}
|
|
2139
2249
|
//#endregion
|
|
2140
2250
|
//#region src/utils/mounts.tsx
|
|
2141
|
-
var
|
|
2142
|
-
function
|
|
2251
|
+
var Ct = [];
|
|
2252
|
+
function wt(e) {
|
|
2143
2253
|
try {
|
|
2144
2254
|
return JSON.parse(decodeURIComponent(e));
|
|
2145
2255
|
} catch {
|
|
2146
2256
|
return null;
|
|
2147
2257
|
}
|
|
2148
2258
|
}
|
|
2149
|
-
function
|
|
2150
|
-
for (;
|
|
2151
|
-
let e =
|
|
2259
|
+
function Tt() {
|
|
2260
|
+
for (; Ct.length;) {
|
|
2261
|
+
let e = Ct.pop();
|
|
2152
2262
|
e && e.unmount();
|
|
2153
2263
|
}
|
|
2154
2264
|
}
|
|
2155
|
-
function
|
|
2156
|
-
|
|
2265
|
+
function Et() {
|
|
2266
|
+
Tt(), document.querySelectorAll("[data-d3-viz]").forEach((t) => {
|
|
2157
2267
|
let n = t.dataset.d3Viz;
|
|
2158
2268
|
if (!n) return;
|
|
2159
|
-
let r =
|
|
2269
|
+
let r = wt(n);
|
|
2160
2270
|
if (!r) return;
|
|
2161
2271
|
let i = e(t);
|
|
2162
|
-
|
|
2272
|
+
Ct.push(i), i.render(/* @__PURE__ */ s(St, { config: r }));
|
|
2163
2273
|
});
|
|
2164
2274
|
}
|
|
2165
|
-
function
|
|
2275
|
+
function Dt(e) {
|
|
2166
2276
|
return encodeURIComponent(JSON.stringify(e));
|
|
2167
2277
|
}
|
|
2168
2278
|
//#endregion
|
|
2169
2279
|
//#region src/components/donutChart/DonutChart.tsx
|
|
2170
|
-
function
|
|
2171
|
-
return /* @__PURE__ */ s(
|
|
2280
|
+
function Ot({ rows: e = [], className: t, colors: n }) {
|
|
2281
|
+
return /* @__PURE__ */ s(Re, {
|
|
2172
2282
|
rows: e,
|
|
2173
2283
|
variant: "donut",
|
|
2174
2284
|
className: t,
|
|
@@ -2187,7 +2297,7 @@ var X = {
|
|
|
2187
2297
|
red: u.red,
|
|
2188
2298
|
amber: u.amber,
|
|
2189
2299
|
green: u.green
|
|
2190
|
-
}, Z = "'JetBrains Mono', monospace", Q = "'Satoshi Variable', 'DM Sans', sans-serif",
|
|
2300
|
+
}, Z = "'JetBrains Mono', monospace", Q = "'Satoshi Variable', 'DM Sans', sans-serif", kt = {
|
|
2191
2301
|
color: "#F7F7F7",
|
|
2192
2302
|
fontFamily: Q,
|
|
2193
2303
|
fontSize: 24,
|
|
@@ -2200,7 +2310,7 @@ var X = {
|
|
|
2200
2310
|
fontWeight: 400,
|
|
2201
2311
|
lineHeight: "20px"
|
|
2202
2312
|
};
|
|
2203
|
-
function
|
|
2313
|
+
function At({ chips: e = [] }) {
|
|
2204
2314
|
return /* @__PURE__ */ s("div", {
|
|
2205
2315
|
style: {
|
|
2206
2316
|
display: "flex",
|
|
@@ -2220,7 +2330,7 @@ function St({ chips: e = [] }) {
|
|
|
2220
2330
|
},
|
|
2221
2331
|
children: [/* @__PURE__ */ s("span", {
|
|
2222
2332
|
style: {
|
|
2223
|
-
...
|
|
2333
|
+
...kt,
|
|
2224
2334
|
color: e.color ?? X.t1
|
|
2225
2335
|
},
|
|
2226
2336
|
children: e.value
|
|
@@ -2234,7 +2344,7 @@ function St({ chips: e = [] }) {
|
|
|
2234
2344
|
}, t))
|
|
2235
2345
|
});
|
|
2236
2346
|
}
|
|
2237
|
-
function
|
|
2347
|
+
function jt({ items: e = [] }) {
|
|
2238
2348
|
return /* @__PURE__ */ s("div", {
|
|
2239
2349
|
style: {
|
|
2240
2350
|
display: "flex",
|
|
@@ -2250,7 +2360,7 @@ function Ct({ items: e = [] }) {
|
|
|
2250
2360
|
},
|
|
2251
2361
|
children: [/* @__PURE__ */ s("div", {
|
|
2252
2362
|
style: {
|
|
2253
|
-
...
|
|
2363
|
+
...kt,
|
|
2254
2364
|
color: e.color ?? X.t1
|
|
2255
2365
|
},
|
|
2256
2366
|
children: e.value
|
|
@@ -2264,7 +2374,7 @@ function Ct({ items: e = [] }) {
|
|
|
2264
2374
|
}, t))
|
|
2265
2375
|
});
|
|
2266
2376
|
}
|
|
2267
|
-
function
|
|
2377
|
+
function Mt({ items: e = [] }) {
|
|
2268
2378
|
return /* @__PURE__ */ s("div", {
|
|
2269
2379
|
style: {
|
|
2270
2380
|
display: "flex",
|
|
@@ -2298,7 +2408,7 @@ function wt({ items: e = [] }) {
|
|
|
2298
2408
|
}),
|
|
2299
2409
|
/* @__PURE__ */ s("span", {
|
|
2300
2410
|
style: {
|
|
2301
|
-
...
|
|
2411
|
+
...kt,
|
|
2302
2412
|
color: e.color ?? X.t1,
|
|
2303
2413
|
minWidth: 70,
|
|
2304
2414
|
flexShrink: 0
|
|
@@ -2316,7 +2426,7 @@ function wt({ items: e = [] }) {
|
|
|
2316
2426
|
}, t))
|
|
2317
2427
|
});
|
|
2318
2428
|
}
|
|
2319
|
-
function
|
|
2429
|
+
function Nt({ items: e = [] }) {
|
|
2320
2430
|
return /* @__PURE__ */ s("div", {
|
|
2321
2431
|
style: {
|
|
2322
2432
|
display: "flex",
|
|
@@ -2331,7 +2441,7 @@ function Tt({ items: e = [] }) {
|
|
|
2331
2441
|
},
|
|
2332
2442
|
children: [/* @__PURE__ */ s("div", {
|
|
2333
2443
|
style: {
|
|
2334
|
-
...
|
|
2444
|
+
...kt,
|
|
2335
2445
|
color: e.color ?? X.t1
|
|
2336
2446
|
},
|
|
2337
2447
|
children: e.value
|
|
@@ -2345,12 +2455,12 @@ function Tt({ items: e = [] }) {
|
|
|
2345
2455
|
}, t))
|
|
2346
2456
|
});
|
|
2347
2457
|
}
|
|
2348
|
-
var
|
|
2458
|
+
var Pt = {
|
|
2349
2459
|
red: X.red,
|
|
2350
2460
|
amber: X.amber,
|
|
2351
2461
|
green: X.green
|
|
2352
2462
|
};
|
|
2353
|
-
function
|
|
2463
|
+
function Ft({ items: e = [] }) {
|
|
2354
2464
|
return /* @__PURE__ */ s("div", {
|
|
2355
2465
|
style: {
|
|
2356
2466
|
display: "flex",
|
|
@@ -2358,17 +2468,15 @@ function Dt({ items: e = [] }) {
|
|
|
2358
2468
|
gap: 5
|
|
2359
2469
|
},
|
|
2360
2470
|
children: e.map((e, t) => {
|
|
2361
|
-
let n =
|
|
2471
|
+
let n = Pt[e.severity];
|
|
2362
2472
|
return /* @__PURE__ */ c("div", {
|
|
2363
2473
|
style: {
|
|
2364
2474
|
display: "flex",
|
|
2365
2475
|
alignItems: "flex-start",
|
|
2366
2476
|
gap: 10,
|
|
2367
2477
|
padding: "10px 14px",
|
|
2368
|
-
background:
|
|
2369
|
-
border: `1px solid ${
|
|
2370
|
-
borderLeft: `3px solid ${n}`,
|
|
2371
|
-
borderRadius: 6
|
|
2478
|
+
background: u.sf,
|
|
2479
|
+
border: `1px solid ${X.border}`
|
|
2372
2480
|
},
|
|
2373
2481
|
children: [/* @__PURE__ */ s("span", { style: {
|
|
2374
2482
|
width: 7,
|
|
@@ -2385,7 +2493,7 @@ function Dt({ items: e = [] }) {
|
|
|
2385
2493
|
})
|
|
2386
2494
|
});
|
|
2387
2495
|
}
|
|
2388
|
-
function
|
|
2496
|
+
function It({ min: e, max: t, unit: n, dots: r = [], chips: i = [] }) {
|
|
2389
2497
|
let a = t - e;
|
|
2390
2498
|
return /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("div", {
|
|
2391
2499
|
style: {
|
|
@@ -2495,9 +2603,9 @@ function Ot({ min: e, max: t, unit: n, dots: r = [], chips: i = [] }) {
|
|
|
2495
2603
|
}, r);
|
|
2496
2604
|
})
|
|
2497
2605
|
]
|
|
2498
|
-
}), i && i.length > 0 && /* @__PURE__ */ s(
|
|
2606
|
+
}), i && i.length > 0 && /* @__PURE__ */ s(At, { chips: i })] });
|
|
2499
2607
|
}
|
|
2500
|
-
function
|
|
2608
|
+
function Lt({ leftPct: e, leftLabel: t, leftValue: n, leftColor: r, rightPct: i, rightLabel: a, rightValue: o, rightColor: l, chips: d }) {
|
|
2501
2609
|
let f = r ?? u.blue, p = l ?? u.cyan;
|
|
2502
2610
|
return /* @__PURE__ */ c("div", { children: [
|
|
2503
2611
|
/* @__PURE__ */ c("div", {
|
|
@@ -2591,10 +2699,10 @@ function kt({ leftPct: e, leftLabel: t, leftValue: n, leftColor: r, rightPct: i,
|
|
|
2591
2699
|
})
|
|
2592
2700
|
})]
|
|
2593
2701
|
}),
|
|
2594
|
-
d && d.length > 0 && /* @__PURE__ */ s(
|
|
2702
|
+
d && d.length > 0 && /* @__PURE__ */ s(At, { chips: d })
|
|
2595
2703
|
] });
|
|
2596
2704
|
}
|
|
2597
|
-
function
|
|
2705
|
+
function Rt({ pct: e, label: t, color: n, chips: r }) {
|
|
2598
2706
|
let i = n ?? u.blue, a = 2 * Math.PI * 30, o = a * (1 - e / 100);
|
|
2599
2707
|
return /* @__PURE__ */ c("div", {
|
|
2600
2708
|
style: {
|
|
@@ -2675,7 +2783,7 @@ function At({ pct: e, label: t, color: n, chips: r }) {
|
|
|
2675
2783
|
},
|
|
2676
2784
|
children: [/* @__PURE__ */ s("span", {
|
|
2677
2785
|
style: {
|
|
2678
|
-
...
|
|
2786
|
+
...kt,
|
|
2679
2787
|
color: e.color ?? X.t1
|
|
2680
2788
|
},
|
|
2681
2789
|
children: e.value
|
|
@@ -2688,16 +2796,16 @@ function At({ pct: e, label: t, color: n, chips: r }) {
|
|
|
2688
2796
|
})]
|
|
2689
2797
|
});
|
|
2690
2798
|
}
|
|
2691
|
-
var
|
|
2799
|
+
var zt = {
|
|
2692
2800
|
green: "#34D39918",
|
|
2693
2801
|
amber: "#FBBF2418",
|
|
2694
2802
|
red: "#F0606018"
|
|
2695
|
-
},
|
|
2803
|
+
}, Bt = {
|
|
2696
2804
|
green: "#34D399",
|
|
2697
2805
|
amber: "#FBBF24",
|
|
2698
2806
|
red: "#F06060"
|
|
2699
2807
|
};
|
|
2700
|
-
function
|
|
2808
|
+
function Vt({ items: e = [] }) {
|
|
2701
2809
|
return /* @__PURE__ */ s("div", {
|
|
2702
2810
|
style: {
|
|
2703
2811
|
display: "flex",
|
|
@@ -2763,8 +2871,8 @@ function Nt({ items: e = [] }) {
|
|
|
2763
2871
|
style: {
|
|
2764
2872
|
fontSize: 10,
|
|
2765
2873
|
fontWeight: 600,
|
|
2766
|
-
color:
|
|
2767
|
-
background:
|
|
2874
|
+
color: Bt[e.badgeSeverity],
|
|
2875
|
+
background: zt[e.badgeSeverity],
|
|
2768
2876
|
padding: "2px 7px",
|
|
2769
2877
|
borderRadius: 4,
|
|
2770
2878
|
fontFamily: Q,
|
|
@@ -2787,12 +2895,12 @@ function Nt({ items: e = [] }) {
|
|
|
2787
2895
|
}, t))
|
|
2788
2896
|
});
|
|
2789
2897
|
}
|
|
2790
|
-
var
|
|
2898
|
+
var Ht = {
|
|
2791
2899
|
red: X.red,
|
|
2792
2900
|
amber: X.amber,
|
|
2793
2901
|
green: X.green
|
|
2794
2902
|
};
|
|
2795
|
-
function
|
|
2903
|
+
function Ut({ items: e = [] }) {
|
|
2796
2904
|
return /* @__PURE__ */ s("div", {
|
|
2797
2905
|
style: {
|
|
2798
2906
|
display: "flex",
|
|
@@ -2800,7 +2908,7 @@ function Ft({ items: e = [] }) {
|
|
|
2800
2908
|
gap: 5
|
|
2801
2909
|
},
|
|
2802
2910
|
children: e.map((e, t) => {
|
|
2803
|
-
let n =
|
|
2911
|
+
let n = Ht[e.severity];
|
|
2804
2912
|
return /* @__PURE__ */ c("div", {
|
|
2805
2913
|
style: {
|
|
2806
2914
|
display: "flex",
|
|
@@ -2854,7 +2962,7 @@ function Ft({ items: e = [] }) {
|
|
|
2854
2962
|
})
|
|
2855
2963
|
});
|
|
2856
2964
|
}
|
|
2857
|
-
function
|
|
2965
|
+
function Wt({ columns: e = [], rows: t = [] }) {
|
|
2858
2966
|
return /* @__PURE__ */ c("div", {
|
|
2859
2967
|
style: {
|
|
2860
2968
|
display: "flex",
|
|
@@ -2919,7 +3027,7 @@ function It({ columns: e = [], rows: t = [] }) {
|
|
|
2919
3027
|
}, t))]
|
|
2920
3028
|
});
|
|
2921
3029
|
}
|
|
2922
|
-
function
|
|
3030
|
+
function Gt({ text: e }) {
|
|
2923
3031
|
return /* @__PURE__ */ c("div", {
|
|
2924
3032
|
style: {
|
|
2925
3033
|
marginTop: 10,
|
|
@@ -2945,22 +3053,22 @@ function Lt({ text: e }) {
|
|
|
2945
3053
|
})]
|
|
2946
3054
|
});
|
|
2947
3055
|
}
|
|
2948
|
-
function
|
|
3056
|
+
function Kt({ block: e }) {
|
|
2949
3057
|
if (!e) return null;
|
|
2950
3058
|
let t = (() => {
|
|
2951
3059
|
switch (e.type) {
|
|
2952
|
-
case "stats": return /* @__PURE__ */ s(
|
|
2953
|
-
case "ranked": return /* @__PURE__ */ s(
|
|
2954
|
-
case "chips": return /* @__PURE__ */ s(
|
|
2955
|
-
case "badges": return /* @__PURE__ */ s(
|
|
2956
|
-
case "dot-strip": return /* @__PURE__ */ s(
|
|
3060
|
+
case "stats": return /* @__PURE__ */ s(jt, { items: e.items });
|
|
3061
|
+
case "ranked": return /* @__PURE__ */ s(Mt, { items: e.items });
|
|
3062
|
+
case "chips": return /* @__PURE__ */ s(Nt, { items: e.items });
|
|
3063
|
+
case "badges": return /* @__PURE__ */ s(Ft, { items: e.items });
|
|
3064
|
+
case "dot-strip": return /* @__PURE__ */ s(It, {
|
|
2957
3065
|
min: e.min,
|
|
2958
3066
|
max: e.max,
|
|
2959
3067
|
unit: e.unit,
|
|
2960
3068
|
dots: e.dots,
|
|
2961
3069
|
chips: e.chips
|
|
2962
3070
|
});
|
|
2963
|
-
case "proportion": return /* @__PURE__ */ s(
|
|
3071
|
+
case "proportion": return /* @__PURE__ */ s(Lt, {
|
|
2964
3072
|
leftPct: e.leftPct,
|
|
2965
3073
|
leftLabel: e.leftLabel,
|
|
2966
3074
|
leftValue: e.leftValue,
|
|
@@ -2971,22 +3079,22 @@ function Rt({ block: e }) {
|
|
|
2971
3079
|
rightColor: e.rightColor,
|
|
2972
3080
|
chips: e.chips
|
|
2973
3081
|
});
|
|
2974
|
-
case "ring": return /* @__PURE__ */ s(
|
|
3082
|
+
case "ring": return /* @__PURE__ */ s(Rt, {
|
|
2975
3083
|
pct: e.pct,
|
|
2976
3084
|
label: e.label,
|
|
2977
3085
|
color: e.color,
|
|
2978
3086
|
chips: e.chips
|
|
2979
3087
|
});
|
|
2980
|
-
case "scorecard-rows": return /* @__PURE__ */ s(
|
|
2981
|
-
case "flags-list": return /* @__PURE__ */ s(
|
|
2982
|
-
case "comparison-rows": return /* @__PURE__ */ s(
|
|
3088
|
+
case "scorecard-rows": return /* @__PURE__ */ s(Vt, { items: e.items });
|
|
3089
|
+
case "flags-list": return /* @__PURE__ */ s(Ut, { items: e.items });
|
|
3090
|
+
case "comparison-rows": return /* @__PURE__ */ s(Wt, {
|
|
2983
3091
|
columns: e.columns,
|
|
2984
3092
|
rows: e.rows
|
|
2985
3093
|
});
|
|
2986
3094
|
default: return null;
|
|
2987
3095
|
}
|
|
2988
3096
|
})();
|
|
2989
|
-
return e.takeaway ? /* @__PURE__ */ c("div", { children: [t, /* @__PURE__ */ s(
|
|
3097
|
+
return e.takeaway ? /* @__PURE__ */ c("div", { children: [t, /* @__PURE__ */ s(Gt, { text: e.takeaway })] }) : t;
|
|
2990
3098
|
}
|
|
2991
3099
|
//#endregion
|
|
2992
|
-
export { ne as AreaChart, ie as BarChart, l as ChartFrame,
|
|
3100
|
+
export { ne as AreaChart, ie as BarChart, l as ChartFrame, Ot as DonutChart, Kt as KeyHighlights, Oe as LineChart, je as MiniBars, Re as PieChart, Je as ProcessSankey, Ye as RankingSankey, Be as SankeySvg, te as SeriesChart, st as Trend, mt as TrendChart, St as VisualizationRenderer, Tt as cleanupVisualizationMounts, Et as hydrateVisualizationMounts, Dt as serializeVisualizationConfig };
|