@flamingo-stack/openframe-frontend-core 0.0.562 → 0.0.563-snapshot.20260824140722

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.
Files changed (110) hide show
  1. package/dist/{chunk-4PCVRVRP.cjs → chunk-6OPEULTD.cjs} +9 -9
  2. package/dist/{chunk-4PCVRVRP.cjs.map → chunk-6OPEULTD.cjs.map} +1 -1
  3. package/dist/{chunk-T2WSZ2W4.js → chunk-7D62XVHH.js} +6 -6
  4. package/dist/{chunk-ACIVGQA4.js → chunk-ASULU3T2.js} +2 -2
  5. package/dist/{chunk-3QP6VIXF.cjs → chunk-AZPUAPXW.cjs} +469 -471
  6. package/dist/chunk-AZPUAPXW.cjs.map +1 -0
  7. package/dist/{chunk-JVXF5DIA.js → chunk-BK7V6CH5.js} +831 -833
  8. package/dist/chunk-BK7V6CH5.js.map +1 -0
  9. package/dist/{chunk-P4G3I3OE.js → chunk-CP7TMQBH.js} +2 -2
  10. package/dist/{chunk-FFQ7IHZZ.js → chunk-CQNK6RS6.js} +2 -2
  11. package/dist/{chunk-ICAWPAGF.js → chunk-DPMOEYEM.js} +2 -2
  12. package/dist/{chunk-PRXMZB6K.cjs → chunk-E6PW7GRQ.cjs} +62 -62
  13. package/dist/{chunk-PRXMZB6K.cjs.map → chunk-E6PW7GRQ.cjs.map} +1 -1
  14. package/dist/{chunk-TGREMQ5Z.cjs → chunk-FG4BSJ4A.cjs} +26 -26
  15. package/dist/{chunk-TGREMQ5Z.cjs.map → chunk-FG4BSJ4A.cjs.map} +1 -1
  16. package/dist/{chunk-DHB2ODZC.js → chunk-G2VDS3M5.js} +2 -2
  17. package/dist/{chunk-WEMZGECB.cjs → chunk-GEC2NHQH.cjs} +20 -20
  18. package/dist/{chunk-WEMZGECB.cjs.map → chunk-GEC2NHQH.cjs.map} +1 -1
  19. package/dist/{chunk-BHHJTOKI.cjs → chunk-J7R3VZL5.cjs} +14 -14
  20. package/dist/{chunk-BHHJTOKI.cjs.map → chunk-J7R3VZL5.cjs.map} +1 -1
  21. package/dist/{chunk-NIQGA3YT.js → chunk-NQ6UF4LP.js} +4 -4
  22. package/dist/{chunk-PL6FTS27.js → chunk-NUKQWLOG.js} +5 -5
  23. package/dist/{chunk-UNR2ROYX.js → chunk-O3SEC45L.js} +4 -4
  24. package/dist/{chunk-E5L6FGRF.cjs → chunk-OYFXHET4.cjs} +7 -7
  25. package/dist/{chunk-E5L6FGRF.cjs.map → chunk-OYFXHET4.cjs.map} +1 -1
  26. package/dist/{chunk-W6RG3S5S.cjs → chunk-PKCZL56Y.cjs} +4 -4
  27. package/dist/{chunk-W6RG3S5S.cjs.map → chunk-PKCZL56Y.cjs.map} +1 -1
  28. package/dist/{chunk-D6I24QAR.cjs → chunk-PT4GS4CE.cjs} +3 -3
  29. package/dist/{chunk-D6I24QAR.cjs.map → chunk-PT4GS4CE.cjs.map} +1 -1
  30. package/dist/{chunk-35U4SIQA.js → chunk-T3P56JKN.js} +2 -2
  31. package/dist/{chunk-5HD3SSC2.js → chunk-TDYF6Q2D.js} +2 -2
  32. package/dist/{chunk-AYJAWSDY.cjs → chunk-U5EVZLL5.cjs} +5 -5
  33. package/dist/{chunk-AYJAWSDY.cjs.map → chunk-U5EVZLL5.cjs.map} +1 -1
  34. package/dist/{chunk-JAJKPAV3.cjs → chunk-VVDLVCPW.cjs} +39 -39
  35. package/dist/{chunk-JAJKPAV3.cjs.map → chunk-VVDLVCPW.cjs.map} +1 -1
  36. package/dist/{chunk-WCHOWGKI.cjs → chunk-WGDZW237.cjs} +86 -86
  37. package/dist/{chunk-WCHOWGKI.cjs.map → chunk-WGDZW237.cjs.map} +1 -1
  38. package/dist/{chunk-6U2VJFKW.js → chunk-X4JKXYY5.js} +2 -2
  39. package/dist/{chunk-VYHMCNZT.cjs → chunk-XFI5PCER.cjs} +31 -31
  40. package/dist/{chunk-VYHMCNZT.cjs.map → chunk-XFI5PCER.cjs.map} +1 -1
  41. package/dist/{chunk-RWGX2HIB.cjs → chunk-YFLSOYX4.cjs} +11 -11
  42. package/dist/{chunk-RWGX2HIB.cjs.map → chunk-YFLSOYX4.cjs.map} +1 -1
  43. package/dist/{chunk-3QYCR7I6.js → chunk-Z4VU6MJ4.js} +2 -2
  44. package/dist/components/case-studies/index.cjs +8 -8
  45. package/dist/components/case-studies/index.js +2 -2
  46. package/dist/components/chat/index.cjs +2 -2
  47. package/dist/components/chat/index.js +1 -1
  48. package/dist/components/contact/index.cjs +3 -3
  49. package/dist/components/contact/index.js +2 -2
  50. package/dist/components/docs/index.cjs +5 -5
  51. package/dist/components/docs/index.js +4 -4
  52. package/dist/components/embeds/index.cjs +3 -3
  53. package/dist/components/embeds/index.js +2 -2
  54. package/dist/components/faq/index.cjs +3 -3
  55. package/dist/components/faq/index.js +2 -2
  56. package/dist/components/features/index.cjs +2 -2
  57. package/dist/components/features/index.js +1 -1
  58. package/dist/components/form.d.ts +1 -1
  59. package/dist/components/form.d.ts.map +1 -1
  60. package/dist/components/help-center-pages/index.cjs +22 -22
  61. package/dist/components/help-center-pages/index.js +13 -13
  62. package/dist/components/index.cjs +131 -131
  63. package/dist/components/index.js +11 -11
  64. package/dist/components/meeting-scheduler/index.cjs +30 -30
  65. package/dist/components/meeting-scheduler/index.js +3 -3
  66. package/dist/components/navigation/index.cjs +2 -2
  67. package/dist/components/navigation/index.js +1 -1
  68. package/dist/components/onboarding-guides/hooks/use-onboarding-guides.d.ts +3 -3
  69. package/dist/components/onboarding-guides/hooks/use-onboarding-guides.d.ts.map +1 -1
  70. package/dist/components/onboarding-guides/index.cjs +5 -5
  71. package/dist/components/onboarding-guides/index.js +4 -4
  72. package/dist/components/related-content/index.cjs +3 -3
  73. package/dist/components/related-content/index.js +2 -2
  74. package/dist/components/tickets/index.cjs +6 -6
  75. package/dist/components/tickets/index.js +5 -5
  76. package/dist/components/ui/dashboard-info-card.d.ts +1 -1
  77. package/dist/components/ui/index.cjs +2 -2
  78. package/dist/components/ui/index.js +1 -1
  79. package/dist/components/ui/ticket-info-section.d.ts +10 -6
  80. package/dist/components/ui/ticket-info-section.d.ts.map +1 -1
  81. package/dist/components/ui/ticket-status-tag.d.ts +8 -1
  82. package/dist/components/ui/ticket-status-tag.d.ts.map +1 -1
  83. package/dist/hooks/use-meeting-booking.d.ts +1 -1
  84. package/dist/index.cjs +2 -2
  85. package/dist/index.js +1 -1
  86. package/package.json +1 -1
  87. package/src/components/features/board/types.ts +1 -1
  88. package/src/components/ui/dashboard-info-card.tsx +1 -1
  89. package/src/components/ui/ticket-info-section.tsx +90 -87
  90. package/src/components/ui/ticket-status-tag.tsx +74 -52
  91. package/src/stories/.Board.stories.md +1 -1
  92. package/src/stories/Board.stories.tsx +4 -4
  93. package/src/stories/DashboardInfoCard.stories.tsx +1 -1
  94. package/src/stories/InfoSection.stories.tsx +1 -1
  95. package/src/stories/TicketEventMessage.stories.tsx +1 -1
  96. package/dist/chunk-3QP6VIXF.cjs.map +0 -1
  97. package/dist/chunk-JVXF5DIA.js.map +0 -1
  98. /package/dist/{chunk-T2WSZ2W4.js.map → chunk-7D62XVHH.js.map} +0 -0
  99. /package/dist/{chunk-ACIVGQA4.js.map → chunk-ASULU3T2.js.map} +0 -0
  100. /package/dist/{chunk-P4G3I3OE.js.map → chunk-CP7TMQBH.js.map} +0 -0
  101. /package/dist/{chunk-FFQ7IHZZ.js.map → chunk-CQNK6RS6.js.map} +0 -0
  102. /package/dist/{chunk-ICAWPAGF.js.map → chunk-DPMOEYEM.js.map} +0 -0
  103. /package/dist/{chunk-DHB2ODZC.js.map → chunk-G2VDS3M5.js.map} +0 -0
  104. /package/dist/{chunk-NIQGA3YT.js.map → chunk-NQ6UF4LP.js.map} +0 -0
  105. /package/dist/{chunk-PL6FTS27.js.map → chunk-NUKQWLOG.js.map} +0 -0
  106. /package/dist/{chunk-UNR2ROYX.js.map → chunk-O3SEC45L.js.map} +0 -0
  107. /package/dist/{chunk-35U4SIQA.js.map → chunk-T3P56JKN.js.map} +0 -0
  108. /package/dist/{chunk-5HD3SSC2.js.map → chunk-TDYF6Q2D.js.map} +0 -0
  109. /package/dist/{chunk-6U2VJFKW.js.map → chunk-X4JKXYY5.js.map} +0 -0
  110. /package/dist/{chunk-3QYCR7I6.js.map → chunk-Z4VU6MJ4.js.map} +0 -0
@@ -4093,7 +4093,7 @@ ErrorMessageDisplay.displayName = "ErrorMessageDisplay";
4093
4093
 
4094
4094
  // src/components/chat/chat-container.tsx
4095
4095
  init_cn();
4096
- import * as React10 from "react";
4096
+ import * as React11 from "react";
4097
4097
 
4098
4098
  // src/components/ui/square-avatar.tsx
4099
4099
  import * as React4 from "react";
@@ -4529,6 +4529,273 @@ function PlusCircleIcon2({ className, whiteOverlay = false, iconSize = 24, ...pr
4529
4529
  );
4530
4530
  }
4531
4531
 
4532
+ // src/components/ui/ticket-status-tag.tsx
4533
+ init_cn();
4534
+
4535
+ // src/utils/color-analysis.ts
4536
+ var DESIGN_PALETTE = [
4537
+ { name: "yellow", hex: "#FFC008", rgb: [255, 192, 8] },
4538
+ { name: "black", hex: "#161616", rgb: [22, 22, 22] },
4539
+ { name: "gray", hex: "#888888", rgb: [136, 136, 136] }
4540
+ ];
4541
+ function hexToRgb(hex) {
4542
+ const normalized = hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (_, r, g, b) => `${r}${r}${g}${g}${b}${b}`);
4543
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(normalized);
4544
+ return result ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)] : [0, 0, 0];
4545
+ }
4546
+ function getLuminance(rgb) {
4547
+ const [r, g, b] = rgb.map((c) => {
4548
+ c = c / 255;
4549
+ return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
4550
+ });
4551
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
4552
+ }
4553
+ function getContrastRatio(color1, color2) {
4554
+ const lum1 = getLuminance(color1);
4555
+ const lum2 = getLuminance(color2);
4556
+ const brightest = Math.max(lum1, lum2);
4557
+ const darkest = Math.min(lum1, lum2);
4558
+ return (brightest + 0.05) / (darkest + 0.05);
4559
+ }
4560
+ function pickReadableTextColor(bgHex) {
4561
+ const bg = hexToRgb(bgHex);
4562
+ const darkContrast = getContrastRatio(bg, [26, 26, 26]);
4563
+ const lightContrast = getContrastRatio(bg, [250, 250, 250]);
4564
+ return darkContrast >= lightContrast ? "dark" : "light";
4565
+ }
4566
+ function extractDominantColor(canvas) {
4567
+ const ctx = canvas.getContext("2d");
4568
+ if (!ctx) return [128, 128, 128];
4569
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
4570
+ const data = imageData.data;
4571
+ const sampleSize = Math.max(1, Math.floor(data.length / (4 * 1e3)));
4572
+ const colorCounts = {};
4573
+ for (let i = 0; i < data.length; i += 4 * sampleSize) {
4574
+ const r = data[i];
4575
+ const g = data[i + 1];
4576
+ const b = data[i + 2];
4577
+ const alpha = data[i + 3];
4578
+ if (alpha < 128) continue;
4579
+ const bucketR = Math.round(r / 32) * 32;
4580
+ const bucketG = Math.round(g / 32) * 32;
4581
+ const bucketB = Math.round(b / 32) * 32;
4582
+ const key = `${bucketR},${bucketG},${bucketB}`;
4583
+ colorCounts[key] = (colorCounts[key] || 0) + 1;
4584
+ }
4585
+ let maxCount = 0;
4586
+ let dominantColor = [128, 128, 128];
4587
+ for (const [colorKey, count] of Object.entries(colorCounts)) {
4588
+ if (count > maxCount) {
4589
+ maxCount = count;
4590
+ const [r, g, b] = colorKey.split(",").map(Number);
4591
+ dominantColor = [r, g, b];
4592
+ }
4593
+ }
4594
+ return dominantColor;
4595
+ }
4596
+ function getBestContrastColor(imageColor) {
4597
+ let bestColor = DESIGN_PALETTE[0];
4598
+ let bestContrast = 0;
4599
+ for (const color of DESIGN_PALETTE) {
4600
+ const contrast = getContrastRatio(imageColor, color.rgb);
4601
+ if (contrast > bestContrast) {
4602
+ bestContrast = contrast;
4603
+ bestColor = color;
4604
+ }
4605
+ }
4606
+ return bestContrast >= 3 ? bestColor : DESIGN_PALETTE.find((c) => c.name === "black") || bestColor;
4607
+ }
4608
+ function analyzeImageColor(imageSrc) {
4609
+ return new Promise((resolve, reject) => {
4610
+ const img = new Image();
4611
+ img.crossOrigin = "anonymous";
4612
+ img.onload = () => {
4613
+ try {
4614
+ const canvas = document.createElement("canvas");
4615
+ const ctx = canvas.getContext("2d");
4616
+ if (!ctx) {
4617
+ reject(new Error("Could not get canvas context"));
4618
+ return;
4619
+ }
4620
+ const maxSize = 100;
4621
+ const scale = Math.min(maxSize / img.width, maxSize / img.height);
4622
+ canvas.width = img.width * scale;
4623
+ canvas.height = img.height * scale;
4624
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
4625
+ const dominantColor = extractDominantColor(canvas);
4626
+ const bestContrastColor = getBestContrastColor(dominantColor);
4627
+ resolve(bestContrastColor);
4628
+ } catch (error) {
4629
+ reject(error);
4630
+ }
4631
+ };
4632
+ img.onerror = () => reject(new Error("Failed to load image"));
4633
+ img.src = imageSrc;
4634
+ });
4635
+ }
4636
+ async function extractImageEdgeColorAsync(imageUrl) {
4637
+ return new Promise((resolve) => {
4638
+ if (typeof window === "undefined") {
4639
+ resolve("#000000");
4640
+ return;
4641
+ }
4642
+ const img = new Image();
4643
+ img.crossOrigin = "anonymous";
4644
+ img.onload = () => {
4645
+ try {
4646
+ const canvas = document.createElement("canvas");
4647
+ const ctx = canvas.getContext("2d");
4648
+ if (!ctx) {
4649
+ resolve("#000000");
4650
+ return;
4651
+ }
4652
+ const maxSize = 50;
4653
+ const scale = Math.min(maxSize / img.naturalWidth, maxSize / img.naturalHeight);
4654
+ const w = Math.round(img.naturalWidth * scale);
4655
+ const h = Math.round(img.naturalHeight * scale);
4656
+ canvas.width = w;
4657
+ canvas.height = h;
4658
+ ctx.drawImage(img, 0, 0, w, h);
4659
+ const data = ctx.getImageData(0, 0, w, h).data;
4660
+ const edgeW = Math.max(2, Math.round(w * 0.15));
4661
+ const edgeH = Math.max(2, Math.round(h * 0.15));
4662
+ const bucketSize = 32;
4663
+ const buckets = /* @__PURE__ */ new Map();
4664
+ for (let y = 0; y < h; y++) {
4665
+ for (let x = 0; x < w; x++) {
4666
+ if (!(x < edgeW || x >= w - edgeW || y < edgeH || y >= h - edgeH)) continue;
4667
+ const i = (y * w + x) * 4;
4668
+ if (data[i + 3] < 128) continue;
4669
+ const br = Math.floor(data[i] / bucketSize) * bucketSize;
4670
+ const bg = Math.floor(data[i + 1] / bucketSize) * bucketSize;
4671
+ const bb = Math.floor(data[i + 2] / bucketSize) * bucketSize;
4672
+ const key = `${br},${bg},${bb}`;
4673
+ const existing = buckets.get(key);
4674
+ if (existing) {
4675
+ existing.r += data[i];
4676
+ existing.g += data[i + 1];
4677
+ existing.b += data[i + 2];
4678
+ existing.count++;
4679
+ } else {
4680
+ buckets.set(key, { r: data[i], g: data[i + 1], b: data[i + 2], count: 1 });
4681
+ }
4682
+ }
4683
+ }
4684
+ let best = { r: 0, g: 0, b: 0, count: 0 };
4685
+ for (const b2 of buckets.values()) {
4686
+ if (b2.count > best.count) best = b2;
4687
+ }
4688
+ if (best.count === 0) {
4689
+ resolve("#000000");
4690
+ return;
4691
+ }
4692
+ const r = Math.round(best.r / best.count), g = Math.round(best.g / best.count), b = Math.round(best.b / best.count);
4693
+ resolve(`#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`);
4694
+ } catch {
4695
+ resolve("#000000");
4696
+ }
4697
+ };
4698
+ img.onerror = () => resolve("#000000");
4699
+ img.src = imageUrl;
4700
+ });
4701
+ }
4702
+
4703
+ // src/utils/ods-color-utils.ts
4704
+ function getPlatformAccentColor(platform) {
4705
+ const currentPlatform = platform || getCurrentPlatform();
4706
+ const platformColors2 = {
4707
+ "openmsp": "var(--ods-open-yellow-base)",
4708
+ // CSS variable instead of hex
4709
+ "openframe": "var(--ods-open-yellow-base)",
4710
+ // CSS variable instead of hex
4711
+ "flamingo": "var(--ods-flamingo-pink-base)"
4712
+ // CSS variable instead of hex
4713
+ };
4714
+ return platformColors2[currentPlatform];
4715
+ }
4716
+ function getCurrentPlatform() {
4717
+ if (typeof window === "undefined") {
4718
+ return process.env.NEXT_PUBLIC_APP_TYPE || "openmsp";
4719
+ }
4720
+ const domPlatform = document.documentElement.getAttribute("data-app-type");
4721
+ if (domPlatform) {
4722
+ return domPlatform;
4723
+ }
4724
+ return process.env.NEXT_PUBLIC_APP_TYPE || "openmsp";
4725
+ }
4726
+ function getReadableTextColor(hex) {
4727
+ return pickReadableTextColor(hex) === "dark" ? "#212121" : "#fafafa";
4728
+ }
4729
+ var HEX_PATTERN = /^#[0-9a-fA-F]{6}$/;
4730
+ function clamp(n, min, max) {
4731
+ return Math.max(min, Math.min(max, n));
4732
+ }
4733
+ function hexToRgb2(hex) {
4734
+ if (!HEX_PATTERN.test(hex)) return null;
4735
+ const n = Number.parseInt(hex.slice(1), 16);
4736
+ return { r: n >> 16 & 255, g: n >> 8 & 255, b: n & 255 };
4737
+ }
4738
+ function rgbToHex(r, g, b) {
4739
+ const to = (n) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, "0");
4740
+ return `#${to(r)}${to(g)}${to(b)}`;
4741
+ }
4742
+ var HOVER_DARKEN_STEP = 10;
4743
+ var ACTIVE_DARKEN_STEP = 20;
4744
+ function darkenByStep(hex, step) {
4745
+ const rgb = hexToRgb2(hex);
4746
+ if (!rgb) return hex;
4747
+ return rgbToHex(rgb.r - step, rgb.g - step, rgb.b - step);
4748
+ }
4749
+ function deriveHoverColor(hex) {
4750
+ return darkenByStep(hex, HOVER_DARKEN_STEP);
4751
+ }
4752
+ function deriveActiveColor(hex) {
4753
+ return darkenByStep(hex, ACTIVE_DARKEN_STEP);
4754
+ }
4755
+ function rgbToHsl(r, g, b) {
4756
+ const rn = r / 255;
4757
+ const gn = g / 255;
4758
+ const bn = b / 255;
4759
+ const max = Math.max(rn, gn, bn);
4760
+ const min = Math.min(rn, gn, bn);
4761
+ const l = (max + min) / 2;
4762
+ if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) };
4763
+ const d = max - min;
4764
+ const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
4765
+ let h;
4766
+ if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0);
4767
+ else if (max === gn) h = (bn - rn) / d + 2;
4768
+ else h = (rn - gn) / d + 4;
4769
+ h *= 60;
4770
+ return { h: Math.round(h), s: Math.round(s * 100), l: Math.round(l * 100) };
4771
+ }
4772
+ function hslToRgb(h, s, l) {
4773
+ const sn = clamp(s, 0, 100) / 100;
4774
+ const ln = clamp(l, 0, 100) / 100;
4775
+ const hn = (h % 360 + 360) % 360;
4776
+ if (sn === 0) {
4777
+ const v = Math.round(ln * 255);
4778
+ return { r: v, g: v, b: v };
4779
+ }
4780
+ const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;
4781
+ const p = 2 * ln - q;
4782
+ const hue2rgb = (t) => {
4783
+ let tn = t;
4784
+ if (tn < 0) tn += 1;
4785
+ if (tn > 1) tn -= 1;
4786
+ if (tn < 1 / 6) return p + (q - p) * 6 * tn;
4787
+ if (tn < 1 / 2) return q;
4788
+ if (tn < 2 / 3) return p + (q - p) * (2 / 3 - tn) * 6;
4789
+ return p;
4790
+ };
4791
+ const hk = hn / 360;
4792
+ return {
4793
+ r: Math.round(hue2rgb(hk + 1 / 3) * 255),
4794
+ g: Math.round(hue2rgb(hk) * 255),
4795
+ b: Math.round(hue2rgb(hk - 1 / 3) * 255)
4796
+ };
4797
+ }
4798
+
4532
4799
  // src/components/ui/actions-menu.tsx
4533
4800
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
4534
4801
 
@@ -5084,282 +5351,42 @@ function ColorSwatch({ color, className }) {
5084
5351
  );
5085
5352
  }
5086
5353
 
5087
- // src/components/ui/ticket-status-tag.tsx
5354
+ // src/components/ui/tooltip.tsx
5088
5355
  init_cn();
5089
-
5090
- // src/utils/color-analysis.ts
5091
- var DESIGN_PALETTE = [
5092
- { name: "yellow", hex: "#FFC008", rgb: [255, 192, 8] },
5093
- { name: "black", hex: "#161616", rgb: [22, 22, 22] },
5094
- { name: "gray", hex: "#888888", rgb: [136, 136, 136] }
5095
- ];
5096
- function hexToRgb(hex) {
5097
- const normalized = hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (_, r, g, b) => `${r}${r}${g}${g}${b}${b}`);
5098
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(normalized);
5099
- return result ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)] : [0, 0, 0];
5100
- }
5101
- function getLuminance(rgb) {
5102
- const [r, g, b] = rgb.map((c) => {
5103
- c = c / 255;
5104
- return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
5105
- });
5106
- return 0.2126 * r + 0.7152 * g + 0.0722 * b;
5107
- }
5108
- function getContrastRatio(color1, color2) {
5109
- const lum1 = getLuminance(color1);
5110
- const lum2 = getLuminance(color2);
5111
- const brightest = Math.max(lum1, lum2);
5112
- const darkest = Math.min(lum1, lum2);
5113
- return (brightest + 0.05) / (darkest + 0.05);
5114
- }
5115
- function pickReadableTextColor(bgHex) {
5116
- const bg = hexToRgb(bgHex);
5117
- const darkContrast = getContrastRatio(bg, [26, 26, 26]);
5118
- const lightContrast = getContrastRatio(bg, [250, 250, 250]);
5119
- return darkContrast >= lightContrast ? "dark" : "light";
5120
- }
5121
- function extractDominantColor(canvas) {
5122
- const ctx = canvas.getContext("2d");
5123
- if (!ctx) return [128, 128, 128];
5124
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
5125
- const data = imageData.data;
5126
- const sampleSize = Math.max(1, Math.floor(data.length / (4 * 1e3)));
5127
- const colorCounts = {};
5128
- for (let i = 0; i < data.length; i += 4 * sampleSize) {
5129
- const r = data[i];
5130
- const g = data[i + 1];
5131
- const b = data[i + 2];
5132
- const alpha = data[i + 3];
5133
- if (alpha < 128) continue;
5134
- const bucketR = Math.round(r / 32) * 32;
5135
- const bucketG = Math.round(g / 32) * 32;
5136
- const bucketB = Math.round(b / 32) * 32;
5137
- const key = `${bucketR},${bucketG},${bucketB}`;
5138
- colorCounts[key] = (colorCounts[key] || 0) + 1;
5139
- }
5140
- let maxCount = 0;
5141
- let dominantColor = [128, 128, 128];
5142
- for (const [colorKey, count] of Object.entries(colorCounts)) {
5143
- if (count > maxCount) {
5144
- maxCount = count;
5145
- const [r, g, b] = colorKey.split(",").map(Number);
5146
- dominantColor = [r, g, b];
5147
- }
5148
- }
5149
- return dominantColor;
5150
- }
5151
- function getBestContrastColor(imageColor) {
5152
- let bestColor = DESIGN_PALETTE[0];
5153
- let bestContrast = 0;
5154
- for (const color of DESIGN_PALETTE) {
5155
- const contrast = getContrastRatio(imageColor, color.rgb);
5156
- if (contrast > bestContrast) {
5157
- bestContrast = contrast;
5158
- bestColor = color;
5159
- }
5160
- }
5161
- return bestContrast >= 3 ? bestColor : DESIGN_PALETTE.find((c) => c.name === "black") || bestColor;
5162
- }
5163
- function analyzeImageColor(imageSrc) {
5164
- return new Promise((resolve, reject) => {
5165
- const img = new Image();
5166
- img.crossOrigin = "anonymous";
5167
- img.onload = () => {
5168
- try {
5169
- const canvas = document.createElement("canvas");
5170
- const ctx = canvas.getContext("2d");
5171
- if (!ctx) {
5172
- reject(new Error("Could not get canvas context"));
5173
- return;
5174
- }
5175
- const maxSize = 100;
5176
- const scale = Math.min(maxSize / img.width, maxSize / img.height);
5177
- canvas.width = img.width * scale;
5178
- canvas.height = img.height * scale;
5179
- ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
5180
- const dominantColor = extractDominantColor(canvas);
5181
- const bestContrastColor = getBestContrastColor(dominantColor);
5182
- resolve(bestContrastColor);
5183
- } catch (error) {
5184
- reject(error);
5185
- }
5186
- };
5187
- img.onerror = () => reject(new Error("Failed to load image"));
5188
- img.src = imageSrc;
5189
- });
5190
- }
5191
- async function extractImageEdgeColorAsync(imageUrl) {
5192
- return new Promise((resolve) => {
5193
- if (typeof window === "undefined") {
5194
- resolve("#000000");
5195
- return;
5356
+ import * as React10 from "react";
5357
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
5358
+ import { jsx as jsx24 } from "react/jsx-runtime";
5359
+ var TooltipProvider = TooltipPrimitive.Provider;
5360
+ var Tooltip = TooltipPrimitive.Root;
5361
+ var TooltipTrigger = TooltipPrimitive.Trigger;
5362
+ var TooltipContent = React10.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
5363
+ const container = usePortalContainer();
5364
+ return /* @__PURE__ */ jsx24(TooltipPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx24(
5365
+ TooltipPrimitive.Content,
5366
+ {
5367
+ ref,
5368
+ sideOffset,
5369
+ className: cn(
5370
+ // `max-h` uses Radix's available-height var so tall content scrolls inside
5371
+ // the tooltip instead of overflowing off-screen (only engages on overflow).
5372
+ "z-[1400] max-h-[var(--radix-popper-available-height)] overflow-y-auto rounded-md bg-ods-card border border-ods-border px-3 py-2 text-h6 text-ods-text-primary shadow-lg animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
5373
+ className
5374
+ ),
5375
+ ...props
5196
5376
  }
5197
- const img = new Image();
5198
- img.crossOrigin = "anonymous";
5199
- img.onload = () => {
5200
- try {
5201
- const canvas = document.createElement("canvas");
5202
- const ctx = canvas.getContext("2d");
5203
- if (!ctx) {
5204
- resolve("#000000");
5205
- return;
5206
- }
5207
- const maxSize = 50;
5208
- const scale = Math.min(maxSize / img.naturalWidth, maxSize / img.naturalHeight);
5209
- const w = Math.round(img.naturalWidth * scale);
5210
- const h = Math.round(img.naturalHeight * scale);
5211
- canvas.width = w;
5212
- canvas.height = h;
5213
- ctx.drawImage(img, 0, 0, w, h);
5214
- const data = ctx.getImageData(0, 0, w, h).data;
5215
- const edgeW = Math.max(2, Math.round(w * 0.15));
5216
- const edgeH = Math.max(2, Math.round(h * 0.15));
5217
- const bucketSize = 32;
5218
- const buckets = /* @__PURE__ */ new Map();
5219
- for (let y = 0; y < h; y++) {
5220
- for (let x = 0; x < w; x++) {
5221
- if (!(x < edgeW || x >= w - edgeW || y < edgeH || y >= h - edgeH)) continue;
5222
- const i = (y * w + x) * 4;
5223
- if (data[i + 3] < 128) continue;
5224
- const br = Math.floor(data[i] / bucketSize) * bucketSize;
5225
- const bg = Math.floor(data[i + 1] / bucketSize) * bucketSize;
5226
- const bb = Math.floor(data[i + 2] / bucketSize) * bucketSize;
5227
- const key = `${br},${bg},${bb}`;
5228
- const existing = buckets.get(key);
5229
- if (existing) {
5230
- existing.r += data[i];
5231
- existing.g += data[i + 1];
5232
- existing.b += data[i + 2];
5233
- existing.count++;
5234
- } else {
5235
- buckets.set(key, { r: data[i], g: data[i + 1], b: data[i + 2], count: 1 });
5236
- }
5237
- }
5238
- }
5239
- let best = { r: 0, g: 0, b: 0, count: 0 };
5240
- for (const b2 of buckets.values()) {
5241
- if (b2.count > best.count) best = b2;
5242
- }
5243
- if (best.count === 0) {
5244
- resolve("#000000");
5245
- return;
5246
- }
5247
- const r = Math.round(best.r / best.count), g = Math.round(best.g / best.count), b = Math.round(best.b / best.count);
5248
- resolve(`#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`);
5249
- } catch {
5250
- resolve("#000000");
5251
- }
5252
- };
5253
- img.onerror = () => resolve("#000000");
5254
- img.src = imageUrl;
5255
- });
5256
- }
5257
-
5258
- // src/utils/ods-color-utils.ts
5259
- function getPlatformAccentColor(platform) {
5260
- const currentPlatform = platform || getCurrentPlatform();
5261
- const platformColors2 = {
5262
- "openmsp": "var(--ods-open-yellow-base)",
5263
- // CSS variable instead of hex
5264
- "openframe": "var(--ods-open-yellow-base)",
5265
- // CSS variable instead of hex
5266
- "flamingo": "var(--ods-flamingo-pink-base)"
5267
- // CSS variable instead of hex
5268
- };
5269
- return platformColors2[currentPlatform];
5270
- }
5271
- function getCurrentPlatform() {
5272
- if (typeof window === "undefined") {
5273
- return process.env.NEXT_PUBLIC_APP_TYPE || "openmsp";
5274
- }
5275
- const domPlatform = document.documentElement.getAttribute("data-app-type");
5276
- if (domPlatform) {
5277
- return domPlatform;
5278
- }
5279
- return process.env.NEXT_PUBLIC_APP_TYPE || "openmsp";
5280
- }
5281
- function getReadableTextColor(hex) {
5282
- return pickReadableTextColor(hex) === "dark" ? "#212121" : "#fafafa";
5283
- }
5284
- var HEX_PATTERN = /^#[0-9a-fA-F]{6}$/;
5285
- function clamp(n, min, max) {
5286
- return Math.max(min, Math.min(max, n));
5287
- }
5288
- function hexToRgb2(hex) {
5289
- if (!HEX_PATTERN.test(hex)) return null;
5290
- const n = Number.parseInt(hex.slice(1), 16);
5291
- return { r: n >> 16 & 255, g: n >> 8 & 255, b: n & 255 };
5292
- }
5293
- function rgbToHex(r, g, b) {
5294
- const to = (n) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, "0");
5295
- return `#${to(r)}${to(g)}${to(b)}`;
5296
- }
5297
- var HOVER_DARKEN_STEP = 10;
5298
- var ACTIVE_DARKEN_STEP = 20;
5299
- function darkenByStep(hex, step) {
5300
- const rgb = hexToRgb2(hex);
5301
- if (!rgb) return hex;
5302
- return rgbToHex(rgb.r - step, rgb.g - step, rgb.b - step);
5303
- }
5304
- function deriveHoverColor(hex) {
5305
- return darkenByStep(hex, HOVER_DARKEN_STEP);
5306
- }
5307
- function deriveActiveColor(hex) {
5308
- return darkenByStep(hex, ACTIVE_DARKEN_STEP);
5309
- }
5310
- function rgbToHsl(r, g, b) {
5311
- const rn = r / 255;
5312
- const gn = g / 255;
5313
- const bn = b / 255;
5314
- const max = Math.max(rn, gn, bn);
5315
- const min = Math.min(rn, gn, bn);
5316
- const l = (max + min) / 2;
5317
- if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) };
5318
- const d = max - min;
5319
- const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
5320
- let h;
5321
- if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0);
5322
- else if (max === gn) h = (bn - rn) / d + 2;
5323
- else h = (rn - gn) / d + 4;
5324
- h *= 60;
5325
- return { h: Math.round(h), s: Math.round(s * 100), l: Math.round(l * 100) };
5326
- }
5327
- function hslToRgb(h, s, l) {
5328
- const sn = clamp(s, 0, 100) / 100;
5329
- const ln = clamp(l, 0, 100) / 100;
5330
- const hn = (h % 360 + 360) % 360;
5331
- if (sn === 0) {
5332
- const v = Math.round(ln * 255);
5333
- return { r: v, g: v, b: v };
5334
- }
5335
- const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;
5336
- const p = 2 * ln - q;
5337
- const hue2rgb = (t) => {
5338
- let tn = t;
5339
- if (tn < 0) tn += 1;
5340
- if (tn > 1) tn -= 1;
5341
- if (tn < 1 / 6) return p + (q - p) * 6 * tn;
5342
- if (tn < 1 / 2) return q;
5343
- if (tn < 2 / 3) return p + (q - p) * (2 / 3 - tn) * 6;
5344
- return p;
5345
- };
5346
- const hk = hn / 360;
5347
- return {
5348
- r: Math.round(hue2rgb(hk + 1 / 3) * 255),
5349
- g: Math.round(hue2rgb(hk) * 255),
5350
- b: Math.round(hue2rgb(hk - 1 / 3) * 255)
5351
- };
5352
- }
5377
+ ) });
5378
+ });
5379
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
5353
5380
 
5354
5381
  // src/components/ui/ticket-status-tag.tsx
5355
- import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
5382
+ import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
5356
5383
  var STATUS_CONFIG = {
5357
5384
  ACTIVE: {
5358
5385
  label: "Active",
5359
5386
  variant: "success"
5360
5387
  },
5361
5388
  AI_ASSISTANCE: {
5362
- label: "AI Assistance",
5389
+ label: "AI Handling",
5363
5390
  variant: "outline"
5364
5391
  },
5365
5392
  TECH_REQUIRED: {
@@ -5373,7 +5400,7 @@ var STATUS_CONFIG = {
5373
5400
  RESOLVED: {
5374
5401
  label: "Resolved",
5375
5402
  variant: "outline",
5376
- icon: /* @__PURE__ */ jsx24(CheckCircleIcon, { size: 16, color: "var(--color-success)" })
5403
+ icon: /* @__PURE__ */ jsx25(CheckCircleIcon, { size: 16, color: "var(--color-success)" })
5377
5404
  },
5378
5405
  ARCHIVED: {
5379
5406
  label: "Archived",
@@ -5452,7 +5479,9 @@ function TicketStatusTag({
5452
5479
  showIcon = true,
5453
5480
  options,
5454
5481
  onSelect,
5455
- isPending = false
5482
+ isPending = false,
5483
+ disabled = false,
5484
+ disabledReason
5456
5485
  }) {
5457
5486
  const config = getTicketStatusConfig(status);
5458
5487
  const customStyle = color ? {
@@ -5462,7 +5491,7 @@ function TicketStatusTag({
5462
5491
  color: getReadableTextColor(color)
5463
5492
  } : void 0;
5464
5493
  const customColorClasses = color ? "bg-[var(--tag-bg)] hover:bg-[var(--tag-bg-hover)] active:bg-[var(--tag-bg-active)]" : void 0;
5465
- const tag = /* @__PURE__ */ jsx24(
5494
+ const tag = /* @__PURE__ */ jsx25(
5466
5495
  Tag,
5467
5496
  {
5468
5497
  label: label ?? config.label,
@@ -5472,10 +5501,16 @@ function TicketStatusTag({
5472
5501
  style: customStyle
5473
5502
  }
5474
5503
  );
5475
- if (!options || options.length === 0 || !onSelect) {
5504
+ if (disabled || !options || options.length === 0 || !onSelect) {
5505
+ if (disabled && disabledReason) {
5506
+ return /* @__PURE__ */ jsx25(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs17(Tooltip, { children: [
5507
+ /* @__PURE__ */ jsx25(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx25("span", { className: "w-fit shrink-0 cursor-not-allowed", children: tag }) }),
5508
+ /* @__PURE__ */ jsx25(TooltipContent, { children: disabledReason })
5509
+ ] }) });
5510
+ }
5476
5511
  return tag;
5477
5512
  }
5478
- return /* @__PURE__ */ jsx24(
5513
+ return /* @__PURE__ */ jsx25(
5479
5514
  ActionsMenuDropdown,
5480
5515
  {
5481
5516
  align: "start",
@@ -5484,7 +5519,7 @@ function TicketStatusTag({
5484
5519
  items: options.map((option) => ({
5485
5520
  id: option.id,
5486
5521
  label: option.name,
5487
- icon: /* @__PURE__ */ jsx24(ColorSwatch, { color: option.color }),
5522
+ icon: /* @__PURE__ */ jsx25(ColorSwatch, { color: option.color }),
5488
5523
  onClick: () => onSelect(option.id),
5489
5524
  disabled: isPending
5490
5525
  }))
@@ -5509,10 +5544,10 @@ function TicketStatusTag({
5509
5544
  ),
5510
5545
  children: [
5511
5546
  /* @__PURE__ */ jsxs17("span", { className: "flex items-center gap-[var(--spacing-system-xxs)] px-[var(--spacing-system-xsf)]", children: [
5512
- showIcon && config.icon && /* @__PURE__ */ jsx24("span", { className: "flex items-center justify-center size-5 shrink-0", children: config.icon }),
5513
- /* @__PURE__ */ jsx24("span", { className: "truncate", children: label ?? config.label })
5547
+ showIcon && config.icon && /* @__PURE__ */ jsx25("span", { className: "flex items-center justify-center size-5 shrink-0", children: config.icon }),
5548
+ /* @__PURE__ */ jsx25("span", { className: "truncate", children: label ?? config.label })
5514
5549
  ] }),
5515
- /* @__PURE__ */ jsx24("span", { className: "flex items-center justify-center self-stretch border-l border-ods-border px-[var(--spacing-system-xsf)]", children: /* @__PURE__ */ jsx24(Chevron02DownIcon, { className: "size-4 shrink-0" }) })
5550
+ /* @__PURE__ */ jsx25("span", { className: "flex items-center justify-center self-stretch border-l border-ods-border px-[var(--spacing-system-xsf)]", children: /* @__PURE__ */ jsx25(Chevron02DownIcon, { className: "size-4 shrink-0" }) })
5516
5551
  ]
5517
5552
  }
5518
5553
  )
@@ -5523,7 +5558,7 @@ function TicketStatusTag({
5523
5558
  // src/components/chat/msp-organization-card.tsx
5524
5559
  init_cn();
5525
5560
  init_button2();
5526
- import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
5561
+ import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
5527
5562
  function MspOrganizationCard({
5528
5563
  name,
5529
5564
  website,
@@ -5545,12 +5580,12 @@ function MspOrganizationCard({
5545
5580
  className
5546
5581
  ),
5547
5582
  children: [
5548
- /* @__PURE__ */ jsx25(SquareAvatar, { src: logoUrl, alt: name, fallback: name, size: "lg", variant: "square" }),
5583
+ /* @__PURE__ */ jsx26(SquareAvatar, { src: logoUrl, alt: name, fallback: name, size: "lg", variant: "square" }),
5549
5584
  /* @__PURE__ */ jsxs18("div", { className: "flex min-w-0 flex-1 flex-col", children: [
5550
- /* @__PURE__ */ jsx25("span", { className: "truncate text-h3 text-ods-text-primary", children: title ?? `Your IT is managed by ${name}` }),
5551
- website ? /* @__PURE__ */ jsx25("span", { className: "truncate text-h4 text-ods-text-secondary", children: website }) : null
5585
+ /* @__PURE__ */ jsx26("span", { className: "truncate text-h3 text-ods-text-primary", children: title ?? `Your IT is managed by ${name}` }),
5586
+ website ? /* @__PURE__ */ jsx26("span", { className: "truncate text-h4 text-ods-text-secondary", children: website }) : null
5552
5587
  ] }),
5553
- href ? /* @__PURE__ */ jsx25(Button, { asChild: true, variant: "outline", size: "icon", "aria-label": actionLabel, children: /* @__PURE__ */ jsx25("a", { href, target: "_blank", rel: "noreferrer noopener", children: /* @__PURE__ */ jsx25(ExternalLinkIcon, {}) }) }) : onOpenWebsite ? /* @__PURE__ */ jsx25(Button, { variant: "outline", size: "icon", "aria-label": actionLabel, onClick: onOpenWebsite, children: /* @__PURE__ */ jsx25(ExternalLinkIcon, {}) }) : null
5588
+ href ? /* @__PURE__ */ jsx26(Button, { asChild: true, variant: "outline", size: "icon", "aria-label": actionLabel, children: /* @__PURE__ */ jsx26("a", { href, target: "_blank", rel: "noreferrer noopener", children: /* @__PURE__ */ jsx26(ExternalLinkIcon, {}) }) }) : onOpenWebsite ? /* @__PURE__ */ jsx26(Button, { variant: "outline", size: "icon", "aria-label": actionLabel, onClick: onOpenWebsite, children: /* @__PURE__ */ jsx26(ExternalLinkIcon, {}) }) : null
5554
5589
  ]
5555
5590
  }
5556
5591
  );
@@ -5558,7 +5593,7 @@ function MspOrganizationCard({
5558
5593
 
5559
5594
  // src/components/chat/msp-organization-card-skeleton.tsx
5560
5595
  init_cn();
5561
- import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
5596
+ import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
5562
5597
  function MspOrganizationCardSkeleton({ className }) {
5563
5598
  return /* @__PURE__ */ jsxs19(
5564
5599
  "div",
@@ -5568,19 +5603,19 @@ function MspOrganizationCardSkeleton({ className }) {
5568
5603
  className
5569
5604
  ),
5570
5605
  children: [
5571
- /* @__PURE__ */ jsx26(Skeleton, { className: "size-12 shrink-0 rounded-md" }),
5606
+ /* @__PURE__ */ jsx27(Skeleton, { className: "size-12 shrink-0 rounded-md" }),
5572
5607
  /* @__PURE__ */ jsxs19("div", { className: "flex min-w-0 flex-1 flex-col justify-center gap-2 self-stretch", children: [
5573
- /* @__PURE__ */ jsx26(Skeleton, { className: "h-5 w-3/5 rounded-md" }),
5574
- /* @__PURE__ */ jsx26(Skeleton, { className: "h-4 w-2/5 rounded-md" })
5608
+ /* @__PURE__ */ jsx27(Skeleton, { className: "h-5 w-3/5 rounded-md" }),
5609
+ /* @__PURE__ */ jsx27(Skeleton, { className: "h-4 w-2/5 rounded-md" })
5575
5610
  ] }),
5576
- /* @__PURE__ */ jsx26(Skeleton, { className: "size-12 shrink-0 rounded-md" })
5611
+ /* @__PURE__ */ jsx27(Skeleton, { className: "size-12 shrink-0 rounded-md" })
5577
5612
  ]
5578
5613
  }
5579
5614
  );
5580
5615
  }
5581
5616
 
5582
5617
  // src/components/chat/chat-container.tsx
5583
- import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
5618
+ import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
5584
5619
  var ConnectionIndicator = ({ status }) => {
5585
5620
  const getStatusStyles = () => {
5586
5621
  switch (status) {
@@ -5596,7 +5631,7 @@ var ConnectionIndicator = ({ status }) => {
5596
5631
  return "bg-ods-text-tertiary";
5597
5632
  }
5598
5633
  };
5599
- return /* @__PURE__ */ jsx27("div", { className: "flex items-center", children: /* @__PURE__ */ jsx27(
5634
+ return /* @__PURE__ */ jsx28("div", { className: "flex items-center", children: /* @__PURE__ */ jsx28(
5600
5635
  "output",
5601
5636
  {
5602
5637
  className: cn(
@@ -5608,9 +5643,9 @@ var ConnectionIndicator = ({ status }) => {
5608
5643
  }
5609
5644
  ) });
5610
5645
  };
5611
- var ChatContainer = React10.forwardRef(
5646
+ var ChatContainer = React11.forwardRef(
5612
5647
  ({ className, children, ...props }, ref) => {
5613
- return /* @__PURE__ */ jsx27(
5648
+ return /* @__PURE__ */ jsx28(
5614
5649
  "div",
5615
5650
  {
5616
5651
  ref,
@@ -5627,7 +5662,7 @@ var ChatContainer = React10.forwardRef(
5627
5662
  }
5628
5663
  );
5629
5664
  ChatContainer.displayName = "ChatContainer";
5630
- var ChatHeader = React10.forwardRef(
5665
+ var ChatHeader = React11.forwardRef(
5631
5666
  ({ className, userName = 'Grace "Fae" Meadows', userTitle = "Your Personal Assistant", userAvatar, userIcon, onSettingsClick, onNewChat, onClose, onBack, showNewChat = false, connectionStatus = "disconnected", serverUrl = null, headerActions, ticketInfo, mspOrganization, isMspLoading = false, fullWidth = false, bare = false, isLoading = false, ...props }, ref) => {
5632
5667
  const cardClasses = bare ? "" : "rounded-md bg-ods-card border border-ods-border";
5633
5668
  return /* @__PURE__ */ jsxs20(
@@ -5643,14 +5678,14 @@ var ChatHeader = React10.forwardRef(
5643
5678
  ),
5644
5679
  ...props,
5645
5680
  children: [
5646
- onBack && /* @__PURE__ */ jsx27(
5681
+ onBack && /* @__PURE__ */ jsx28(
5647
5682
  Button,
5648
5683
  {
5649
5684
  onClick: onBack,
5650
5685
  variant: "transparent",
5651
5686
  size: "icon",
5652
5687
  "aria-label": "Back",
5653
- leftIcon: /* @__PURE__ */ jsx27(Chevron02LeftIcon, { size: 24, className: "text-ods-text-primary" }),
5688
+ leftIcon: /* @__PURE__ */ jsx28(Chevron02LeftIcon, { size: 24, className: "text-ods-text-primary" }),
5654
5689
  className: cn(
5655
5690
  cardClasses,
5656
5691
  "absolute top-0 right-full mr-[var(--spacing-system-s)] hover:bg-ods-bg-hover"
@@ -5660,13 +5695,13 @@ var ChatHeader = React10.forwardRef(
5660
5695
  /* @__PURE__ */ jsxs20("div", { className: cardClasses, children: [
5661
5696
  /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between gap-4 px-4 py-3", children: [
5662
5697
  isLoading ? /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-3", children: [
5663
- /* @__PURE__ */ jsx27(Skeleton, { className: "w-16 h-16 rounded-full shrink-0" }),
5698
+ /* @__PURE__ */ jsx28(Skeleton, { className: "w-16 h-16 rounded-full shrink-0" }),
5664
5699
  /* @__PURE__ */ jsxs20("div", { className: "flex flex-col gap-1", children: [
5665
- /* @__PURE__ */ jsx27(Skeleton, { className: "h-6 w-40" }),
5666
- /* @__PURE__ */ jsx27(Skeleton, { className: "h-4 w-28" })
5700
+ /* @__PURE__ */ jsx28(Skeleton, { className: "h-6 w-40" }),
5701
+ /* @__PURE__ */ jsx28(Skeleton, { className: "h-4 w-28" })
5667
5702
  ] })
5668
5703
  ] }) : /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-3", children: [
5669
- userIcon ? /* @__PURE__ */ jsx27("div", { className: "flex items-center justify-center w-16 h-16 rounded-full bg-ods-accent", children: userIcon }) : /* @__PURE__ */ jsx27(
5704
+ userIcon ? /* @__PURE__ */ jsx28("div", { className: "flex items-center justify-center w-16 h-16 rounded-full bg-ods-accent", children: userIcon }) : /* @__PURE__ */ jsx28(
5670
5705
  SquareAvatar,
5671
5706
  {
5672
5707
  src: userAvatar,
@@ -5678,26 +5713,26 @@ var ChatHeader = React10.forwardRef(
5678
5713
  }
5679
5714
  ),
5680
5715
  /* @__PURE__ */ jsxs20("div", { className: "flex flex-col", children: [
5681
- /* @__PURE__ */ jsx27("span", { className: "text-h3", children: userName }),
5682
- /* @__PURE__ */ jsx27("div", { className: "flex items-center gap-2", children: serverUrl && /* @__PURE__ */ jsxs20(Fragment5, { children: [
5683
- /* @__PURE__ */ jsx27("span", { className: "text-h4 text-ods-text-secondary", children: serverUrl }),
5684
- /* @__PURE__ */ jsx27(ConnectionIndicator, { status: connectionStatus })
5716
+ /* @__PURE__ */ jsx28("span", { className: "text-h3", children: userName }),
5717
+ /* @__PURE__ */ jsx28("div", { className: "flex items-center gap-2", children: serverUrl && /* @__PURE__ */ jsxs20(Fragment5, { children: [
5718
+ /* @__PURE__ */ jsx28("span", { className: "text-h4 text-ods-text-secondary", children: serverUrl }),
5719
+ /* @__PURE__ */ jsx28(ConnectionIndicator, { status: connectionStatus })
5685
5720
  ] }) })
5686
5721
  ] })
5687
5722
  ] }),
5688
5723
  /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-1", children: [
5689
- showNewChat && onNewChat && /* @__PURE__ */ jsx27(
5724
+ showNewChat && onNewChat && /* @__PURE__ */ jsx28(
5690
5725
  Button,
5691
5726
  {
5692
5727
  onClick: onNewChat,
5693
5728
  variant: "transparent",
5694
5729
  size: "small-legacy",
5695
- leftIcon: /* @__PURE__ */ jsx27(PlusCircleIcon2, { className: "w-5 h-5", whiteOverlay: true }),
5730
+ leftIcon: /* @__PURE__ */ jsx28(PlusCircleIcon2, { className: "w-5 h-5", whiteOverlay: true }),
5696
5731
  className: "text-ods-text-primary hover:bg-ods-bg-hover",
5697
5732
  children: "New Chat"
5698
5733
  }
5699
5734
  ),
5700
- onClose && /* @__PURE__ */ jsx27(
5735
+ onClose && /* @__PURE__ */ jsx28(
5701
5736
  Button,
5702
5737
  {
5703
5738
  onClick: onClose,
@@ -5705,15 +5740,15 @@ var ChatHeader = React10.forwardRef(
5705
5740
  size: "small-legacy",
5706
5741
  "aria-label": "Close",
5707
5742
  className: "text-ods-text-muted hover:text-ods-text-primary hover:bg-ods-bg-hover !p-1.5",
5708
- children: /* @__PURE__ */ jsx27(XmarkIcon, { size: 16 })
5743
+ children: /* @__PURE__ */ jsx28(XmarkIcon, { size: 16 })
5709
5744
  }
5710
5745
  ),
5711
5746
  headerActions
5712
5747
  ] })
5713
5748
  ] }),
5714
5749
  !ticketInfo && (isMspLoading || mspOrganization) && /* @__PURE__ */ jsxs20(Fragment5, { children: [
5715
- /* @__PURE__ */ jsx27("div", { className: "h-px bg-ods-border" }),
5716
- isMspLoading || !mspOrganization ? /* @__PURE__ */ jsx27(MspOrganizationCardSkeleton, { className: cn("ring-0 rounded-none", !bare && "rounded-b-md") }) : /* @__PURE__ */ jsx27(
5750
+ /* @__PURE__ */ jsx28("div", { className: "h-px bg-ods-border" }),
5751
+ isMspLoading || !mspOrganization ? /* @__PURE__ */ jsx28(MspOrganizationCardSkeleton, { className: cn("ring-0 rounded-none", !bare && "rounded-b-md") }) : /* @__PURE__ */ jsx28(
5717
5752
  MspOrganizationCard,
5718
5753
  {
5719
5754
  ...mspOrganization,
@@ -5722,13 +5757,13 @@ var ChatHeader = React10.forwardRef(
5722
5757
  )
5723
5758
  ] }),
5724
5759
  ticketInfo && /* @__PURE__ */ jsxs20(Fragment5, { children: [
5725
- /* @__PURE__ */ jsx27("div", { className: "h-px bg-ods-border" }),
5760
+ /* @__PURE__ */ jsx28("div", { className: "h-px bg-ods-border" }),
5726
5761
  /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between gap-4 px-4 py-2", children: [
5727
5762
  /* @__PURE__ */ jsxs20("div", { className: "flex flex-col min-w-0", children: [
5728
- /* @__PURE__ */ jsx27("span", { className: "text-heading-3 truncate", title: typeof ticketInfo.title === "string" ? ticketInfo.title : void 0, children: ticketInfo.title }),
5729
- ticketInfo.meta && /* @__PURE__ */ jsx27("div", { className: "text-h6 text-ods-text-secondary truncate", title: typeof ticketInfo.meta === "string" ? ticketInfo.meta : void 0, children: ticketInfo.meta })
5763
+ /* @__PURE__ */ jsx28("span", { className: "text-heading-3 truncate", title: typeof ticketInfo.title === "string" ? ticketInfo.title : void 0, children: ticketInfo.title }),
5764
+ ticketInfo.meta && /* @__PURE__ */ jsx28("div", { className: "text-h6 text-ods-text-secondary truncate", title: typeof ticketInfo.meta === "string" ? ticketInfo.meta : void 0, children: ticketInfo.meta })
5730
5765
  ] }),
5731
- (ticketInfo.status || ticketInfo.statusName) && /* @__PURE__ */ jsx27(
5766
+ (ticketInfo.status || ticketInfo.statusName) && /* @__PURE__ */ jsx28(
5732
5767
  TicketStatusTag,
5733
5768
  {
5734
5769
  ...resolveStatusTagProps({
@@ -5748,9 +5783,9 @@ var ChatHeader = React10.forwardRef(
5748
5783
  }
5749
5784
  );
5750
5785
  ChatHeader.displayName = "ChatHeader";
5751
- var ChatContent = React10.forwardRef(
5786
+ var ChatContent = React11.forwardRef(
5752
5787
  ({ className, children, ...props }, ref) => {
5753
- return /* @__PURE__ */ jsx27(
5788
+ return /* @__PURE__ */ jsx28(
5754
5789
  "div",
5755
5790
  {
5756
5791
  ref,
@@ -5765,9 +5800,9 @@ var ChatContent = React10.forwardRef(
5765
5800
  }
5766
5801
  );
5767
5802
  ChatContent.displayName = "ChatContent";
5768
- var ChatFooter = React10.forwardRef(
5803
+ var ChatFooter = React11.forwardRef(
5769
5804
  ({ className, contentClassName, fullWidth = false, children, ...props }, ref) => {
5770
- return /* @__PURE__ */ jsx27(
5805
+ return /* @__PURE__ */ jsx28(
5771
5806
  "div",
5772
5807
  {
5773
5808
  ref,
@@ -5776,7 +5811,7 @@ var ChatFooter = React10.forwardRef(
5776
5811
  className
5777
5812
  ),
5778
5813
  ...props,
5779
- children: /* @__PURE__ */ jsx27(
5814
+ children: /* @__PURE__ */ jsx28(
5780
5815
  "div",
5781
5816
  {
5782
5817
  className: cn(
@@ -5799,14 +5834,14 @@ ChatFooter.displayName = "ChatFooter";
5799
5834
 
5800
5835
  // src/components/chat/chat-input.tsx
5801
5836
  init_cn();
5802
- import { useState as useState10, useRef as useRef7, useImperativeHandle, forwardRef as forwardRef15, useCallback as useCallback3, useEffect as useEffect6, useMemo as useMemo7 } from "react";
5837
+ import { useState as useState10, useRef as useRef7, useImperativeHandle, forwardRef as forwardRef16, useCallback as useCallback3, useEffect as useEffect6, useMemo as useMemo7 } from "react";
5803
5838
  import { renderToStaticMarkup } from "react-dom/server";
5804
5839
 
5805
5840
  // src/components/chat/chat-typing-indicator.tsx
5806
5841
  init_cn();
5807
- import * as React11 from "react";
5808
- import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
5809
- var ChatTypingIndicator = React11.forwardRef(
5842
+ import * as React12 from "react";
5843
+ import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
5844
+ var ChatTypingIndicator = React12.forwardRef(
5810
5845
  ({ className, size: size2 = "md", showText = false, dotClassName, ...props }, ref) => {
5811
5846
  const dotSizeClasses = {
5812
5847
  sm: "w-1 h-1",
@@ -5837,13 +5872,13 @@ var ChatTypingIndicator = React11.forwardRef(
5837
5872
  className: cn("flex items-center gap-2", className),
5838
5873
  ...props,
5839
5874
  children: [
5840
- /* @__PURE__ */ jsx28("style", { dangerouslySetInnerHTML: { __html: dotAnimation } }),
5841
- showText && /* @__PURE__ */ jsx28("span", { className: "text-ods-text-secondary text-h6", children: "Assistant is typing" }),
5875
+ /* @__PURE__ */ jsx29("style", { dangerouslySetInnerHTML: { __html: dotAnimation } }),
5876
+ showText && /* @__PURE__ */ jsx29("span", { className: "text-ods-text-secondary text-h6", children: "Assistant is typing" }),
5842
5877
  /* @__PURE__ */ jsxs21("div", { className: cn(
5843
5878
  "inline-flex items-center justify-center gap-1",
5844
5879
  containerSizeClasses[size2]
5845
5880
  ), children: [
5846
- /* @__PURE__ */ jsx28(
5881
+ /* @__PURE__ */ jsx29(
5847
5882
  "div",
5848
5883
  {
5849
5884
  className: cn(
@@ -5857,7 +5892,7 @@ var ChatTypingIndicator = React11.forwardRef(
5857
5892
  }
5858
5893
  }
5859
5894
  ),
5860
- /* @__PURE__ */ jsx28(
5895
+ /* @__PURE__ */ jsx29(
5861
5896
  "div",
5862
5897
  {
5863
5898
  className: cn(
@@ -5871,7 +5906,7 @@ var ChatTypingIndicator = React11.forwardRef(
5871
5906
  }
5872
5907
  }
5873
5908
  ),
5874
- /* @__PURE__ */ jsx28(
5909
+ /* @__PURE__ */ jsx29(
5875
5910
  "div",
5876
5911
  {
5877
5912
  className: cn(
@@ -5899,7 +5934,7 @@ init_cn();
5899
5934
  // src/components/chat/mingo-onboarding-card.tsx
5900
5935
  init_cn();
5901
5936
  init_button2();
5902
- import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
5937
+ import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
5903
5938
  function MingoOnboardingCard({
5904
5939
  icon,
5905
5940
  title,
@@ -5918,13 +5953,13 @@ function MingoOnboardingCard({
5918
5953
  // consumers can drop any `icons-v2-generated` glyph (they use
5919
5954
  // `currentColor`) without per-card styling. Brand multi-color
5920
5955
  // SVGs ignore this color.
5921
- /* @__PURE__ */ jsx29("span", { className: "flex shrink-0 size-4 items-center justify-center text-ods-text-secondary", children: icon })
5956
+ /* @__PURE__ */ jsx30("span", { className: "flex shrink-0 size-4 items-center justify-center text-ods-text-secondary", children: icon })
5922
5957
  ) : null,
5923
- /* @__PURE__ */ jsx29("span", { className: "flex-1 min-w-0 truncate text-h6 text-ods-text-primary", children: title }),
5924
- slashCommand ? /* @__PURE__ */ jsx29("span", { className: "text-h6 text-ods-text-secondary whitespace-nowrap", children: slashCommand }) : null
5958
+ /* @__PURE__ */ jsx30("span", { className: "flex-1 min-w-0 truncate text-h6 text-ods-text-primary", children: title }),
5959
+ slashCommand ? /* @__PURE__ */ jsx30("span", { className: "text-h6 text-ods-text-secondary whitespace-nowrap", children: slashCommand }) : null
5925
5960
  ] }),
5926
- description ? /* @__PURE__ */ jsx29("p", { className: "text-h6 text-ods-text-secondary w-full", children: description }) : null,
5927
- hasActions ? /* @__PURE__ */ jsx29("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: actions.map((action) => /* @__PURE__ */ jsx29(
5961
+ description ? /* @__PURE__ */ jsx30("p", { className: "text-h6 text-ods-text-secondary w-full", children: description }) : null,
5962
+ hasActions ? /* @__PURE__ */ jsx30("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: actions.map((action) => /* @__PURE__ */ jsx30(
5928
5963
  Button,
5929
5964
  {
5930
5965
  type: "button",
@@ -5945,9 +5980,9 @@ function MingoOnboardingCard({
5945
5980
  className
5946
5981
  );
5947
5982
  if (isInteractive) {
5948
- return /* @__PURE__ */ jsx29("button", { type: "button", onClick, className: baseClass, children: body });
5983
+ return /* @__PURE__ */ jsx30("button", { type: "button", onClick, className: baseClass, children: body });
5949
5984
  }
5950
- return /* @__PURE__ */ jsx29("div", { className: baseClass, children: body });
5985
+ return /* @__PURE__ */ jsx30("div", { className: baseClass, children: body });
5951
5986
  }
5952
5987
 
5953
5988
  // src/components/chat/utils/icon-registry.ts
@@ -6146,10 +6181,10 @@ function getDynamicIcon(iconName, size2 = "md", className) {
6146
6181
 
6147
6182
  // src/components/chat/utils/icon-library.tsx
6148
6183
  import { Megaphone as Megaphone2, Bell as Bell2, Info as Info2, Star as Star2, Package as PackageGlyph } from "lucide-react";
6149
- import { jsx as jsx30 } from "react/jsx-runtime";
6184
+ import { jsx as jsx31 } from "react/jsx-runtime";
6150
6185
  function sizedLogo(Logo) {
6151
6186
  return function SizedLogo({ size: size2 = 16, className }) {
6152
- return /* @__PURE__ */ jsx30(Logo, { className, style: { width: size2, height: size2 } });
6187
+ return /* @__PURE__ */ jsx31(Logo, { className, style: { width: size2, height: size2 } });
6153
6188
  };
6154
6189
  }
6155
6190
  var OpenmspLogoIcon = sizedLogo(OpenmspLogo);
@@ -6160,7 +6195,7 @@ function LogoOpenframeIcon({
6160
6195
  color
6161
6196
  }) {
6162
6197
  const tint = color ?? "currentColor";
6163
- return /* @__PURE__ */ jsx30(
6198
+ return /* @__PURE__ */ jsx31(
6164
6199
  OpenFrameLogo,
6165
6200
  {
6166
6201
  className,
@@ -6433,7 +6468,7 @@ var ICON_OPTIONS = [
6433
6468
  ];
6434
6469
 
6435
6470
  // src/components/chat/slash-command-suggestions.tsx
6436
- import { jsx as jsx31 } from "react/jsx-runtime";
6471
+ import { jsx as jsx32 } from "react/jsx-runtime";
6437
6472
  function SlashCommandSuggestions({
6438
6473
  commands,
6439
6474
  highlightedIdx,
@@ -6444,7 +6479,7 @@ function SlashCommandSuggestions({
6444
6479
  className
6445
6480
  }) {
6446
6481
  if (commands.length === 0) return null;
6447
- return /* @__PURE__ */ jsx31(
6482
+ return /* @__PURE__ */ jsx32(
6448
6483
  "div",
6449
6484
  {
6450
6485
  role: "menu",
@@ -6469,7 +6504,7 @@ function SlashCommandSuggestions({
6469
6504
  onAction(cmd, action.id);
6470
6505
  }
6471
6506
  })) : void 0;
6472
- return /* @__PURE__ */ jsx31(
6507
+ return /* @__PURE__ */ jsx32(
6473
6508
  "div",
6474
6509
  {
6475
6510
  role: "menuitem",
@@ -6484,10 +6519,10 @@ function SlashCommandSuggestions({
6484
6519
  }
6485
6520
  },
6486
6521
  className: "cursor-pointer outline-none",
6487
- children: /* @__PURE__ */ jsx31(
6522
+ children: /* @__PURE__ */ jsx32(
6488
6523
  MingoOnboardingCard,
6489
6524
  {
6490
- icon: LegacyIcon ? /* @__PURE__ */ jsx31(LegacyIcon, { className: "size-4" }) : /* @__PURE__ */ jsx31(Icon2, { size: 16 }),
6525
+ icon: LegacyIcon ? /* @__PURE__ */ jsx32(LegacyIcon, { className: "size-4" }) : /* @__PURE__ */ jsx32(Icon2, { size: 16 }),
6491
6526
  title,
6492
6527
  slashCommand: slashLabel,
6493
6528
  description: cmd.description,
@@ -6507,7 +6542,7 @@ function SlashCommandSuggestions({
6507
6542
  }
6508
6543
 
6509
6544
  // src/components/chat/chat-input.tsx
6510
- import { jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
6545
+ import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
6511
6546
  var SLASH_INPUT_TRIGGER = /^\/([a-z][a-z0-9-]*)?$/;
6512
6547
  var MENTION_GLOBAL = /@[A-Za-z0-9_.+/=-]+:[A-Za-z0-9_.+/=-]+/g;
6513
6548
  var MENTION_TRIGGER_AT_END = /(^|\s)@([\w.-]*)$/;
@@ -6543,7 +6578,7 @@ function buildChipEl(token, label, icon) {
6543
6578
  span.setAttribute("contenteditable", "false");
6544
6579
  span.className = "mx-0.5 inline-flex h-9 items-center select-none align-top";
6545
6580
  span.innerHTML = renderToStaticMarkup(
6546
- /* @__PURE__ */ jsx32(
6581
+ /* @__PURE__ */ jsx33(
6547
6582
  Tag,
6548
6583
  {
6549
6584
  as: "span",
@@ -6601,7 +6636,7 @@ function insertTextAtCaret(text) {
6601
6636
  sel.removeAllRanges();
6602
6637
  sel.addRange(range);
6603
6638
  }
6604
- var ChatInput = forwardRef15((allProps, ref) => {
6639
+ var ChatInput = forwardRef16((allProps, ref) => {
6605
6640
  const { slashCommands, ...rest } = allProps;
6606
6641
  const {
6607
6642
  className,
@@ -6881,7 +6916,7 @@ var ChatInput = forwardRef15((allProps, ref) => {
6881
6916
  const sendDisabled = sending || disabled || !hasContent2;
6882
6917
  const isEmpty = value.length === 0;
6883
6918
  const showPreview = !sending && !disabled && !!previewText && !previewDismissed;
6884
- return /* @__PURE__ */ jsx32(
6919
+ return /* @__PURE__ */ jsx33(
6885
6920
  "div",
6886
6921
  {
6887
6922
  className: cn(
@@ -6889,10 +6924,10 @@ var ChatInput = forwardRef15((allProps, ref) => {
6889
6924
  className
6890
6925
  ),
6891
6926
  children: awaitingResponse ? /* @__PURE__ */ jsxs23("div", { className: "relative flex items-center justify-center gap-[var(--spacing-system-xs)] rounded-md bg-ods-card border border-ods-border px-[var(--spacing-system-s)] py-[var(--spacing-system-s)] transition-colors", children: [
6892
- /* @__PURE__ */ jsx32(ChatTypingIndicator, { size: "sm", dotClassName: "bg-ods-text-primary" }),
6893
- /* @__PURE__ */ jsx32("p", { className: "text-h4 text-ods-text-secondary", children: "Waiting for Technician Response" })
6927
+ /* @__PURE__ */ jsx33(ChatTypingIndicator, { size: "sm", dotClassName: "bg-ods-text-primary" }),
6928
+ /* @__PURE__ */ jsx33("p", { className: "text-h4 text-ods-text-secondary", children: "Waiting for Technician Response" })
6894
6929
  ] }) : /* @__PURE__ */ jsxs23("div", { className: "relative", children: [
6895
- /* @__PURE__ */ jsx32(
6930
+ /* @__PURE__ */ jsx33(
6896
6931
  SlashCommandSuggestions,
6897
6932
  {
6898
6933
  commands: slashPrefix !== null ? slashSuggestions : [],
@@ -6928,11 +6963,11 @@ var ChatInput = forwardRef15((allProps, ref) => {
6928
6963
  hideBorder && "bg-transparent"
6929
6964
  ),
6930
6965
  children: [
6931
- startIcon && /* @__PURE__ */ jsx32("span", { className: "flex h-6 shrink-0 items-center", children: startIcon }),
6966
+ startIcon && /* @__PURE__ */ jsx33("span", { className: "flex h-6 shrink-0 items-center", children: startIcon }),
6932
6967
  /* @__PURE__ */ jsxs23("div", { className: "relative flex-1 min-w-0", children: [
6933
- isEmpty && !showPreview && /* @__PURE__ */ jsx32("span", { className: "pointer-events-none absolute left-0 top-0 select-none text-h4 text-ods-text-secondary", children: disabled ? "Connection lost. Waiting to reconnect..." : placeholder }),
6934
- showPreview && /* @__PURE__ */ jsx32("p", { className: cn("pointer-events-none absolute inset-x-0 top-0 m-0 select-none truncate text-h4 text-ods-text-secondary", hasChips && "!leading-9"), children: previewText }),
6935
- /* @__PURE__ */ jsx32(
6968
+ isEmpty && !showPreview && /* @__PURE__ */ jsx33("span", { className: "pointer-events-none absolute left-0 top-0 select-none text-h4 text-ods-text-secondary", children: disabled ? "Connection lost. Waiting to reconnect..." : placeholder }),
6969
+ showPreview && /* @__PURE__ */ jsx33("p", { className: cn("pointer-events-none absolute inset-x-0 top-0 m-0 select-none truncate text-h4 text-ods-text-secondary", hasChips && "!leading-9"), children: previewText }),
6970
+ /* @__PURE__ */ jsx33(
6936
6971
  "div",
6937
6972
  {
6938
6973
  ref: editorRef,
@@ -6986,7 +7021,7 @@ var ChatInput = forwardRef15((allProps, ref) => {
6986
7021
  }
6987
7022
  )
6988
7023
  ] }),
6989
- /* @__PURE__ */ jsx32(
7024
+ /* @__PURE__ */ jsx33(
6990
7025
  "button",
6991
7026
  {
6992
7027
  type: "button",
@@ -7005,7 +7040,7 @@ var ChatInput = forwardRef15((allProps, ref) => {
7005
7040
  "focus-visible:outline-none focus-visible:text-ods-accent",
7006
7041
  "disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:text-ods-text-secondary"
7007
7042
  ),
7008
- children: isStopMode ? /* @__PURE__ */ jsx32(StopCircleIcon, { size: 20 }) : /* @__PURE__ */ jsx32(Send01Icon, { size: 20 })
7043
+ children: isStopMode ? /* @__PURE__ */ jsx33(StopCircleIcon, { size: 20 }) : /* @__PURE__ */ jsx33(Send01Icon, { size: 20 })
7009
7044
  }
7010
7045
  )
7011
7046
  ]
@@ -7019,7 +7054,7 @@ ChatInput.displayName = "ChatInput";
7019
7054
 
7020
7055
  // src/components/chat/chat-message-enhanced.tsx
7021
7056
  init_cn();
7022
- import React13, { forwardRef as forwardRef17, memo as memo3, useEffect as useEffect8, useMemo as useMemo10, useRef as useRef9 } from "react";
7057
+ import React14, { forwardRef as forwardRef18, memo as memo3, useEffect as useEffect8, useMemo as useMemo10, useRef as useRef9 } from "react";
7023
7058
 
7024
7059
  // src/utils/date-utils.ts
7025
7060
  function formatTicketRelativeTime(iso) {
@@ -7152,10 +7187,10 @@ function createUTCTimestamp() {
7152
7187
 
7153
7188
  // src/components/chat/tool-execution-display.tsx
7154
7189
  init_cn();
7155
- import { forwardRef as forwardRef16, useMemo as useMemo8, useState as useState11 } from "react";
7156
- import { Fragment as Fragment6, jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
7190
+ import { forwardRef as forwardRef17, useMemo as useMemo8, useState as useState11 } from "react";
7191
+ import { Fragment as Fragment6, jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
7157
7192
  var COMMAND_BODY_KEYS2 = new Set(COMMAND_BODY_ARG_KEYS);
7158
- var ToolExecutionDisplay = forwardRef16(
7193
+ var ToolExecutionDisplay = forwardRef17(
7159
7194
  ({ className, message: message2, assistantType, variant = "admin", ...props }, ref) => {
7160
7195
  const [expanded, setExpanded] = useState11(false);
7161
7196
  const { innerRef, containerStyle } = useCollapsible({ expanded });
@@ -7180,14 +7215,14 @@ var ToolExecutionDisplay = forwardRef16(
7180
7215
  const hasResult = isExecuted && typeof message2.result === "string" && message2.result.length > 0;
7181
7216
  const hasBody = argEntries.length > 0 || hasResult || isExecuting;
7182
7217
  const renderStatusIcon = () => {
7183
- if (isExecuting) return /* @__PURE__ */ jsx33(DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" });
7184
- if (isExecuted && message2.success === true) return /* @__PURE__ */ jsx33(CheckCircleIcon, { className: "w-4 h-4 text-ods-success" });
7185
- if (isExecuted && message2.success === false) return /* @__PURE__ */ jsx33(XmarkCircleIcon, { className: "w-4 h-4 text-ods-error" });
7218
+ if (isExecuting) return /* @__PURE__ */ jsx34(DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" });
7219
+ if (isExecuted && message2.success === true) return /* @__PURE__ */ jsx34(CheckCircleIcon, { className: "w-4 h-4 text-ods-success" });
7220
+ if (isExecuted && message2.success === false) return /* @__PURE__ */ jsx34(XmarkCircleIcon, { className: "w-4 h-4 text-ods-error" });
7186
7221
  return null;
7187
7222
  };
7188
7223
  const headerContent = /* @__PURE__ */ jsxs24(Fragment6, { children: [
7189
- !isClient && /* @__PURE__ */ jsx33("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ jsx33(ToolIcon, { toolType: integratedToolType, size: 16 }) }),
7190
- /* @__PURE__ */ jsx33(
7224
+ !isClient && /* @__PURE__ */ jsx34("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ jsx34(ToolIcon, { toolType: integratedToolType, size: 16 }) }),
7225
+ /* @__PURE__ */ jsx34(
7191
7226
  "div",
7192
7227
  {
7193
7228
  className: cn(
@@ -7197,10 +7232,10 @@ var ToolExecutionDisplay = forwardRef16(
7197
7232
  children: previewText
7198
7233
  }
7199
7234
  ),
7200
- /* @__PURE__ */ jsx33("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: renderStatusIcon() }),
7201
- !isClientView && /* @__PURE__ */ jsx33("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ jsx33(ExpandChevron, { expanded }) })
7235
+ /* @__PURE__ */ jsx34("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: renderStatusIcon() }),
7236
+ !isClientView && /* @__PURE__ */ jsx34("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ jsx34(ExpandChevron, { expanded }) })
7202
7237
  ] });
7203
- return /* @__PURE__ */ jsx33(
7238
+ return /* @__PURE__ */ jsx34(
7204
7239
  "div",
7205
7240
  {
7206
7241
  ref,
@@ -7214,9 +7249,9 @@ var ToolExecutionDisplay = forwardRef16(
7214
7249
  children: isClientView ? (
7215
7250
  // Client (Fae end-user): static, non-expandable row — no chevron, no
7216
7251
  // body. Just the explanation + status; command/args/result are hidden.
7217
- /* @__PURE__ */ jsx33("div", { className: "flex gap-[var(--spacing-system-xs)] items-start p-[var(--spacing-system-s)] w-full text-left", children: headerContent })
7252
+ /* @__PURE__ */ jsx34("div", { className: "flex gap-[var(--spacing-system-xs)] items-start p-[var(--spacing-system-s)] w-full text-left", children: headerContent })
7218
7253
  ) : /* @__PURE__ */ jsxs24(Fragment6, { children: [
7219
- /* @__PURE__ */ jsx33(
7254
+ /* @__PURE__ */ jsx34(
7220
7255
  "button",
7221
7256
  {
7222
7257
  type: "button",
@@ -7225,9 +7260,9 @@ var ToolExecutionDisplay = forwardRef16(
7225
7260
  children: headerContent
7226
7261
  }
7227
7262
  ),
7228
- /* @__PURE__ */ jsx33("div", { className: "w-full", style: containerStyle, children: /* @__PURE__ */ jsx33("div", { ref: innerRef, children: hasBody && /* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-0 items-start w-full text-h6 p-[var(--spacing-system-sf)] bg-ods-card", children: [
7229
- argEntries.map(([key, value]) => /* @__PURE__ */ jsx33(ArgRow, { argKey: key, value }, key)),
7230
- hasResult && /* @__PURE__ */ jsx33(
7263
+ /* @__PURE__ */ jsx34("div", { className: "w-full", style: containerStyle, children: /* @__PURE__ */ jsx34("div", { ref: innerRef, children: hasBody && /* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-0 items-start w-full text-h6 p-[var(--spacing-system-sf)] bg-ods-card", children: [
7264
+ argEntries.map(([key, value]) => /* @__PURE__ */ jsx34(ArgRow, { argKey: key, value }, key)),
7265
+ hasResult && /* @__PURE__ */ jsx34(
7231
7266
  ResultBlock,
7232
7267
  {
7233
7268
  result: message2.result,
@@ -7242,8 +7277,8 @@ var ToolExecutionDisplay = forwardRef16(
7242
7277
  argEntries.length > 0 && "mt-[var(--spacing-system-xsf)]"
7243
7278
  ),
7244
7279
  children: [
7245
- /* @__PURE__ */ jsx33("span", { className: "text-ods-text-secondary", children: "Result:" }),
7246
- /* @__PURE__ */ jsx33(DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" })
7280
+ /* @__PURE__ */ jsx34("span", { className: "text-ods-text-secondary", children: "Result:" }),
7281
+ /* @__PURE__ */ jsx34(DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" })
7247
7282
  ]
7248
7283
  }
7249
7284
  )
@@ -7360,9 +7395,9 @@ import { Fragment as Fragment8, Suspense, useCallback as useCallback5, useEffect
7360
7395
  init_cn();
7361
7396
 
7362
7397
  // src/components/chat/context-items-list.tsx
7363
- import * as React12 from "react";
7398
+ import * as React13 from "react";
7364
7399
  init_cn();
7365
- import { Fragment as Fragment7, jsx as jsx34, jsxs as jsxs25 } from "react/jsx-runtime";
7400
+ import { Fragment as Fragment7, jsx as jsx35, jsxs as jsxs25 } from "react/jsx-runtime";
7366
7401
  var itemKey = (i) => `${i.type}:${i.id}`;
7367
7402
  var CONTEXT_ROW_CLASS = "flex w-full items-center gap-2 border-b border-ods-border bg-ods-bg py-3 pl-4 pr-2 text-left outline-none transition-colors last:border-b-0 hover:bg-ods-bg-hover focus-visible:bg-ods-bg-hover [&_svg]:size-4 md:[&_svg]:size-6";
7368
7403
  var CONTEXT_ICON_CLASS = "flex size-4 shrink-0 items-center justify-center text-ods-text-secondary md:size-6";
@@ -7390,19 +7425,19 @@ function ContextMenuRow({
7390
7425
  title,
7391
7426
  className: cn(CONTEXT_ROW_CLASS, disabled && "cursor-not-allowed opacity-40 hover:bg-ods-bg"),
7392
7427
  children: [
7393
- icon != null && /* @__PURE__ */ jsx34("span", { className: CONTEXT_ICON_CLASS, children: icon }),
7394
- /* @__PURE__ */ jsx34("span", { className: CONTEXT_LABEL_CLASS, children: label }),
7428
+ icon != null && /* @__PURE__ */ jsx35("span", { className: CONTEXT_ICON_CLASS, children: icon }),
7429
+ /* @__PURE__ */ jsx35("span", { className: CONTEXT_LABEL_CLASS, children: label }),
7395
7430
  trailing
7396
7431
  ]
7397
7432
  }
7398
7433
  );
7399
7434
  }
7400
7435
  function ContextItemsSkeleton({ count }) {
7401
- return /* @__PURE__ */ jsx34(Fragment7, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx34(
7436
+ return /* @__PURE__ */ jsx35(Fragment7, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx35(
7402
7437
  "div",
7403
7438
  {
7404
7439
  className: "flex items-center border-b border-ods-border bg-ods-bg py-3 pl-4 pr-2 last:border-b-0",
7405
- children: /* @__PURE__ */ jsx34(Skeleton, { className: "h-5 w-1/2" })
7440
+ children: /* @__PURE__ */ jsx35(Skeleton, { className: "h-5 w-1/2" })
7406
7441
  },
7407
7442
  `ctx-skeleton-${i}`
7408
7443
  )) });
@@ -7418,7 +7453,7 @@ function ContextItemsList({
7418
7453
  emptyLabel = "No results",
7419
7454
  className
7420
7455
  }) {
7421
- const onScroll = React12.useCallback(
7456
+ const onScroll = React13.useCallback(
7422
7457
  (e) => {
7423
7458
  if (!hasMore || loadingMore || !onLoadMore) return;
7424
7459
  const el = e.currentTarget;
@@ -7427,7 +7462,7 @@ function ContextItemsList({
7427
7462
  [hasMore, loadingMore, onLoadMore]
7428
7463
  );
7429
7464
  if (items.length === 0 && !loadingMore) {
7430
- return /* @__PURE__ */ jsx34("div", { className: CONTEXT_STATE_CLASS, children: emptyLabel });
7465
+ return /* @__PURE__ */ jsx35("div", { className: CONTEXT_STATE_CLASS, children: emptyLabel });
7431
7466
  }
7432
7467
  return /* @__PURE__ */ jsxs25(
7433
7468
  "div",
@@ -7439,7 +7474,7 @@ function ContextItemsList({
7439
7474
  children: [
7440
7475
  items.map((item) => {
7441
7476
  const selected = selectedKeys.has(itemKey(item));
7442
- return /* @__PURE__ */ jsx34(
7477
+ return /* @__PURE__ */ jsx35(
7443
7478
  ContextMenuRow,
7444
7479
  {
7445
7480
  role: "option",
@@ -7448,17 +7483,17 @@ function ContextItemsList({
7448
7483
  onClick: () => onToggle(item),
7449
7484
  label: item.label,
7450
7485
  title: !selected && atLimit ? "Selection limit reached" : void 0,
7451
- trailing: selected ? /* @__PURE__ */ jsx34(CheckFillIcon, { className: "size-4 shrink-0 text-ods-accent md:size-6" }) : void 0
7486
+ trailing: selected ? /* @__PURE__ */ jsx35(CheckFillIcon, { className: "size-4 shrink-0 text-ods-accent md:size-6" }) : void 0
7452
7487
  },
7453
7488
  itemKey(item)
7454
7489
  );
7455
7490
  }),
7456
- loadingMore && /* @__PURE__ */ jsx34(ContextItemsSkeleton, { count: 3 })
7491
+ loadingMore && /* @__PURE__ */ jsx35(ContextItemsSkeleton, { count: 3 })
7457
7492
  ]
7458
7493
  }
7459
7494
  );
7460
7495
  }
7461
- var ContextErrorBoundary = class extends React12.Component {
7496
+ var ContextErrorBoundary = class extends React13.Component {
7462
7497
  constructor() {
7463
7498
  super(...arguments);
7464
7499
  this.state = { errored: false };
@@ -7481,7 +7516,7 @@ var ContextErrorBoundary = class extends React12.Component {
7481
7516
  };
7482
7517
 
7483
7518
  // src/components/chat/chat-context-picker.tsx
7484
- import { Fragment as Fragment9, jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
7519
+ import { Fragment as Fragment9, jsx as jsx36, jsxs as jsxs26 } from "react/jsx-runtime";
7485
7520
  var CHAT_CONTEXT_ITEMS_DEFAULT_MAX = 10;
7486
7521
  var ITEMS_SKELETON_ROWS = 10;
7487
7522
  var SEARCH_DEBOUNCE_MS = 300;
@@ -7496,7 +7531,7 @@ function ChatComposerPlusMenu({
7496
7531
  // `relative` so the dropdown anchors to the button itself (bottom-full),
7497
7532
  // aligning the popover to the `+` rather than the input row.
7498
7533
  /* @__PURE__ */ jsxs26("span", { className: "relative inline-flex", children: [
7499
- /* @__PURE__ */ jsx35(
7534
+ /* @__PURE__ */ jsx36(
7500
7535
  "button",
7501
7536
  {
7502
7537
  type: "button",
@@ -7511,7 +7546,7 @@ function ChatComposerPlusMenu({
7511
7546
  open ? "text-ods-accent" : "text-ods-text-secondary hover:text-ods-text-primary active:text-ods-accent",
7512
7547
  "focus-visible:text-ods-text-primary disabled:cursor-not-allowed disabled:opacity-40"
7513
7548
  ),
7514
- children: /* @__PURE__ */ jsx35(PlusIcon, { className: "h-6 w-6" })
7549
+ children: /* @__PURE__ */ jsx36(PlusIcon, { className: "h-6 w-6" })
7515
7550
  }
7516
7551
  ),
7517
7552
  dropdown
@@ -7613,7 +7648,7 @@ function ChatContextPicker({
7613
7648
  [config.entityTypes, typeFilter]
7614
7649
  );
7615
7650
  if (!open) return null;
7616
- return /* @__PURE__ */ jsx35(
7651
+ return /* @__PURE__ */ jsx36(
7617
7652
  "div",
7618
7653
  {
7619
7654
  ref: rootRef,
@@ -7637,15 +7672,15 @@ function ChatContextPicker({
7637
7672
  children: view === "root" ? (
7638
7673
  /* Level 0 — Upload File / Assign Item (Figma 31:28312). */
7639
7674
  /* @__PURE__ */ jsxs26("div", { role: "menu", "aria-label": "Add context", children: [
7640
- config.onUploadFile && /* @__PURE__ */ jsx35(
7675
+ config.onUploadFile && /* @__PURE__ */ jsx36(
7641
7676
  ContextMenuRow,
7642
7677
  {
7643
- icon: /* @__PURE__ */ jsx35(Upload02Icon, { size: 24 }),
7678
+ icon: /* @__PURE__ */ jsx36(Upload02Icon, { size: 24 }),
7644
7679
  label: "Upload File",
7645
7680
  onClick: () => config.onUploadFile?.()
7646
7681
  }
7647
7682
  ),
7648
- /* @__PURE__ */ jsx35(ContextMenuRow, { icon: /* @__PURE__ */ jsx35(PackagePlusIcon, { size: 24 }), label: "Assign Item", onClick: () => setView("types") })
7683
+ /* @__PURE__ */ jsx36(ContextMenuRow, { icon: /* @__PURE__ */ jsx36(PackagePlusIcon, { size: 24 }), label: "Assign Item", onClick: () => setView("types") })
7649
7684
  ] })
7650
7685
  ) : view === "types" ? (
7651
7686
  /* Level 1 — Back + entity-type list (Figma 31:28708). Back stays pinned;
@@ -7658,23 +7693,23 @@ function ChatContextPicker({
7658
7693
  onClick: () => setView("root"),
7659
7694
  className: cn(CONTEXT_BACK_CLASS, "sticky top-0 z-10"),
7660
7695
  children: [
7661
- /* @__PURE__ */ jsx35(Chevron02LeftIcon, { size: 24, className: "shrink-0" }),
7662
- /* @__PURE__ */ jsx35("span", { className: "truncate", children: "Back" })
7696
+ /* @__PURE__ */ jsx36(Chevron02LeftIcon, { size: 24, className: "shrink-0" }),
7697
+ /* @__PURE__ */ jsx36("span", { className: "truncate", children: "Back" })
7663
7698
  ]
7664
7699
  }
7665
7700
  ),
7666
- visibleTypes.length === 0 ? /* @__PURE__ */ jsx35("div", { className: CONTEXT_STATE_CLASS, children: "No matching types" }) : visibleTypes.map((type) => /* @__PURE__ */ jsx35(ContextMenuRow, { icon: type.icon, label: type.label, onClick: () => openType(type) }, type.type))
7701
+ visibleTypes.length === 0 ? /* @__PURE__ */ jsx36("div", { className: CONTEXT_STATE_CLASS, children: "No matching types" }) : visibleTypes.map((type) => /* @__PURE__ */ jsx36(ContextMenuRow, { icon: type.icon, label: type.label, onClick: () => openType(type) }, type.type))
7667
7702
  ] })
7668
7703
  ) : activeType ? (
7669
7704
  /* Level 2 — Back + search + HOST-rendered items (Figma 31:29102). */
7670
7705
  /* @__PURE__ */ jsxs26(Fragment9, { children: [
7671
7706
  /* @__PURE__ */ jsxs26("button", { type: "button", onClick: backToTypes, className: cn(CONTEXT_BACK_CLASS, "sticky top-0 z-10"), children: [
7672
- /* @__PURE__ */ jsx35(Chevron02LeftIcon, { size: 24, className: "shrink-0" }),
7673
- /* @__PURE__ */ jsx35("span", { className: "truncate", children: "Back" })
7707
+ /* @__PURE__ */ jsx36(Chevron02LeftIcon, { size: 24, className: "shrink-0" }),
7708
+ /* @__PURE__ */ jsx36("span", { className: "truncate", children: "Back" })
7674
7709
  ] }),
7675
7710
  /* @__PURE__ */ jsxs26("div", { className: "flex shrink-0 items-center gap-2 border-b border-ods-border bg-ods-card p-3", children: [
7676
- /* @__PURE__ */ jsx35(SearchIcon, { className: "size-4 shrink-0 text-ods-text-secondary md:size-6" }),
7677
- /* @__PURE__ */ jsx35(
7711
+ /* @__PURE__ */ jsx36(SearchIcon, { className: "size-4 shrink-0 text-ods-text-secondary md:size-6" }),
7712
+ /* @__PURE__ */ jsx36(
7678
7713
  "input",
7679
7714
  {
7680
7715
  ref: searchRef,
@@ -7685,13 +7720,13 @@ function ChatContextPicker({
7685
7720
  }
7686
7721
  )
7687
7722
  ] }),
7688
- /* @__PURE__ */ jsx35(QueryErrorResetBoundary, { children: ({ reset }) => /* @__PURE__ */ jsx35(
7723
+ /* @__PURE__ */ jsx36(QueryErrorResetBoundary, { children: ({ reset }) => /* @__PURE__ */ jsx36(
7689
7724
  ContextErrorBoundary,
7690
7725
  {
7691
7726
  resetKey: `${activeType.type}:${debouncedQuery}`,
7692
7727
  fallback: (retry) => /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between gap-2 bg-ods-bg px-4 py-3 text-h4 text-ods-attention-red-error", children: [
7693
- /* @__PURE__ */ jsx35("span", { children: "Failed to load" }),
7694
- /* @__PURE__ */ jsx35(
7728
+ /* @__PURE__ */ jsx36("span", { children: "Failed to load" }),
7729
+ /* @__PURE__ */ jsx36(
7695
7730
  "button",
7696
7731
  {
7697
7732
  type: "button",
@@ -7704,10 +7739,10 @@ function ChatContextPicker({
7704
7739
  }
7705
7740
  )
7706
7741
  ] }),
7707
- children: /* @__PURE__ */ jsx35(
7742
+ children: /* @__PURE__ */ jsx36(
7708
7743
  Suspense,
7709
7744
  {
7710
- fallback: /* @__PURE__ */ jsx35("div", { className: "max-h-[340px] overflow-hidden", children: /* @__PURE__ */ jsx35(ContextItemsSkeleton, { count: ITEMS_SKELETON_ROWS }) }),
7745
+ fallback: /* @__PURE__ */ jsx36("div", { className: "max-h-[340px] overflow-hidden", children: /* @__PURE__ */ jsx36(ContextItemsSkeleton, { count: ITEMS_SKELETON_ROWS }) }),
7711
7746
  children: config.renderItems({
7712
7747
  type: activeType.type,
7713
7748
  query: debouncedQuery,
@@ -7736,9 +7771,9 @@ function ChatContextChipStrip({
7736
7771
  return (
7737
7772
  // `tag` pills (Figma 1:6073): 32px tall, card surface, bordered, mono-
7738
7773
  // uppercase label, 16px lead icon + xmark-circle remove. Wraps to new rows.
7739
- /* @__PURE__ */ jsx35("div", { className: cn("flex flex-wrap content-center items-center gap-2", className), children: items.map((item) => {
7774
+ /* @__PURE__ */ jsx36("div", { className: cn("flex flex-wrap content-center items-center gap-2", className), children: items.map((item) => {
7740
7775
  const hostNode = renderItem?.(item);
7741
- if (hostNode != null) return /* @__PURE__ */ jsx35(Fragment8, { children: hostNode }, itemKey2(item));
7776
+ if (hostNode != null) return /* @__PURE__ */ jsx36(Fragment8, { children: hostNode }, itemKey2(item));
7742
7777
  return /* @__PURE__ */ jsxs26(
7743
7778
  "div",
7744
7779
  {
@@ -7746,8 +7781,8 @@ function ChatContextChipStrip({
7746
7781
  role: "group",
7747
7782
  "aria-label": `Context ${item.label}`,
7748
7783
  children: [
7749
- resolveIcon2 && /* @__PURE__ */ jsx35("span", { className: "flex size-4 shrink-0 items-center justify-center text-ods-text-secondary [&_svg]:size-4", children: resolveIcon2(item) }),
7750
- /* @__PURE__ */ jsx35(
7784
+ resolveIcon2 && /* @__PURE__ */ jsx36("span", { className: "flex size-4 shrink-0 items-center justify-center text-ods-text-secondary [&_svg]:size-4", children: resolveIcon2(item) }),
7785
+ /* @__PURE__ */ jsx36(
7751
7786
  "span",
7752
7787
  {
7753
7788
  className: "max-w-[220px] truncate font-mono text-h5 font-medium uppercase tracking-[-0.28px] text-ods-text-primary",
@@ -7755,7 +7790,7 @@ function ChatContextChipStrip({
7755
7790
  children: item.label
7756
7791
  }
7757
7792
  ),
7758
- onRemove && /* @__PURE__ */ jsx35(
7793
+ onRemove && /* @__PURE__ */ jsx36(
7759
7794
  "button",
7760
7795
  {
7761
7796
  type: "button",
@@ -7763,7 +7798,7 @@ function ChatContextChipStrip({
7763
7798
  disabled,
7764
7799
  "aria-label": `Remove ${item.label}`,
7765
7800
  className: "flex size-4 shrink-0 items-center justify-center text-ods-text-secondary outline-none transition-colors hover:text-ods-text-primary focus-visible:text-ods-text-primary disabled:cursor-not-allowed disabled:opacity-40 [&_svg]:size-4",
7766
- children: /* @__PURE__ */ jsx35(XmarkCircleIcon, { size: 16 })
7801
+ children: /* @__PURE__ */ jsx36(XmarkCircleIcon, { size: 16 })
7767
7802
  }
7768
7803
  )
7769
7804
  ]
@@ -7775,7 +7810,7 @@ function ChatContextChipStrip({
7775
7810
  }
7776
7811
 
7777
7812
  // src/components/chat/chat-message-enhanced.tsx
7778
- import { Fragment as Fragment10, jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
7813
+ import { Fragment as Fragment10, jsx as jsx37, jsxs as jsxs27 } from "react/jsx-runtime";
7779
7814
  var MENTION_MARKER_REGEX = /(^|[^\w@])@[a-zA-Z]+:([A-Za-z0-9_.+/=-]*[A-Za-z0-9_+/=])/g;
7780
7815
  var CARD_MARKER_REGEX = /\[card:\/\/([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)[\])]/g;
7781
7816
  function formatMessageTimestamp(timestamp) {
@@ -7805,7 +7840,7 @@ function groupAskRuns(segments) {
7805
7840
  });
7806
7841
  return runs;
7807
7842
  }
7808
- var ChatMessageEnhanced = forwardRef17(
7843
+ var ChatMessageEnhanced = forwardRef18(
7809
7844
  ({ className, role, content, name, avatar, isTyping = false, timestamp, showAvatar = true, assistantType, approvalVariant, authorType: authorTypeProp, assistantIcon, contextItems, resolveContextIcon, renderContextItem, renderMention, renderEntityCard, onAskSelect, NavLinkAnchor, ...props }, ref) => {
7810
7845
  const isUser = role === "user";
7811
7846
  const isError = role === "error";
@@ -7870,7 +7905,7 @@ var ChatMessageEnhanced = forwardRef17(
7870
7905
  cache.set(key, entry);
7871
7906
  }
7872
7907
  const rendered = entry.node;
7873
- if (React13.isValidElement(rendered) && rendered.type === BlockCard) {
7908
+ if (React14.isValidElement(rendered) && rendered.type === BlockCard) {
7874
7909
  const props2 = rendered.props;
7875
7910
  const markerEnd = match2.index + match2[0].length;
7876
7911
  parts.push({ kind: "text", text: text.slice(cursor, markerEnd) });
@@ -7881,7 +7916,7 @@ var ChatMessageEnhanced = forwardRef17(
7881
7916
  cursor = markerEnd;
7882
7917
  inlineByKey.set(
7883
7918
  key,
7884
- props2.inline != null ? props2.inline : /* @__PURE__ */ jsx36("span", { className: "text-ods-text-primary font-medium", children: cardId })
7919
+ props2.inline != null ? props2.inline : /* @__PURE__ */ jsx37("span", { className: "text-ods-text-primary font-medium", children: cardId })
7885
7920
  );
7886
7921
  } else if (rendered != null) {
7887
7922
  parts.push({ kind: "text", text: text.slice(cursor, match2.index) });
@@ -7927,8 +7962,8 @@ var ChatMessageEnhanced = forwardRef17(
7927
7962
  const marker = sepIdx === -1 ? stripped : stripped.slice(0, sepIdx);
7928
7963
  const id = sepIdx === -1 ? "" : stripped.slice(sepIdx + 1);
7929
7964
  const node = renderMention?.({ marker, id });
7930
- if (node != null) return /* @__PURE__ */ jsx36(Fragment10, { children: node });
7931
- return /* @__PURE__ */ jsx36("span", { className: "text-ods-text-secondary opacity-60", children });
7965
+ if (node != null) return /* @__PURE__ */ jsx37(Fragment10, { children: node });
7966
+ return /* @__PURE__ */ jsx37("span", { className: "text-ods-text-secondary opacity-60", children });
7932
7967
  }
7933
7968
  if (typeof href === "string" && href.startsWith("card://")) {
7934
7969
  const stripped = href.slice("card://".length);
@@ -7939,20 +7974,20 @@ var ChatMessageEnhanced = forwardRef17(
7939
7974
  const key = `${cardType}:${cardId}`;
7940
7975
  const inline = renderingPlanRef.current?.inlineByKey.get(key);
7941
7976
  if (inline != null) return inline;
7942
- return /* @__PURE__ */ jsx36("span", { className: "text-ods-text-secondary opacity-60", children: cardId });
7977
+ return /* @__PURE__ */ jsx37("span", { className: "text-ods-text-secondary opacity-60", children: cardId });
7943
7978
  }
7944
7979
  }
7945
7980
  if (typeof href === "string" && NavLinkAnchor && !href.startsWith("#")) {
7946
- return /* @__PURE__ */ jsx36(NavLinkAnchor, { href, className: linkClassName, ...rest, children });
7981
+ return /* @__PURE__ */ jsx37(NavLinkAnchor, { href, className: linkClassName, ...rest, children });
7947
7982
  }
7948
- return /* @__PURE__ */ jsx36("a", { href, className: linkClassName, ...rest, children });
7983
+ return /* @__PURE__ */ jsx37("a", { href, className: linkClassName, ...rest, children });
7949
7984
  }
7950
7985
  };
7951
7986
  }, [hasMarkerSupport, hasMentionSupport, renderMention, NavLinkAnchor]);
7952
7987
  const renderSegmentBody = (segIndex, text, isStreaming) => {
7953
7988
  const parts = renderingPlan?.partsBySegment.get(segIndex);
7954
7989
  if (!parts || parts.length === 0) {
7955
- return /* @__PURE__ */ jsx36(
7990
+ return /* @__PURE__ */ jsx37(
7956
7991
  SimpleMarkdownRenderer,
7957
7992
  {
7958
7993
  content: text,
@@ -7965,7 +8000,7 @@ var ChatMessageEnhanced = forwardRef17(
7965
8000
  }
7966
8001
  return parts.map((part, pIdx) => {
7967
8002
  if (part.kind === "text") {
7968
- return /* @__PURE__ */ jsx36(
8003
+ return /* @__PURE__ */ jsx37(
7969
8004
  SimpleMarkdownRenderer,
7970
8005
  {
7971
8006
  content: part.text,
@@ -7977,7 +8012,7 @@ var ChatMessageEnhanced = forwardRef17(
7977
8012
  `t-${pIdx}`
7978
8013
  );
7979
8014
  }
7980
- return /* @__PURE__ */ jsx36("div", { className: "my-3", children: part.node }, `b-${part.key}`);
8015
+ return /* @__PURE__ */ jsx37("div", { className: "my-3", children: part.node }, `b-${part.key}`);
7981
8016
  });
7982
8017
  };
7983
8018
  const getAvatarProps = () => {
@@ -8005,7 +8040,7 @@ var ChatMessageEnhanced = forwardRef17(
8005
8040
  };
8006
8041
  const avatarProps = getAvatarProps();
8007
8042
  const isSystem = authorType === "system";
8008
- return /* @__PURE__ */ jsx36(
8043
+ return /* @__PURE__ */ jsx37(
8009
8044
  "div",
8010
8045
  {
8011
8046
  ref,
@@ -8019,8 +8054,8 @@ var ChatMessageEnhanced = forwardRef17(
8019
8054
  showAvatar && !isSystem && !(isUser && !avatar) && (!isUser && assistantIcon && !avatar ? (
8020
8055
  // Host-supplied brand icon (e.g. Mingo): render it directly,
8021
8056
  // no filled pill — the icon carries its own brand accent.
8022
- /* @__PURE__ */ jsx36("div", { className: "flex items-center justify-center flex-shrink-0", children: assistantIcon })
8023
- ) : /* @__PURE__ */ jsx36(SquareAvatar, { ...avatarProps })),
8057
+ /* @__PURE__ */ jsx37("div", { className: "flex items-center justify-center flex-shrink-0", children: assistantIcon })
8058
+ ) : /* @__PURE__ */ jsx37(SquareAvatar, { ...avatarProps })),
8024
8059
  /* @__PURE__ */ jsxs27("span", { className: cn(
8025
8060
  "text-h3 !font-mono !font-medium flex-1",
8026
8061
  authorType === "system" ? "text-ods-open-yellow" : authorType === "admin" ? "text-ods-open-yellow" : authorType === "mingo" ? "text-ods-flamingo-cyan" : authorType === "fae" ? "text-ods-flamingo-pink" : "text-ods-text-secondary"
@@ -8028,12 +8063,12 @@ var ChatMessageEnhanced = forwardRef17(
8028
8063
  name || (isUser ? "User" : assistantType === "mingo" ? "Mingo" : "Fae"),
8029
8064
  !isSystem && ":"
8030
8065
  ] }),
8031
- timestamp && /* @__PURE__ */ jsx36("span", { className: "text-h6 text-ods-text-secondary shrink-0 whitespace-nowrap", children: formatMessageTimestamp(timestamp) })
8066
+ timestamp && /* @__PURE__ */ jsx37("span", { className: "text-h6 text-ods-text-secondary shrink-0 whitespace-nowrap", children: formatMessageTimestamp(timestamp) })
8032
8067
  ] }),
8033
- (!isSystem || segments.length > 0) && /* @__PURE__ */ jsx36("div", { className: "flex flex-col gap-2", children: segments.map((segment, index) => {
8068
+ (!isSystem || segments.length > 0) && /* @__PURE__ */ jsx37("div", { className: "flex flex-col gap-2", children: segments.map((segment, index) => {
8034
8069
  const segmentIsStreaming = index === segments.length - 1 && !!isTyping;
8035
8070
  if (segment.type === "text") {
8036
- return /* @__PURE__ */ jsx36(
8071
+ return /* @__PURE__ */ jsx37(
8037
8072
  "div",
8038
8073
  {
8039
8074
  className: cn(
@@ -8045,13 +8080,13 @@ var ChatMessageEnhanced = forwardRef17(
8045
8080
  index
8046
8081
  );
8047
8082
  } else if (segment.type === "guide") {
8048
- return /* @__PURE__ */ jsx36(GuideDisplay, { children: renderSegmentBody(index, segment.text, segmentIsStreaming) }, index);
8083
+ return /* @__PURE__ */ jsx37(GuideDisplay, { children: renderSegmentBody(index, segment.text, segmentIsStreaming) }, index);
8049
8084
  } else if (segment.type === "ask") {
8050
8085
  const run = askRuns.get(index);
8051
8086
  if (!run) return null;
8052
- return /* @__PURE__ */ jsx36(AskDisplay, { cards: run, onSelect: onAskSelect }, index);
8087
+ return /* @__PURE__ */ jsx37(AskDisplay, { cards: run, onSelect: onAskSelect }, index);
8053
8088
  } else if (segment.type === "tool_execution") {
8054
- return /* @__PURE__ */ jsx36(
8089
+ return /* @__PURE__ */ jsx37(
8055
8090
  ToolExecutionDisplay,
8056
8091
  {
8057
8092
  message: segment.data,
@@ -8061,7 +8096,7 @@ var ChatMessageEnhanced = forwardRef17(
8061
8096
  index
8062
8097
  );
8063
8098
  } else if (segment.type === "approval_request") {
8064
- return /* @__PURE__ */ jsx36(
8099
+ return /* @__PURE__ */ jsx37(
8065
8100
  ApprovalRequestMessage,
8066
8101
  {
8067
8102
  data: segment.data,
@@ -8075,7 +8110,7 @@ var ChatMessageEnhanced = forwardRef17(
8075
8110
  index
8076
8111
  );
8077
8112
  } else if (segment.type === "approval_batch") {
8078
- return /* @__PURE__ */ jsx36(
8113
+ return /* @__PURE__ */ jsx37(
8079
8114
  ApprovalBatchMessage,
8080
8115
  {
8081
8116
  data: segment.data,
@@ -8089,7 +8124,7 @@ var ChatMessageEnhanced = forwardRef17(
8089
8124
  index
8090
8125
  );
8091
8126
  } else if (segment.type === "escalation_offer") {
8092
- return /* @__PURE__ */ jsx36(
8127
+ return /* @__PURE__ */ jsx37(
8093
8128
  EscalationOfferMessage,
8094
8129
  {
8095
8130
  data: segment.data,
@@ -8101,11 +8136,11 @@ var ChatMessageEnhanced = forwardRef17(
8101
8136
  index
8102
8137
  );
8103
8138
  } else if (segment.type === "ticket_escalated") {
8104
- return /* @__PURE__ */ jsx36(TicketEscalatedMessage, { data: segment.data, timestamp }, index);
8139
+ return /* @__PURE__ */ jsx37(TicketEscalatedMessage, { data: segment.data, timestamp }, index);
8105
8140
  } else if (segment.type === "ticket_event") {
8106
- return /* @__PURE__ */ jsx36(TicketEventMessage, { data: segment.data, timestamp }, index);
8141
+ return /* @__PURE__ */ jsx37(TicketEventMessage, { data: segment.data, timestamp }, index);
8107
8142
  } else if (segment.type === "error") {
8108
- return /* @__PURE__ */ jsx36(
8143
+ return /* @__PURE__ */ jsx37(
8109
8144
  ErrorMessageDisplay,
8110
8145
  {
8111
8146
  title: segment.title,
@@ -8114,7 +8149,7 @@ var ChatMessageEnhanced = forwardRef17(
8114
8149
  index
8115
8150
  );
8116
8151
  } else if (segment.type === "context_compaction") {
8117
- return /* @__PURE__ */ jsx36(
8152
+ return /* @__PURE__ */ jsx37(
8118
8153
  ContextCompactionDisplay,
8119
8154
  {
8120
8155
  status: segment.status
@@ -8123,7 +8158,7 @@ var ChatMessageEnhanced = forwardRef17(
8123
8158
  );
8124
8159
  } else if (segment.type === "thinking") {
8125
8160
  const isStreaming = index === segments.length - 1 && isTyping;
8126
- return /* @__PURE__ */ jsx36(
8161
+ return /* @__PURE__ */ jsx37(
8127
8162
  ThinkingDisplay,
8128
8163
  {
8129
8164
  text: segment.text,
@@ -8134,7 +8169,7 @@ var ChatMessageEnhanced = forwardRef17(
8134
8169
  }
8135
8170
  return null;
8136
8171
  }) }),
8137
- stripContextItems && stripContextItems.length > 0 && /* @__PURE__ */ jsx36(
8172
+ stripContextItems && stripContextItems.length > 0 && /* @__PURE__ */ jsx37(
8138
8173
  ChatContextChipStrip,
8139
8174
  {
8140
8175
  items: stripContextItems,
@@ -8163,12 +8198,12 @@ MemoizedChatMessageEnhanced.displayName = "MemoizedChatMessageEnhanced";
8163
8198
 
8164
8199
  // src/components/chat/chat-message-list.tsx
8165
8200
  init_cn();
8166
- import { useRef as useRef10, useState as useState14, useCallback as useCallback6, useEffect as useEffect10, useLayoutEffect as useLayoutEffect4, useImperativeHandle as useImperativeHandle2, useMemo as useMemo12, forwardRef as forwardRef18 } from "react";
8201
+ import { useRef as useRef10, useState as useState14, useCallback as useCallback6, useEffect as useEffect10, useLayoutEffect as useLayoutEffect4, useImperativeHandle as useImperativeHandle2, useMemo as useMemo12, forwardRef as forwardRef19 } from "react";
8167
8202
  import { useStickToBottom } from "use-stick-to-bottom";
8168
8203
 
8169
8204
  // src/components/chat/chat-message-skeleton.tsx
8170
8205
  init_cn();
8171
- import { jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
8206
+ import { jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
8172
8207
  var BODY_LINE_WIDTHS = ["w-full", "w-11/12", "w-4/5", "w-5/6"];
8173
8208
  var bodyLineWidth = (index, total) => index === total - 1 ? "w-3/5" : BODY_LINE_WIDTHS[index % BODY_LINE_WIDTHS.length];
8174
8209
  function ChatMessageSkeleton({
@@ -8178,13 +8213,13 @@ function ChatMessageSkeleton({
8178
8213
  bodyLines = 3
8179
8214
  }) {
8180
8215
  const lines = Math.max(1, bodyLines);
8181
- return /* @__PURE__ */ jsx37("div", { className: cn("relative py-[var(--spacing-system-s)]", className), children: /* @__PURE__ */ jsxs28("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
8216
+ return /* @__PURE__ */ jsx38("div", { className: cn("relative py-[var(--spacing-system-s)]", className), children: /* @__PURE__ */ jsxs28("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
8182
8217
  /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
8183
- showAvatar && !isUser && /* @__PURE__ */ jsx37("div", { className: "h-8 w-8 flex-shrink-0 rounded-full bg-ods-border animate-pulse" }),
8184
- /* @__PURE__ */ jsx37("div", { className: "h-5 w-32 rounded bg-ods-border animate-pulse" }),
8185
- /* @__PURE__ */ jsx37("div", { className: "ml-auto h-4 w-14 rounded bg-ods-border animate-pulse" })
8218
+ showAvatar && !isUser && /* @__PURE__ */ jsx38("div", { className: "h-8 w-8 flex-shrink-0 rounded-full bg-ods-border animate-pulse" }),
8219
+ /* @__PURE__ */ jsx38("div", { className: "h-5 w-32 rounded bg-ods-border animate-pulse" }),
8220
+ /* @__PURE__ */ jsx38("div", { className: "ml-auto h-4 w-14 rounded bg-ods-border animate-pulse" })
8186
8221
  ] }),
8187
- /* @__PURE__ */ jsx37("div", { className: "flex flex-col gap-2 pt-[var(--spacing-system-xxs)]", children: Array.from({ length: lines }, (_, i) => /* @__PURE__ */ jsx37(
8222
+ /* @__PURE__ */ jsx38("div", { className: "flex flex-col gap-2 pt-[var(--spacing-system-xxs)]", children: Array.from({ length: lines }, (_, i) => /* @__PURE__ */ jsx38(
8188
8223
  "div",
8189
8224
  {
8190
8225
  className: cn("h-4 rounded bg-ods-border animate-pulse", bodyLineWidth(i, lines))
@@ -8206,7 +8241,7 @@ function ChatMessageListSkeleton({
8206
8241
  id: index,
8207
8242
  isUser: index % 3 === 0
8208
8243
  }));
8209
- return /* @__PURE__ */ jsx37("div", { className: "relative flex-1 min-h-0 flex flex-col", children: /* @__PURE__ */ jsx37(
8244
+ return /* @__PURE__ */ jsx38("div", { className: "relative flex-1 min-h-0 flex flex-col", children: /* @__PURE__ */ jsx38(
8210
8245
  "div",
8211
8246
  {
8212
8247
  className: cn(
@@ -8223,8 +8258,8 @@ function ChatMessageListSkeleton({
8223
8258
  ),
8224
8259
  style: fill ? void 0 : { minHeight: "100%" },
8225
8260
  children: [
8226
- !fill && /* @__PURE__ */ jsx37("div", { className: "flex-1" }),
8227
- messages.map((message2) => /* @__PURE__ */ jsx37(
8261
+ !fill && /* @__PURE__ */ jsx38("div", { className: "flex-1" }),
8262
+ messages.map((message2) => /* @__PURE__ */ jsx38(
8228
8263
  ChatMessageSkeleton,
8229
8264
  {
8230
8265
  showAvatar: showAvatars,
@@ -8243,7 +8278,7 @@ function ChatMessageListSkeleton({
8243
8278
  // src/components/chat/cycling-phrase.tsx
8244
8279
  init_cn();
8245
8280
  import { useEffect as useEffect9, useMemo as useMemo11, useState as useState13 } from "react";
8246
- import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
8281
+ import { jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
8247
8282
  var BLINK_KEYFRAMES = `
8248
8283
  @keyframes cyclingCursorBlink {
8249
8284
  50% { opacity: 0; }
@@ -8295,7 +8330,7 @@ function CyclingPhrase({
8295
8330
  if (words.length === 0) return null;
8296
8331
  const before = text.slice(0, cursor);
8297
8332
  const after = text.slice(cursor);
8298
- const cursorBlock = /* @__PURE__ */ jsx38(
8333
+ const cursorBlock = /* @__PURE__ */ jsx39(
8299
8334
  "span",
8300
8335
  {
8301
8336
  "aria-hidden": true,
@@ -8311,22 +8346,22 @@ function CyclingPhrase({
8311
8346
  }
8312
8347
  );
8313
8348
  return /* @__PURE__ */ jsxs29("span", { className: cn("relative inline-block whitespace-nowrap", className), children: [
8314
- /* @__PURE__ */ jsx38("style", { dangerouslySetInnerHTML: { __html: BLINK_KEYFRAMES } }),
8349
+ /* @__PURE__ */ jsx39("style", { dangerouslySetInnerHTML: { __html: BLINK_KEYFRAMES } }),
8315
8350
  /* @__PURE__ */ jsxs29("span", { "aria-hidden": true, className: "invisible", children: [
8316
8351
  placeholder,
8317
8352
  "..."
8318
8353
  ] }),
8319
8354
  /* @__PURE__ */ jsxs29("span", { className: "absolute inset-0 inline-flex items-baseline", "aria-live": "polite", children: [
8320
- /* @__PURE__ */ jsx38("span", { children: before }),
8355
+ /* @__PURE__ */ jsx39("span", { children: before }),
8321
8356
  !holding && cursorBlock,
8322
- /* @__PURE__ */ jsx38("span", { children: after }),
8323
- /* @__PURE__ */ jsx38("span", { children: "..." })
8357
+ /* @__PURE__ */ jsx39("span", { children: after }),
8358
+ /* @__PURE__ */ jsx39("span", { children: "..." })
8324
8359
  ] })
8325
8360
  ] });
8326
8361
  }
8327
8362
 
8328
8363
  // src/components/chat/chat-message-list.tsx
8329
- import { jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
8364
+ import { jsx as jsx40, jsxs as jsxs30 } from "react/jsx-runtime";
8330
8365
  var STREAMING_WORDS = [
8331
8366
  "Thinking",
8332
8367
  "Vibing",
@@ -8351,7 +8386,7 @@ function disposeAnchorWatcher(w) {
8351
8386
  w.ro.disconnect();
8352
8387
  clearTimeout(w.timer);
8353
8388
  }
8354
- var ChatMessageList = forwardRef18(
8389
+ var ChatMessageList = forwardRef19(
8355
8390
  ({
8356
8391
  className,
8357
8392
  messages,
@@ -8675,7 +8710,7 @@ var ChatMessageList = forwardRef18(
8675
8710
  [contentRef]
8676
8711
  );
8677
8712
  if (isLoading) {
8678
- return /* @__PURE__ */ jsx39(
8713
+ return /* @__PURE__ */ jsx40(
8679
8714
  ChatMessageListSkeleton,
8680
8715
  {
8681
8716
  className,
@@ -8691,9 +8726,9 @@ var ChatMessageList = forwardRef18(
8691
8726
  const lastSegment = lastSegments?.[lastSegments.length - 1];
8692
8727
  const isPausedOnApproval = !!lastSegment && (lastSegment.type === "approval_request" || lastSegment.type === "approval_batch" || lastSegment.type === "escalation_offer") && (lastSegment.status === void 0 || lastSegment.status === "pending");
8693
8728
  const showStreamingLoader = isTyping && !isPausedOnApproval && !(pendingApprovals && pendingApprovals.length > 0);
8694
- return /* @__PURE__ */ jsx39(OverlayOpenRegistryProvider, { onOpenChange: handleOverlayOpenChange, children: /* @__PURE__ */ jsxs30("div", { className: "flex-1 min-h-0 flex flex-col", children: [
8729
+ return /* @__PURE__ */ jsx40(OverlayOpenRegistryProvider, { onOpenChange: handleOverlayOpenChange, children: /* @__PURE__ */ jsxs30("div", { className: "flex-1 min-h-0 flex flex-col", children: [
8695
8730
  /* @__PURE__ */ jsxs30("div", { className: "relative flex-1 min-h-0 flex flex-col", children: [
8696
- /* @__PURE__ */ jsx39(
8731
+ /* @__PURE__ */ jsx40(
8697
8732
  "div",
8698
8733
  {
8699
8734
  ref: setScrollRef,
@@ -8725,13 +8760,13 @@ var ChatMessageList = forwardRef18(
8725
8760
  ),
8726
8761
  style: { minHeight: "100%" },
8727
8762
  children: [
8728
- hasNextPage && /* @__PURE__ */ jsx39("div", { ref: sentinelRef, className: "h-px" }),
8729
- /* @__PURE__ */ jsx39("div", { className: "flex-1" }),
8763
+ hasNextPage && /* @__PURE__ */ jsx40("div", { ref: sentinelRef, className: "h-px" }),
8764
+ /* @__PURE__ */ jsx40("div", { className: "flex-1" }),
8730
8765
  messages.map((message2, index) => {
8731
8766
  if (message2.hidden) return null;
8732
8767
  const isEmptyPendingTurn = index === messages.length - 1 && isTyping && message2.role === "assistant" && !hasNonEmptyContent(message2.content) && (!Array.isArray(message2.content) || message2.content.every((s) => s.type === "text"));
8733
8768
  if (isEmptyPendingTurn) return null;
8734
- return /* @__PURE__ */ jsx39(
8769
+ return /* @__PURE__ */ jsx40(
8735
8770
  MemoizedChatMessageEnhanced,
8736
8771
  {
8737
8772
  ref: getRegisterMessageEl(message2.id),
@@ -8762,7 +8797,7 @@ var ChatMessageList = forwardRef18(
8762
8797
  )
8763
8798
  }
8764
8799
  ),
8765
- autoScroll && !atBottom && messages.length > 0 && /* @__PURE__ */ jsx39(
8800
+ autoScroll && !atBottom && messages.length > 0 && /* @__PURE__ */ jsx40(
8766
8801
  "button",
8767
8802
  {
8768
8803
  type: "button",
@@ -8777,7 +8812,7 @@ var ChatMessageList = forwardRef18(
8777
8812
  "bg-ods-card text-ods-text-primary border border-ods-border shadow-lg",
8778
8813
  "hover:bg-ods-bg-hover transition-colors"
8779
8814
  ),
8780
- children: /* @__PURE__ */ jsx39(Arrow02DownIcon, { size: 16 })
8815
+ children: /* @__PURE__ */ jsx40(Arrow02DownIcon, { size: 16 })
8781
8816
  }
8782
8817
  )
8783
8818
  ] }),
@@ -8792,16 +8827,16 @@ var ChatMessageList = forwardRef18(
8792
8827
  role: "status",
8793
8828
  "aria-live": "polite",
8794
8829
  children: [
8795
- /* @__PURE__ */ jsx39(DotsLoaderIcon, { className: "w-6 h-6" }),
8796
- /* @__PURE__ */ jsx39(CyclingPhrase, { words: STREAMING_WORDS, className: "text-h6" })
8830
+ /* @__PURE__ */ jsx40(DotsLoaderIcon, { className: "w-6 h-6" }),
8831
+ /* @__PURE__ */ jsx40(CyclingPhrase, { words: STREAMING_WORDS, className: "text-h6" })
8797
8832
  ]
8798
8833
  }
8799
8834
  ),
8800
- pendingApprovals && pendingApprovals.length > 0 && /* @__PURE__ */ jsx39("div", { className: cn(
8835
+ pendingApprovals && pendingApprovals.length > 0 && /* @__PURE__ */ jsx40("div", { className: cn(
8801
8836
  "border-t border-ods-border bg-ods-bg/95 backdrop-blur-sm",
8802
8837
  fullWidth ? "w-full" : "mx-auto w-full max-w-ods-content-narrow",
8803
8838
  contentClassName ?? "px-[var(--spacing-system-m)]"
8804
- ), children: /* @__PURE__ */ jsx39(
8839
+ ), children: /* @__PURE__ */ jsx40(
8805
8840
  MemoizedChatMessageEnhanced,
8806
8841
  {
8807
8842
  role: "assistant",
@@ -8875,7 +8910,7 @@ function useProxiedImageUrl(url) {
8875
8910
 
8876
8911
  // src/components/chat/chat-message-row.tsx
8877
8912
  import { useState as useState15 } from "react";
8878
- import { jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
8913
+ import { jsx as jsx41, jsxs as jsxs31 } from "react/jsx-runtime";
8879
8914
  function ChatMessageRow({
8880
8915
  displayName,
8881
8916
  avatarUrl,
@@ -8889,7 +8924,7 @@ function ChatMessageRow({
8889
8924
  const src = resolvedAvatar && resolvedAvatar !== failedSrc ? resolvedAvatar : void 0;
8890
8925
  const hasBody = body.trim().length > 0;
8891
8926
  return /* @__PURE__ */ jsxs31("div", { className: "flex gap-2 md:gap-3 w-full min-w-0", children: [
8892
- src ? /* @__PURE__ */ jsx40(
8927
+ src ? /* @__PURE__ */ jsx41(
8893
8928
  next_image_default,
8894
8929
  {
8895
8930
  src,
@@ -8899,46 +8934,46 @@ function ChatMessageRow({
8899
8934
  height: 40,
8900
8935
  onError: () => setFailedSrc(resolvedAvatar ?? null)
8901
8936
  }
8902
- ) : /* @__PURE__ */ jsx40("div", { className: "w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 flex items-center justify-center bg-ods-bg border border-ods-border text-h6 text-ods-text-primary", children: getFirstLastInitials(displayName) || "?" }),
8937
+ ) : /* @__PURE__ */ jsx41("div", { className: "w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 flex items-center justify-center bg-ods-bg border border-ods-border text-h6 text-ods-text-primary", children: getFirstLastInitials(displayName) || "?" }),
8903
8938
  /* @__PURE__ */ jsxs31("div", { className: "flex-1 min-w-0 max-w-full", children: [
8904
8939
  /* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-2 max-w-full mb-1 min-w-0", children: [
8905
- /* @__PURE__ */ jsx40("span", { className: "text-[14px] md:text-[15px] font-bold leading-[1.33] text-ods-text-primary font-body tracking-[-0.02em] truncate", children: displayName }),
8906
- timeLabel && /* @__PURE__ */ jsx40("span", { className: "text-h6 text-ods-text-secondary flex-shrink-0", children: timeLabel })
8940
+ /* @__PURE__ */ jsx41("span", { className: "text-[14px] md:text-[15px] font-bold leading-[1.33] text-ods-text-primary font-body tracking-[-0.02em] truncate", children: displayName }),
8941
+ timeLabel && /* @__PURE__ */ jsx41("span", { className: "text-h6 text-ods-text-secondary flex-shrink-0", children: timeLabel })
8907
8942
  ] }),
8908
- hasBody && /* @__PURE__ */ jsx40("div", { className: "text-h6 text-ods-text-primary whitespace-pre-wrap break-words min-w-0 max-w-full", children: body }),
8943
+ hasBody && /* @__PURE__ */ jsx41("div", { className: "text-h6 text-ods-text-primary whitespace-pre-wrap break-words min-w-0 max-w-full", children: body }),
8909
8944
  footer
8910
8945
  ] })
8911
8946
  ] });
8912
8947
  }
8913
8948
  function ChatMessageRowSkeleton() {
8914
8949
  return /* @__PURE__ */ jsxs31("div", { className: "flex gap-2 md:gap-3 w-full min-w-0", children: [
8915
- /* @__PURE__ */ jsx40("div", { className: "w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 bg-ods-border animate-pulse" }),
8950
+ /* @__PURE__ */ jsx41("div", { className: "w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 bg-ods-border animate-pulse" }),
8916
8951
  /* @__PURE__ */ jsxs31("div", { className: "flex-1 min-w-0", children: [
8917
8952
  /* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-2 mb-1", children: [
8918
- /* @__PURE__ */ jsx40("div", { className: "h-[15px] md:h-[20px] w-24 md:w-32 bg-ods-border rounded animate-pulse" }),
8919
- /* @__PURE__ */ jsx40("div", { className: "h-[12px] md:h-[16px] w-12 md:w-16 bg-ods-border rounded animate-pulse" })
8953
+ /* @__PURE__ */ jsx41("div", { className: "h-[15px] md:h-[20px] w-24 md:w-32 bg-ods-border rounded animate-pulse" }),
8954
+ /* @__PURE__ */ jsx41("div", { className: "h-[12px] md:h-[16px] w-12 md:w-16 bg-ods-border rounded animate-pulse" })
8920
8955
  ] }),
8921
- /* @__PURE__ */ jsx40("div", { className: "h-[14px] md:h-[18px] w-full bg-ods-border rounded animate-pulse" }),
8922
- /* @__PURE__ */ jsx40("div", { className: "h-[14px] md:h-[18px] w-3/4 bg-ods-border rounded animate-pulse mt-1" })
8956
+ /* @__PURE__ */ jsx41("div", { className: "h-[14px] md:h-[18px] w-full bg-ods-border rounded animate-pulse" }),
8957
+ /* @__PURE__ */ jsx41("div", { className: "h-[14px] md:h-[18px] w-3/4 bg-ods-border rounded animate-pulse mt-1" })
8923
8958
  ] })
8924
8959
  ] });
8925
8960
  }
8926
8961
 
8927
8962
  // src/components/chat/quick-action-chip.tsx
8928
8963
  init_cn();
8929
- import * as React14 from "react";
8964
+ import * as React15 from "react";
8930
8965
 
8931
8966
  // src/assets/fae-avatar.ts
8932
8967
  var FAE_AVATAR_DATA_URI = "data:image/png;base64,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";
8933
8968
 
8934
8969
  // src/components/agent-mark.tsx
8935
- import { jsx as jsx41 } from "react/jsx-runtime";
8970
+ import { jsx as jsx42 } from "react/jsx-runtime";
8936
8971
  function AgentMark({ agent, className = "", faeAvatarSrc = FAE_AVATAR_DATA_URI }) {
8937
- return agent === "mingo" ? /* @__PURE__ */ jsx41(MingoIcon, { className, "aria-hidden": "true", focusable: "false" }) : /* @__PURE__ */ jsx41("img", { src: faeAvatarSrc, alt: "", className });
8972
+ return agent === "mingo" ? /* @__PURE__ */ jsx42(MingoIcon, { className, "aria-hidden": "true", focusable: "false" }) : /* @__PURE__ */ jsx42("img", { src: faeAvatarSrc, alt: "", className });
8938
8973
  }
8939
8974
 
8940
8975
  // src/components/icon-display.tsx
8941
- import { jsx as jsx42 } from "react/jsx-runtime";
8976
+ import { jsx as jsx43 } from "react/jsx-runtime";
8942
8977
  var BRAND_MARK_NAMES = /* @__PURE__ */ new Set(["fae", "mingo"]);
8943
8978
  function EntityIcon({
8944
8979
  icon,
@@ -8946,7 +8981,7 @@ function EntityIcon({
8946
8981
  className
8947
8982
  }) {
8948
8983
  if (icon?.url) {
8949
- return /* @__PURE__ */ jsx42(
8984
+ return /* @__PURE__ */ jsx43(
8950
8985
  "img",
8951
8986
  {
8952
8987
  src: icon.url,
@@ -8959,21 +8994,21 @@ function EntityIcon({
8959
8994
  );
8960
8995
  }
8961
8996
  if (icon?.name && BRAND_MARK_NAMES.has(icon.name)) {
8962
- return /* @__PURE__ */ jsx42(
8997
+ return /* @__PURE__ */ jsx43(
8963
8998
  "span",
8964
8999
  {
8965
9000
  className: `inline-flex${className ? ` ${className}` : ""}`,
8966
9001
  style: className ? void 0 : { width: size2, height: size2 },
8967
- children: /* @__PURE__ */ jsx42(AgentMark, { agent: icon.name, className: "w-full h-full" })
9002
+ children: /* @__PURE__ */ jsx43(AgentMark, { agent: icon.name, className: "w-full h-full" })
8968
9003
  }
8969
9004
  );
8970
9005
  }
8971
9006
  const Glyph = resolveIcon(icon?.name ?? void 0);
8972
- return /* @__PURE__ */ jsx42(Glyph, { size: size2, className, ...icon?.props ?? {} });
9007
+ return /* @__PURE__ */ jsx43(Glyph, { size: size2, className, ...icon?.props ?? {} });
8973
9008
  }
8974
9009
 
8975
9010
  // src/components/chat/quick-action-chip.tsx
8976
- import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs32 } from "react/jsx-runtime";
9011
+ import { Fragment as Fragment11, jsx as jsx44, jsxs as jsxs32 } from "react/jsx-runtime";
8977
9012
  var AGENT_ACCENTS = { fae: "pink", mingo: "cyan" };
8978
9013
  function getAgentAccent(slug) {
8979
9014
  return slug === "fae" || slug === "mingo" ? AGENT_ACCENTS[slug] : void 0;
@@ -8987,7 +9022,7 @@ var ACCENT_CLASS = {
8987
9022
  cyan: "text-ods-flamingo-cyan"
8988
9023
  };
8989
9024
  function isQuickActionIconSpec(icon) {
8990
- return typeof icon === "object" && icon !== null && !Array.isArray(icon) && !React14.isValidElement(icon);
9025
+ return typeof icon === "object" && icon !== null && !Array.isArray(icon) && !React15.isValidElement(icon);
8991
9026
  }
8992
9027
  function renderQuickActionIcon(icon) {
8993
9028
  if (!isQuickActionIconSpec(icon)) {
@@ -8997,7 +9032,7 @@ function renderQuickActionIcon(icon) {
8997
9032
  if (!spec.name && !spec.url) return void 0;
8998
9033
  const accentClass = spec.accent ? ACCENT_CLASS[spec.accent] : void 0;
8999
9034
  const props = spec.accent && !accentClass ? { color: spec.accent, ...spec.props ?? {} } : spec.props;
9000
- return /* @__PURE__ */ jsx43(
9035
+ return /* @__PURE__ */ jsx44(
9001
9036
  EntityIcon,
9002
9037
  {
9003
9038
  icon: { name: spec.name, url: spec.url, props },
@@ -9009,7 +9044,7 @@ function renderQuickActionIcon(icon) {
9009
9044
  function composeChipLabel(label, lozenge) {
9010
9045
  if (!lozenge) return label;
9011
9046
  return /* @__PURE__ */ jsxs32(Fragment11, { children: [
9012
- /* @__PURE__ */ jsx43(
9047
+ /* @__PURE__ */ jsx44(
9013
9048
  "span",
9014
9049
  {
9015
9050
  className: cn(
@@ -9029,19 +9064,19 @@ function composeChipLabel(label, lozenge) {
9029
9064
  ] });
9030
9065
  }
9031
9066
  function ChipSkelBar({ className, style }) {
9032
- return /* @__PURE__ */ jsx43("span", { "aria-hidden": true, className: cn("animate-pulse rounded-md bg-ods-border", className), style });
9067
+ return /* @__PURE__ */ jsx44("span", { "aria-hidden": true, className: cn("animate-pulse rounded-md bg-ods-border", className), style });
9033
9068
  }
9034
9069
  function QuickActionChipSkeleton({ labelCh = 16, icon = true, lozenge = false, size: size2 = "default", className }) {
9035
- return /* @__PURE__ */ jsx43(
9070
+ return /* @__PURE__ */ jsx44(
9036
9071
  Tag,
9037
9072
  {
9038
9073
  variant: "outline",
9039
9074
  size: size2,
9040
9075
  className,
9041
- icon: icon ? /* @__PURE__ */ jsx43(ChipSkelBar, { className: size2 === "large" ? "block size-5" : "block size-4" }) : void 0,
9076
+ icon: icon ? /* @__PURE__ */ jsx44(ChipSkelBar, { className: size2 === "large" ? "block size-5" : "block size-4" }) : void 0,
9042
9077
  label: /* @__PURE__ */ jsxs32(Fragment11, { children: [
9043
- lozenge && /* @__PURE__ */ jsx43(ChipSkelBar, { className: "mr-2 inline-block h-[16px] w-[26px] translate-y-[2px]" }),
9044
- /* @__PURE__ */ jsx43(ChipSkelBar, { className: "inline-block h-[0.9em] translate-y-[0.08em]", style: { width: `${labelCh}ch` } })
9078
+ lozenge && /* @__PURE__ */ jsx44(ChipSkelBar, { className: "mr-2 inline-block h-[16px] w-[26px] translate-y-[2px]" }),
9079
+ /* @__PURE__ */ jsx44(ChipSkelBar, { className: "inline-block h-[0.9em] translate-y-[0.08em]", style: { width: `${labelCh}ch` } })
9045
9080
  ] })
9046
9081
  }
9047
9082
  );
@@ -9067,9 +9102,9 @@ function QuickActionChipButton({
9067
9102
  const resolvedLabel = composeChipLabel(label, resolvedLozenge);
9068
9103
  const tagVariant = selected ? selectedAccent === "cyan" ? "selectedCyan" : "selected" : variant;
9069
9104
  if (!interactive) {
9070
- return /* @__PURE__ */ jsx43(Tag, { variant: tagVariant, size: size2, icon: resolvedIcon, label: resolvedLabel, className });
9105
+ return /* @__PURE__ */ jsx44(Tag, { variant: tagVariant, size: size2, icon: resolvedIcon, label: resolvedLabel, className });
9071
9106
  }
9072
- return /* @__PURE__ */ jsx43(
9107
+ return /* @__PURE__ */ jsx44(
9073
9108
  "button",
9074
9109
  {
9075
9110
  type: "button",
@@ -9083,7 +9118,7 @@ function QuickActionChipButton({
9083
9118
  "shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
9084
9119
  className
9085
9120
  ),
9086
- children: /* @__PURE__ */ jsx43(Tag, { variant: tagVariant, size: size2, icon: resolvedIcon, label: resolvedLabel })
9121
+ children: /* @__PURE__ */ jsx44(Tag, { variant: tagVariant, size: size2, icon: resolvedIcon, label: resolvedLabel })
9087
9122
  }
9088
9123
  );
9089
9124
  }
@@ -9094,7 +9129,7 @@ function QuickActionChipFromData({
9094
9129
  interactive = true,
9095
9130
  className
9096
9131
  }) {
9097
- return /* @__PURE__ */ jsx43(
9132
+ return /* @__PURE__ */ jsx44(
9098
9133
  QuickActionChipButton,
9099
9134
  {
9100
9135
  label: chip.label,
@@ -9114,21 +9149,21 @@ function QuickActionChipFromData({
9114
9149
  }
9115
9150
 
9116
9151
  // src/components/chat/quick-action-marquee.tsx
9117
- import * as React17 from "react";
9152
+ import * as React18 from "react";
9118
9153
 
9119
9154
  // src/components/chat/quick-action-wall.tsx
9120
9155
  init_cn();
9121
- import * as React16 from "react";
9156
+ import * as React17 from "react";
9122
9157
 
9123
9158
  // src/components/ui/marquee-wall.tsx
9124
9159
  init_cn();
9125
- import * as React15 from "react";
9126
- import { Fragment as Fragment12, jsx as jsx44, jsxs as jsxs33 } from "react/jsx-runtime";
9160
+ import * as React16 from "react";
9161
+ import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs33 } from "react/jsx-runtime";
9127
9162
  function normalizeFades(fade) {
9128
9163
  return fade ? Array.isArray(fade) ? fade : [fade] : [];
9129
9164
  }
9130
9165
  function useMarqueeSync() {
9131
- return React15.useRef({ members: /* @__PURE__ */ new Set(), driver: null, position: 0 }).current;
9166
+ return React16.useRef({ members: /* @__PURE__ */ new Set(), driver: null, position: 0 }).current;
9132
9167
  }
9133
9168
  var MARQUEE_TRACK_OFFSETS = /* @__PURE__ */ new Map();
9134
9169
  var ZERO_OFFSET = { x: 0, y: 0, wrapX: 0, wrapY: 0 };
@@ -9167,11 +9202,11 @@ function MarqueeWallFades({
9167
9202
  fadeColor = "var(--color-bg)",
9168
9203
  fadeSize
9169
9204
  }) {
9170
- return /* @__PURE__ */ jsx44(Fragment12, { children: normalizeFades(fade).map((edge) => {
9205
+ return /* @__PURE__ */ jsx45(Fragment12, { children: normalizeFades(fade).map((edge) => {
9171
9206
  const size2 = (typeof fadeSize === "object" && fadeSize !== null ? fadeSize[edge] : fadeSize) ?? DEFAULT_FADE_SIZE[edge];
9172
9207
  const px = typeof size2 === "number" ? `${size2}px` : size2;
9173
9208
  const isY = edge === "top" || edge === "bottom";
9174
- return /* @__PURE__ */ jsx44(
9209
+ return /* @__PURE__ */ jsx45(
9175
9210
  "div",
9176
9211
  {
9177
9212
  "aria-hidden": true,
@@ -9192,7 +9227,7 @@ function CloneCopy({
9192
9227
  children
9193
9228
  }) {
9194
9229
  const ref = useSuppressCloneFocus(true);
9195
- return /* @__PURE__ */ jsx44("div", { ref, "aria-hidden": true, "data-marquee-copy": "clone", className, style, children });
9230
+ return /* @__PURE__ */ jsx45("div", { ref, "aria-hidden": true, "data-marquee-copy": "clone", className, style, children });
9196
9231
  }
9197
9232
  function MarqueeWall({
9198
9233
  mode = "animated",
@@ -9213,16 +9248,16 @@ function MarqueeWall({
9213
9248
  sync,
9214
9249
  trackId
9215
9250
  }) {
9216
- const fades = React15.useMemo(() => normalizeFades(fade), [fade]);
9251
+ const fades = React16.useMemo(() => normalizeFades(fade), [fade]);
9217
9252
  const axis = axisProp ?? (fades.includes("top") || fades.includes("bottom") ? "y" : "x");
9218
- const containerRef = React15.useRef(null);
9219
- const trackRef = React15.useRef(null);
9220
- const copyRef = React15.useRef(null);
9253
+ const containerRef = React16.useRef(null);
9254
+ const trackRef = React16.useRef(null);
9255
+ const copyRef = React16.useRef(null);
9221
9256
  const reducedMotion = useMediaQuery("(prefers-reduced-motion: reduce)") ?? false;
9222
- const [overflows, setOverflows] = React15.useState(false);
9223
- const copySizeRef = React15.useRef(0);
9224
- const wrapSizeRef = React15.useRef(0);
9225
- const measure = React15.useCallback(() => {
9257
+ const [overflows, setOverflows] = React16.useState(false);
9258
+ const copySizeRef = React16.useRef(0);
9259
+ const wrapSizeRef = React16.useRef(0);
9260
+ const measure = React16.useCallback(() => {
9226
9261
  const container = containerRef.current;
9227
9262
  const copy = copyRef.current;
9228
9263
  if (!container || !copy) return;
@@ -9235,7 +9270,7 @@ function MarqueeWall({
9235
9270
  }, [axis, copyGap]);
9236
9271
  const marqueeMounted = mode === "animated" && !reducedMotion && overflows;
9237
9272
  const marqueeActive = marqueeMounted && animate;
9238
- React15.useEffect(() => {
9273
+ React16.useEffect(() => {
9239
9274
  measure();
9240
9275
  const container = containerRef.current;
9241
9276
  const copy = copyRef.current;
@@ -9245,8 +9280,8 @@ function MarqueeWall({
9245
9280
  ro.observe(copy);
9246
9281
  return () => ro.disconnect();
9247
9282
  }, [measure, marqueeMounted]);
9248
- const [nearViewport, setNearViewport] = React15.useState(true);
9249
- React15.useEffect(() => {
9283
+ const [nearViewport, setNearViewport] = React16.useState(true);
9284
+ React16.useEffect(() => {
9250
9285
  const el = containerRef.current;
9251
9286
  if (!el || typeof IntersectionObserver === "undefined") return;
9252
9287
  const io = new IntersectionObserver(
@@ -9256,22 +9291,22 @@ function MarqueeWall({
9256
9291
  io.observe(el);
9257
9292
  return () => io.disconnect();
9258
9293
  }, []);
9259
- const pointerInsideRef = React15.useRef(false);
9260
- const clearPointerInside = React15.useCallback(() => {
9294
+ const pointerInsideRef = React16.useRef(false);
9295
+ const clearPointerInside = React16.useCallback(() => {
9261
9296
  pointerInsideRef.current = false;
9262
9297
  }, []);
9263
- const onPointerEnter = React15.useCallback((e) => {
9298
+ const onPointerEnter = React16.useCallback((e) => {
9264
9299
  if (e.pointerType === "touch") return;
9265
9300
  pointerInsideRef.current = true;
9266
9301
  }, []);
9267
- const onPointerLeave = React15.useCallback((e) => {
9302
+ const onPointerLeave = React16.useCallback((e) => {
9268
9303
  if (e.pointerType === "touch") return;
9269
9304
  pointerInsideRef.current = false;
9270
9305
  }, []);
9271
9306
  useResetOnPageHidden(clearPointerInside);
9272
- const draggingRef = React15.useRef(false);
9273
- const dragSuppressUntilRef = React15.useRef(0);
9274
- const applyTransform = React15.useCallback(
9307
+ const draggingRef = React16.useRef(false);
9308
+ const dragSuppressUntilRef = React16.useRef(0);
9309
+ const applyTransform = React16.useCallback(
9275
9310
  (pos) => {
9276
9311
  const track = trackRef.current;
9277
9312
  if (!track) return;
@@ -9287,7 +9322,7 @@ function MarqueeWall({
9287
9322
  },
9288
9323
  [axis, reverse, trackId]
9289
9324
  );
9290
- const applyPos = React15.useCallback(
9325
+ const applyPos = React16.useCallback(
9291
9326
  (pos) => {
9292
9327
  if (sync) {
9293
9328
  sync.position = pos;
@@ -9298,14 +9333,14 @@ function MarqueeWall({
9298
9333
  },
9299
9334
  [sync, applyTransform]
9300
9335
  );
9301
- React15.useEffect(() => {
9336
+ React16.useEffect(() => {
9302
9337
  if (marqueeMounted) return;
9303
9338
  const track = trackRef.current;
9304
9339
  if (track) track.style.transform = "";
9305
9340
  if (trackId) MARQUEE_TRACK_OFFSETS.set(trackId, ZERO_OFFSET);
9306
9341
  }, [marqueeMounted, trackId]);
9307
- const [isDriver, setIsDriver] = React15.useState(!sync);
9308
- React15.useEffect(() => {
9342
+ const [isDriver, setIsDriver] = React16.useState(!sync);
9343
+ React16.useEffect(() => {
9309
9344
  if (!sync) {
9310
9345
  setIsDriver(true);
9311
9346
  return;
@@ -9333,7 +9368,7 @@ function MarqueeWall({
9333
9368
  // (engine seeds from readBack on activation) instead of restarting at 0.
9334
9369
  readBack: sync ? () => sync.position : void 0
9335
9370
  });
9336
- React15.useLayoutEffect(() => {
9371
+ React16.useLayoutEffect(() => {
9337
9372
  if (!marqueeMounted) {
9338
9373
  posRef.current = 0;
9339
9374
  return;
@@ -9343,17 +9378,17 @@ function MarqueeWall({
9343
9378
  }
9344
9379
  }, [marqueeMounted, reverse, posRef]);
9345
9380
  const DRAG_RESUME_MS = 1200;
9346
- const dragStartRef = React15.useRef({ coord: 0, pos: 0 });
9347
- const dragMovedRef = React15.useRef(false);
9348
- const suppressClickRef = React15.useRef(false);
9349
- const onDragPointerDown = React15.useCallback((e) => {
9381
+ const dragStartRef = React16.useRef({ coord: 0, pos: 0 });
9382
+ const dragMovedRef = React16.useRef(false);
9383
+ const suppressClickRef = React16.useRef(false);
9384
+ const onDragPointerDown = React16.useCallback((e) => {
9350
9385
  if (!marqueeMounted) return;
9351
9386
  draggingRef.current = true;
9352
9387
  dragMovedRef.current = false;
9353
9388
  suppressClickRef.current = false;
9354
9389
  dragStartRef.current = { coord: axis === "y" ? e.clientY : e.clientX, pos: posRef.current };
9355
9390
  }, [marqueeMounted, axis, posRef]);
9356
- const onDragPointerMove = React15.useCallback((e) => {
9391
+ const onDragPointerMove = React16.useCallback((e) => {
9357
9392
  if (!draggingRef.current) return;
9358
9393
  const delta = (axis === "y" ? e.clientY : e.clientX) - dragStartRef.current.coord;
9359
9394
  if (Math.abs(delta) > 3 && !dragMovedRef.current) {
@@ -9367,7 +9402,7 @@ function MarqueeWall({
9367
9402
  applyPos(posRef.current);
9368
9403
  dragSuppressUntilRef.current = performance.now() + DRAG_RESUME_MS;
9369
9404
  }, [axis, reverse, wrap, posRef, applyPos]);
9370
- const onDragPointerUp = React15.useCallback((e) => {
9405
+ const onDragPointerUp = React16.useCallback((e) => {
9371
9406
  if (!draggingRef.current) return;
9372
9407
  draggingRef.current = false;
9373
9408
  if (dragMovedRef.current) suppressClickRef.current = true;
@@ -9379,18 +9414,18 @@ function MarqueeWall({
9379
9414
  }
9380
9415
  }
9381
9416
  }, []);
9382
- const onDragPointerLeave = React15.useCallback((e) => {
9417
+ const onDragPointerLeave = React16.useCallback((e) => {
9383
9418
  onPointerLeave(e);
9384
9419
  if (draggingRef.current && !dragMovedRef.current) draggingRef.current = false;
9385
9420
  }, [onPointerLeave]);
9386
- const onDragClickCapture = React15.useCallback((e) => {
9421
+ const onDragClickCapture = React16.useCallback((e) => {
9387
9422
  if (suppressClickRef.current) {
9388
9423
  suppressClickRef.current = false;
9389
9424
  e.preventDefault();
9390
9425
  e.stopPropagation();
9391
9426
  }
9392
9427
  }, []);
9393
- React15.useEffect(() => {
9428
+ React16.useEffect(() => {
9394
9429
  const el = containerRef.current;
9395
9430
  if (!el || !dragScroll || !marqueeMounted) return;
9396
9431
  const onWheel = (e) => {
@@ -9440,7 +9475,7 @@ function MarqueeWall({
9440
9475
  ),
9441
9476
  style: marqueeMounted ? { gap: copyGap } : void 0,
9442
9477
  children: [
9443
- /* @__PURE__ */ jsx44(
9478
+ /* @__PURE__ */ jsx45(
9444
9479
  "div",
9445
9480
  {
9446
9481
  ref: copyRef,
@@ -9450,18 +9485,18 @@ function MarqueeWall({
9450
9485
  children: renderContent(false)
9451
9486
  }
9452
9487
  ),
9453
- marqueeMounted && /* @__PURE__ */ jsx44(CloneCopy, { className: cn(axis === "x" && "w-max shrink-0", contentClassName), style: contentStyle, children: renderContent(true) })
9488
+ marqueeMounted && /* @__PURE__ */ jsx45(CloneCopy, { className: cn(axis === "x" && "w-max shrink-0", contentClassName), style: contentStyle, children: renderContent(true) })
9454
9489
  ]
9455
9490
  }
9456
9491
  ),
9457
- mode === "animated" && overflows && /* @__PURE__ */ jsx44(MarqueeWallFades, { fade, fadeColor, fadeSize })
9492
+ mode === "animated" && overflows && /* @__PURE__ */ jsx45(MarqueeWallFades, { fade, fadeColor, fadeSize })
9458
9493
  ]
9459
9494
  }
9460
9495
  );
9461
9496
  }
9462
9497
 
9463
9498
  // src/components/chat/quick-action-wall.tsx
9464
- import { jsx as jsx45, jsxs as jsxs34 } from "react/jsx-runtime";
9499
+ import { jsx as jsx46, jsxs as jsxs34 } from "react/jsx-runtime";
9465
9500
  var WALL_SKELETON_LABEL_CH = [17, 24, 14, 20, 15, 25, 12, 21, 16, 19, 13, 23];
9466
9501
  function interleave(a, b) {
9467
9502
  const out = [];
@@ -9501,10 +9536,10 @@ function QuickActionWall({
9501
9536
  contentClassName,
9502
9537
  sync
9503
9538
  }) {
9504
- const brickRef = React16.useRef(null);
9505
- const [brickWidth, setBrickWidth] = React16.useState(0);
9506
- const [chipWidth, setChipWidth] = React16.useState(0);
9507
- React16.useEffect(() => {
9539
+ const brickRef = React17.useRef(null);
9540
+ const [brickWidth, setBrickWidth] = React17.useState(0);
9541
+ const [chipWidth, setChipWidth] = React17.useState(0);
9542
+ React17.useEffect(() => {
9508
9543
  const el = brickRef.current;
9509
9544
  if (!el) return;
9510
9545
  const measure = () => {
@@ -9523,7 +9558,7 @@ function QuickActionWall({
9523
9558
  return () => ro.disconnect();
9524
9559
  }, [chips]);
9525
9560
  const padTarget = rows ? void 0 : minChips;
9526
- const track = React16.useMemo(() => {
9561
+ const track = React17.useMemo(() => {
9527
9562
  if (!padTarget || chips.length === 0 || chips.length >= padTarget) return chips;
9528
9563
  const repeats = Math.ceil(padTarget / chips.length);
9529
9564
  return Array.from(
@@ -9531,7 +9566,7 @@ function QuickActionWall({
9531
9566
  (_, r) => r === 0 ? chips : chips.map((chip) => ({ ...chip, id: `${chip.id}__r${r}` }))
9532
9567
  ).flat();
9533
9568
  }, [chips, padTarget]);
9534
- const renderSkeletons = (count, offset2 = 0) => Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx45(
9569
+ const renderSkeletons = (count, offset2 = 0) => Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx46(
9535
9570
  QuickActionChipSkeleton,
9536
9571
  {
9537
9572
  lozenge: lozenges,
@@ -9539,7 +9574,7 @@ function QuickActionWall({
9539
9574
  },
9540
9575
  i
9541
9576
  ));
9542
- const renderChipNodes = (list) => list.map((chip) => /* @__PURE__ */ jsx45(
9577
+ const renderChipNodes = (list) => list.map((chip) => /* @__PURE__ */ jsx46(
9543
9578
  QuickActionChipFromData,
9544
9579
  {
9545
9580
  chip,
@@ -9573,7 +9608,7 @@ function QuickActionWall({
9573
9608
  });
9574
9609
  const skelPerRow = Math.ceil(skeletonCount / stackRows);
9575
9610
  return /* @__PURE__ */ jsxs34("div", { ref: brickRef, className: cn("relative flex flex-col overflow-hidden", className), style: { gap }, children: [
9576
- rowLists.map((list, r) => /* @__PURE__ */ jsx45(
9611
+ rowLists.map((list, r) => /* @__PURE__ */ jsx46(
9577
9612
  MarqueeWall,
9578
9613
  {
9579
9614
  mode,
@@ -9590,10 +9625,10 @@ function QuickActionWall({
9590
9625
  },
9591
9626
  r
9592
9627
  )),
9593
- mode === "animated" && /* @__PURE__ */ jsx45(MarqueeWallFades, { fade, fadeColor, fadeSize })
9628
+ mode === "animated" && /* @__PURE__ */ jsx46(MarqueeWallFades, { fade, fadeColor, fadeSize })
9594
9629
  ] });
9595
9630
  }
9596
- return /* @__PURE__ */ jsx45(
9631
+ return /* @__PURE__ */ jsx46(
9597
9632
  MarqueeWall,
9598
9633
  {
9599
9634
  mode,
@@ -9617,7 +9652,7 @@ function QuickActionWall({
9617
9652
  }
9618
9653
 
9619
9654
  // src/components/chat/quick-action-marquee.tsx
9620
- import { jsx as jsx46 } from "react/jsx-runtime";
9655
+ import { jsx as jsx47 } from "react/jsx-runtime";
9621
9656
  function QuickActionMarquee({
9622
9657
  items,
9623
9658
  mode = "animated",
@@ -9629,7 +9664,7 @@ function QuickActionMarquee({
9629
9664
  sync,
9630
9665
  className
9631
9666
  }) {
9632
- const chips = React17.useMemo(
9667
+ const chips = React18.useMemo(
9633
9668
  () => items.map((item) => ({
9634
9669
  id: item.id,
9635
9670
  label: item.label,
@@ -9639,7 +9674,7 @@ function QuickActionMarquee({
9639
9674
  [items, onSelect]
9640
9675
  );
9641
9676
  if (items.length === 0) return null;
9642
- return /* @__PURE__ */ jsx46(
9677
+ return /* @__PURE__ */ jsx47(
9643
9678
  QuickActionWall,
9644
9679
  {
9645
9680
  chips,
@@ -9659,16 +9694,16 @@ function QuickActionMarquee({
9659
9694
 
9660
9695
  // src/components/chat/chat-ticket-list.tsx
9661
9696
  init_cn();
9662
- import * as React20 from "react";
9697
+ import * as React21 from "react";
9663
9698
 
9664
9699
  // src/components/ui/scroll-fade.tsx
9665
9700
  init_cn();
9666
- import * as React18 from "react";
9667
- import { jsx as jsx47, jsxs as jsxs35 } from "react/jsx-runtime";
9701
+ import * as React19 from "react";
9702
+ import { jsx as jsx48, jsxs as jsxs35 } from "react/jsx-runtime";
9668
9703
  function useScrollFade(axis = "vertical") {
9669
- const scrollRef = React18.useRef(null);
9670
- const [fade, setFade] = React18.useState({ top: false, bottom: false, left: false, right: false });
9671
- const update = React18.useCallback(() => {
9704
+ const scrollRef = React19.useRef(null);
9705
+ const [fade, setFade] = React19.useState({ top: false, bottom: false, left: false, right: false });
9706
+ const update = React19.useCallback(() => {
9672
9707
  const el = scrollRef.current;
9673
9708
  if (!el) return;
9674
9709
  setFade((prev) => {
@@ -9681,7 +9716,7 @@ function useScrollFade(axis = "vertical") {
9681
9716
  return prev.top === top && prev.bottom === bottom && prev.left === left && prev.right === right ? prev : { top, bottom, left, right };
9682
9717
  });
9683
9718
  }, [axis]);
9684
- React18.useLayoutEffect(() => {
9719
+ React19.useLayoutEffect(() => {
9685
9720
  update();
9686
9721
  const el = scrollRef.current;
9687
9722
  if (!el) return;
@@ -9722,7 +9757,7 @@ function ScrollFadeOverlay({
9722
9757
  className
9723
9758
  }) {
9724
9759
  const isVertical = edge === "top" || edge === "bottom";
9725
- return /* @__PURE__ */ jsx47(
9760
+ return /* @__PURE__ */ jsx48(
9726
9761
  "div",
9727
9762
  {
9728
9763
  "aria-hidden": true,
@@ -9755,7 +9790,7 @@ function ScrollShadow({
9755
9790
  const vertical = axis !== "horizontal";
9756
9791
  const horizontal = axis !== "vertical";
9757
9792
  return /* @__PURE__ */ jsxs35("div", { className: cn("relative", className), ...rest, children: [
9758
- /* @__PURE__ */ jsx47(
9793
+ /* @__PURE__ */ jsx48(
9759
9794
  "div",
9760
9795
  {
9761
9796
  ref: scrollRef,
@@ -9764,19 +9799,19 @@ function ScrollShadow({
9764
9799
  children
9765
9800
  }
9766
9801
  ),
9767
- vertical && /* @__PURE__ */ jsx47(ScrollFadeOverlay, { edge: "top", visible: fadeTop, color, className: overlayClassName }),
9768
- vertical && /* @__PURE__ */ jsx47(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, color, className: overlayClassName }),
9769
- horizontal && /* @__PURE__ */ jsx47(ScrollFadeOverlay, { edge: "left", visible: fadeLeft, color, className: overlayClassName }),
9770
- horizontal && /* @__PURE__ */ jsx47(ScrollFadeOverlay, { edge: "right", visible: fadeRight, color, className: overlayClassName })
9802
+ vertical && /* @__PURE__ */ jsx48(ScrollFadeOverlay, { edge: "top", visible: fadeTop, color, className: overlayClassName }),
9803
+ vertical && /* @__PURE__ */ jsx48(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, color, className: overlayClassName }),
9804
+ horizontal && /* @__PURE__ */ jsx48(ScrollFadeOverlay, { edge: "left", visible: fadeLeft, color, className: overlayClassName }),
9805
+ horizontal && /* @__PURE__ */ jsx48(ScrollFadeOverlay, { edge: "right", visible: fadeRight, color, className: overlayClassName })
9771
9806
  ] });
9772
9807
  }
9773
9808
 
9774
9809
  // src/components/chat/entity-cards/chat-ticket-item.tsx
9775
9810
  init_cn();
9776
- import * as React19 from "react";
9811
+ import * as React20 from "react";
9777
9812
  import { ChevronRight } from "lucide-react";
9778
- import { jsx as jsx48, jsxs as jsxs36 } from "react/jsx-runtime";
9779
- var ChatTicketItem = React19.forwardRef(
9813
+ import { jsx as jsx49, jsxs as jsxs36 } from "react/jsx-runtime";
9814
+ var ChatTicketItem = React20.forwardRef(
9780
9815
  ({ className, ticket, onClick, isLoading = false, ...props }, ref) => {
9781
9816
  if (isLoading) {
9782
9817
  return /* @__PURE__ */ jsxs36(
@@ -9790,11 +9825,11 @@ var ChatTicketItem = React19.forwardRef(
9790
9825
  ),
9791
9826
  children: [
9792
9827
  /* @__PURE__ */ jsxs36("div", { className: "flex flex-col justify-center flex-1 min-w-0 gap-1", children: [
9793
- /* @__PURE__ */ jsx48(Skeleton, { className: "h-5 w-1/2" }),
9794
- /* @__PURE__ */ jsx48(Skeleton, { className: "h-4 w-1/3" })
9828
+ /* @__PURE__ */ jsx49(Skeleton, { className: "h-5 w-1/2" }),
9829
+ /* @__PURE__ */ jsx49(Skeleton, { className: "h-4 w-1/3" })
9795
9830
  ] }),
9796
- /* @__PURE__ */ jsx48(Skeleton, { className: "h-8 w-20 rounded-r-md shrink-0" }),
9797
- /* @__PURE__ */ jsx48(Skeleton, { className: "size-12 rounded-md shrink-0" })
9831
+ /* @__PURE__ */ jsx49(Skeleton, { className: "h-8 w-20 rounded-r-md shrink-0" }),
9832
+ /* @__PURE__ */ jsx49(Skeleton, { className: "size-12 rounded-md shrink-0" })
9798
9833
  ]
9799
9834
  }
9800
9835
  );
@@ -9830,7 +9865,7 @@ var ChatTicketItem = React19.forwardRef(
9830
9865
  ...props,
9831
9866
  children: [
9832
9867
  /* @__PURE__ */ jsxs36("div", { className: "flex flex-col justify-center flex-1 min-w-0 text-left", children: [
9833
- /* @__PURE__ */ jsx48(
9868
+ /* @__PURE__ */ jsx49(
9834
9869
  "p",
9835
9870
  {
9836
9871
  className: cn(
@@ -9841,19 +9876,19 @@ var ChatTicketItem = React19.forwardRef(
9841
9876
  children: ticket.title
9842
9877
  }
9843
9878
  ),
9844
- subtitle && /* @__PURE__ */ jsx48("p", { className: "text-h6 text-ods-text-secondary truncate", title: subtitle, children: subtitle })
9879
+ subtitle && /* @__PURE__ */ jsx49("p", { className: "text-h6 text-ods-text-secondary truncate", title: subtitle, children: subtitle })
9845
9880
  ] }),
9846
- ticket.linkedTaskLabel && /* @__PURE__ */ jsx48(
9881
+ ticket.linkedTaskLabel && /* @__PURE__ */ jsx49(
9847
9882
  Tag,
9848
9883
  {
9849
9884
  label: ticket.linkedTaskLabel,
9850
9885
  variant: "outline",
9851
- icon: /* @__PURE__ */ jsx48(WrenchIcon, { size: 14, color: "var(--color-text-secondary)" }),
9886
+ icon: /* @__PURE__ */ jsx49(WrenchIcon, { size: 14, color: "var(--color-text-secondary)" }),
9852
9887
  className: "shrink-0 hidden sm:inline-flex"
9853
9888
  }
9854
9889
  ),
9855
- (statusTagProps.status || statusTagProps.label) && /* @__PURE__ */ jsx48(TicketStatusTag, { ...statusTagProps }),
9856
- /* @__PURE__ */ jsx48("div", { className: "flex items-center justify-center shrink-0 size-12 rounded-md bg-ods-card border border-ods-border", children: /* @__PURE__ */ jsx48(ChevronRight, { className: "size-6 text-ods-text-secondary" }) })
9890
+ (statusTagProps.status || statusTagProps.label) && /* @__PURE__ */ jsx49(TicketStatusTag, { ...statusTagProps }),
9891
+ /* @__PURE__ */ jsx49("div", { className: "flex items-center justify-center shrink-0 size-12 rounded-md bg-ods-card border border-ods-border", children: /* @__PURE__ */ jsx49(ChevronRight, { className: "size-6 text-ods-text-secondary" }) })
9857
9892
  ]
9858
9893
  }
9859
9894
  );
@@ -9862,22 +9897,22 @@ var ChatTicketItem = React19.forwardRef(
9862
9897
  ChatTicketItem.displayName = "ChatTicketItem";
9863
9898
 
9864
9899
  // src/components/chat/chat-ticket-list.tsx
9865
- import { jsx as jsx49, jsxs as jsxs37 } from "react/jsx-runtime";
9866
- var ChatTicketList = React20.forwardRef(
9900
+ import { jsx as jsx50, jsxs as jsxs37 } from "react/jsx-runtime";
9901
+ var ChatTicketList = React21.forwardRef(
9867
9902
  ({ className, tickets, onTicketClick, isLoading = false, skeletonCount = 5, ...props }, ref) => {
9868
9903
  const { scrollRef, fadeTop, fadeBottom, update: updateFade } = useScrollFade();
9869
9904
  if (isLoading) {
9870
9905
  return /* @__PURE__ */ jsxs37("div", { ref, className: cn("flex flex-col gap-2 min-h-0", className), ...props, children: [
9871
- /* @__PURE__ */ jsx49("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
9872
- /* @__PURE__ */ jsx49("div", { className: "border border-ods-border rounded-md flex-1 min-h-0 overflow-hidden", children: Array.from({ length: skeletonCount }).map((_, i) => (
9906
+ /* @__PURE__ */ jsx50("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
9907
+ /* @__PURE__ */ jsx50("div", { className: "border border-ods-border rounded-md flex-1 min-h-0 overflow-hidden", children: Array.from({ length: skeletonCount }).map((_, i) => (
9873
9908
  // eslint-disable-next-line react/no-array-index-key
9874
- /* @__PURE__ */ jsx49(ChatTicketItem, { isLoading: true }, i)
9909
+ /* @__PURE__ */ jsx50(ChatTicketItem, { isLoading: true }, i)
9875
9910
  )) })
9876
9911
  ] });
9877
9912
  }
9878
9913
  if (tickets.length === 0) return null;
9879
9914
  return /* @__PURE__ */ jsxs37("div", { ref, className: cn("flex flex-col gap-2 min-h-0", className), ...props, children: [
9880
- /* @__PURE__ */ jsx49("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
9915
+ /* @__PURE__ */ jsx50("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
9881
9916
  /* @__PURE__ */ jsxs37(
9882
9917
  "div",
9883
9918
  {
@@ -9887,7 +9922,7 @@ var ChatTicketList = React20.forwardRef(
9887
9922
  !fadeBottom && "border-b rounded-b-md"
9888
9923
  ),
9889
9924
  children: [
9890
- /* @__PURE__ */ jsx49("div", { ref: scrollRef, className: "overflow-y-auto overscroll-contain h-full", onScroll: updateFade, children: tickets.map((ticket) => /* @__PURE__ */ jsx49(
9925
+ /* @__PURE__ */ jsx50("div", { ref: scrollRef, className: "overflow-y-auto overscroll-contain h-full", onScroll: updateFade, children: tickets.map((ticket) => /* @__PURE__ */ jsx50(
9891
9926
  ChatTicketItem,
9892
9927
  {
9893
9928
  ticket,
@@ -9895,8 +9930,8 @@ var ChatTicketList = React20.forwardRef(
9895
9930
  },
9896
9931
  ticket.id
9897
9932
  )) }),
9898
- /* @__PURE__ */ jsx49(ScrollFadeOverlay, { edge: "top", visible: fadeTop }),
9899
- /* @__PURE__ */ jsx49(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom })
9933
+ /* @__PURE__ */ jsx50(ScrollFadeOverlay, { edge: "top", visible: fadeTop }),
9934
+ /* @__PURE__ */ jsx50(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom })
9900
9935
  ]
9901
9936
  }
9902
9937
  )
@@ -9907,7 +9942,7 @@ ChatTicketList.displayName = "ChatTicketList";
9907
9942
 
9908
9943
  // src/components/chat/mingo-onboarding-card-skeleton.tsx
9909
9944
  init_cn();
9910
- import { jsx as jsx50, jsxs as jsxs38 } from "react/jsx-runtime";
9945
+ import { jsx as jsx51, jsxs as jsxs38 } from "react/jsx-runtime";
9911
9946
  function MingoOnboardingCardSkeleton({
9912
9947
  titleWidth = "w-32",
9913
9948
  slashWidth = "w-20",
@@ -9916,7 +9951,7 @@ function MingoOnboardingCardSkeleton({
9916
9951
  className
9917
9952
  }) {
9918
9953
  const hasChips = chipWidths.length > 0;
9919
- return /* @__PURE__ */ jsx50(
9954
+ return /* @__PURE__ */ jsx51(
9920
9955
  "div",
9921
9956
  {
9922
9957
  className: cn(
@@ -9925,16 +9960,16 @@ function MingoOnboardingCardSkeleton({
9925
9960
  ),
9926
9961
  children: /* @__PURE__ */ jsxs38("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)] w-full", children: [
9927
9962
  /* @__PURE__ */ jsxs38("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] w-full", children: [
9928
- /* @__PURE__ */ jsx50(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
9929
- /* @__PURE__ */ jsx50(Skeleton, { className: cn("h-3.5 rounded-sm", titleWidth) }),
9930
- /* @__PURE__ */ jsx50("span", { className: "flex-1" }),
9931
- /* @__PURE__ */ jsx50(Skeleton, { className: cn("h-3.5 rounded-sm shrink-0", slashWidth) })
9963
+ /* @__PURE__ */ jsx51(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
9964
+ /* @__PURE__ */ jsx51(Skeleton, { className: cn("h-3.5 rounded-sm", titleWidth) }),
9965
+ /* @__PURE__ */ jsx51("span", { className: "flex-1" }),
9966
+ /* @__PURE__ */ jsx51(Skeleton, { className: cn("h-3.5 rounded-sm shrink-0", slashWidth) })
9932
9967
  ] }),
9933
9968
  /* @__PURE__ */ jsxs38("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
9934
- /* @__PURE__ */ jsx50(Skeleton, { className: "h-3.5 w-full rounded-sm" }),
9935
- descriptionLines === 2 ? /* @__PURE__ */ jsx50(Skeleton, { className: "h-3.5 w-[70%] rounded-sm" }) : null
9969
+ /* @__PURE__ */ jsx51(Skeleton, { className: "h-3.5 w-full rounded-sm" }),
9970
+ descriptionLines === 2 ? /* @__PURE__ */ jsx51(Skeleton, { className: "h-3.5 w-[70%] rounded-sm" }) : null
9936
9971
  ] }),
9937
- hasChips ? /* @__PURE__ */ jsx50("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: chipWidths.map((w, i) => /* @__PURE__ */ jsx50(Skeleton, { className: cn("h-7 rounded-md", w) }, i)) }) : null
9972
+ hasChips ? /* @__PURE__ */ jsx51("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: chipWidths.map((w, i) => /* @__PURE__ */ jsx51(Skeleton, { className: cn("h-7 rounded-md", w) }, i)) }) : null
9938
9973
  ] })
9939
9974
  }
9940
9975
  );
@@ -9943,7 +9978,7 @@ function MingoOnboardingListSkeleton({
9943
9978
  rows = 6,
9944
9979
  className
9945
9980
  }) {
9946
- return /* @__PURE__ */ jsx50(
9981
+ return /* @__PURE__ */ jsx51(
9947
9982
  "div",
9948
9983
  {
9949
9984
  role: "status",
@@ -9955,7 +9990,7 @@ function MingoOnboardingListSkeleton({
9955
9990
  ),
9956
9991
  children: Array.from({ length: rows }).map((_, i) => {
9957
9992
  const variant = ROW_VARIANTS[i % ROW_VARIANTS.length];
9958
- return /* @__PURE__ */ jsx50(
9993
+ return /* @__PURE__ */ jsx51(
9959
9994
  MingoOnboardingCardSkeleton,
9960
9995
  {
9961
9996
  titleWidth: variant.titleWidth,
@@ -9979,16 +10014,16 @@ var ROW_VARIANTS = [
9979
10014
 
9980
10015
  // src/components/chat/mingo-welcome.tsx
9981
10016
  init_cn();
9982
- import * as React23 from "react";
10017
+ import * as React24 from "react";
9983
10018
 
9984
10019
  // src/components/chat/mingo-chat-history.tsx
9985
10020
  init_cn();
9986
- import * as React21 from "react";
10021
+ import * as React23 from "react";
9987
10022
  init_button2();
9988
10023
 
9989
10024
  // src/components/chat/chat-list-empty-state.tsx
9990
10025
  init_cn();
9991
- import { jsx as jsx51, jsxs as jsxs39 } from "react/jsx-runtime";
10026
+ import { jsx as jsx52, jsxs as jsxs39 } from "react/jsx-runtime";
9992
10027
  function ChatListEmptyState({
9993
10028
  icon,
9994
10029
  title,
@@ -10003,10 +10038,10 @@ function ChatListEmptyState({
10003
10038
  className
10004
10039
  ),
10005
10040
  children: [
10006
- /* @__PURE__ */ jsx51("span", { className: "flex size-6 shrink-0 items-center justify-center", children: icon }),
10041
+ /* @__PURE__ */ jsx52("span", { className: "flex size-6 shrink-0 items-center justify-center", children: icon }),
10007
10042
  /* @__PURE__ */ jsxs39("div", { className: "flex flex-col", children: [
10008
- /* @__PURE__ */ jsx51("p", { className: "text-h4", children: title }),
10009
- description && /* @__PURE__ */ jsx51("p", { className: "text-h6", children: description })
10043
+ /* @__PURE__ */ jsx52("p", { className: "text-h4", children: title }),
10044
+ description && /* @__PURE__ */ jsx52("p", { className: "text-h6", children: description })
10010
10045
  ] })
10011
10046
  ]
10012
10047
  }
@@ -10014,7 +10049,7 @@ function ChatListEmptyState({
10014
10049
  }
10015
10050
 
10016
10051
  // src/components/chat/mingo-chat-history.tsx
10017
- import { jsx as jsx52, jsxs as jsxs40 } from "react/jsx-runtime";
10052
+ import { jsx as jsx53, jsxs as jsxs40 } from "react/jsx-runtime";
10018
10053
  function dialogTime(d) {
10019
10054
  if (!d.timestamp) return null;
10020
10055
  const t = typeof d.timestamp === "string" ? Date.parse(d.timestamp) : d.timestamp.getTime();
@@ -10055,7 +10090,7 @@ function MingoChatHistoryRow({
10055
10090
  const hasMenu = !!onRequestRename || !!onRequestArchive;
10056
10091
  const owner = dialog.owner;
10057
10092
  const hasAvatar = !!(owner?.name || owner?.avatarUrl);
10058
- const [menuOpen, setMenuOpen] = React21.useState(false);
10093
+ const [menuOpen, setMenuOpen] = React23.useState(false);
10059
10094
  const menuItems = [
10060
10095
  onRequestRename && {
10061
10096
  id: "rename",
@@ -10079,7 +10114,7 @@ function MingoChatHistoryRow({
10079
10114
  isActive ? "bg-ods-open-yellow-secondary" : "bg-ods-bg hover:bg-ods-bg-hover"
10080
10115
  ),
10081
10116
  children: [
10082
- isActive ? /* @__PURE__ */ jsx52(
10117
+ isActive ? /* @__PURE__ */ jsx53(
10083
10118
  "span",
10084
10119
  {
10085
10120
  "aria-hidden": true,
@@ -10100,8 +10135,8 @@ function MingoChatHistoryRow({
10100
10135
  },
10101
10136
  className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)] p-[var(--spacing-system-s)] cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent",
10102
10137
  children: [
10103
- unread > 0 ? /* @__PURE__ */ jsx52("span", { className: "flex h-8 min-w-8 shrink-0 items-center justify-center rounded-md bg-ods-accent px-[var(--spacing-system-xsf)] text-h5 text-ods-text-on-accent", children: unread > 99 ? "99+" : unread }) : null,
10104
- /* @__PURE__ */ jsx52(
10138
+ unread > 0 ? /* @__PURE__ */ jsx53("span", { className: "flex h-8 min-w-8 shrink-0 items-center justify-center rounded-md bg-ods-accent px-[var(--spacing-system-xsf)] text-h5 text-ods-text-on-accent", children: unread > 99 ? "99+" : unread }) : null,
10139
+ /* @__PURE__ */ jsx53(
10105
10140
  "span",
10106
10141
  {
10107
10142
  className: cn(
@@ -10134,7 +10169,7 @@ function MingoChatHistoryRow({
10134
10169
  // is open. Hidden on mobile — it's a hover affordance. `peer/menu`
10135
10170
  // so the avatar layer (a later sibling) can fade when the trigger
10136
10171
  // holds keyboard focus.
10137
- /* @__PURE__ */ jsx52(
10172
+ /* @__PURE__ */ jsx53(
10138
10173
  "span",
10139
10174
  {
10140
10175
  onClick: (e) => e.stopPropagation(),
@@ -10142,7 +10177,7 @@ function MingoChatHistoryRow({
10142
10177
  "peer/menu absolute inset-0 transition-opacity max-md:hidden",
10143
10178
  menuOpen ? "opacity-100" : "opacity-0 group-hover/row:opacity-100 focus-within:opacity-100"
10144
10179
  ),
10145
- children: /* @__PURE__ */ jsx52(
10180
+ children: /* @__PURE__ */ jsx53(
10146
10181
  ActionsMenuDropdown,
10147
10182
  {
10148
10183
  triggerAriaLabel: "Chat actions",
@@ -10150,14 +10185,14 @@ function MingoChatHistoryRow({
10150
10185
  open: menuOpen,
10151
10186
  onOpenChange: setMenuOpen,
10152
10187
  onCloseAutoFocus: (e) => e.preventDefault(),
10153
- customTrigger: /* @__PURE__ */ jsx52(
10188
+ customTrigger: /* @__PURE__ */ jsx53(
10154
10189
  Button,
10155
10190
  {
10156
10191
  variant: "transparent",
10157
10192
  size: "icon",
10158
10193
  "aria-label": "Chat actions",
10159
10194
  className: "h-full md:h-full w-full rounded-none p-0 text-ods-text-secondary hover:text-ods-text-primary",
10160
- children: /* @__PURE__ */ jsx52(Ellipsis01Icon, {})
10195
+ children: /* @__PURE__ */ jsx53(Ellipsis01Icon, {})
10161
10196
  }
10162
10197
  )
10163
10198
  }
@@ -10169,7 +10204,7 @@ function MingoChatHistoryRow({
10169
10204
  // Avatar layer — clicks fall through to row selection (it covers
10170
10205
  // the cell whenever the menu trigger is faded out). On desktop it
10171
10206
  // fades for the menu swap; on mobile it's always shown.
10172
- /* @__PURE__ */ jsx52(
10207
+ /* @__PURE__ */ jsx53(
10173
10208
  "span",
10174
10209
  {
10175
10210
  onClick: () => onSelect?.(dialog.id),
@@ -10178,7 +10213,7 @@ function MingoChatHistoryRow({
10178
10213
  "absolute inset-0 flex cursor-pointer items-center justify-center transition-opacity",
10179
10214
  hasMenu && (menuOpen ? "opacity-0 pointer-events-none" : "md:group-hover/row:opacity-0 md:group-hover/row:pointer-events-none md:peer-[:focus-within]/menu:opacity-0 md:peer-[:focus-within]/menu:pointer-events-none")
10180
10215
  ),
10181
- children: /* @__PURE__ */ jsx52(
10216
+ children: /* @__PURE__ */ jsx53(
10182
10217
  SquareAvatar,
10183
10218
  {
10184
10219
  variant: "round",
@@ -10207,7 +10242,7 @@ function MingoChatHistorySkeleton({
10207
10242
  ["w-3/5", "w-4/5", "w-2/5", "w-3/4"],
10208
10243
  ["w-1/2", "w-2/3"]
10209
10244
  ];
10210
- return /* @__PURE__ */ jsx52(
10245
+ return /* @__PURE__ */ jsx53(
10211
10246
  "div",
10212
10247
  {
10213
10248
  "aria-hidden": true,
@@ -10216,12 +10251,12 @@ function MingoChatHistorySkeleton({
10216
10251
  className
10217
10252
  ),
10218
10253
  children: groups.map((widths, g) => /* @__PURE__ */ jsxs40("div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
10219
- /* @__PURE__ */ jsx52("div", { className: "h-3 w-16 animate-pulse rounded bg-ods-border" }),
10220
- /* @__PURE__ */ jsx52("div", { className: "overflow-hidden rounded-md border border-ods-border", children: widths.map((w, i) => /* @__PURE__ */ jsx52(
10254
+ /* @__PURE__ */ jsx53("div", { className: "h-3 w-16 animate-pulse rounded bg-ods-border" }),
10255
+ /* @__PURE__ */ jsx53("div", { className: "overflow-hidden rounded-md border border-ods-border", children: widths.map((w, i) => /* @__PURE__ */ jsx53(
10221
10256
  "div",
10222
10257
  {
10223
10258
  className: "flex h-12 items-center bg-ods-bg border-b border-ods-border px-[var(--spacing-system-s)] last:border-b-0",
10224
- children: /* @__PURE__ */ jsx52("div", { className: cn("h-4 animate-pulse rounded bg-ods-border", w) })
10259
+ children: /* @__PURE__ */ jsx53("div", { className: cn("h-4 animate-pulse rounded bg-ods-border", w) })
10225
10260
  },
10226
10261
  i
10227
10262
  )) })
@@ -10241,16 +10276,16 @@ function MingoChatHistory({
10241
10276
  onLoadMore,
10242
10277
  className
10243
10278
  }) {
10244
- const groups = React21.useMemo(() => groupDialogs(dialogs), [dialogs]);
10279
+ const groups = React23.useMemo(() => groupDialogs(dialogs), [dialogs]);
10245
10280
  const noSearchResults = groups.length === 0 && !!searchQuery?.trim();
10246
10281
  const { scrollRef, fadeTop, fadeBottom, update: updateFade } = useScrollFade();
10247
- const sentinelRef = React21.useRef(null);
10248
- const onLoadMoreRef = React21.useRef(onLoadMore);
10282
+ const sentinelRef = React23.useRef(null);
10283
+ const onLoadMoreRef = React23.useRef(onLoadMore);
10249
10284
  onLoadMoreRef.current = onLoadMore;
10250
- const isLoadingMoreRef = React21.useRef(isLoadingMore);
10285
+ const isLoadingMoreRef = React23.useRef(isLoadingMore);
10251
10286
  isLoadingMoreRef.current = isLoadingMore;
10252
10287
  const dialogCount = dialogs.length;
10253
- React21.useEffect(() => {
10288
+ React23.useEffect(() => {
10254
10289
  const root = scrollRef.current;
10255
10290
  const sentinel = sentinelRef.current;
10256
10291
  if (!root || !sentinel || !hasMore || typeof IntersectionObserver === "undefined")
@@ -10266,7 +10301,7 @@ function MingoChatHistory({
10266
10301
  io.observe(sentinel);
10267
10302
  return () => io.disconnect();
10268
10303
  }, [hasMore, isLoadingMore, dialogCount]);
10269
- return /* @__PURE__ */ jsx52("div", { className: cn("relative flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)]", className), children: /* @__PURE__ */ jsxs40("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
10304
+ return /* @__PURE__ */ jsx53("div", { className: cn("relative flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)]", className), children: /* @__PURE__ */ jsxs40("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
10270
10305
  /* @__PURE__ */ jsxs40(
10271
10306
  "div",
10272
10307
  {
@@ -10277,10 +10312,10 @@ function MingoChatHistory({
10277
10312
  noSearchResults ? (
10278
10313
  // No search matches — same centred glyph + title + caption layout as
10279
10314
  // the other chat-list empty states (Figma 113:60939).
10280
- /* @__PURE__ */ jsx52(
10315
+ /* @__PURE__ */ jsx53(
10281
10316
  ChatListEmptyState,
10282
10317
  {
10283
- icon: /* @__PURE__ */ jsx52(SearchXmarkIcon, { size: 24 }),
10318
+ icon: /* @__PURE__ */ jsx53(SearchXmarkIcon, { size: 24 }),
10284
10319
  title: "No Chats Found",
10285
10320
  description: "Try a different search term"
10286
10321
  }
@@ -10290,8 +10325,8 @@ function MingoChatHistory({
10290
10325
  {
10291
10326
  className: "flex flex-col gap-[var(--spacing-system-xxs)]",
10292
10327
  children: [
10293
- /* @__PURE__ */ jsx52("p", { className: "text-h5 text-ods-text-secondary", children: group.label }),
10294
- /* @__PURE__ */ jsx52("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.items.map((dialog) => /* @__PURE__ */ jsx52(
10328
+ /* @__PURE__ */ jsx53("p", { className: "text-h5 text-ods-text-secondary", children: group.label }),
10329
+ /* @__PURE__ */ jsx53("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.items.map((dialog) => /* @__PURE__ */ jsx53(
10295
10330
  MingoChatHistoryRow,
10296
10331
  {
10297
10332
  dialog,
@@ -10306,18 +10341,18 @@ function MingoChatHistory({
10306
10341
  },
10307
10342
  group.key
10308
10343
  )),
10309
- hasMore ? /* @__PURE__ */ jsx52("div", { ref: sentinelRef, className: "h-px shrink-0" }) : null
10344
+ hasMore ? /* @__PURE__ */ jsx53("div", { ref: sentinelRef, className: "h-px shrink-0" }) : null
10310
10345
  ]
10311
10346
  }
10312
10347
  ),
10313
- /* @__PURE__ */ jsx52(ScrollFadeOverlay, { edge: "top", visible: fadeTop, color: "var(--color-bg-card)", className: "h-12" }),
10314
- /* @__PURE__ */ jsx52(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, color: "var(--color-bg-card)", className: "h-12" })
10348
+ /* @__PURE__ */ jsx53(ScrollFadeOverlay, { edge: "top", visible: fadeTop, color: "var(--color-bg-card)", className: "h-12" }),
10349
+ /* @__PURE__ */ jsx53(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, color: "var(--color-bg-card)", className: "h-12" })
10315
10350
  ] }) });
10316
10351
  }
10317
10352
 
10318
10353
  // src/components/chat/mingo-welcome.tsx
10319
10354
  init_button2();
10320
- import { Fragment as Fragment13, jsx as jsx53, jsxs as jsxs41 } from "react/jsx-runtime";
10355
+ import { Fragment as Fragment13, jsx as jsx54, jsxs as jsxs41 } from "react/jsx-runtime";
10321
10356
  var DEFAULT_SUBTITLE = "Ready to help with your technical tasks. What can I do for you?";
10322
10357
  var DEFAULT_PROMO = {
10323
10358
  title: "New to OpenFrame?",
@@ -10344,8 +10379,8 @@ function MingoWelcome({
10344
10379
  }) {
10345
10380
  const heading = title ?? "Hey, I'm Mingo";
10346
10381
  const resolvedPromo = hasExistingChats ? null : promo === void 0 ? onStartGuideChat ? DEFAULT_PROMO : null : promo;
10347
- const [promoDismissed, setPromoDismissed] = React23.useState(false);
10348
- React23.useEffect(() => {
10382
+ const [promoDismissed, setPromoDismissed] = React24.useState(false);
10383
+ React24.useEffect(() => {
10349
10384
  if (!resolvedPromo) return;
10350
10385
  try {
10351
10386
  const store = promoStorage === "session" ? window.sessionStorage : window.localStorage;
@@ -10353,7 +10388,7 @@ function MingoWelcome({
10353
10388
  } catch {
10354
10389
  }
10355
10390
  }, [resolvedPromo, promoStorage, promoStorageKey]);
10356
- const dismissPromo = React23.useCallback(() => {
10391
+ const dismissPromo = React24.useCallback(() => {
10357
10392
  setPromoDismissed(true);
10358
10393
  try {
10359
10394
  const store = promoStorage === "session" ? window.sessionStorage : window.localStorage;
@@ -10375,30 +10410,30 @@ function MingoWelcome({
10375
10410
  ),
10376
10411
  children: [
10377
10412
  dialogHistory ?? (loadError ? /* @__PURE__ */ jsxs41("div", { className: "flex flex-1 min-h-0 flex-col items-center justify-center gap-[var(--spacing-system-m)] text-center", children: [
10378
- /* @__PURE__ */ jsx53(AlertCircleIcon, { className: "h-8 w-8 text-ods-text-secondary shrink-0" }),
10413
+ /* @__PURE__ */ jsx54(AlertCircleIcon, { className: "h-8 w-8 text-ods-text-secondary shrink-0" }),
10379
10414
  /* @__PURE__ */ jsxs41("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
10380
- /* @__PURE__ */ jsx53("p", { className: "text-h4 text-ods-text-primary", children: "Couldn\u2019t load your chats" }),
10381
- /* @__PURE__ */ jsx53("p", { className: "text-body-sm text-ods-text-secondary", children: "Something went wrong reaching the server. Check your connection and try again." })
10415
+ /* @__PURE__ */ jsx54("p", { className: "text-h4 text-ods-text-primary", children: "Couldn\u2019t load your chats" }),
10416
+ /* @__PURE__ */ jsx54("p", { className: "text-body-sm text-ods-text-secondary", children: "Something went wrong reaching the server. Check your connection and try again." })
10382
10417
  ] }),
10383
- onRetry && /* @__PURE__ */ jsx53(
10418
+ onRetry && /* @__PURE__ */ jsx54(
10384
10419
  Button,
10385
10420
  {
10386
10421
  variant: "outline",
10387
10422
  size: "small",
10388
- leftIcon: /* @__PURE__ */ jsx53(Refresh01RightIcon, {}),
10423
+ leftIcon: /* @__PURE__ */ jsx54(Refresh01RightIcon, {}),
10389
10424
  onClick: onRetry,
10390
10425
  children: "Try again"
10391
10426
  }
10392
10427
  )
10393
- ] }) : isLoadingHistory ? /* @__PURE__ */ jsx53(MingoChatHistorySkeleton, {}) : /* @__PURE__ */ jsx53(Fragment13, { children: /* @__PURE__ */ jsxs41("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
10394
- /* @__PURE__ */ jsx53(
10428
+ ] }) : isLoadingHistory ? /* @__PURE__ */ jsx54(MingoChatHistorySkeleton, {}) : /* @__PURE__ */ jsx54(Fragment13, { children: /* @__PURE__ */ jsxs41("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
10429
+ /* @__PURE__ */ jsx54(
10395
10430
  "div",
10396
10431
  {
10397
10432
  ref: scrollRef,
10398
10433
  onScroll: updateScrollFade,
10399
10434
  className: "flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)] overflow-y-auto overscroll-contain",
10400
10435
  children: /* @__PURE__ */ jsxs41("div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-l)] px-[var(--spacing-system-l)] py-[var(--spacing-system-xxl)] text-center", children: [
10401
- /* @__PURE__ */ jsx53(
10436
+ /* @__PURE__ */ jsx54(
10402
10437
  MingoIcon,
10403
10438
  {
10404
10439
  className: "h-12 w-12",
@@ -10408,45 +10443,45 @@ function MingoWelcome({
10408
10443
  }
10409
10444
  ),
10410
10445
  /* @__PURE__ */ jsxs41("div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)]", children: [
10411
- /* @__PURE__ */ jsx53("p", { className: "text-h2 text-ods-text-primary", children: heading }),
10412
- /* @__PURE__ */ jsx53("p", { className: "text-h4 text-ods-text-secondary", children: subtitle })
10446
+ /* @__PURE__ */ jsx54("p", { className: "text-h2 text-ods-text-primary", children: heading }),
10447
+ /* @__PURE__ */ jsx54("p", { className: "text-h4 text-ods-text-secondary", children: subtitle })
10413
10448
  ] })
10414
10449
  ] })
10415
10450
  }
10416
10451
  ),
10417
- /* @__PURE__ */ jsx53(ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
10418
- /* @__PURE__ */ jsx53(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
10452
+ /* @__PURE__ */ jsx54(ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
10453
+ /* @__PURE__ */ jsx54(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
10419
10454
  ] }) })),
10420
10455
  showPinnedRegion && /* @__PURE__ */ jsxs41("div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-m)]", children: [
10421
10456
  resolvedPromo && !promoDismissed && /* @__PURE__ */ jsxs41("div", { className: "relative shrink-0 flex items-center gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-m)] pr-[var(--spacing-system-xl)]", children: [
10422
- /* @__PURE__ */ jsx53("span", { className: "hidden @2xl:flex size-4 shrink-0 items-center justify-center text-ods-text-primary", children: /* @__PURE__ */ jsx53(Arrow01DownIcon, { size: 16 }) }),
10457
+ /* @__PURE__ */ jsx54("span", { className: "hidden @2xl:flex size-4 shrink-0 items-center justify-center text-ods-text-primary", children: /* @__PURE__ */ jsx54(Arrow01DownIcon, { size: 16 }) }),
10423
10458
  /* @__PURE__ */ jsxs41("div", { className: "flex min-w-0 flex-col items-start gap-1", children: [
10424
- /* @__PURE__ */ jsx53("span", { className: "text-h3 text-ods-text-primary", children: resolvedPromo.title }),
10425
- /* @__PURE__ */ jsx53("span", { className: "text-h6 text-ods-text-secondary", children: resolvedPromo.description })
10459
+ /* @__PURE__ */ jsx54("span", { className: "text-h3 text-ods-text-primary", children: resolvedPromo.title }),
10460
+ /* @__PURE__ */ jsx54("span", { className: "text-h6 text-ods-text-secondary", children: resolvedPromo.description })
10426
10461
  ] }),
10427
- /* @__PURE__ */ jsx53(
10462
+ /* @__PURE__ */ jsx54(
10428
10463
  "button",
10429
10464
  {
10430
10465
  type: "button",
10431
10466
  onClick: dismissPromo,
10432
10467
  "aria-label": "Dismiss",
10433
10468
  className: "absolute right-2 top-2 text-ods-text-secondary transition-colors hover:text-ods-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent rounded-sm",
10434
- children: /* @__PURE__ */ jsx53(XmarkIcon, { size: 16 })
10469
+ children: /* @__PURE__ */ jsx54(XmarkIcon, { size: 16 })
10435
10470
  }
10436
10471
  )
10437
10472
  ] }),
10438
10473
  (onStartGuideChat || quickActions && quickActions.length > 0) && /* @__PURE__ */ jsxs41("div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-xsf)]", children: [
10439
- onStartGuideChat && /* @__PURE__ */ jsx53(
10474
+ onStartGuideChat && /* @__PURE__ */ jsx54(
10440
10475
  QuickActionChipButton,
10441
10476
  {
10442
10477
  label: "Start Guide Chat",
10443
- icon: /* @__PURE__ */ jsx53(CompassIcon, { size: 16 }),
10478
+ icon: /* @__PURE__ */ jsx54(CompassIcon, { size: 16 }),
10444
10479
  variant: hasExistingChats ? "outline" : "primary",
10445
10480
  onSelect: onStartGuideChat,
10446
10481
  className: "self-start"
10447
10482
  }
10448
10483
  ),
10449
- quickActions && quickActions.length > 0 && /* @__PURE__ */ jsx53(
10484
+ quickActions && quickActions.length > 0 && /* @__PURE__ */ jsx54(
10450
10485
  QuickActionWall,
10451
10486
  {
10452
10487
  chips: quickActions.map((action) => ({
@@ -10478,8 +10513,8 @@ function MingoWelcome({
10478
10513
 
10479
10514
  // src/components/chat/guide-welcome.tsx
10480
10515
  init_cn();
10481
- import * as React24 from "react";
10482
- import { jsx as jsx54, jsxs as jsxs42 } from "react/jsx-runtime";
10516
+ import * as React25 from "react";
10517
+ import { jsx as jsx55, jsxs as jsxs42 } from "react/jsx-runtime";
10483
10518
  var DEFAULT_TITLE = "Guide Mode Chat";
10484
10519
  function GuideWelcome({
10485
10520
  title = DEFAULT_TITLE,
@@ -10495,7 +10530,7 @@ function GuideWelcome({
10495
10530
  className
10496
10531
  }) {
10497
10532
  const { scrollRef, fadeTop, fadeBottom, update: updateScrollFade } = useScrollFade();
10498
- const chipItems = React24.useMemo(
10533
+ const chipItems = React25.useMemo(
10499
10534
  () => quickActions.map((action) => ({
10500
10535
  id: action.id,
10501
10536
  label: action.label,
@@ -10536,8 +10571,8 @@ function GuideWelcome({
10536
10571
  icon && (icon.name || icon.url) ? (
10537
10572
  // Agent-mode identity glyph (chat-config Identity tab). Sized to
10538
10573
  // match the default Mingo mark (48px).
10539
- /* @__PURE__ */ jsx54(EntityIcon, { icon: { name: icon.name, url: icon.url, props: icon.props }, size: 48 })
10540
- ) : /* @__PURE__ */ jsx54(
10574
+ /* @__PURE__ */ jsx55(EntityIcon, { icon: { name: icon.name, url: icon.url, props: icon.props }, size: 48 })
10575
+ ) : /* @__PURE__ */ jsx55(
10541
10576
  MingoIcon,
10542
10577
  {
10543
10578
  className: "h-12 w-12",
@@ -10547,18 +10582,18 @@ function GuideWelcome({
10547
10582
  }
10548
10583
  ),
10549
10584
  /* @__PURE__ */ jsxs42("div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)]", children: [
10550
- /* @__PURE__ */ jsx54("p", { className: "text-h2 text-ods-text-primary", children: title }),
10551
- subtitle ? /* @__PURE__ */ jsx54("p", { className: "text-h4 text-ods-text-secondary", children: subtitle }) : subtitleLoading ? /* @__PURE__ */ jsx54("div", { className: "flex w-full justify-center", children: /* @__PURE__ */ jsx54(Skeleton, { className: "h-5 w-3/4 max-w-80 rounded-sm" }) }) : null
10585
+ /* @__PURE__ */ jsx55("p", { className: "text-h2 text-ods-text-primary", children: title }),
10586
+ subtitle ? /* @__PURE__ */ jsx55("p", { className: "text-h4 text-ods-text-secondary", children: subtitle }) : subtitleLoading ? /* @__PURE__ */ jsx55("div", { className: "flex w-full justify-center", children: /* @__PURE__ */ jsx55(Skeleton, { className: "h-5 w-3/4 max-w-80 rounded-sm" }) }) : null
10552
10587
  ] })
10553
10588
  ] }),
10554
10589
  children
10555
10590
  ]
10556
10591
  }
10557
10592
  ),
10558
- /* @__PURE__ */ jsx54(ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
10559
- /* @__PURE__ */ jsx54(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
10593
+ /* @__PURE__ */ jsx55(ScrollFadeOverlay, { edge: "top", visible: fadeTop, className: "h-12" }),
10594
+ /* @__PURE__ */ jsx55(ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom, className: "h-12" })
10560
10595
  ] }),
10561
- quickActions.length > 0 && /* @__PURE__ */ jsx54(
10596
+ quickActions.length > 0 && /* @__PURE__ */ jsx55(
10562
10597
  QuickActionWall,
10563
10598
  {
10564
10599
  chips: chipItems,
@@ -10580,35 +10615,6 @@ function GuideWelcome({
10580
10615
 
10581
10616
  // src/components/chat/guide-mode-banner.tsx
10582
10617
  init_cn();
10583
-
10584
- // src/components/ui/tooltip.tsx
10585
- init_cn();
10586
- import * as React25 from "react";
10587
- import * as TooltipPrimitive from "@radix-ui/react-tooltip";
10588
- import { jsx as jsx55 } from "react/jsx-runtime";
10589
- var TooltipProvider = TooltipPrimitive.Provider;
10590
- var Tooltip = TooltipPrimitive.Root;
10591
- var TooltipTrigger = TooltipPrimitive.Trigger;
10592
- var TooltipContent = React25.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
10593
- const container = usePortalContainer();
10594
- return /* @__PURE__ */ jsx55(TooltipPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx55(
10595
- TooltipPrimitive.Content,
10596
- {
10597
- ref,
10598
- sideOffset,
10599
- className: cn(
10600
- // `max-h` uses Radix's available-height var so tall content scrolls inside
10601
- // the tooltip instead of overflowing off-screen (only engages on overflow).
10602
- "z-[1400] max-h-[var(--radix-popper-available-height)] overflow-y-auto rounded-md bg-ods-card border border-ods-border px-3 py-2 text-h6 text-ods-text-primary shadow-lg animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
10603
- className
10604
- ),
10605
- ...props
10606
- }
10607
- ) });
10608
- });
10609
- TooltipContent.displayName = TooltipPrimitive.Content.displayName;
10610
-
10611
- // src/components/chat/guide-mode-banner.tsx
10612
10618
  import { jsx as jsx56, jsxs as jsxs43 } from "react/jsx-runtime";
10613
10619
  var DEFAULT_LABEL = "Guide Mode Chat";
10614
10620
  var DEFAULT_TOOLTIP = "A quick session chat for exploring OpenFrame. Mingo answers how-to questions and guides you through configuration, but won\u2019t touch devices, run scripts, or perform any actions.";
@@ -41033,7 +41039,7 @@ function Board({
41033
41039
  // src/components/features/board/types.ts
41034
41040
  var STATUS_DEFAULTS = {
41035
41041
  ACTIVE: { label: "Active", color: "#5ea62e" },
41036
- AI_ASSISTANCE: { label: "AI Assistance", color: "#888888" },
41042
+ AI_ASSISTANCE: { label: "AI Handling", color: "#888888" },
41037
41043
  TECH_REQUIRED: { label: "Tech Required", color: "#e1b32f" },
41038
41044
  ON_HOLD: { label: "On Hold", color: "#f36666" },
41039
41045
  RESOLVED: { label: "Resolved", color: "#888888" },
@@ -49182,23 +49188,13 @@ function useTestRunState(campaign) {
49182
49188
  // src/components/ui/ticket-info-section.tsx
49183
49189
  init_cn();
49184
49190
 
49185
- // src/components/ui/ticket-detail-section.tsx
49186
- init_cn();
49187
- import { jsx as jsx375, jsxs as jsxs295 } from "react/jsx-runtime";
49188
- function TicketDetailSection({ label, children, className }) {
49189
- return /* @__PURE__ */ jsxs295("div", { className: cn("flex flex-col gap-1", className), children: [
49190
- /* @__PURE__ */ jsx375("p", { className: "text-h5 text-ods-text-secondary", children: label }),
49191
- children
49192
- ] });
49193
- }
49194
-
49195
49191
  // src/components/ui/ticket-attachments-list.tsx
49196
49192
  init_cn();
49197
- import { jsx as jsx376, jsxs as jsxs296 } from "react/jsx-runtime";
49193
+ import { jsx as jsx375, jsxs as jsxs295 } from "react/jsx-runtime";
49198
49194
  function TicketAttachmentsList({ attachments, className, size: size2 = "default" }) {
49199
49195
  if (attachments.length === 0) return null;
49200
49196
  const compact = size2 === "compact";
49201
- return /* @__PURE__ */ jsx376("div", { className: cn("rounded-[6px] border border-ods-border overflow-hidden", className), children: attachments.map((attachment, index) => /* @__PURE__ */ jsxs296(
49197
+ return /* @__PURE__ */ jsx375("div", { className: cn("rounded-[6px] border border-ods-border overflow-hidden", className), children: attachments.map((attachment, index) => /* @__PURE__ */ jsxs295(
49202
49198
  "div",
49203
49199
  {
49204
49200
  className: cn(
@@ -49207,7 +49203,7 @@ function TicketAttachmentsList({ attachments, className, size: size2 = "default"
49207
49203
  index < attachments.length - 1 && "border-b border-ods-border"
49208
49204
  ),
49209
49205
  children: [
49210
- attachment.thumbnailSrc ? /* @__PURE__ */ jsx376(
49206
+ attachment.thumbnailSrc ? /* @__PURE__ */ jsx375(
49211
49207
  SquareAvatar,
49212
49208
  {
49213
49209
  src: attachment.thumbnailSrc,
@@ -49215,18 +49211,18 @@ function TicketAttachmentsList({ attachments, className, size: size2 = "default"
49215
49211
  size: compact ? "sm" : "md",
49216
49212
  className: "shrink-0"
49217
49213
  }
49218
- ) : /* @__PURE__ */ jsx376(
49214
+ ) : /* @__PURE__ */ jsx375(
49219
49215
  "div",
49220
49216
  {
49221
49217
  className: cn(
49222
49218
  "shrink-0 flex items-center justify-center rounded-[6px] bg-ods-card border border-ods-border",
49223
49219
  compact ? "size-8" : "size-10"
49224
49220
  ),
49225
- children: /* @__PURE__ */ jsx376(FileIcon, { className: cn("text-ods-text-secondary", compact ? "size-4" : "size-6") })
49221
+ children: /* @__PURE__ */ jsx375(FileIcon, { className: cn("text-ods-text-secondary", compact ? "size-4" : "size-6") })
49226
49222
  }
49227
49223
  ),
49228
- /* @__PURE__ */ jsxs296("div", { className: "flex-1 min-w-0 overflow-hidden", children: [
49229
- /* @__PURE__ */ jsx376(
49224
+ /* @__PURE__ */ jsxs295("div", { className: "flex-1 min-w-0 overflow-hidden", children: [
49225
+ /* @__PURE__ */ jsx375(
49230
49226
  "p",
49231
49227
  {
49232
49228
  className: cn("text-ods-text-primary truncate", compact ? "text-h5" : "text-h4"),
@@ -49234,26 +49230,26 @@ function TicketAttachmentsList({ attachments, className, size: size2 = "default"
49234
49230
  children: attachment.fileName
49235
49231
  }
49236
49232
  ),
49237
- attachment.fileSize && /* @__PURE__ */ jsx376("p", { className: "text-h6 text-ods-text-secondary", children: attachment.fileSize })
49233
+ attachment.fileSize && /* @__PURE__ */ jsx375("p", { className: "text-h6 text-ods-text-secondary", children: attachment.fileSize })
49238
49234
  ] }),
49239
- attachment.onDelete && /* @__PURE__ */ jsx376(
49235
+ attachment.onDelete && /* @__PURE__ */ jsx375(
49240
49236
  "button",
49241
49237
  {
49242
49238
  type: "button",
49243
49239
  onClick: attachment.onDelete,
49244
49240
  className: "shrink-0 text-ods-text-secondary hover:text-ods-error transition-colors",
49245
49241
  "aria-label": `Delete ${attachment.fileName}`,
49246
- children: /* @__PURE__ */ jsx376(TrashIcon, { className: compact ? "size-4" : "size-5" })
49242
+ children: /* @__PURE__ */ jsx375(TrashIcon, { className: compact ? "size-4" : "size-5" })
49247
49243
  }
49248
49244
  ),
49249
- attachment.onDownload && /* @__PURE__ */ jsx376(
49245
+ attachment.onDownload && /* @__PURE__ */ jsx375(
49250
49246
  "button",
49251
49247
  {
49252
49248
  type: "button",
49253
49249
  onClick: attachment.onDownload,
49254
49250
  className: "shrink-0 text-ods-text-secondary hover:text-ods-text-primary transition-colors",
49255
49251
  "aria-label": `Download ${attachment.fileName}`,
49256
- children: /* @__PURE__ */ jsx376(Download02Icon, { className: compact ? "size-4" : "size-6" })
49252
+ children: /* @__PURE__ */ jsx375(Download02Icon, { className: compact ? "size-4" : "size-6" })
49257
49253
  }
49258
49254
  )
49259
49255
  ]
@@ -49262,6 +49258,16 @@ function TicketAttachmentsList({ attachments, className, size: size2 = "default"
49262
49258
  )) });
49263
49259
  }
49264
49260
 
49261
+ // src/components/ui/ticket-detail-section.tsx
49262
+ init_cn();
49263
+ import { jsx as jsx376, jsxs as jsxs296 } from "react/jsx-runtime";
49264
+ function TicketDetailSection({ label, children, className }) {
49265
+ return /* @__PURE__ */ jsxs296("div", { className: cn("flex flex-col gap-1", className), children: [
49266
+ /* @__PURE__ */ jsx376("p", { className: "text-h5 text-ods-text-secondary", children: label }),
49267
+ children
49268
+ ] });
49269
+ }
49270
+
49265
49271
  // src/components/ui/ticket-notes-section.tsx
49266
49272
  import * as React138 from "react";
49267
49273
  init_cn();
@@ -49451,7 +49457,12 @@ function TicketNotesSection({
49451
49457
 
49452
49458
  // src/components/ui/ticket-info-section.tsx
49453
49459
  import { Fragment as Fragment77, jsx as jsx379, jsxs as jsxs299 } from "react/jsx-runtime";
49454
- function InfoCell2({ value, label, icon, onClick }) {
49460
+ function InfoCell2({
49461
+ value,
49462
+ label,
49463
+ icon,
49464
+ onClick
49465
+ }) {
49455
49466
  return /* @__PURE__ */ jsx379("div", { className: "flex-1 min-w-0 overflow-hidden", children: /* @__PURE__ */ jsxs299("div", { className: "flex flex-col justify-center", children: [
49456
49467
  /* @__PURE__ */ jsxs299("div", { className: "flex items-center gap-1 w-full min-w-0", children: [
49457
49468
  icon && /* @__PURE__ */ jsx379("span", { className: "shrink-0 size-4 flex items-center justify-center text-ods-text-secondary", children: icon }),
@@ -49478,6 +49489,8 @@ function TicketInfoSection({
49478
49489
  statusOptions,
49479
49490
  onStatusSelect,
49480
49491
  isStatusPending,
49492
+ isStatusDisabled,
49493
+ statusDisabledReason,
49481
49494
  onExpand,
49482
49495
  expanded = false,
49483
49496
  className,
@@ -49492,110 +49505,95 @@ function TicketInfoSection({
49492
49505
  onDeleteNote,
49493
49506
  isAddingNote
49494
49507
  }) {
49495
- return /* @__PURE__ */ jsxs299(
49496
- "div",
49497
- {
49498
- className: cn(
49499
- "rounded-[6px] border border-ods-border overflow-hidden",
49500
- className
49501
- ),
49502
- children: [
49503
- /* @__PURE__ */ jsxs299("div", { className: "grid grid-cols-2 lg:grid-cols-[1fr_1fr_1fr_auto] gap-4 px-4 py-3 bg-ods-card border-b border-ods-border items-center", children: [
49504
- /* @__PURE__ */ jsxs299("div", { className: "flex items-center gap-2 min-w-0", children: [
49505
- /* @__PURE__ */ jsx379(
49506
- SquareAvatar,
49507
- {
49508
- src: organization?.imageSrc,
49509
- alt: organization?.name,
49510
- fallback: organization?.name || "Org",
49511
- size: "md",
49512
- className: "shrink-0"
49513
- }
49508
+ return /* @__PURE__ */ jsxs299("div", { className: cn("rounded-[6px] border border-ods-border overflow-hidden", className), children: [
49509
+ /* @__PURE__ */ jsxs299("div", { className: "grid grid-cols-2 lg:grid-cols-[1fr_1fr_1fr_auto] gap-4 px-4 py-3 bg-ods-card border-b border-ods-border items-center", children: [
49510
+ /* @__PURE__ */ jsxs299("div", { className: "flex items-center gap-2 min-w-0", children: [
49511
+ /* @__PURE__ */ jsx379(
49512
+ SquareAvatar,
49513
+ {
49514
+ src: organization?.imageSrc,
49515
+ alt: organization?.name,
49516
+ fallback: organization?.name || "Org",
49517
+ size: "md",
49518
+ className: "shrink-0"
49519
+ }
49520
+ ),
49521
+ /* @__PURE__ */ jsx379(InfoCell2, { value: organization?.name || "Unassigned", label: "Organization" })
49522
+ ] }),
49523
+ /* @__PURE__ */ jsx379("div", { className: "min-w-0", children: assigned ? /* @__PURE__ */ jsx379(
49524
+ AssigneeDropdown,
49525
+ {
49526
+ currentAssignee: assigned.currentAssignee,
49527
+ options: assigned.options,
49528
+ isLoading: assigned.isLoading,
49529
+ isPending: assigned.isPending,
49530
+ onAssign: assigned.onAssign
49531
+ }
49532
+ ) : /* @__PURE__ */ jsxs299("div", { className: "min-w-0", children: [
49533
+ /* @__PURE__ */ jsxs299("div", { className: "flex items-center gap-1 text-h4 text-ods-text-secondary", children: [
49534
+ /* @__PURE__ */ jsx379(UserIcon2, { className: "size-4 shrink-0" }),
49535
+ /* @__PURE__ */ jsx379("span", { className: "truncate", children: "Unassigned" })
49536
+ ] }),
49537
+ /* @__PURE__ */ jsx379("span", { className: "text-h6 text-ods-text-secondary truncate block", children: "Assigned" })
49538
+ ] }) }),
49539
+ /* @__PURE__ */ jsx379(InfoCell2, { value: device?.name || "Unassigned", label: "Device", icon: device?.icon, onClick: device?.onClick }),
49540
+ /* @__PURE__ */ jsxs299("div", { className: "flex items-center gap-4 min-w-0", children: [
49541
+ (status || statusLabel) && /* @__PURE__ */ jsx379("div", { className: "min-w-0", children: /* @__PURE__ */ jsx379(
49542
+ TicketStatusTag,
49543
+ {
49544
+ status: status ?? "",
49545
+ label: statusLabel,
49546
+ color: statusColor,
49547
+ options: statusOptions,
49548
+ onSelect: onStatusSelect,
49549
+ isPending: isStatusPending,
49550
+ disabled: isStatusDisabled,
49551
+ disabledReason: statusDisabledReason
49552
+ }
49553
+ ) }),
49554
+ onExpand && /* @__PURE__ */ jsx379(
49555
+ "button",
49556
+ {
49557
+ type: "button",
49558
+ onClick: onExpand,
49559
+ className: cn(
49560
+ "shrink-0 flex items-center justify-center p-3 rounded-[6px]",
49561
+ "bg-ods-card border border-ods-border",
49562
+ "hover:bg-ods-bg-hover transition-colors duration-150"
49514
49563
  ),
49515
- /* @__PURE__ */ jsx379(InfoCell2, { value: organization?.name || "Unassigned", label: "Organization" })
49516
- ] }),
49517
- /* @__PURE__ */ jsx379("div", { className: "min-w-0", children: assigned ? /* @__PURE__ */ jsx379(
49518
- AssigneeDropdown,
49519
- {
49520
- currentAssignee: assigned.currentAssignee,
49521
- options: assigned.options,
49522
- isLoading: assigned.isLoading,
49523
- isPending: assigned.isPending,
49524
- onAssign: assigned.onAssign
49525
- }
49526
- ) : /* @__PURE__ */ jsxs299("div", { className: "min-w-0", children: [
49527
- /* @__PURE__ */ jsxs299("div", { className: "flex items-center gap-1 text-h4 text-ods-text-secondary", children: [
49528
- /* @__PURE__ */ jsx379(UserIcon2, { className: "size-4 shrink-0" }),
49529
- /* @__PURE__ */ jsx379("span", { className: "truncate", children: "Unassigned" })
49530
- ] }),
49531
- /* @__PURE__ */ jsx379("span", { className: "text-h6 text-ods-text-secondary truncate block", children: "Assigned" })
49532
- ] }) }),
49533
- /* @__PURE__ */ jsx379(
49534
- InfoCell2,
49535
- {
49536
- value: device?.name || "Unassigned",
49537
- label: "Device",
49538
- icon: device?.icon,
49539
- onClick: device?.onClick
49540
- }
49541
- ),
49542
- /* @__PURE__ */ jsxs299("div", { className: "flex items-center gap-4 min-w-0", children: [
49543
- (status || statusLabel) && /* @__PURE__ */ jsx379("div", { className: "min-w-0", children: /* @__PURE__ */ jsx379(
49544
- TicketStatusTag,
49545
- {
49546
- status: status ?? "",
49547
- label: statusLabel,
49548
- color: statusColor,
49549
- options: statusOptions,
49550
- onSelect: onStatusSelect,
49551
- isPending: isStatusPending
49552
- }
49553
- ) }),
49554
- onExpand && /* @__PURE__ */ jsx379(
49555
- "button",
49564
+ "aria-label": expanded ? "Collapse" : "Expand",
49565
+ children: /* @__PURE__ */ jsx379(
49566
+ Chevron02DownIcon,
49556
49567
  {
49557
- type: "button",
49558
- onClick: onExpand,
49559
49568
  className: cn(
49560
- "shrink-0 flex items-center justify-center p-3 rounded-[6px]",
49561
- "bg-ods-card border border-ods-border",
49562
- "hover:bg-ods-bg-hover transition-colors duration-150"
49563
- ),
49564
- "aria-label": expanded ? "Collapse" : "Expand",
49565
- children: /* @__PURE__ */ jsx379(
49566
- Chevron02DownIcon,
49567
- {
49568
- className: cn(
49569
- "size-6 text-ods-text-primary transition-transform duration-200",
49570
- expanded && "rotate-180"
49571
- )
49572
- }
49569
+ "size-6 text-ods-text-primary transition-transform duration-200",
49570
+ expanded && "rotate-180"
49573
49571
  )
49574
49572
  }
49575
49573
  )
49576
- ] })
49577
- ] }),
49578
- expanded && /* @__PURE__ */ jsxs299(Fragment77, { children: [
49579
- createdAt && /* @__PURE__ */ jsx379("div", { className: "grid grid-cols-2 gap-4 px-4 py-3 bg-ods-bg border-b border-ods-border items-center", children: /* @__PURE__ */ jsx379(InfoCell2, { value: createdAt, label: "Created" }) }),
49580
- /* @__PURE__ */ jsxs299("div", { className: "flex flex-col gap-4 p-4 bg-ods-bg border-b border-ods-border", children: [
49581
- description && /* @__PURE__ */ jsx379(SimpleMarkdownRenderer, { content: description }),
49582
- attachments && attachments.length > 0 && /* @__PURE__ */ jsx379(TicketDetailSection, { label: "Attachments", children: /* @__PURE__ */ jsx379(TicketAttachmentsList, { attachments }) }),
49583
- tags && tags.length > 0 && /* @__PURE__ */ jsx379(TicketDetailSection, { label: "Tags", children: /* @__PURE__ */ jsx379("div", { className: "flex flex-wrap gap-2 min-w-0", children: tags.map((tag) => /* @__PURE__ */ jsx379(Tag, { label: tag, variant: "outline", className: "max-w-full" }, tag)) }) }),
49584
- (notes || onAddNote) && /* @__PURE__ */ jsx379(TicketDetailSection, { label: "Notes", children: /* @__PURE__ */ jsx379(
49585
- TicketNotesSection,
49586
- {
49587
- notes: notes || [],
49588
- onAddNote,
49589
- onEditNote,
49590
- onDeleteNote,
49591
- isAddingNote
49592
- }
49593
- ) })
49594
- ] })
49595
- ] })
49596
- ]
49597
- }
49598
- );
49574
+ }
49575
+ )
49576
+ ] })
49577
+ ] }),
49578
+ expanded && /* @__PURE__ */ jsxs299(Fragment77, { children: [
49579
+ createdAt && /* @__PURE__ */ jsx379("div", { className: "grid grid-cols-2 gap-4 px-4 py-3 bg-ods-bg border-b border-ods-border items-center", children: /* @__PURE__ */ jsx379(InfoCell2, { value: createdAt, label: "Created" }) }),
49580
+ /* @__PURE__ */ jsxs299("div", { className: "flex flex-col gap-4 p-4 bg-ods-bg border-b border-ods-border", children: [
49581
+ description && /* @__PURE__ */ jsx379(SimpleMarkdownRenderer, { content: description }),
49582
+ attachments && attachments.length > 0 && /* @__PURE__ */ jsx379(TicketDetailSection, { label: "Attachments", children: /* @__PURE__ */ jsx379(TicketAttachmentsList, { attachments }) }),
49583
+ tags && tags.length > 0 && /* @__PURE__ */ jsx379(TicketDetailSection, { label: "Tags", children: /* @__PURE__ */ jsx379("div", { className: "flex flex-wrap gap-2 min-w-0", children: tags.map((tag) => /* @__PURE__ */ jsx379(Tag, { label: tag, variant: "outline", className: "max-w-full" }, tag)) }) }),
49584
+ (notes || onAddNote) && /* @__PURE__ */ jsx379(TicketDetailSection, { label: "Notes", children: /* @__PURE__ */ jsx379(
49585
+ TicketNotesSection,
49586
+ {
49587
+ notes: notes || [],
49588
+ onAddNote,
49589
+ onEditNote,
49590
+ onDeleteNote,
49591
+ isAddingNote
49592
+ }
49593
+ ) })
49594
+ ] })
49595
+ ] })
49596
+ ] });
49599
49597
  }
49600
49598
 
49601
49599
  // src/components/ui/take-over-ticket-modal.tsx
@@ -62662,9 +62660,6 @@ export {
62662
62660
  formatBioText,
62663
62661
  SquareAvatar,
62664
62662
  AssigneeDropdown,
62665
- ActionsMenu,
62666
- ActionsMenuDropdown,
62667
- ColorSwatch,
62668
62663
  DESIGN_PALETTE,
62669
62664
  getContrastRatio,
62670
62665
  pickReadableTextColor,
@@ -62680,6 +62675,13 @@ export {
62680
62675
  rgbToHex,
62681
62676
  deriveHoverColor,
62682
62677
  deriveActiveColor,
62678
+ ActionsMenu,
62679
+ ActionsMenuDropdown,
62680
+ ColorSwatch,
62681
+ TooltipProvider,
62682
+ Tooltip,
62683
+ TooltipTrigger,
62684
+ TooltipContent,
62683
62685
  resolveTicketStatus,
62684
62686
  getTicketStatusConfig,
62685
62687
  getTicketStatusTag,
@@ -62982,10 +62984,6 @@ export {
62982
62984
  MingoChatHistory,
62983
62985
  MingoWelcome,
62984
62986
  GuideWelcome,
62985
- TooltipProvider,
62986
- Tooltip,
62987
- TooltipTrigger,
62988
- TooltipContent,
62989
62987
  GuideModeBanner,
62990
62988
  TabSelector,
62991
62989
  MingoHistoryRail,
@@ -63644,8 +63642,8 @@ export {
63644
63642
  TimingStat,
63645
63643
  TestRunStatusStat,
63646
63644
  useTestRunState,
63647
- TicketDetailSection,
63648
63645
  TicketAttachmentsList,
63646
+ TicketDetailSection,
63649
63647
  TicketNoteCard,
63650
63648
  TicketNotesSection,
63651
63649
  TicketInfoSection,
@@ -63698,4 +63696,4 @@ export {
63698
63696
  LogsList,
63699
63697
  assets
63700
63698
  };
63701
- //# sourceMappingURL=chunk-JVXF5DIA.js.map
63699
+ //# sourceMappingURL=chunk-BK7V6CH5.js.map