@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/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
- }, B = 88, V = 18;
733
- function be({ data: e, "data-testid": t }) {
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 - B - z.right, b = g > 1 ? (ve - z.top - z.bottom - g * V) / (g - 1) : 0;
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 * (V + b), c = z.left + B, 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 + V / 2), e.fillStyle = m(u.bd, .25), e.beginPath(), e.roundRect(c, s, y, V, 4), e.fill(), p > 0 && (d > 0 && v(e, c + p / 2, s + V / 2, p * .3, a, .1 * d), e.fillStyle = m(a, .5 + d * .15), e.beginPath(), e.roundRect(c, s, p, V, 4), e.fill()), x > 2 && (e.fillStyle = m(a, .22 + d * .08), e.beginPath(), e.roundRect(c + p, s, x, V, [
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 + V - 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, V, 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 + V / 2), e.globalAlpha = 1), T(l.current, n.id, c, s, Math.max(h, 1), V, {
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 + B, n - 3, 14, 6, 2), e.fill(), e.fillStyle = p.color, e.fillText("base value", z.left + B + 18, n), e.fillStyle = m(u.cyan, .22), e.beginPath(), e.roundRect(z.left + B + 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 + B + 101, n - 3), e.lineTo(z.left + B + 101, n + 3), e.stroke(), e.setLineDash([]), e.fillStyle = p.color, e.fillText("approved variations", z.left + B + 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);
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 xe = 780, H = 240, Se = 12, Ce = 10, we = [
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 Te({ contractors: e = [], "data-testid": t }) {
789
- let r = a(null), i = a(0), o = a(/* @__PURE__ */ new Map()), { hoveredRef: l, tooltip: d, hitZonesRef: p } = C(r, {
790
- width: xe,
791
- height: H
792
- }), h = [...e].sort((e, t) => (t.count ?? 0) - (e.count ?? 0)).slice(0, 5), g = h.reduce((e, t) => e + (t.count ?? 0), 0);
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, xe, H);
796
+ let t = _(e, Se, V);
797
797
  i.current = 0;
798
- let n = Math.min(5, h.length), a = (xe - 2 * Se - (n - 1) * Ce) / n, s = H * .84, c = H * .08, d, y = () => {
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, xe, H), p.current = [], o.current.forEach((e, t) => {
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), h.forEach((n, r) => {
805
- let i = r === 0, l = i ? u.red : r === 1 ? u.amber : u.blue, d = Se + r * (a + Ce), h = o.current.get(n.id) ?? 0, _ = h * 8, y = d - _ / 2, b = a + _, x = i ? A(e, .04, 3e-4) * .06 + .06 : 0;
806
- t.fillStyle = m(l, .08 + h * .07), t.beginPath(), t.roundRect(y, c, b, s, 6), t.fill(), t.strokeStyle = m(l, .2 + h * .4 + x), t.lineWidth = i ? 1.5 : 1, t.stroke(), (h > .01 || i) && v(t, y + b / 2, c + s / 2, b * .55, l, x + h * .14), t.font = "bold " + f.font, t.textAlign = "left", t.textBaseline = "top", t.fillStyle = m(l, .5 + h * .35), t.fillText(`#${r + 1}`, y + 7, c + 6);
807
- let S = a * .28, C = y + b / 2, w = c + s * .38, E = t.createRadialGradient(C, w - S * .2, 0, C, w, S);
808
- E.addColorStop(0, m(l, .5 + h * .2)), E.addColorStop(1, m(l, .2 + h * .1)), t.beginPath(), t.arc(C, w, S, 0, Math.PI * 2), t.fillStyle = E, t.fill(), t.strokeStyle = m(l, .4 + h * .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), C, w), t.font = "bold 14px 'Satoshi Variable', 'DM Sans', sans-serif", t.textBaseline = "alphabetic", t.fillStyle = m(l, .9 + h * .1), t.fillText(String(n.count ?? 0), C, c + s * .76), t.font = f.font, t.fillStyle = f.color, t.fillText("open EWs", C, c + s * .88);
809
- let D = Math.round((n.count ?? 0) / (g || 1) * 100), O = we[r] ?? "Low exposure";
810
- T(p.current, n.id, d, c, a, s, {
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 · ${D}% of total`,
813
- sublabel: `Rank #${r + 1} · ${O}`,
812
+ value: `${n.count ?? 0} open · ${O}% of total`,
813
+ sublabel: `Rank #${r + 1} · ${k}`,
814
814
  color: l
815
815
  });
816
- }), b(t, xe, H, e, .015), d = requestAnimationFrame(y);
816
+ }), b(t, Se, V, e, .015), p = requestAnimationFrame(x);
817
817
  };
818
- return y(), () => cancelAnimationFrame(d);
819
- }, [h, g]), /* @__PURE__ */ c("div", {
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: xe,
824
- height: H
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: xe,
832
- height: H,
831
+ width: Se,
832
+ height: V,
833
833
  display: "block",
834
834
  borderRadius: 8
835
835
  }
836
836
  }), /* @__PURE__ */ s(S, {
837
- ...d,
838
- parentW: xe,
839
- parentH: H
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 U = 680, W = 260;
846
- function Ee({ categories: e = [], "data-testid": t }) {
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: U,
849
- height: W
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, U, W);
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 = U * .05, p = W * .1, h = U * .9 / a, g = W * .7 / c, x = e.reduce((e, t) => e + t.count, 0), S, C = () => {
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, U, W), f.current = [], o.current.forEach((e, t) => {
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, U, W, t, 40, m(u.blue, .04)), e.forEach((e, r) => {
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, U, W, t, .015), S = requestAnimationFrame(C);
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: U,
888
- height: W
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: U,
896
- height: W,
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: U,
903
- parentH: W
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 De({ rows: e = [], className: t, colors: n }) {
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 Oe = [
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
- ], ke = {
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 Ae({ rows: e = [], className: t, colors: n }) {
972
- let r = n?.slices ?? Oe;
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 % Oe.length}`,
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 je = 680, Me = 320;
1011
- function Ne({ total: e = 0, byContractor: t = [], "data-testid": r }) {
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: je,
1014
- height: Me
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, je, Me);
1019
+ let r = _(n, Me, Ne);
1020
1020
  l.current = 0;
1021
- let a = Me / 2, s = je - 80, c = Math.max(...t.map((e) => e.count ?? 0)), h = (Me - 60) / (t.length - 1), y = t.map((e, t) => ({
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, je, Me);
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: je,
1055
- height: Me
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: je,
1063
- height: Me,
1062
+ width: Me,
1063
+ height: Ne,
1064
1064
  display: "block"
1065
1065
  }
1066
1066
  }), /* @__PURE__ */ s(S, {
1067
1067
  ...h,
1068
- parentW: je,
1069
- parentH: Me
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 Pe = 192, Fe = Pe, Ie = Pe + 80;
1076
- function Le({ rows: e = [], variant: t, className: r, colors: i }) {
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: Fe,
1079
- height: Ie
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, Fe, Ie);
1084
+ let r = _(n, Ie, Le);
1085
1085
  p.current = 0;
1086
- let i = Fe / 2, a = Pe / 2, s = Pe * .4, c = t === "donut" ? Pe * .21 : 0, l = e.reduce((e, t) => e + (t.pricing ?? 0), 0) || 1, d, b = () => {
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, Fe, Ie);
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 = Pe + 12;
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)}%)`, Fe - 4, o + 3.5);
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: Fe,
1121
- height: Ie
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: Fe,
1129
- height: Ie,
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: Fe,
1136
- parentH: Ie
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 Re(e, t, n, r) {
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 ze({ 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(() => Re(e, t, r, o), [
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 Be = [
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
- ], Ve = [
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
- ], He = [
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 Ue(e, t) {
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 We(e, t) {
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 Ge(e, t) {
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 Ke({ nodes: e, links: t, width: r = 960, height: o = 280, selectedEntity: l }) {
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 = Be[t % Be.length];
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: He[t % He.length],
1392
- color: Ve[t % Ve.length]
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 = Ge(r, i);
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 = Ue(d, .5), h = `${Math.round(e.conf * 100)}%`;
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 = Ge(r, i), o = Ue(a, e.t), s = We(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);
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 qe({ selectedEntity: e, colors: t }) {
1491
- return /* @__PURE__ */ s(Ke, {
1492
- nodes: ke.nodes,
1493
- links: ke.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 Je({ rows: e = [], className: t, colors: n }) {
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(ze, {
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 Ye = 500, Xe = 320;
1532
- function Ze({ accepted: e, submitted: t, "data-testid": r }) {
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, Ye, Xe);
1537
+ let r = _(n, Xe, Ze);
1538
1538
  o.current = 0;
1539
- let a = Ye / 2, s = Math.max(e.value, t.value), c = (e.value - t.value) / s * 14, l, d = () => {
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, Ye, Xe);
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, Xe - 80), r.stroke(), r.beginPath(), r.arc(a, 100, 5 * i, 0, Math.PI * 2), r.fillStyle = u.t2, r.fill();
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, Xe - 12), r.globalAlpha = 1), l = requestAnimationFrame(d);
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: Ye,
1578
- height: Xe
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: Ye,
1586
- height: Xe,
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 Qe = 680, G = 280;
1595
- function $e({ trend: e = [], "data-testid": t }) {
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: Qe,
1598
- height: G
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, Qe, G);
1603
+ let n = _(t, $e, W);
1604
1604
  o.current = 0;
1605
- let a = Qe - 54 - 28, s = G - 30 - 54, c = Math.max(...e.map((e) => e.count)), d = e.length, h = d > 1 ? a / (d - 1) : a, g = e.map((e, t) => ({
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, Qe, G);
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, G - 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();
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, G - 54 + 14);
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__ */ c("div", {
1654
+ }, [e]), /* @__PURE__ */ s("div", {
1655
1655
  "data-testid": t,
1656
+ className: "trend-scroll",
1656
1657
  style: {
1657
- position: "relative",
1658
- width: Qe,
1659
- height: G
1658
+ width: "100%",
1659
+ overflowX: "auto"
1660
1660
  },
1661
- children: [/* @__PURE__ */ s("canvas", {
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
- width: Qe,
1667
- height: G,
1668
- display: "block"
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
- }), /* @__PURE__ */ s(S, {
1671
- ...d,
1672
- parentW: Qe,
1673
- parentH: G
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, et = 240, tt = {
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 nt({ severities: e = [], "data-testid": t }) {
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: et
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, et);
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 = et - 50 - 52, d = e.map((e) => e.count / a * s), h, g = () => {
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, et);
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 = tt[e.severity] ?? u.blue, s = d[t];
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: et
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: et,
1846
+ height: ct,
1737
1847
  display: "block"
1738
1848
  }
1739
1849
  }), /* @__PURE__ */ s(S, {
1740
1850
  ...d,
1741
1851
  parentW: K,
1742
- parentH: et
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, rt = {
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 it({ segments: e = [], title: t, "data-testid": r }) {
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 = rt[e.status] ?? u.blue, h = 2 + e.count / p * 8;
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 = rt[e.status] ?? u.blue, _ = 10 + e.count / p * 18, y = l.current.get(e.status) ?? 0;
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 at = 280, Y = 96;
1824
- function ot({ points: e = [], className: t, colors: r }) {
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: at,
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, at, Y);
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, at, Y), p.length < 2) {
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 = at - 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));
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(at - 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) => {
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: at,
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: at,
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: at,
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 st = 680, ct = 320;
1914
- function lt({ contractors: e = [], "data-testid": t }) {
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: st,
1917
- height: ct
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, st, ct);
2032
+ let n = _(t, ht, gt);
1923
2033
  o.current = 0;
1924
- let a = st - 60 - 28, s = Math.max(...e.map((e) => (e.implemented ?? 0) + (e.unimplemented ?? 0))), c = e.length * 40 - 14, f = 16 + (ct - 16 - 32 - c) / 2, g, y = () => {
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, st, ct);
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: st,
1962
- height: ct
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: st,
1970
- height: ct,
2079
+ width: ht,
2080
+ height: gt,
1971
2081
  display: "block"
1972
2082
  }
1973
2083
  }), /* @__PURE__ */ s(S, {
1974
2084
  ...f,
1975
- parentW: st,
1976
- parentH: ct
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 ut = 800, dt = 360;
1983
- function ft({ contractors: e = [], "data-testid": t }) {
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: ut,
1986
- height: dt
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, ut, dt);
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 = dt - 20 - 26, h = f - 6 * (e.length - 1), g = 20, y = e.map((e, t) => {
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, ut, dt);
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
- pt(n, c.x + 110, h, 420 - 110 / 2, b, _ * l, c.color, T), pt(n, c.x + 110, g, 420 - 110 / 2, C, v * l, c.color, T * .75);
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
- pt(n, 475, w.cy, 720 - 110 / 2, t, x * e, u.blue, .25 * e), pt(n, 475, D.cy, 720 - 110 / 2, i, S * e, u.amber, .22 * e);
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, dt - 8);
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: ut,
2067
- height: dt
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: ut,
2075
- height: dt,
2184
+ width: vt,
2185
+ height: yt,
2076
2186
  display: "block"
2077
2187
  }
2078
2188
  }), /* @__PURE__ */ s(S, {
2079
2189
  ...f,
2080
- parentW: ut,
2081
- parentH: dt
2190
+ parentW: vt,
2191
+ parentH: yt
2082
2192
  })]
2083
2193
  });
2084
2194
  }
2085
- function pt(e, t, n, r, i, a, o, s) {
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 mt({ config: e, className: t }) {
2092
- return e.type === "line" ? /* @__PURE__ */ s(De, {
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(Le, {
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(Le, {
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(Je, {
2219
+ }) : e.type === "sankey" ? /* @__PURE__ */ s(Ye, {
2110
2220
  rows: e.rows,
2111
2221
  className: t
2112
- }) : e.type === "flow" ? /* @__PURE__ */ s(qe, {
2222
+ }) : e.type === "flow" ? /* @__PURE__ */ s(Je, {
2113
2223
  selectedEntity: e.selectedEntity,
2114
2224
  className: t
2115
- }) : e.type === "trend" ? /* @__PURE__ */ s(ot, {
2225
+ }) : e.type === "trend" ? /* @__PURE__ */ s(mt, {
2116
2226
  points: e.points,
2117
2227
  className: t
2118
- }) : e.type === "mini-bars" ? /* @__PURE__ */ s(Ae, {
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(be, { 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(it, {
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(Ee, { categories: e.categories }) : e.type === "contractor-rank" ? /* @__PURE__ */ s(Te, { contractors: e.contractors }) : e.type === "severity-bands" ? /* @__PURE__ */ s(nt, { severities: e.severities }) : e.type === "nce-tree" ? /* @__PURE__ */ s(Ne, {
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(lt, { contractors: e.contractors }) : e.type === "quotation-balance" ? /* @__PURE__ */ s(Ze, {
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($e, { trend: e.trend }) : e.type === "weekly-flow" ? /* @__PURE__ */ s(ft, { contractors: e.contractors }) : /* @__PURE__ */ s("div", {
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 ht = [];
2142
- function gt(e) {
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 _t() {
2150
- for (; ht.length;) {
2151
- let e = ht.pop();
2259
+ function Tt() {
2260
+ for (; Ct.length;) {
2261
+ let e = Ct.pop();
2152
2262
  e && e.unmount();
2153
2263
  }
2154
2264
  }
2155
- function vt() {
2156
- _t(), document.querySelectorAll("[data-d3-viz]").forEach((t) => {
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 = gt(n);
2269
+ let r = wt(n);
2160
2270
  if (!r) return;
2161
2271
  let i = e(t);
2162
- ht.push(i), i.render(/* @__PURE__ */ s(mt, { config: r }));
2272
+ Ct.push(i), i.render(/* @__PURE__ */ s(St, { config: r }));
2163
2273
  });
2164
2274
  }
2165
- function yt(e) {
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 bt({ rows: e = [], className: t, colors: n }) {
2171
- return /* @__PURE__ */ s(Le, {
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", xt = {
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 St({ chips: e = [] }) {
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
- ...xt,
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 Ct({ items: e = [] }) {
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
- ...xt,
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 wt({ items: e = [] }) {
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
- ...xt,
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 Tt({ items: e = [] }) {
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
- ...xt,
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 Et = {
2458
+ var Pt = {
2349
2459
  red: X.red,
2350
2460
  amber: X.amber,
2351
2461
  green: X.green
2352
2462
  };
2353
- function Dt({ items: e = [] }) {
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 = Et[e.severity];
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: n + "0C",
2369
- border: `1px solid ${n}28`,
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 Ot({ min: e, max: t, unit: n, dots: r = [], chips: i = [] }) {
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(St, { chips: i })] });
2606
+ }), i && i.length > 0 && /* @__PURE__ */ s(At, { chips: i })] });
2499
2607
  }
2500
- function kt({ leftPct: e, leftLabel: t, leftValue: n, leftColor: r, rightPct: i, rightLabel: a, rightValue: o, rightColor: l, chips: d }) {
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(St, { chips: d })
2702
+ d && d.length > 0 && /* @__PURE__ */ s(At, { chips: d })
2595
2703
  ] });
2596
2704
  }
2597
- function At({ pct: e, label: t, color: n, chips: r }) {
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
- ...xt,
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 jt = {
2799
+ var zt = {
2692
2800
  green: "#34D39918",
2693
2801
  amber: "#FBBF2418",
2694
2802
  red: "#F0606018"
2695
- }, Mt = {
2803
+ }, Bt = {
2696
2804
  green: "#34D399",
2697
2805
  amber: "#FBBF24",
2698
2806
  red: "#F06060"
2699
2807
  };
2700
- function Nt({ items: e = [] }) {
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: Mt[e.badgeSeverity],
2767
- background: jt[e.badgeSeverity],
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 Pt = {
2898
+ var Ht = {
2791
2899
  red: X.red,
2792
2900
  amber: X.amber,
2793
2901
  green: X.green
2794
2902
  };
2795
- function Ft({ items: e = [] }) {
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 = Pt[e.severity];
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 It({ columns: e = [], rows: t = [] }) {
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 Lt({ text: e }) {
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 Rt({ block: e }) {
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(Ct, { items: e.items });
2953
- case "ranked": return /* @__PURE__ */ s(wt, { items: e.items });
2954
- case "chips": return /* @__PURE__ */ s(Tt, { items: e.items });
2955
- case "badges": return /* @__PURE__ */ s(Dt, { items: e.items });
2956
- case "dot-strip": return /* @__PURE__ */ s(Ot, {
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(kt, {
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(At, {
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(Nt, { items: e.items });
2981
- case "flags-list": return /* @__PURE__ */ s(Ft, { items: e.items });
2982
- case "comparison-rows": return /* @__PURE__ */ s(It, {
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(Lt, { text: e.takeaway })] }) : t;
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, bt as DonutChart, Rt as KeyHighlights, De as LineChart, Ae as MiniBars, Le as PieChart, qe as ProcessSankey, Je as RankingSankey, ze as SankeySvg, te as SeriesChart, ot as TrendChart, mt as VisualizationRenderer, _t as cleanupVisualizationMounts, vt as hydrateVisualizationMounts, yt as serializeVisualizationConfig };
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 };