@flamingo-stack/openframe-frontend-core 0.0.511 → 0.0.512-1640.4209.1

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 (98) hide show
  1. package/dist/{chunk-IXCBVJRU.cjs → chunk-4GAVZKHG.cjs} +9 -9
  2. package/dist/{chunk-IXCBVJRU.cjs.map → chunk-4GAVZKHG.cjs.map} +1 -1
  3. package/dist/{chunk-RXFBW2EJ.cjs → chunk-534P3NJ3.cjs} +7 -7
  4. package/dist/{chunk-RXFBW2EJ.cjs.map → chunk-534P3NJ3.cjs.map} +1 -1
  5. package/dist/{chunk-X7AJ3J42.js → chunk-6ETOEANJ.js} +362 -215
  6. package/dist/chunk-6ETOEANJ.js.map +1 -0
  7. package/dist/{chunk-TNZOUHHN.js → chunk-6QPWXKUM.js} +4 -4
  8. package/dist/{chunk-ZSIEM7CL.js → chunk-76ZIKD4J.js} +2 -2
  9. package/dist/{chunk-NNWSGOUP.js → chunk-A7MD5U35.js} +2 -2
  10. package/dist/{chunk-LEWQRAZ4.cjs → chunk-CY7M2OSZ.cjs} +31 -31
  11. package/dist/{chunk-LEWQRAZ4.cjs.map → chunk-CY7M2OSZ.cjs.map} +1 -1
  12. package/dist/{chunk-OMN7A6RP.cjs → chunk-EEGK4TEH.cjs} +26 -26
  13. package/dist/{chunk-OMN7A6RP.cjs.map → chunk-EEGK4TEH.cjs.map} +1 -1
  14. package/dist/{chunk-IUZMWMVX.cjs → chunk-EJIOXYJ2.cjs} +61 -61
  15. package/dist/{chunk-IUZMWMVX.cjs.map → chunk-EJIOXYJ2.cjs.map} +1 -1
  16. package/dist/{chunk-PRMR6WKC.js → chunk-EQRNQWXA.js} +2 -2
  17. package/dist/{chunk-RU3SCECX.js → chunk-FBW47BZ7.js} +2 -2
  18. package/dist/{chunk-PXQQFRUD.cjs → chunk-FOTOJSBJ.cjs} +5 -5
  19. package/dist/{chunk-PXQQFRUD.cjs.map → chunk-FOTOJSBJ.cjs.map} +1 -1
  20. package/dist/{chunk-C4EUXZSA.cjs → chunk-GCPMAP2K.cjs} +3 -3
  21. package/dist/{chunk-C4EUXZSA.cjs.map → chunk-GCPMAP2K.cjs.map} +1 -1
  22. package/dist/{chunk-YGS7BLSN.js → chunk-HJSWBSMO.js} +2 -2
  23. package/dist/{chunk-LVAJK2U2.js → chunk-JIRDHSAM.js} +2 -2
  24. package/dist/{chunk-7YV67K3I.cjs → chunk-LJXROUP3.cjs} +87 -87
  25. package/dist/{chunk-7YV67K3I.cjs.map → chunk-LJXROUP3.cjs.map} +1 -1
  26. package/dist/{chunk-TYVHM67X.js → chunk-LTABGSW6.js} +5 -5
  27. package/dist/{chunk-NKA3O4L6.js → chunk-MO647IKL.js} +2 -2
  28. package/dist/{chunk-ZBQV7WH7.js → chunk-MPAISYAF.js} +2 -2
  29. package/dist/{chunk-U4WPFX5K.cjs → chunk-ONAGMSOD.cjs} +26 -26
  30. package/dist/{chunk-U4WPFX5K.cjs.map → chunk-ONAGMSOD.cjs.map} +1 -1
  31. package/dist/{chunk-TR7AMHGB.js → chunk-PE4CBJUE.js} +6 -6
  32. package/dist/{chunk-A5YZUV6B.cjs → chunk-PSYNV2VB.cjs} +11 -11
  33. package/dist/{chunk-A5YZUV6B.cjs.map → chunk-PSYNV2VB.cjs.map} +1 -1
  34. package/dist/{chunk-J4VB4EHW.js → chunk-U5F5PAWV.js} +4 -4
  35. package/dist/{chunk-GHXTF35X.cjs → chunk-VFFEZ66K.cjs} +353 -206
  36. package/dist/chunk-VFFEZ66K.cjs.map +1 -0
  37. package/dist/{chunk-JXMNLH7F.js → chunk-VQQBYAKR.js} +2 -2
  38. package/dist/{chunk-DPLXHG7H.cjs → chunk-XEBFFFDB.cjs} +37 -37
  39. package/dist/{chunk-DPLXHG7H.cjs.map → chunk-XEBFFFDB.cjs.map} +1 -1
  40. package/dist/{chunk-2CE725NN.cjs → chunk-Y3VWQEFO.cjs} +13 -13
  41. package/dist/{chunk-2CE725NN.cjs.map → chunk-Y3VWQEFO.cjs.map} +1 -1
  42. package/dist/{chunk-4SG55XVA.cjs → chunk-ZMC4WIBZ.cjs} +4 -4
  43. package/dist/{chunk-4SG55XVA.cjs.map → chunk-ZMC4WIBZ.cjs.map} +1 -1
  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/entity-cards/deleted-data-card.d.ts +27 -0
  47. package/dist/components/chat/entity-cards/deleted-data-card.d.ts.map +1 -0
  48. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
  49. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  50. package/dist/components/chat/index.cjs +2 -2
  51. package/dist/components/chat/index.js +1 -1
  52. package/dist/components/contact/index.cjs +3 -3
  53. package/dist/components/contact/index.js +2 -2
  54. package/dist/components/docs/index.cjs +5 -5
  55. package/dist/components/docs/index.js +4 -4
  56. package/dist/components/embeds/index.cjs +3 -3
  57. package/dist/components/embeds/index.js +2 -2
  58. package/dist/components/faq/index.cjs +3 -3
  59. package/dist/components/faq/index.js +2 -2
  60. package/dist/components/features/index.cjs +2 -2
  61. package/dist/components/features/index.js +1 -1
  62. package/dist/components/help-center-pages/index.cjs +22 -22
  63. package/dist/components/help-center-pages/index.js +13 -13
  64. package/dist/components/index.cjs +132 -132
  65. package/dist/components/index.js +11 -11
  66. package/dist/components/meeting-scheduler/index.cjs +34 -34
  67. package/dist/components/meeting-scheduler/index.js +3 -3
  68. package/dist/components/navigation/index.cjs +2 -2
  69. package/dist/components/navigation/index.js +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/index.cjs +2 -2
  77. package/dist/components/ui/index.js +1 -1
  78. package/dist/index.cjs +2 -2
  79. package/dist/index.js +1 -1
  80. package/package.json +1 -1
  81. package/src/components/chat/entity-cards/deleted-data-card.tsx +61 -0
  82. package/src/components/chat/entity-cards/dispatch.tsx +17 -0
  83. package/src/components/chat/hooks/use-chat.ts +174 -15
  84. package/dist/chunk-GHXTF35X.cjs.map +0 -1
  85. package/dist/chunk-X7AJ3J42.js.map +0 -1
  86. /package/dist/{chunk-TNZOUHHN.js.map → chunk-6QPWXKUM.js.map} +0 -0
  87. /package/dist/{chunk-ZSIEM7CL.js.map → chunk-76ZIKD4J.js.map} +0 -0
  88. /package/dist/{chunk-NNWSGOUP.js.map → chunk-A7MD5U35.js.map} +0 -0
  89. /package/dist/{chunk-PRMR6WKC.js.map → chunk-EQRNQWXA.js.map} +0 -0
  90. /package/dist/{chunk-RU3SCECX.js.map → chunk-FBW47BZ7.js.map} +0 -0
  91. /package/dist/{chunk-YGS7BLSN.js.map → chunk-HJSWBSMO.js.map} +0 -0
  92. /package/dist/{chunk-LVAJK2U2.js.map → chunk-JIRDHSAM.js.map} +0 -0
  93. /package/dist/{chunk-TYVHM67X.js.map → chunk-LTABGSW6.js.map} +0 -0
  94. /package/dist/{chunk-NKA3O4L6.js.map → chunk-MO647IKL.js.map} +0 -0
  95. /package/dist/{chunk-ZBQV7WH7.js.map → chunk-MPAISYAF.js.map} +0 -0
  96. /package/dist/{chunk-TR7AMHGB.js.map → chunk-PE4CBJUE.js.map} +0 -0
  97. /package/dist/{chunk-J4VB4EHW.js.map → chunk-U5F5PAWV.js.map} +0 -0
  98. /package/dist/{chunk-JXMNLH7F.js.map → chunk-VQQBYAKR.js.map} +0 -0
@@ -50899,18 +50899,36 @@ function resolveFetchedCardHref({
50899
50899
  });
50900
50900
  }
50901
50901
 
50902
+ // src/components/chat/entity-cards/deleted-data-card.tsx
50903
+ import { Trash2 as Trash27 } from "lucide-react";
50904
+ import { jsx as jsx375, jsxs as jsxs300 } from "react/jsx-runtime";
50905
+ function DeletedDataCard({ title, entityLabel, recoveryNote, className }) {
50906
+ const label = entityLabel || "Item";
50907
+ return /* @__PURE__ */ jsxs300("div", { className: `${COMPACT_CARD_OUTER_STATIC} opacity-70 ${className ?? ""}`, children: [
50908
+ /* @__PURE__ */ jsx375("div", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx375(Trash27, { className: "h-4 w-4 text-ods-text-secondary" }) }),
50909
+ /* @__PURE__ */ jsxs300("div", { className: COMPACT_CARD_TEXT_COL, children: [
50910
+ /* @__PURE__ */ jsx375("div", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx375("span", { className: `${COMPACT_CARD_TITLE} line-through text-ods-text-secondary`, children: title || `Deleted ${label.toLowerCase()}` }) }),
50911
+ /* @__PURE__ */ jsx375("div", { className: COMPACT_CARD_META_ROW, children: /* @__PURE__ */ jsxs300("span", { className: "text-ods-text-secondary", children: [
50912
+ label,
50913
+ " deleted",
50914
+ recoveryNote ? ` \xB7 ${recoveryNote}` : ""
50915
+ ] }) })
50916
+ ] })
50917
+ ] });
50918
+ }
50919
+
50902
50920
  // src/components/chat/mingo-info-card.tsx
50903
50921
  init_cn();
50904
- import { Fragment as Fragment86, jsx as jsx375, jsxs as jsxs300 } from "react/jsx-runtime";
50922
+ import { Fragment as Fragment86, jsx as jsx376, jsxs as jsxs301 } from "react/jsx-runtime";
50905
50923
  function CardMedia({
50906
50924
  imageSrc,
50907
50925
  imageAlt,
50908
50926
  icon
50909
50927
  }) {
50910
50928
  if (imageSrc) {
50911
- return /* @__PURE__ */ jsxs300("span", { className: "relative block size-10 shrink-0", children: [
50912
- /* @__PURE__ */ jsx375("span", { className: "absolute inset-0 flex items-center justify-center rounded-sm border border-ods-border bg-ods-bg text-h6 text-ods-text-primary", children: getFirstLastInitials(imageAlt) || "?" }),
50913
- /* @__PURE__ */ jsx375(
50929
+ return /* @__PURE__ */ jsxs301("span", { className: "relative block size-10 shrink-0", children: [
50930
+ /* @__PURE__ */ jsx376("span", { className: "absolute inset-0 flex items-center justify-center rounded-sm border border-ods-border bg-ods-bg text-h6 text-ods-text-primary", children: getFirstLastInitials(imageAlt) || "?" }),
50931
+ /* @__PURE__ */ jsx376(
50914
50932
  "img",
50915
50933
  {
50916
50934
  src: imageSrc,
@@ -50924,7 +50942,7 @@ function CardMedia({
50924
50942
  ] });
50925
50943
  }
50926
50944
  if (icon) {
50927
- return /* @__PURE__ */ jsx375("span", { className: "flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-md border border-ods-border bg-ods-bg text-ods-text-secondary", children: /* @__PURE__ */ jsx375("span", { className: "flex size-6 items-center justify-center", children: icon }) });
50945
+ return /* @__PURE__ */ jsx376("span", { className: "flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-md border border-ods-border bg-ods-bg text-ods-text-secondary", children: /* @__PURE__ */ jsx376("span", { className: "flex size-6 items-center justify-center", children: icon }) });
50928
50946
  }
50929
50947
  return null;
50930
50948
  }
@@ -50945,16 +50963,16 @@ function MingoInfoCard({
50945
50963
  const hasMenu = !!menuGroups && menuGroups.length > 0;
50946
50964
  const isAnchor = !!anchorProps;
50947
50965
  const isInteractive = isAnchor || !!onClick;
50948
- const content = /* @__PURE__ */ jsxs300(Fragment86, { children: [
50949
- hasMedia && /* @__PURE__ */ jsx375(CardMedia, { imageSrc, imageAlt, icon }),
50950
- /* @__PURE__ */ jsxs300("span", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
50951
- /* @__PURE__ */ jsx375("span", { className: "truncate text-h4 text-ods-text-primary", children: title }),
50952
- description ? /* @__PURE__ */ jsx375("span", { className: "truncate text-h6 text-ods-text-secondary", children: description }) : null
50966
+ const content = /* @__PURE__ */ jsxs301(Fragment86, { children: [
50967
+ hasMedia && /* @__PURE__ */ jsx376(CardMedia, { imageSrc, imageAlt, icon }),
50968
+ /* @__PURE__ */ jsxs301("span", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
50969
+ /* @__PURE__ */ jsx376("span", { className: "truncate text-h4 text-ods-text-primary", children: title }),
50970
+ description ? /* @__PURE__ */ jsx376("span", { className: "truncate text-h6 text-ods-text-secondary", children: description }) : null
50953
50971
  ] }),
50954
50972
  status ? (
50955
50973
  // Reuse the shared Tag palette (single source of truth for colours)
50956
50974
  // without rendering Tag's `<div>` — span-only for `<p>` validity.
50957
- /* @__PURE__ */ jsx375("span", { className: cn(tagVariants({ variant: status.variant ?? "success" }), "shrink-0"), children: /* @__PURE__ */ jsx375("span", { className: "truncate uppercase tracking-[-0.28px]", children: status.label }) })
50975
+ /* @__PURE__ */ jsx376("span", { className: cn(tagVariants({ variant: status.variant ?? "success" }), "shrink-0"), children: /* @__PURE__ */ jsx376("span", { className: "truncate uppercase tracking-[-0.28px]", children: status.label }) })
50958
50976
  ) : null
50959
50977
  ] });
50960
50978
  const contentClass = cn(
@@ -50962,7 +50980,7 @@ function MingoInfoCard({
50962
50980
  hasMenu && "border-r border-ods-border",
50963
50981
  isInteractive && "transition-colors hover:bg-ods-bg-hover active:bg-ods-bg-active focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent cursor-pointer"
50964
50982
  );
50965
- return /* @__PURE__ */ jsxs300(
50983
+ return /* @__PURE__ */ jsxs301(
50966
50984
  "span",
50967
50985
  {
50968
50986
  className: cn(
@@ -50970,20 +50988,20 @@ function MingoInfoCard({
50970
50988
  className
50971
50989
  ),
50972
50990
  children: [
50973
- isAnchor ? /* @__PURE__ */ jsx375("a", { ...anchorProps, className: cn(contentClass, "no-underline"), children: content }) : onClick ? /* @__PURE__ */ jsx375("button", { type: "button", onClick, className: contentClass, children: content }) : /* @__PURE__ */ jsx375("span", { className: contentClass, children: content }),
50974
- hasMenu && /* @__PURE__ */ jsx375(
50991
+ isAnchor ? /* @__PURE__ */ jsx376("a", { ...anchorProps, className: cn(contentClass, "no-underline"), children: content }) : onClick ? /* @__PURE__ */ jsx376("button", { type: "button", onClick, className: contentClass, children: content }) : /* @__PURE__ */ jsx376("span", { className: contentClass, children: content }),
50992
+ hasMenu && /* @__PURE__ */ jsx376(
50975
50993
  ActionsMenuDropdown,
50976
50994
  {
50977
50995
  groups: menuGroups,
50978
50996
  triggerAriaLabel: menuAriaLabel,
50979
50997
  onCloseAutoFocus: (e) => e.preventDefault(),
50980
- customTrigger: /* @__PURE__ */ jsx375(
50998
+ customTrigger: /* @__PURE__ */ jsx376(
50981
50999
  "button",
50982
51000
  {
50983
51001
  type: "button",
50984
51002
  "aria-label": menuAriaLabel,
50985
51003
  className: "flex w-[56px] md:w-[68px] shrink-0 items-center justify-center self-stretch text-ods-text-secondary transition-colors hover:bg-ods-bg-hover hover:text-ods-text-primary active:bg-ods-bg-active active:text-ods-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent",
50986
- children: /* @__PURE__ */ jsx375(Ellipsis01Icon, { size: 24 })
51004
+ children: /* @__PURE__ */ jsx376(Ellipsis01Icon, { size: 24 })
50987
51005
  }
50988
51006
  )
50989
51007
  }
@@ -50994,16 +51012,16 @@ function MingoInfoCard({
50994
51012
  }
50995
51013
 
50996
51014
  // src/components/chat/entity-cards/dispatch.tsx
50997
- import { Fragment as Fragment87, jsx as jsx376, jsxs as jsxs301 } from "react/jsx-runtime";
51015
+ import { Fragment as Fragment87, jsx as jsx377, jsxs as jsxs302 } from "react/jsx-runtime";
50998
51016
  function githubKindIcon(kind) {
50999
51017
  switch (kind) {
51000
51018
  case "pull_request":
51001
- return /* @__PURE__ */ jsx376(CodingPullRequestIcon, { size: 24 });
51019
+ return /* @__PURE__ */ jsx377(CodingPullRequestIcon, { size: 24 });
51002
51020
  case "pr_review":
51003
- return /* @__PURE__ */ jsx376(CodeIcon, { size: 24 });
51021
+ return /* @__PURE__ */ jsx377(CodeIcon, { size: 24 });
51004
51022
  case "commit":
51005
51023
  default:
51006
- return /* @__PURE__ */ jsx376(CodingCommitIcon, { size: 24 });
51024
+ return /* @__PURE__ */ jsx377(CodingCommitIcon, { size: 24 });
51007
51025
  }
51008
51026
  }
51009
51027
  function reviewStateToVariant(state) {
@@ -51032,7 +51050,7 @@ function GitHubChatCard({
51032
51050
  const idLabel = formatActivityId(chatRef.id, kind);
51033
51051
  const dateText = formatDateUTC(chatRef.date ?? null, { fallback: "", timezone: "local" });
51034
51052
  const description = [idLabel, dateText].filter(Boolean).join(" \xB7 ") || void 0;
51035
- return /* @__PURE__ */ jsx376(
51053
+ return /* @__PURE__ */ jsx377(
51036
51054
  MingoInfoCard,
51037
51055
  {
51038
51056
  title,
@@ -51059,12 +51077,12 @@ function cardMenuGroups(href, discuss, openDetails) {
51059
51077
  items.push({
51060
51078
  id: "open-details",
51061
51079
  label: openDetails?.label ?? "Open Details",
51062
- icon: openDetails?.icon ?? /* @__PURE__ */ jsx376(EyeIcon2, { size: 20 }),
51080
+ icon: openDetails?.icon ?? /* @__PURE__ */ jsx377(EyeIcon2, { size: 20 }),
51063
51081
  // Main row → open the entity (same tab, soft Link nav).
51064
51082
  href,
51065
51083
  // Trailing 40px ↗ side-button → open in a new tab.
51066
51084
  iconAction: {
51067
- icon: /* @__PURE__ */ jsx376(ArrowRightUpIcon, { size: 20 }),
51085
+ icon: /* @__PURE__ */ jsx377(ArrowRightUpIcon, { size: 20 }),
51068
51086
  "aria-label": "Open in new tab",
51069
51087
  href,
51070
51088
  openInNewTab: true
@@ -51092,17 +51110,17 @@ function HubspotTicketChatCard({
51092
51110
  const status = typeof chatRef.metadata?.status === "string" ? chatRef.metadata.status : void 0;
51093
51111
  const statusLabel = typeof chatRef.metadata?.statusLabel === "string" ? chatRef.metadata.statusLabel : void 0;
51094
51112
  const statusText = statusLabel ?? formatStatusToken(status);
51095
- return /* @__PURE__ */ jsx376(
51113
+ return /* @__PURE__ */ jsx377(
51096
51114
  MingoInfoCard,
51097
51115
  {
51098
51116
  title: chatRef.title,
51099
51117
  description: chatRef.preview ?? void 0,
51100
- icon: /* @__PURE__ */ jsx376(TagIcon, { size: 24 }),
51118
+ icon: /* @__PURE__ */ jsx377(TagIcon, { size: 24 }),
51101
51119
  status: statusText ? { label: statusText, variant: hubspotStatusToVariant(status) } : void 0,
51102
51120
  anchorProps: buildAnchorProps(chatRef.url, isNewTab),
51103
51121
  menuGroups: cardMenuGroups(chatRef.url, discuss, {
51104
51122
  label: "Open Ticket Details",
51105
- icon: /* @__PURE__ */ jsx376(TagIcon, { size: 20 })
51123
+ icon: /* @__PURE__ */ jsx377(TagIcon, { size: 20 })
51106
51124
  }),
51107
51125
  menuAriaLabel: "Ticket actions"
51108
51126
  }
@@ -51115,12 +51133,12 @@ function FaqChatCard({
51115
51133
  }) {
51116
51134
  const section = typeof chatRef.metadata?.section === "string" ? chatRef.metadata.section.trim() : void 0;
51117
51135
  const statusLabel = section && section.length > 0 ? section : "FAQ";
51118
- return /* @__PURE__ */ jsx376(
51136
+ return /* @__PURE__ */ jsx377(
51119
51137
  MingoInfoCard,
51120
51138
  {
51121
51139
  title: chatRef.title,
51122
51140
  description: chatRef.preview ?? void 0,
51123
- icon: /* @__PURE__ */ jsx376(QuestionCircleIcon, { size: 24 }),
51141
+ icon: /* @__PURE__ */ jsx377(QuestionCircleIcon, { size: 24 }),
51124
51142
  status: { label: statusLabel, variant: "grey" },
51125
51143
  anchorProps: buildAnchorProps(chatRef.url, isNewTab),
51126
51144
  menuGroups: cardMenuGroups(chatRef.url, discuss),
@@ -51136,12 +51154,12 @@ function SlackChatCard({
51136
51154
  const channelName = typeof chatRef.metadata?.channelName === "string" ? chatRef.metadata.channelName.trim() : void 0;
51137
51155
  const channelPretty = channelName ? channelName.startsWith("#") ? channelName : `#${channelName}` : void 0;
51138
51156
  const title = channelPretty ? `${chatRef.title} \xB7 ${channelPretty}` : chatRef.title;
51139
- return /* @__PURE__ */ jsx376(
51157
+ return /* @__PURE__ */ jsx377(
51140
51158
  MingoInfoCard,
51141
51159
  {
51142
51160
  title,
51143
51161
  description: chatRef.preview ?? void 0,
51144
- icon: /* @__PURE__ */ jsx376(SlackLogoGreyIcon, { size: 24 }),
51162
+ icon: /* @__PURE__ */ jsx377(SlackLogoGreyIcon, { size: 24 }),
51145
51163
  anchorProps: buildAnchorProps(chatRef.url, isNewTab),
51146
51164
  menuGroups: cardMenuGroups(chatRef.url, discuss),
51147
51165
  menuAriaLabel: "Message actions"
@@ -51154,12 +51172,12 @@ function DataRoomDocChatCard({
51154
51172
  discuss
51155
51173
  }) {
51156
51174
  const badgeText = chatRef.sourceRepo ? getSourceLabel(chatRef.sourceRepo) : "Document";
51157
- return /* @__PURE__ */ jsx376(
51175
+ return /* @__PURE__ */ jsx377(
51158
51176
  MingoInfoCard,
51159
51177
  {
51160
51178
  title: chatRef.title,
51161
51179
  description: chatRef.preview ?? void 0,
51162
- icon: /* @__PURE__ */ jsx376(FileContentIcon, { size: 24 }),
51180
+ icon: /* @__PURE__ */ jsx377(FileContentIcon, { size: 24 }),
51163
51181
  status: { label: badgeText, variant: "grey" },
51164
51182
  anchorProps: buildAnchorProps(chatRef.url, isNewTab),
51165
51183
  menuGroups: cardMenuGroups(chatRef.url, discuss),
@@ -51174,7 +51192,7 @@ function GenericFinancialChatCard({
51174
51192
  discuss
51175
51193
  }) {
51176
51194
  const subtitle = typeof chatRef.metadata?.subtitle === "string" ? chatRef.metadata.subtitle : void 0;
51177
- return /* @__PURE__ */ jsx376(
51195
+ return /* @__PURE__ */ jsx377(
51178
51196
  MingoInfoCard,
51179
51197
  {
51180
51198
  title: chatRef.title,
@@ -51188,9 +51206,9 @@ function GenericFinancialChatCard({
51188
51206
  }
51189
51207
  function ChatInlineVideoPill({ chatRef }) {
51190
51208
  const title = chatRef.title || "Video";
51191
- return /* @__PURE__ */ jsxs301("span", { className: "inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-xs align-middle bg-ods-card border border-ods-border text-ods-text-primary", children: [
51192
- /* @__PURE__ */ jsx376("span", { "aria-hidden": "true", className: "text-ods-text-secondary", children: "\u25B6" }),
51193
- /* @__PURE__ */ jsx376("span", { className: "truncate max-w-[220px]", children: title })
51209
+ return /* @__PURE__ */ jsxs302("span", { className: "inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-xs align-middle bg-ods-card border border-ods-border text-ods-text-primary", children: [
51210
+ /* @__PURE__ */ jsx377("span", { "aria-hidden": "true", className: "text-ods-text-secondary", children: "\u25B6" }),
51211
+ /* @__PURE__ */ jsx377("span", { className: "truncate max-w-[220px]", children: title })
51194
51212
  ] });
51195
51213
  }
51196
51214
  function ChatCardWithDiscuss({
@@ -51206,11 +51224,11 @@ function ChatCardWithDiscuss({
51206
51224
  });
51207
51225
  const idDisplay = chatRef.id && (chatRef.id.length > 24 ? `${chatRef.id.slice(0, 24)}\u2026` : chatRef.id);
51208
51226
  const useDisplay = displayAction && !!onDisplay;
51209
- const cardBody = /* @__PURE__ */ jsx376("span", { className: "block [&>*]:!my-0", children });
51210
- return /* @__PURE__ */ jsxs301("span", { className: "mt-1.5 mb-2 block w-full", children: [
51227
+ const cardBody = /* @__PURE__ */ jsx377("span", { className: "block [&>*]:!my-0", children });
51228
+ return /* @__PURE__ */ jsxs302("span", { className: "mt-1.5 mb-2 block w-full", children: [
51211
51229
  cardBody,
51212
- /* @__PURE__ */ jsxs301("span", { className: "mt-1 flex items-center justify-between gap-2 pl-0.5", children: [
51213
- /* @__PURE__ */ jsx376(
51230
+ /* @__PURE__ */ jsxs302("span", { className: "mt-1 flex items-center justify-between gap-2 pl-0.5", children: [
51231
+ /* @__PURE__ */ jsx377(
51214
51232
  SourceActionButton,
51215
51233
  {
51216
51234
  chatRef,
@@ -51219,15 +51237,15 @@ function ChatCardWithDiscuss({
51219
51237
  density: "card"
51220
51238
  }
51221
51239
  ),
51222
- !onDiscuss && !useDisplay ? /* @__PURE__ */ jsx376("span", {}) : null,
51223
- idDisplay ? /* @__PURE__ */ jsxs301(
51240
+ !onDiscuss && !useDisplay ? /* @__PURE__ */ jsx377("span", {}) : null,
51241
+ idDisplay ? /* @__PURE__ */ jsxs302(
51224
51242
  "span",
51225
51243
  {
51226
51244
  className: "inline-flex items-center gap-1 text-code shrink-0 text-ods-text-secondary opacity-60 hover:opacity-100 hover:text-ods-text-primary transition-opacity",
51227
51245
  title: `${sourceLabel} \xB7 ${chatRef.id}`,
51228
51246
  children: [
51229
- /* @__PURE__ */ jsx376(SourceIcon, { className: "h-3 w-3 shrink-0" }),
51230
- /* @__PURE__ */ jsx376("span", { className: "truncate max-w-[180px]", children: idDisplay })
51247
+ /* @__PURE__ */ jsx377(SourceIcon, { className: "h-3 w-3 shrink-0" }),
51248
+ /* @__PURE__ */ jsx377("span", { className: "truncate max-w-[180px]", children: idDisplay })
51231
51249
  ]
51232
51250
  }
51233
51251
  ) : null
@@ -51243,13 +51261,13 @@ function ProductReleaseChatCard({
51243
51261
  }) {
51244
51262
  const releaseProps = buildProps(item);
51245
51263
  const status = item?.version ? { label: String(item.version), variant: "grey" } : { label: "Release", variant: "grey" };
51246
- return /* @__PURE__ */ jsx376(
51264
+ return /* @__PURE__ */ jsx377(
51247
51265
  EntityMingoCard,
51248
51266
  {
51249
51267
  title: item?.title ?? "",
51250
51268
  description: item?.summary || releaseProps.formattedDate || void 0,
51251
51269
  cover: releaseProps.coverImage || void 0,
51252
- fallbackIcon: /* @__PURE__ */ jsx376(Rocket02Icon, { size: 24 }),
51270
+ fallbackIcon: /* @__PURE__ */ jsx377(Rocket02Icon, { size: 24 }),
51253
51271
  status,
51254
51272
  chatRef,
51255
51273
  isNewTab,
@@ -51270,12 +51288,12 @@ function CampaignChatCard({
51270
51288
  goalsCount > 0 ? `${goalsCount} goal${goalsCount !== 1 ? "s" : ""}` : null,
51271
51289
  "Marketing campaign"
51272
51290
  ].filter(Boolean).join(" \xB7 ");
51273
- return /* @__PURE__ */ jsx376(
51291
+ return /* @__PURE__ */ jsx377(
51274
51292
  EntityMingoCard,
51275
51293
  {
51276
51294
  title: item?.name ?? "",
51277
51295
  description: meta || item?.description || void 0,
51278
- fallbackIcon: /* @__PURE__ */ jsx376(Megaphone01Icon, { size: 24 }),
51296
+ fallbackIcon: /* @__PURE__ */ jsx377(Megaphone01Icon, { size: 24 }),
51279
51297
  chatRef,
51280
51298
  isNewTab,
51281
51299
  discuss,
@@ -51294,7 +51312,7 @@ function EntityMingoCard({
51294
51312
  menuAriaLabel,
51295
51313
  discuss
51296
51314
  }) {
51297
- return /* @__PURE__ */ jsx376(
51315
+ return /* @__PURE__ */ jsx377(
51298
51316
  MingoInfoCard,
51299
51317
  {
51300
51318
  title,
@@ -51329,13 +51347,13 @@ function BlogChatCard({
51329
51347
  }) {
51330
51348
  const category = Array.isArray(item?.categories) ? item.categories.find((c) => c && c.name)?.name : void 0;
51331
51349
  const status = hasEmbeddedVideo ? { label: "Video", variant: "primary" } : category ? { label: category, variant: "grey" } : void 0;
51332
- return /* @__PURE__ */ jsx376(
51350
+ return /* @__PURE__ */ jsx377(
51333
51351
  EntityMingoCard,
51334
51352
  {
51335
51353
  title: item?.title ?? "",
51336
51354
  description: item?.summary ?? void 0,
51337
51355
  cover: entityCover(item?.featured_image, ogPlaceholder),
51338
- fallbackIcon: /* @__PURE__ */ jsx376(NewspaperIcon, { size: 24 }),
51356
+ fallbackIcon: /* @__PURE__ */ jsx377(NewspaperIcon, { size: 24 }),
51339
51357
  status,
51340
51358
  chatRef,
51341
51359
  isNewTab,
@@ -51352,13 +51370,13 @@ function CaseStudyChatCard({
51352
51370
  discuss
51353
51371
  }) {
51354
51372
  const meta = [item?.msp?.name, item?.user?.full_name].filter(Boolean).join(" \xB7 ");
51355
- return /* @__PURE__ */ jsx376(
51373
+ return /* @__PURE__ */ jsx377(
51356
51374
  EntityMingoCard,
51357
51375
  {
51358
51376
  title: item?.title ?? "",
51359
51377
  description: item?.summary || meta || void 0,
51360
51378
  cover: entityCover(item?.featured_image, ogPlaceholder),
51361
- fallbackIcon: /* @__PURE__ */ jsx376(TrophyIcon, { size: 24 }),
51379
+ fallbackIcon: /* @__PURE__ */ jsx377(TrophyIcon, { size: 24 }),
51362
51380
  status: { label: "Case study", variant: "grey" },
51363
51381
  chatRef,
51364
51382
  isNewTab,
@@ -51375,13 +51393,13 @@ function CustomerInterviewChatCard({
51375
51393
  discuss
51376
51394
  }) {
51377
51395
  const meta = [item?.user?.full_name, item?.msp?.name].filter(Boolean).join(" \xB7 ");
51378
- return /* @__PURE__ */ jsx376(
51396
+ return /* @__PURE__ */ jsx377(
51379
51397
  EntityMingoCard,
51380
51398
  {
51381
51399
  title: item?.title ?? "",
51382
51400
  description: item?.video_summary || meta || void 0,
51383
51401
  cover: entityCover(item?.featured_image, ogPlaceholder),
51384
- fallbackIcon: /* @__PURE__ */ jsx376(MicrophoneIcon, { size: 24 }),
51402
+ fallbackIcon: /* @__PURE__ */ jsx377(MicrophoneIcon, { size: 24 }),
51385
51403
  status: { label: "Interview", variant: "grey" },
51386
51404
  chatRef,
51387
51405
  isNewTab,
@@ -51398,13 +51416,13 @@ function InvestorUpdateChatCard({
51398
51416
  discuss
51399
51417
  }) {
51400
51418
  const title = item?.title || `Update #${item?.update_number ?? "?"}`;
51401
- return /* @__PURE__ */ jsx376(
51419
+ return /* @__PURE__ */ jsx377(
51402
51420
  EntityMingoCard,
51403
51421
  {
51404
51422
  title,
51405
51423
  description: item?.strategic_update || item?.content || formatInvestorUpdatePeriod(item?.period_start, item?.period_end) || void 0,
51406
51424
  cover: entityCover(item?.featured_image, ogPlaceholder),
51407
- fallbackIcon: /* @__PURE__ */ jsx376(PresentationLineIcon, { size: 24 }),
51425
+ fallbackIcon: /* @__PURE__ */ jsx377(PresentationLineIcon, { size: 24 }),
51408
51426
  status: { label: "Investor update", variant: "grey" },
51409
51427
  chatRef,
51410
51428
  isNewTab,
@@ -51421,13 +51439,13 @@ function OnboardingGuideChatCard({
51421
51439
  discuss
51422
51440
  }) {
51423
51441
  const cover = entityCover(item?.featured_image) ?? entityCover(item?.main_video_thumbnail) ?? entityCover(item?.og_image_url, ogPlaceholder);
51424
- return /* @__PURE__ */ jsx376(
51442
+ return /* @__PURE__ */ jsx377(
51425
51443
  EntityMingoCard,
51426
51444
  {
51427
51445
  title: item?.title ?? "",
51428
51446
  description: item?.summary ?? item?.description ?? void 0,
51429
51447
  cover,
51430
- fallbackIcon: /* @__PURE__ */ jsx376(CompassIcon, { size: 24 }),
51448
+ fallbackIcon: /* @__PURE__ */ jsx377(CompassIcon, { size: 24 }),
51431
51449
  status: { label: "Guide", variant: "grey" },
51432
51450
  chatRef,
51433
51451
  isNewTab,
@@ -51445,7 +51463,7 @@ function ProgramChatCard({
51445
51463
  ogPlaceholder,
51446
51464
  discuss
51447
51465
  }) {
51448
- const icon = configKey === "webinar" ? /* @__PURE__ */ jsx376(PresentationBarIcon, { size: 24 }) : configKey === "event" ? /* @__PURE__ */ jsx376(CalendarIcon, { size: 24 }) : /* @__PURE__ */ jsx376(MicrophoneIcon, { size: 24 });
51466
+ const icon = configKey === "webinar" ? /* @__PURE__ */ jsx377(PresentationBarIcon, { size: 24 }) : configKey === "event" ? /* @__PURE__ */ jsx377(CalendarIcon, { size: 24 }) : /* @__PURE__ */ jsx377(MicrophoneIcon, { size: 24 });
51449
51467
  const isScheduled = item?.status === "scheduled";
51450
51468
  let typeMeta;
51451
51469
  if (configKey === "podcast" && typeof item?.duration_seconds === "number" && item.duration_seconds > 0 && !isScheduled) {
@@ -51459,7 +51477,7 @@ function ProgramChatCard({
51459
51477
  }
51460
51478
  const itemDate = formatDateUTC(item?.date ?? null, { fallback: "", timezone: "local" });
51461
51479
  const meta = [itemDate, typeMeta].filter(Boolean).join(" \xB7 ");
51462
- return /* @__PURE__ */ jsx376(
51480
+ return /* @__PURE__ */ jsx377(
51463
51481
  EntityMingoCard,
51464
51482
  {
51465
51483
  title: item?.title ?? "",
@@ -51483,13 +51501,13 @@ function RoadmapChatCard({
51483
51501
  }) {
51484
51502
  const logoUrl = typeof item?.icon === "string" && item.icon.startsWith("http") ? item.icon : void 0;
51485
51503
  const useTypeIcon = cardType === "internal_task" || !logoUrl && item?.customItemId != null;
51486
- const defaultIcon = cardType === "delivery_item" ? /* @__PURE__ */ jsx376(TruckFastIcon, { size: 24 }) : cardType === "internal_task" ? /* @__PURE__ */ jsx376(CheckSquareIcon, { size: 24 }) : /* @__PURE__ */ jsx376(MapIcon, { size: 24 });
51487
- const icon = useTypeIcon ? /* @__PURE__ */ jsx376(TaskTypeIcon, { customItemId: item?.customItemId, className: "size-6" }) : logoUrl ? (
51504
+ const defaultIcon = cardType === "delivery_item" ? /* @__PURE__ */ jsx377(TruckFastIcon, { size: 24 }) : cardType === "internal_task" ? /* @__PURE__ */ jsx377(CheckSquareIcon, { size: 24 }) : /* @__PURE__ */ jsx377(MapIcon, { size: 24 });
51505
+ const icon = useTypeIcon ? /* @__PURE__ */ jsx377(TaskTypeIcon, { customItemId: item?.customItemId, className: "size-6" }) : logoUrl ? (
51488
51506
  // Contained (not full-bleed) so the integration logo keeps its aspect
51489
51507
  // ratio inside the bordered icon box — matches RoadmapCard.
51490
- /* @__PURE__ */ jsx376("img", { src: logoUrl, alt: "", className: "size-6 object-contain" })
51508
+ /* @__PURE__ */ jsx377("img", { src: logoUrl, alt: "", className: "size-6 object-contain" })
51491
51509
  ) : defaultIcon;
51492
- return /* @__PURE__ */ jsx376(
51510
+ return /* @__PURE__ */ jsx377(
51493
51511
  EntityMingoCard,
51494
51512
  {
51495
51513
  title: item?.title ?? "",
@@ -51504,11 +51522,11 @@ function RoadmapChatCard({
51504
51522
  );
51505
51523
  }
51506
51524
  var FINANCIAL_CARD_CONFIGS = {
51507
- financial_kpi: { label: "Financial KPI", icon: () => /* @__PURE__ */ jsx376(ChartBar01VerIcon, { size: 24 }) },
51508
- cap_table: { label: "Cap table entry", icon: () => /* @__PURE__ */ jsx376(ChartPieIcon, { size: 24 }) },
51509
- profit_loss: { label: "P&L period", icon: () => /* @__PURE__ */ jsx376(MoneyBillDollarIcon, { size: 24 }) },
51510
- balance_sheet: { label: "Balance sheet", icon: () => /* @__PURE__ */ jsx376(BankIcon, { size: 24 }) },
51511
- cash_flow: { label: "Cash flow", icon: () => /* @__PURE__ */ jsx376(CoinsExchangeCurrencyIcon, { size: 24 }) }
51525
+ financial_kpi: { label: "Financial KPI", icon: () => /* @__PURE__ */ jsx377(ChartBar01VerIcon, { size: 24 }) },
51526
+ cap_table: { label: "Cap table entry", icon: () => /* @__PURE__ */ jsx377(ChartPieIcon, { size: 24 }) },
51527
+ profit_loss: { label: "P&L period", icon: () => /* @__PURE__ */ jsx377(MoneyBillDollarIcon, { size: 24 }) },
51528
+ balance_sheet: { label: "Balance sheet", icon: () => /* @__PURE__ */ jsx377(BankIcon, { size: 24 }) },
51529
+ cash_flow: { label: "Cash flow", icon: () => /* @__PURE__ */ jsx377(CoinsExchangeCurrencyIcon, { size: 24 }) }
51512
51530
  };
51513
51531
  function financialRegistryEntries() {
51514
51532
  const out = {};
@@ -51517,7 +51535,7 @@ function financialRegistryEntries() {
51517
51535
  mode: "no-fetch",
51518
51536
  label: cfg.label,
51519
51537
  bareInline: true,
51520
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51538
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51521
51539
  GenericFinancialChatCard,
51522
51540
  {
51523
51541
  chatRef,
@@ -51545,7 +51563,7 @@ function githubRegistryEntries() {
51545
51563
  mode: "no-fetch",
51546
51564
  label: cfg.label,
51547
51565
  bareInline: true,
51548
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51566
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51549
51567
  GitHubChatCard,
51550
51568
  {
51551
51569
  chatRef,
@@ -51571,8 +51589,8 @@ function programRegistryEntries() {
51571
51589
  label: cfg.label,
51572
51590
  contentRefType: cfg.contentRefType,
51573
51591
  bareInline: true,
51574
- skeleton: () => /* @__PURE__ */ jsx376(ProgramCardSkeleton, { size: "sm" }),
51575
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51592
+ skeleton: () => /* @__PURE__ */ jsx377(ProgramCardSkeleton, { size: "sm" }),
51593
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51576
51594
  ProgramChatCard,
51577
51595
  {
51578
51596
  item,
@@ -51613,8 +51631,8 @@ function roadmapRegistryEntries() {
51613
51631
  contentRefType: cfg.contentRefType,
51614
51632
  bareInline: true,
51615
51633
  ...cfg.noComposedHref ? { noComposedHref: true } : {},
51616
- skeleton: () => /* @__PURE__ */ jsx376(RoadmapCardSkeleton, { size: "sm" }),
51617
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51634
+ skeleton: () => /* @__PURE__ */ jsx377(RoadmapCardSkeleton, { size: "sm" }),
51635
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51618
51636
  RoadmapChatCard,
51619
51637
  {
51620
51638
  item,
@@ -51631,11 +51649,28 @@ function roadmapRegistryEntries() {
51631
51649
  var CHAT_CARD_REGISTRY = {
51632
51650
  // ───────── no-fetch: ChatRef carries everything ─────────
51633
51651
  ...githubRegistryEntries(),
51652
+ // Generic TOMBSTONE for entities a chat action deleted (ClickUp task
51653
+ // today; any deletable entity tomorrow). No fetch, no navigation —
51654
+ // the entity no longer resolves anywhere; the placeholder keeps the
51655
+ // thread's integrity (Teams/Slack "This message was deleted" pattern).
51656
+ deleted_data: {
51657
+ mode: "no-fetch",
51658
+ label: "Deleted",
51659
+ bareInline: true,
51660
+ render: (chatRef) => /* @__PURE__ */ jsx377(
51661
+ DeletedDataCard,
51662
+ {
51663
+ title: chatRef.title ?? null,
51664
+ entityLabel: chatRef.metadata?.entity_label ?? null,
51665
+ recoveryNote: chatRef.metadata?.recovery_note ?? null
51666
+ }
51667
+ )
51668
+ },
51634
51669
  slack_message: {
51635
51670
  mode: "no-fetch",
51636
51671
  label: "Slack message",
51637
51672
  bareInline: true,
51638
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51673
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51639
51674
  SlackChatCard,
51640
51675
  {
51641
51676
  chatRef,
@@ -51648,14 +51683,14 @@ var CHAT_CARD_REGISTRY = {
51648
51683
  mode: "no-fetch",
51649
51684
  label: "FAQ",
51650
51685
  bareInline: true,
51651
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(FaqChatCard, { chatRef, isNewTab: opts.isNewTab, discuss: opts.discuss })
51686
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(FaqChatCard, { chatRef, isNewTab: opts.isNewTab, discuss: opts.discuss })
51652
51687
  },
51653
51688
  hubspot_ticket: {
51654
51689
  mode: "no-fetch",
51655
51690
  label: "HubSpot ticket",
51656
51691
  // `MingoInfoCard` is the whole card — no "Ask"/provenance source row.
51657
51692
  bareInline: true,
51658
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51693
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51659
51694
  HubspotTicketChatCard,
51660
51695
  {
51661
51696
  chatRef,
@@ -51668,7 +51703,7 @@ var CHAT_CARD_REGISTRY = {
51668
51703
  mode: "no-fetch",
51669
51704
  label: "HubSpot ticket (anon)",
51670
51705
  bareInline: true,
51671
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51706
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51672
51707
  HubspotTicketChatCard,
51673
51708
  {
51674
51709
  chatRef,
@@ -51681,7 +51716,7 @@ var CHAT_CARD_REGISTRY = {
51681
51716
  mode: "no-fetch",
51682
51717
  label: "HubSpot ticket (self)",
51683
51718
  bareInline: true,
51684
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51719
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51685
51720
  HubspotTicketChatCard,
51686
51721
  {
51687
51722
  chatRef,
@@ -51694,7 +51729,7 @@ var CHAT_CARD_REGISTRY = {
51694
51729
  mode: "no-fetch",
51695
51730
  label: "Data-room doc",
51696
51731
  bareInline: true,
51697
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51732
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51698
51733
  DataRoomDocChatCard,
51699
51734
  {
51700
51735
  chatRef,
@@ -51707,7 +51742,7 @@ var CHAT_CARD_REGISTRY = {
51707
51742
  mode: "no-fetch",
51708
51743
  label: "Doc page (markdown)",
51709
51744
  bareInline: true,
51710
- render: (chatRef, opts) => /* @__PURE__ */ jsx376(
51745
+ render: (chatRef, opts) => /* @__PURE__ */ jsx377(
51711
51746
  DataRoomDocChatCard,
51712
51747
  {
51713
51748
  chatRef,
@@ -51720,7 +51755,7 @@ var CHAT_CARD_REGISTRY = {
51720
51755
  mode: "no-fetch",
51721
51756
  label: "Video",
51722
51757
  bareInline: true,
51723
- render: (chatRef) => /* @__PURE__ */ jsx376(ChatInlineVideoPill, { chatRef })
51758
+ render: (chatRef) => /* @__PURE__ */ jsx377(ChatInlineVideoPill, { chatRef })
51724
51759
  },
51725
51760
  ...financialRegistryEntries(),
51726
51761
  // ───────── fetch: needs full row from list API ─────────
@@ -51729,8 +51764,8 @@ var CHAT_CARD_REGISTRY = {
51729
51764
  label: "Blog post",
51730
51765
  contentRefType: "blog_post_existing",
51731
51766
  bareInline: true,
51732
- skeleton: () => /* @__PURE__ */ jsx376(BlogCardSkeleton, { size: "sm" }),
51733
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51767
+ skeleton: () => /* @__PURE__ */ jsx377(BlogCardSkeleton, { size: "sm" }),
51768
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51734
51769
  BlogChatCard,
51735
51770
  {
51736
51771
  item,
@@ -51747,8 +51782,8 @@ var CHAT_CARD_REGISTRY = {
51747
51782
  label: "Case study",
51748
51783
  contentRefType: "case_study",
51749
51784
  bareInline: true,
51750
- skeleton: () => /* @__PURE__ */ jsx376(CaseStudyCardSkeleton, { size: "sm" }),
51751
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51785
+ skeleton: () => /* @__PURE__ */ jsx377(CaseStudyCardSkeleton, { size: "sm" }),
51786
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51752
51787
  CaseStudyChatCard,
51753
51788
  {
51754
51789
  item,
@@ -51764,8 +51799,8 @@ var CHAT_CARD_REGISTRY = {
51764
51799
  label: "Customer interview",
51765
51800
  contentRefType: "customer_interview",
51766
51801
  bareInline: true,
51767
- skeleton: () => /* @__PURE__ */ jsx376(CustomerInterviewCardSkeleton, { size: "sm" }),
51768
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51802
+ skeleton: () => /* @__PURE__ */ jsx377(CustomerInterviewCardSkeleton, { size: "sm" }),
51803
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51769
51804
  CustomerInterviewChatCard,
51770
51805
  {
51771
51806
  item,
@@ -51781,10 +51816,10 @@ var CHAT_CARD_REGISTRY = {
51781
51816
  label: "Product release",
51782
51817
  contentRefType: "product_release",
51783
51818
  bareInline: true,
51784
- skeleton: () => /* @__PURE__ */ jsx376(ProductReleaseCardSkeleton, { size: "sm" }),
51819
+ skeleton: () => /* @__PURE__ */ jsx377(ProductReleaseCardSkeleton, { size: "sm" }),
51785
51820
  render: (item, chatRef, opts) => {
51786
51821
  const builder = opts?.extras?.buildProductReleaseCardProps ?? defaultBuildProductReleaseCardProps;
51787
- return /* @__PURE__ */ jsx376(
51822
+ return /* @__PURE__ */ jsx377(
51788
51823
  ProductReleaseChatCard,
51789
51824
  {
51790
51825
  item,
@@ -51802,8 +51837,8 @@ var CHAT_CARD_REGISTRY = {
51802
51837
  label: "Investor update",
51803
51838
  contentRefType: "investor_update",
51804
51839
  bareInline: true,
51805
- skeleton: () => /* @__PURE__ */ jsx376(InvestorUpdateCardSkeleton, { size: "sm" }),
51806
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51840
+ skeleton: () => /* @__PURE__ */ jsx377(InvestorUpdateCardSkeleton, { size: "sm" }),
51841
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51807
51842
  InvestorUpdateChatCard,
51808
51843
  {
51809
51844
  item,
@@ -51821,8 +51856,8 @@ var CHAT_CARD_REGISTRY = {
51821
51856
  bareInline: true,
51822
51857
  // "Display" affordance (verbatim guide body) instead of "Ask".
51823
51858
  displayAction: true,
51824
- skeleton: () => /* @__PURE__ */ jsx376(OnboardingGuideCardSkeleton, { size: "sm" }),
51825
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51859
+ skeleton: () => /* @__PURE__ */ jsx377(OnboardingGuideCardSkeleton, { size: "sm" }),
51860
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51826
51861
  OnboardingGuideChatCard,
51827
51862
  {
51828
51863
  item,
@@ -51838,11 +51873,11 @@ var CHAT_CARD_REGISTRY = {
51838
51873
  label: "Marketing campaign",
51839
51874
  contentRefType: "marketing_campaign",
51840
51875
  bareInline: true,
51841
- skeleton: () => /* @__PURE__ */ jsx376(CampaignCardAdminSkeleton, {}),
51876
+ skeleton: () => /* @__PURE__ */ jsx377(CampaignCardAdminSkeleton, {}),
51842
51877
  // No public viewer — synthesize the hub-internal admin URL post-fetch
51843
51878
  // so the wrapper + isNewTab computation see the actual destination.
51844
51879
  fallbackHref: (item) => item?.id ? `/admin/campaigns/${encodeURIComponent(item.id)}` : null,
51845
- render: (item, chatRef, opts) => /* @__PURE__ */ jsx376(
51880
+ render: (item, chatRef, opts) => /* @__PURE__ */ jsx377(
51846
51881
  CampaignChatCard,
51847
51882
  {
51848
51883
  item,
@@ -51876,7 +51911,7 @@ function ChatCardNavWrap({
51876
51911
  e.stopPropagation();
51877
51912
  if (!isNewTab && panel?.closeChat) panel.closeChat();
51878
51913
  };
51879
- return /* @__PURE__ */ jsx376("span", { className: "contents", onClickCapture, children });
51914
+ return /* @__PURE__ */ jsx377("span", { className: "contents", onClickCapture, children });
51880
51915
  }
51881
51916
  function ChatCardLoader({
51882
51917
  chatRef,
@@ -51935,7 +51970,7 @@ function ChatCardLoader({
51935
51970
  const discussFn = useDisplay ? onDisplay : onDiscuss;
51936
51971
  const discuss = discussFn ? {
51937
51972
  label: useDisplay ? "Display" : "Ask Mingo",
51938
- icon: useDisplay ? /* @__PURE__ */ jsx376(FileContentIcon, { size: 20 }) : /* @__PURE__ */ jsx376(
51973
+ icon: useDisplay ? /* @__PURE__ */ jsx377(FileContentIcon, { size: 20 }) : /* @__PURE__ */ jsx377(
51939
51974
  MingoIcon,
51940
51975
  {
51941
51976
  className: "size-5",
@@ -51954,7 +51989,7 @@ function ChatCardLoader({
51954
51989
  discuss
51955
51990
  };
51956
51991
  const path = typeof finalChatRef.metadata?.path === "string" ? finalChatRef.metadata.path : null;
51957
- const navWrap = (children) => /* @__PURE__ */ jsx376(
51992
+ const navWrap = (children) => /* @__PURE__ */ jsx377(
51958
51993
  ChatCardNavWrap,
51959
51994
  {
51960
51995
  href: finalChatRef.url ?? null,
@@ -51969,7 +52004,7 @@ function ChatCardLoader({
51969
52004
  if (entry.bareInline) {
51970
52005
  return navWrap(entry.render(finalChatRef, renderOpts));
51971
52006
  }
51972
- return /* @__PURE__ */ jsx376(
52007
+ return /* @__PURE__ */ jsx377(
51973
52008
  ChatCardWithDiscuss,
51974
52009
  {
51975
52010
  chatRef: finalChatRef,
@@ -51980,12 +52015,12 @@ function ChatCardLoader({
51980
52015
  }
51981
52016
  );
51982
52017
  }
51983
- if (isLoading) return /* @__PURE__ */ jsx376(Fragment87, { children: entry.skeleton() });
52018
+ if (isLoading) return /* @__PURE__ */ jsx377(Fragment87, { children: entry.skeleton() });
51984
52019
  if (!item) return null;
51985
52020
  if (entry.bareInline) {
51986
- return /* @__PURE__ */ jsx376(Fragment87, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
52021
+ return /* @__PURE__ */ jsx377(Fragment87, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
51987
52022
  }
51988
- return /* @__PURE__ */ jsx376(
52023
+ return /* @__PURE__ */ jsx377(
51989
52024
  ChatCardWithDiscuss,
51990
52025
  {
51991
52026
  chatRef: finalChatRef,
@@ -52000,7 +52035,7 @@ function renderChatInlineEntityCard(chatRef, options = {}) {
52000
52035
  const { onDiscuss, onDisplay, baseRoute, chipBasePlatform, extras } = options;
52001
52036
  const m = chatRef.metadata ?? {};
52002
52037
  const hasVideo = typeof m.videoUrl === "string" && m.videoUrl.length > 0 || typeof m.youtubeUrl === "string" && m.youtubeUrl.length > 0 || typeof m.highlightVideoUrl === "string" && m.highlightVideoUrl.length > 0;
52003
- const loader = /* @__PURE__ */ jsx376(
52038
+ const loader = /* @__PURE__ */ jsx377(
52004
52039
  ChatCardLoader,
52005
52040
  {
52006
52041
  chatRef,
@@ -52012,7 +52047,7 @@ function renderChatInlineEntityCard(chatRef, options = {}) {
52012
52047
  }
52013
52048
  );
52014
52049
  if (hasVideo) {
52015
- return /* @__PURE__ */ jsx376(BlockCard, { inline: loader, children: /* @__PURE__ */ jsx376(ChatVideoEntityCard, { chatRef }) });
52050
+ return /* @__PURE__ */ jsx377(BlockCard, { inline: loader, children: /* @__PURE__ */ jsx377(ChatVideoEntityCard, { chatRef }) });
52016
52051
  }
52017
52052
  return loader;
52018
52053
  }
@@ -53252,7 +53287,7 @@ function useChatAttachments() {
53252
53287
 
53253
53288
  // src/components/chat/hooks/use-chat-attachment-image-gallery.tsx
53254
53289
  import { useCallback as useCallback50, useEffect as useEffect87, useRef as useRef71, useState as useState118 } from "react";
53255
- import { jsx as jsx377 } from "react/jsx-runtime";
53290
+ import { jsx as jsx378 } from "react/jsx-runtime";
53256
53291
  var CLOSED = { isOpen: false, images: [], initialIndex: 0 };
53257
53292
  function useChatAttachmentImageGallery() {
53258
53293
  const runtime = useRequiredChatRuntime();
@@ -53288,7 +53323,7 @@ function useChatAttachmentImageGallery() {
53288
53323
  root.addEventListener("click", onClick);
53289
53324
  return () => root.removeEventListener("click", onClick);
53290
53325
  }, [viewUrlPrefix]);
53291
- const modal = state.isOpen ? /* @__PURE__ */ jsx377(
53326
+ const modal = state.isOpen ? /* @__PURE__ */ jsx378(
53292
53327
  ImageGalleryModal,
53293
53328
  {
53294
53329
  images: state.images,
@@ -53537,12 +53572,101 @@ function useChat({
53537
53572
  { hidden: true }
53538
53573
  );
53539
53574
  };
53540
- currentAssistantSegmentsRef.current.push({
53541
- ...seg,
53542
- onApprove: wrappedApprove,
53543
- onReject: wrappedReject
53544
- });
53545
- updateLastAssistantMessage([...currentAssistantSegmentsRef.current]);
53575
+ const toToolCall = (d) => {
53576
+ const fields = Array.isArray(d?.fields) ? d.fields : [];
53577
+ const detailField = fields.find((f) => /^(title|subject|task|name)$/i.test(f.label)) ?? fields[0];
53578
+ const base = typeof d?.command === "string" && d.command ? d.command : "Tool call";
53579
+ return {
53580
+ toolExecutionRequestId: String(d?.requestId ?? ""),
53581
+ toolName: String(d?.approvalType ?? "tool"),
53582
+ toolTitle: detailField ? `${base} \u2014 ${detailField.value}` : base,
53583
+ requiresApproval: true,
53584
+ // Field rows become the expandable args block so the
53585
+ // per-proposal detail from the single-card view stays
53586
+ // reachable inside the batch.
53587
+ toolCallArguments: fields.length > 0 ? Object.fromEntries(fields.map((f) => [f.label, f.value])) : null
53588
+ };
53589
+ };
53590
+ const makeBatchHandlers = (anchorId) => {
53591
+ const findBatch = (segments) => segments.find(
53592
+ (s) => s.type === "approval_batch" && s.data.approvalRequestId === anchorId
53593
+ );
53594
+ const setBatchStatus = (status) => {
53595
+ setMessages((prev) => {
53596
+ for (let i = prev.length - 1; i >= 0; i--) {
53597
+ const m = prev[i];
53598
+ if (m.role !== "assistant" || !Array.isArray(m.content)) continue;
53599
+ const segments = m.content;
53600
+ if (!findBatch(segments)) continue;
53601
+ const next = [...prev];
53602
+ next[i] = {
53603
+ ...m,
53604
+ content: segments.map(
53605
+ (s) => s.type === "approval_batch" && s.data.approvalRequestId === anchorId ? { ...s, status } : s
53606
+ )
53607
+ };
53608
+ return next;
53609
+ }
53610
+ return prev;
53611
+ });
53612
+ };
53613
+ const act = (action) => async () => {
53614
+ let ids = [];
53615
+ setMessages((prev) => {
53616
+ for (let i = prev.length - 1; i >= 0; i--) {
53617
+ const m = prev[i];
53618
+ if (m.role !== "assistant" || !Array.isArray(m.content)) continue;
53619
+ const batch = findBatch(m.content);
53620
+ if (batch) {
53621
+ ids = batch.data.toolCalls.map((c) => c.toolExecutionRequestId);
53622
+ break;
53623
+ }
53624
+ }
53625
+ return prev;
53626
+ });
53627
+ setBatchStatus(action === "approve" ? "approved" : "rejected");
53628
+ for (const id of ids) {
53629
+ await sendMessage(
53630
+ "",
53631
+ { approvalAction: { proposalId: id, action } },
53632
+ { hidden: true }
53633
+ );
53634
+ }
53635
+ };
53636
+ return { onApprove: act("approve"), onReject: act("reject") };
53637
+ };
53638
+ const liveSegments = [...currentAssistantSegmentsRef.current];
53639
+ const lastSeg = liveSegments[liveSegments.length - 1];
53640
+ if (lastSeg && lastSeg.type === "approval_batch" && (lastSeg.status ?? "pending") === "pending") {
53641
+ liveSegments[liveSegments.length - 1] = {
53642
+ ...lastSeg,
53643
+ data: {
53644
+ ...lastSeg.data,
53645
+ toolCalls: [...lastSeg.data.toolCalls, toToolCall(seg.data)]
53646
+ }
53647
+ };
53648
+ } else if (lastSeg && lastSeg.type === "approval_request" && (lastSeg.status ?? "pending") === "pending") {
53649
+ const anchorId = String(lastSeg.data?.requestId ?? proposalId);
53650
+ liveSegments[liveSegments.length - 1] = {
53651
+ type: "approval_batch",
53652
+ status: "pending",
53653
+ data: {
53654
+ approvalRequestId: anchorId,
53655
+ approvalType: "chat",
53656
+ toolCalls: [toToolCall(lastSeg.data), toToolCall(seg.data)],
53657
+ executions: {}
53658
+ },
53659
+ ...makeBatchHandlers(anchorId)
53660
+ };
53661
+ } else {
53662
+ liveSegments.push({
53663
+ ...seg,
53664
+ onApprove: wrappedApprove,
53665
+ onReject: wrappedReject
53666
+ });
53667
+ }
53668
+ currentAssistantSegmentsRef.current = liveSegments;
53669
+ updateLastAssistantMessage([...liveSegments]);
53546
53670
  } else if (segment.type === "decision_resolved") {
53547
53671
  const decision = segment;
53548
53672
  if (!decision.proposalId) continue;
@@ -53553,12 +53677,35 @@ function useChat({
53553
53677
  if (!Array.isArray(m.content)) continue;
53554
53678
  const segments = m.content;
53555
53679
  const hasMatch = segments.some(
53556
- (s) => s.type === "approval_request" && s.data?.requestId === decision.proposalId
53680
+ (s) => s.type === "approval_request" && s.data?.requestId === decision.proposalId || s.type === "approval_batch" && s.data?.toolCalls?.some(
53681
+ (c) => c?.toolExecutionRequestId === decision.proposalId
53682
+ )
53557
53683
  );
53558
53684
  if (!hasMatch) continue;
53559
- const flipped = segments.map(
53560
- (s) => s.type === "approval_request" && s.data?.requestId === decision.proposalId ? { ...s, status: decision.action } : s
53561
- );
53685
+ const flipped = segments.map((s) => {
53686
+ if (s.type === "approval_request" && s.data?.requestId === decision.proposalId) {
53687
+ return { ...s, status: decision.action };
53688
+ }
53689
+ if (s.type === "approval_batch" && s.data?.toolCalls?.some(
53690
+ (c) => c?.toolExecutionRequestId === decision.proposalId
53691
+ )) {
53692
+ const batch = s;
53693
+ return {
53694
+ ...batch,
53695
+ data: {
53696
+ ...batch.data,
53697
+ executions: {
53698
+ ...batch.data.executions ?? {},
53699
+ [decision.proposalId]: {
53700
+ status: "done",
53701
+ success: decision.action === "approved" ? decision.ok : false
53702
+ }
53703
+ }
53704
+ }
53705
+ };
53706
+ }
53707
+ return s;
53708
+ });
53562
53709
  const next = [...prev];
53563
53710
  next[i] = { ...m, content: flipped };
53564
53711
  return next;
@@ -58014,7 +58161,7 @@ import * as React147 from "react";
58014
58161
  import * as React146 from "react";
58015
58162
  import * as ReactDOM2 from "react-dom";
58016
58163
  import { createSlot } from "@radix-ui/react-slot";
58017
- import { jsx as jsx378 } from "react/jsx-runtime";
58164
+ import { jsx as jsx379 } from "react/jsx-runtime";
58018
58165
  var __defProp3 = Object.defineProperty;
58019
58166
  var __name3 = (target, value) => __defProp3(target, "name", { value, configurable: true });
58020
58167
  var NODES = [
@@ -58044,7 +58191,7 @@ var Primitive = NODES.reduce((primitive, node) => {
58044
58191
  if (typeof window !== "undefined") {
58045
58192
  window[/* @__PURE__ */ Symbol.for("radix-ui")] = true;
58046
58193
  }
58047
- return /* @__PURE__ */ jsx378(Comp, { ...primitiveProps, ref: forwardedRef });
58194
+ return /* @__PURE__ */ jsx379(Comp, { ...primitiveProps, ref: forwardedRef });
58048
58195
  });
58049
58196
  Node2.displayName = `Primitive.${node}`;
58050
58197
  return { ...primitive, [node]: Node2 };
@@ -58055,7 +58202,7 @@ function dispatchDiscreteCustomEvent(target, event) {
58055
58202
  __name3(dispatchDiscreteCustomEvent, "dispatchDiscreteCustomEvent");
58056
58203
 
58057
58204
  // node_modules/@radix-ui/react-visually-hidden/dist/index.mjs
58058
- import { jsx as jsx379 } from "react/jsx-runtime";
58205
+ import { jsx as jsx380 } from "react/jsx-runtime";
58059
58206
  var __defProp4 = Object.defineProperty;
58060
58207
  var __name4 = (target, value) => __defProp4(target, "name", { value, configurable: true });
58061
58208
  var VISUALLY_HIDDEN_STYLES = Object.freeze({
@@ -58073,7 +58220,7 @@ var VISUALLY_HIDDEN_STYLES = Object.freeze({
58073
58220
  });
58074
58221
  var VisuallyHidden = /* @__PURE__ */ React147.forwardRef(
58075
58222
  /* @__PURE__ */ __name4(function VisuallyHidden2(props, forwardedRef) {
58076
- return /* @__PURE__ */ jsx379(
58223
+ return /* @__PURE__ */ jsx380(
58077
58224
  Primitive.span,
58078
58225
  {
58079
58226
  ...props,
@@ -58263,7 +58410,7 @@ function useChatDialogManager({
58263
58410
 
58264
58411
  // src/components/chat/embeddable-chat.tsx
58265
58412
  init_next_navigation();
58266
- import { Fragment as Fragment88, jsx as jsx380, jsxs as jsxs302 } from "react/jsx-runtime";
58413
+ import { Fragment as Fragment88, jsx as jsx381, jsxs as jsxs303 } from "react/jsx-runtime";
58267
58414
  var DRAWER_DEFAULT_WIDTH_RATIO = 0.5;
58268
58415
  var DRAWER_WIDTH_KEY = "mingo-chat-width-v3";
58269
58416
  var DRAWER_DEFAULT_WIDTH_PX = 750;
@@ -58311,7 +58458,7 @@ function RailSlot({
58311
58458
  innerClassName,
58312
58459
  children
58313
58460
  }) {
58314
- return /* @__PURE__ */ jsx380(
58461
+ return /* @__PURE__ */ jsx381(
58315
58462
  "div",
58316
58463
  {
58317
58464
  className: cn(
@@ -58320,7 +58467,7 @@ function RailSlot({
58320
58467
  "shrink-0 overflow-hidden border-r border-ods-border transition-[width,opacity] ease-out",
58321
58468
  active ? "w-80 opacity-100 duration-[240ms]" : "w-0 opacity-0 duration-[300ms]"
58322
58469
  ),
58323
- children: /* @__PURE__ */ jsx380("div", { className: cn("h-full w-80", innerClassName), children })
58470
+ children: /* @__PURE__ */ jsx381("div", { className: cn("h-full w-80", innerClassName), children })
58324
58471
  }
58325
58472
  );
58326
58473
  }
@@ -58377,7 +58524,7 @@ function SourceChip({
58377
58524
  sourceRowCtxFromRuntime(runtime, { baseRoute, chipBasePlatform })
58378
58525
  );
58379
58526
  const Icon2 = cta.icon;
58380
- const icon = /* @__PURE__ */ jsx380(Icon2, { className: "h-3.5 w-3.5" });
58527
+ const icon = /* @__PURE__ */ jsx381(Icon2, { className: "h-3.5 w-3.5" });
58381
58528
  const chipClass = chatChipClass({ tone: "secondary" });
58382
58529
  const decideTab = (href, targetPlatform) => computeIsNewTab(runtime, href, targetPlatform);
58383
58530
  if (src.items && src.items.length > 0) {
@@ -58397,22 +58544,22 @@ function SourceChip({
58397
58544
  const ItemIcon = itemCta.icon;
58398
58545
  return {
58399
58546
  label: item.name,
58400
- icon: /* @__PURE__ */ jsx380(ItemIcon, { className: "h-3.5 w-3.5" }),
58547
+ icon: /* @__PURE__ */ jsx381(ItemIcon, { className: "h-3.5 w-3.5" }),
58401
58548
  href: itemCta.href ?? void 0,
58402
58549
  targetPlatform: itemCta.targetPlatform,
58403
58550
  path: item.path ?? null,
58404
58551
  secondaryAction: onDiscuss && itemCta.askable && itemCta.chatRef ? {
58405
- icon: /* @__PURE__ */ jsx380(MessageSquare3, {}),
58552
+ icon: /* @__PURE__ */ jsx381(MessageSquare3, {}),
58406
58553
  label: `Ask about ${item.name}`,
58407
58554
  onClick: () => onDiscuss(itemCta.chatRef)
58408
58555
  } : void 0
58409
58556
  };
58410
58557
  });
58411
- return /* @__PURE__ */ jsx380(
58558
+ return /* @__PURE__ */ jsx381(
58412
58559
  HoverDropdown,
58413
58560
  {
58414
58561
  items: dropdownItems,
58415
- renderAnchor: ({ href, targetPlatform, path, className, children }) => /* @__PURE__ */ jsx380(
58562
+ renderAnchor: ({ href, targetPlatform, path, className, children }) => /* @__PURE__ */ jsx381(
58416
58563
  NavLinkAnchorViaRuntime,
58417
58564
  {
58418
58565
  href,
@@ -58422,9 +58569,9 @@ function SourceChip({
58422
58569
  children
58423
58570
  }
58424
58571
  ),
58425
- children: /* @__PURE__ */ jsxs302("span", { className: `${chipClass} cursor-pointer`, children: [
58572
+ children: /* @__PURE__ */ jsxs303("span", { className: `${chipClass} cursor-pointer`, children: [
58426
58573
  icon,
58427
- /* @__PURE__ */ jsxs302("span", { className: "truncate max-w-[160px]", children: [
58574
+ /* @__PURE__ */ jsxs303("span", { className: "truncate max-w-[160px]", children: [
58428
58575
  "[",
58429
58576
  src.index,
58430
58577
  "] ",
@@ -58435,18 +58582,18 @@ function SourceChip({
58435
58582
  );
58436
58583
  }
58437
58584
  const displayName = src.name || formatRelativePath(src.path);
58438
- const chipBody = (label) => /* @__PURE__ */ jsxs302(Fragment88, { children: [
58585
+ const chipBody = (label) => /* @__PURE__ */ jsxs303(Fragment88, { children: [
58439
58586
  icon,
58440
- /* @__PURE__ */ jsxs302("span", { className: "truncate max-w-[160px]", children: [
58587
+ /* @__PURE__ */ jsxs303("span", { className: "truncate max-w-[160px]", children: [
58441
58588
  "[",
58442
58589
  src.index,
58443
58590
  "] ",
58444
58591
  label
58445
58592
  ] })
58446
58593
  ] });
58447
- const wrapChip = (clickable) => /* @__PURE__ */ jsxs302("span", { className: "inline-flex items-center", children: [
58594
+ const wrapChip = (clickable) => /* @__PURE__ */ jsxs303("span", { className: "inline-flex items-center", children: [
58448
58595
  clickable,
58449
- /* @__PURE__ */ jsx380(
58596
+ /* @__PURE__ */ jsx381(
58450
58597
  SourceActionButton,
58451
58598
  {
58452
58599
  chatRef: cta.chatRef,
@@ -58464,7 +58611,7 @@ function SourceChip({
58464
58611
  const resolvedHref = resolveHrefForRuntime(cta.href, runtime);
58465
58612
  const isNewTab = decideTab(resolvedHref, cta.targetPlatform ?? null);
58466
58613
  return wrapChip(
58467
- /* @__PURE__ */ jsx380(
58614
+ /* @__PURE__ */ jsx381(
58468
58615
  "a",
58469
58616
  {
58470
58617
  href: resolvedHref,
@@ -58480,7 +58627,7 @@ function SourceChip({
58480
58627
  const resolvedHref = resolveHrefForRuntime(cta.href, runtime);
58481
58628
  const isNewTab = decideTab(resolvedHref, cta.targetPlatform ?? null);
58482
58629
  return wrapChip(
58483
- /* @__PURE__ */ jsx380(
58630
+ /* @__PURE__ */ jsx381(
58484
58631
  "a",
58485
58632
  {
58486
58633
  href: resolvedHref,
@@ -58494,7 +58641,7 @@ function SourceChip({
58494
58641
  );
58495
58642
  }
58496
58643
  return wrapChip(
58497
- /* @__PURE__ */ jsx380("span", { className: `${chipClass} cursor-default`, title: displayName, children: chipBody(displayName) })
58644
+ /* @__PURE__ */ jsx381("span", { className: `${chipClass} cursor-default`, title: displayName, children: chipBody(displayName) })
58498
58645
  );
58499
58646
  }
58500
58647
  function SourceChips({
@@ -58509,9 +58656,9 @@ function SourceChips({
58509
58656
  if (cited.length === 0) {
58510
58657
  const fallback = uncited.slice(0, FALLBACK_TOP_RETRIEVED);
58511
58658
  if (fallback.length === 0) return null;
58512
- return /* @__PURE__ */ jsxs302("div", { className: "flex flex-col gap-1.5 mt-2 pt-2 border-t border-ods-border", children: [
58513
- /* @__PURE__ */ jsx380("span", { className: "text-h6 text-ods-text-muted uppercase", children: "Top retrieved sources" }),
58514
- /* @__PURE__ */ jsx380("div", { className: "flex flex-wrap gap-1.5", children: fallback.map((src) => /* @__PURE__ */ jsx380(
58659
+ return /* @__PURE__ */ jsxs303("div", { className: "flex flex-col gap-1.5 mt-2 pt-2 border-t border-ods-border", children: [
58660
+ /* @__PURE__ */ jsx381("span", { className: "text-h6 text-ods-text-muted uppercase", children: "Top retrieved sources" }),
58661
+ /* @__PURE__ */ jsx381("div", { className: "flex flex-wrap gap-1.5", children: fallback.map((src) => /* @__PURE__ */ jsx381(
58515
58662
  SourceChip,
58516
58663
  {
58517
58664
  src,
@@ -58526,14 +58673,14 @@ function SourceChips({
58526
58673
  }
58527
58674
  const hiddenCount = uncited.length;
58528
58675
  const hasOverflow = hiddenCount > 0;
58529
- return /* @__PURE__ */ jsxs302("div", { className: "flex flex-col gap-1.5 mt-2 pt-2 border-t border-ods-border", children: [
58530
- /* @__PURE__ */ jsx380("span", { className: "text-h6 text-ods-text-muted uppercase", children: "Sources" }),
58531
- /* @__PURE__ */ jsxs302(
58676
+ return /* @__PURE__ */ jsxs303("div", { className: "flex flex-col gap-1.5 mt-2 pt-2 border-t border-ods-border", children: [
58677
+ /* @__PURE__ */ jsx381("span", { className: "text-h6 text-ods-text-muted uppercase", children: "Sources" }),
58678
+ /* @__PURE__ */ jsxs303(
58532
58679
  "div",
58533
58680
  {
58534
58681
  className: `flex flex-wrap gap-1.5 ${expanded ? "max-h-[200px] overflow-y-auto overscroll-contain" : ""}`,
58535
58682
  children: [
58536
- cited.map((src) => /* @__PURE__ */ jsx380(
58683
+ cited.map((src) => /* @__PURE__ */ jsx381(
58537
58684
  SourceChip,
58538
58685
  {
58539
58686
  src,
@@ -58544,7 +58691,7 @@ function SourceChips({
58544
58691
  },
58545
58692
  src.index
58546
58693
  )),
58547
- expanded && uncited.map((src) => /* @__PURE__ */ jsx380(
58694
+ expanded && uncited.map((src) => /* @__PURE__ */ jsx381(
58548
58695
  SourceChip,
58549
58696
  {
58550
58697
  src,
@@ -58555,7 +58702,7 @@ function SourceChips({
58555
58702
  },
58556
58703
  src.index
58557
58704
  )),
58558
- hasOverflow && /* @__PURE__ */ jsx380(
58705
+ hasOverflow && /* @__PURE__ */ jsx381(
58559
58706
  "button",
58560
58707
  {
58561
58708
  onClick: () => setExpanded(!expanded),
@@ -58571,7 +58718,7 @@ function SourceChips({
58571
58718
  ] });
58572
58719
  }
58573
58720
  function EmbeddableChat(props) {
58574
- return /* @__PURE__ */ jsx380(EmbeddableChatInner, { ...props });
58721
+ return /* @__PURE__ */ jsx381(EmbeddableChatInner, { ...props });
58575
58722
  }
58576
58723
  function EmbeddableChatInner({
58577
58724
  baseRoute,
@@ -58890,7 +59037,7 @@ function EmbeddableChatInner({
58890
59037
  [discussRef, displayRef, resolvedBaseRoute, chipBasePlatform, extras]
58891
59038
  );
58892
59039
  const mingoAssistantIcon = useMemo55(
58893
- () => effectiveAssistantIcon ? /* @__PURE__ */ jsx380(EntityIcon, { icon: effectiveAssistantIcon, size: 24 }) : /* @__PURE__ */ jsx380(MingoIcon, { className: "h-6 w-6", cornerColor: "var(--ods-flamingo-cyan-base)" }),
59040
+ () => effectiveAssistantIcon ? /* @__PURE__ */ jsx381(EntityIcon, { icon: effectiveAssistantIcon, size: 24 }) : /* @__PURE__ */ jsx381(MingoIcon, { className: "h-6 w-6", cornerColor: "var(--ods-flamingo-cyan-base)" }),
58894
59041
  [effectiveAssistantIcon]
58895
59042
  );
58896
59043
  const timestampCacheRef = useRef81(/* @__PURE__ */ new Map());
@@ -59196,17 +59343,17 @@ function EmbeddableChatInner({
59196
59343
  onArchive: headerOnArchive,
59197
59344
  onOpenArchive: headerOnOpenArchive
59198
59345
  };
59199
- const body = /* @__PURE__ */ jsx380(PortalContainerContext.Provider, { value: portalHost, children: /* @__PURE__ */ jsxs302(CollisionBoundaryContext.Provider, { value: panelBoundary, children: [
59200
- /* @__PURE__ */ jsx380(
59346
+ const body = /* @__PURE__ */ jsx381(PortalContainerContext.Provider, { value: portalHost, children: /* @__PURE__ */ jsxs303(CollisionBoundaryContext.Provider, { value: panelBoundary, children: [
59347
+ /* @__PURE__ */ jsx381(
59201
59348
  "div",
59202
59349
  {
59203
59350
  ref: setPanelNode,
59204
59351
  className: `flex h-full flex-col overflow-hidden transition-colors duration-200 ${archiveOpen && !splitActive || stackedListView ? "bg-ods-card" : "bg-ods-bg"} ${previewMode ? "pointer-events-none select-none" : ""}`,
59205
- children: archiveOpen && !splitActive ? /* @__PURE__ */ jsx380(
59352
+ children: archiveOpen && !splitActive ? /* @__PURE__ */ jsx381(
59206
59353
  "div",
59207
59354
  {
59208
59355
  className: "flex flex-1 min-h-0 flex-col animate-in fade-in-0 duration-200",
59209
- children: /* @__PURE__ */ jsx380(
59356
+ children: /* @__PURE__ */ jsx381(
59210
59357
  ChatArchivePage,
59211
59358
  {
59212
59359
  dialogs: archivedDialogs,
@@ -59223,7 +59370,7 @@ function EmbeddableChatInner({
59223
59370
  )
59224
59371
  },
59225
59372
  "archive-view"
59226
- ) : /* @__PURE__ */ jsxs302(
59373
+ ) : /* @__PURE__ */ jsxs303(
59227
59374
  "div",
59228
59375
  {
59229
59376
  className: "flex flex-1 min-h-0 flex-col animate-in fade-in-0 duration-200",
@@ -59241,8 +59388,8 @@ function EmbeddableChatInner({
59241
59388
  // the viewport `md` breakpoint — otherwise a 720–799px panel on a
59242
59389
  // sub-`md` viewport would split the body yet drop to the mobile
59243
59390
  // single-bar header (no rail search / collapse controls).
59244
- /* @__PURE__ */ jsxs302("div", { className: "flex h-14 w-full flex-shrink-0 overflow-hidden border-b border-ods-border bg-ods-card", children: [
59245
- railPresence.mounted && /* @__PURE__ */ jsx380(
59391
+ /* @__PURE__ */ jsxs303("div", { className: "flex h-14 w-full flex-shrink-0 overflow-hidden border-b border-ods-border bg-ods-card", children: [
59392
+ railPresence.mounted && /* @__PURE__ */ jsx381(
59246
59393
  RailSlot,
59247
59394
  {
59248
59395
  active: railPresence.active,
@@ -59253,50 +59400,50 @@ function EmbeddableChatInner({
59253
59400
  // renders in the rail below); the chat block is untouched.
59254
59401
  // Back is a full-height leading cell, matching the other
59255
59402
  // header cells (not a small inline chevron).
59256
- /* @__PURE__ */ jsxs302(Fragment88, { children: [
59257
- /* @__PURE__ */ jsx380(
59403
+ /* @__PURE__ */ jsxs303(Fragment88, { children: [
59404
+ /* @__PURE__ */ jsx381(
59258
59405
  ChatHeaderIconButton,
59259
59406
  {
59260
59407
  divider: "right",
59261
59408
  onClick: closeArchive,
59262
59409
  "aria-label": "Back to chats",
59263
- children: /* @__PURE__ */ jsx380(Chevron02LeftIcon, { size: 24 })
59410
+ children: /* @__PURE__ */ jsx381(Chevron02LeftIcon, { size: 24 })
59264
59411
  }
59265
59412
  ),
59266
- /* @__PURE__ */ jsx380("div", { className: "flex min-w-0 flex-1 items-center px-[var(--spacing-system-mf)]", children: /* @__PURE__ */ jsx380("span", { className: "min-w-0 flex-1 truncate text-h3 text-ods-text-primary", children: "Chat Archive" }) })
59413
+ /* @__PURE__ */ jsx381("div", { className: "flex min-w-0 flex-1 items-center px-[var(--spacing-system-mf)]", children: /* @__PURE__ */ jsx381("span", { className: "min-w-0 flex-1 truncate text-h3 text-ods-text-primary", children: "Chat Archive" }) })
59267
59414
  ] })
59268
59415
  ) : (
59269
59416
  // "Current Chats" rail header — title fills, then the
59270
59417
  // search + archive controls. When search is open the
59271
59418
  // inline field takes over the title area in place
59272
59419
  // (Figma 116:51217) and the magnifier toggle is hidden.
59273
- /* @__PURE__ */ jsxs302(Fragment88, { children: [
59274
- railSearchOpen && mingoCaps.onSearchChange ? /* @__PURE__ */ jsx380(
59420
+ /* @__PURE__ */ jsxs303(Fragment88, { children: [
59421
+ railSearchOpen && mingoCaps.onSearchChange ? /* @__PURE__ */ jsx381(
59275
59422
  ChatHeaderSearchField,
59276
59423
  {
59277
59424
  initialValue: mingoCaps.searchQuery,
59278
59425
  onSearchChange: mingoCaps.onSearchChange,
59279
59426
  onCollapse: () => setRailSearchOpen(false)
59280
59427
  }
59281
- ) : /* @__PURE__ */ jsxs302(Fragment88, { children: [
59282
- /* @__PURE__ */ jsx380("div", { className: "flex min-w-0 flex-1 items-center px-[var(--spacing-system-mf)]", children: /* @__PURE__ */ jsx380("span", { className: "min-w-0 flex-1 truncate text-h3 text-ods-text-primary", children: "Current Chats" }) }),
59283
- mingoCaps.onSearchChange && /* @__PURE__ */ jsx380(
59428
+ ) : /* @__PURE__ */ jsxs303(Fragment88, { children: [
59429
+ /* @__PURE__ */ jsx381("div", { className: "flex min-w-0 flex-1 items-center px-[var(--spacing-system-mf)]", children: /* @__PURE__ */ jsx381("span", { className: "min-w-0 flex-1 truncate text-h3 text-ods-text-primary", children: "Current Chats" }) }),
59430
+ mingoCaps.onSearchChange && /* @__PURE__ */ jsx381(
59284
59431
  ChatHeaderIconButton,
59285
59432
  {
59286
59433
  onClick: () => setRailSearchOpen((o) => !o),
59287
59434
  "aria-label": "Search chats",
59288
59435
  "aria-pressed": railSearchOpen,
59289
- children: /* @__PURE__ */ jsx380(SearchIcon, { size: 24 })
59436
+ children: /* @__PURE__ */ jsx381(SearchIcon, { size: 24 })
59290
59437
  }
59291
59438
  )
59292
59439
  ] }),
59293
- headerOnOpenArchive && /* @__PURE__ */ jsx380(ChatHeaderIconButton, { onClick: headerOnOpenArchive, "aria-label": "Chat archive", children: /* @__PURE__ */ jsx380(ClockHistoryIcon, { size: 24 }) })
59440
+ headerOnOpenArchive && /* @__PURE__ */ jsx381(ChatHeaderIconButton, { onClick: headerOnOpenArchive, "aria-label": "Chat archive", children: /* @__PURE__ */ jsx381(ClockHistoryIcon, { size: 24 }) })
59294
59441
  ] })
59295
59442
  )
59296
59443
  }
59297
59444
  ),
59298
- /* @__PURE__ */ jsxs302("div", { className: "flex flex-1 min-w-0", children: [
59299
- /* @__PURE__ */ jsx380(
59445
+ /* @__PURE__ */ jsxs303("div", { className: "flex flex-1 min-w-0", children: [
59446
+ /* @__PURE__ */ jsx381(
59300
59447
  "button",
59301
59448
  {
59302
59449
  type: "button",
@@ -59304,17 +59451,17 @@ function EmbeddableChatInner({
59304
59451
  "aria-label": splitActive ? "Collapse chat list" : "Show chat list",
59305
59452
  "aria-pressed": !splitActive,
59306
59453
  className: "flex size-14 shrink-0 items-center justify-center border-r border-ods-border text-ods-text-secondary transition-colors hover:bg-ods-bg-hover hover:text-ods-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
59307
- children: splitActive ? /* @__PURE__ */ jsx380(Arrow02RightIcon, { size: 24 }) : /* @__PURE__ */ jsx380(Arrow02LeftIcon, { size: 24 })
59454
+ children: splitActive ? /* @__PURE__ */ jsx381(Arrow02RightIcon, { size: 24 }) : /* @__PURE__ */ jsx381(Arrow02LeftIcon, { size: 24 })
59308
59455
  }
59309
59456
  ),
59310
- /* @__PURE__ */ jsxs302("div", { className: "flex flex-1 min-w-0 items-center gap-[var(--spacing-system-m)] px-[var(--spacing-system-mf)] py-[var(--spacing-system-sf)]", children: [
59311
- /* @__PURE__ */ jsxs302("div", { className: "flex min-w-0 flex-col", children: [
59312
- /* @__PURE__ */ jsx380("p", { className: "truncate text-h3 leading-tight text-ods-text-primary", children: headerShowBack ? headerTitle : "New Chat" }),
59313
- headerPersonName && /* @__PURE__ */ jsx380("p", { className: "truncate text-h6 leading-tight text-ods-text-secondary", children: headerPersonName })
59457
+ /* @__PURE__ */ jsxs303("div", { className: "flex flex-1 min-w-0 items-center gap-[var(--spacing-system-m)] px-[var(--spacing-system-mf)] py-[var(--spacing-system-sf)]", children: [
59458
+ /* @__PURE__ */ jsxs303("div", { className: "flex min-w-0 flex-col", children: [
59459
+ /* @__PURE__ */ jsx381("p", { className: "truncate text-h3 leading-tight text-ods-text-primary", children: headerShowBack ? headerTitle : "New Chat" }),
59460
+ headerPersonName && /* @__PURE__ */ jsx381("p", { className: "truncate text-h6 leading-tight text-ods-text-secondary", children: headerPersonName })
59314
59461
  ] }),
59315
59462
  headerAvatar ? (
59316
59463
  // Owner avatar at the title cell's right edge (Figma 113:63273).
59317
- /* @__PURE__ */ jsx380(
59464
+ /* @__PURE__ */ jsx381(
59318
59465
  SquareAvatar,
59319
59466
  {
59320
59467
  variant: "round",
@@ -59329,17 +59476,17 @@ function EmbeddableChatInner({
59329
59476
  )
59330
59477
  ) : null
59331
59478
  ] }),
59332
- isViewingArchived && headerOnRestore && /* @__PURE__ */ jsx380(ChatHeaderIconButton, { onClick: headerOnRestore, "aria-label": "Unarchive chat", children: /* @__PURE__ */ jsx380(Refresh01LeftIcon, { size: 24 }) }),
59333
- headerShowBack && !isViewingArchived && splitHeaderMenuItems.length > 0 && /* @__PURE__ */ jsx380(
59479
+ isViewingArchived && headerOnRestore && /* @__PURE__ */ jsx381(ChatHeaderIconButton, { onClick: headerOnRestore, "aria-label": "Unarchive chat", children: /* @__PURE__ */ jsx381(Refresh01LeftIcon, { size: 24 }) }),
59480
+ headerShowBack && !isViewingArchived && splitHeaderMenuItems.length > 0 && /* @__PURE__ */ jsx381(
59334
59481
  ActionsMenuDropdown,
59335
59482
  {
59336
59483
  triggerAriaLabel: "Chat actions",
59337
59484
  onCloseAutoFocus: (e) => e.preventDefault(),
59338
59485
  groups: [{ items: splitHeaderMenuItems }],
59339
- customTrigger: /* @__PURE__ */ jsx380(ChatHeaderIconButton, { "aria-label": "Chat actions", children: /* @__PURE__ */ jsx380(Ellipsis01Icon, { size: 24 }) })
59486
+ customTrigger: /* @__PURE__ */ jsx381(ChatHeaderIconButton, { "aria-label": "Chat actions", children: /* @__PURE__ */ jsx381(Ellipsis01Icon, { size: 24 }) })
59340
59487
  }
59341
59488
  ),
59342
- /* @__PURE__ */ jsx380(ChatHeaderIconButton, { onClick: handleClose, "aria-label": "Close", children: /* @__PURE__ */ jsx380(XmarkIcon, { size: 24 }) })
59489
+ /* @__PURE__ */ jsx381(ChatHeaderIconButton, { onClick: handleClose, "aria-label": "Close", children: /* @__PURE__ */ jsx381(XmarkIcon, { size: 24 }) })
59343
59490
  ] })
59344
59491
  ] })
59345
59492
  ) : (
@@ -59347,11 +59494,11 @@ function EmbeddableChatInner({
59347
59494
  // guide, resolved into `narrowHeaderProps` above. (Wide layouts,
59348
59495
  // including rail-collapsed, use the wide header above.) Embedded
59349
59496
  // previews (hero demo tabs) force the compact bar via `compact`.
59350
- /* @__PURE__ */ jsx380(ChatPanelHeader, { ...narrowHeaderProps, compact: previewMode })
59497
+ /* @__PURE__ */ jsx381(ChatPanelHeader, { ...narrowHeaderProps, compact: previewMode })
59351
59498
  ),
59352
- activeMode === "guide" && hasMingoMode && /* @__PURE__ */ jsx380(GuideModeBanner, { className: "animate-in fade-in-0 duration-200" }),
59353
- /* @__PURE__ */ jsxs302("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
59354
- railPresence.mounted && /* @__PURE__ */ jsx380(
59499
+ activeMode === "guide" && hasMingoMode && /* @__PURE__ */ jsx381(GuideModeBanner, { className: "animate-in fade-in-0 duration-200" }),
59500
+ /* @__PURE__ */ jsxs303("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
59501
+ railPresence.mounted && /* @__PURE__ */ jsx381(
59355
59502
  RailSlot,
59356
59503
  {
59357
59504
  active: railPresence.active,
@@ -59359,7 +59506,7 @@ function EmbeddableChatInner({
59359
59506
  children: archiveOpen ? (
59360
59507
  // Archive list inside the rail (header lives in the split
59361
59508
  // header's left cell above). Right chat block stays put.
59362
- /* @__PURE__ */ jsx380(
59509
+ /* @__PURE__ */ jsx381(
59363
59510
  ChatArchivePage,
59364
59511
  {
59365
59512
  embedded: true,
@@ -59373,7 +59520,7 @@ function EmbeddableChatInner({
59373
59520
  }
59374
59521
  }
59375
59522
  )
59376
- ) : /* @__PURE__ */ jsx380(
59523
+ ) : /* @__PURE__ */ jsx381(
59377
59524
  MingoHistoryRail,
59378
59525
  {
59379
59526
  dialogs,
@@ -59397,11 +59544,11 @@ function EmbeddableChatInner({
59397
59544
  )
59398
59545
  }
59399
59546
  ),
59400
- /* @__PURE__ */ jsx380("div", { className: "flex flex-1 flex-col min-h-0 min-w-0", children: stackedListView ? (
59547
+ /* @__PURE__ */ jsx381("div", { className: "flex flex-1 flex-col min-h-0 min-w-0", children: stackedListView ? (
59401
59548
  // Narrow "Current Chats" list (Figma 341:36190) — the default
59402
59549
  // single-column view. No composer here; "Start New Chat" opens
59403
59550
  // the compose view.
59404
- /* @__PURE__ */ jsx380(
59551
+ /* @__PURE__ */ jsx381(
59405
59552
  MingoHistoryRail,
59406
59553
  {
59407
59554
  className: "animate-in fade-in-0 duration-200",
@@ -59424,17 +59571,17 @@ function EmbeddableChatInner({
59424
59571
  onRetry: reloadDialogs
59425
59572
  }
59426
59573
  )
59427
- ) : /* @__PURE__ */ jsxs302(Fragment88, { children: [
59428
- /* @__PURE__ */ jsx380(
59574
+ ) : /* @__PURE__ */ jsxs303(Fragment88, { children: [
59575
+ /* @__PURE__ */ jsx381(
59429
59576
  "div",
59430
59577
  {
59431
59578
  ref: galleryPanelRef,
59432
59579
  className: "flex-1 flex flex-col min-h-0 p-[var(--spacing-system-m)]",
59433
- children: /* @__PURE__ */ jsx380(
59580
+ children: /* @__PURE__ */ jsx381(
59434
59581
  "div",
59435
59582
  {
59436
59583
  className: "flex-1 flex flex-col min-h-0 animate-in fade-in-0 duration-200",
59437
- children: hasConversation ? /* @__PURE__ */ jsxs302("div", { className: "flex-1 flex flex-col min-h-0", children: [
59584
+ children: hasConversation ? /* @__PURE__ */ jsxs303("div", { className: "flex-1 flex flex-col min-h-0", children: [
59438
59585
  messagesInitialLoading ? (
59439
59586
  // Match the real list's `fullWidth` layout so swapping
59440
59587
  // skeleton → bubbles doesn't shift the column. The panel
@@ -59446,7 +59593,7 @@ function EmbeddableChatInner({
59446
59593
  // skeleton overflows a short panel and grows its OWN
59447
59594
  // scrollbar — ugly. `fill` top-anchors + clips overflow so
59448
59595
  // it reads as "the whole panel is loading" and never scrolls.
59449
- /* @__PURE__ */ jsx380(
59596
+ /* @__PURE__ */ jsx381(
59450
59597
  ChatMessageListSkeleton,
59451
59598
  {
59452
59599
  fullWidth: true,
@@ -59454,7 +59601,7 @@ function EmbeddableChatInner({
59454
59601
  className: "flex-1"
59455
59602
  }
59456
59603
  )
59457
- ) : /* @__PURE__ */ jsx380(
59604
+ ) : /* @__PURE__ */ jsx381(
59458
59605
  ChatMessageList,
59459
59606
  {
59460
59607
  messages,
@@ -59477,7 +59624,7 @@ function EmbeddableChatInner({
59477
59624
  onLoadMore: loadMoreMessages
59478
59625
  }
59479
59626
  ),
59480
- lastSources && (lastSources.cited.length > 0 || lastSources.uncited.length > 0) && !chatLoading && /* @__PURE__ */ jsx380("div", { className: "flex-shrink-0 pb-2", children: /* @__PURE__ */ jsx380(
59627
+ lastSources && (lastSources.cited.length > 0 || lastSources.uncited.length > 0) && !chatLoading && /* @__PURE__ */ jsx381("div", { className: "flex-shrink-0 pb-2", children: /* @__PURE__ */ jsx381(
59481
59628
  SourceChips,
59482
59629
  {
59483
59630
  cited: lastSources.cited,
@@ -59493,7 +59640,7 @@ function EmbeddableChatInner({
59493
59640
  centred greeting + capability grid + Guide-chat promo +
59494
59641
  quick-action chips. Guide mode keeps the slash-command
59495
59642
  onboarding list below. */
59496
- /* @__PURE__ */ jsx380(
59643
+ /* @__PURE__ */ jsx381(
59497
59644
  MingoWelcome,
59498
59645
  {
59499
59646
  onStartGuideChat: effectiveModes.guide ? () => handleActiveModeChange("guide") : void 0,
@@ -59508,7 +59655,7 @@ function EmbeddableChatInner({
59508
59655
  /* Figma node 7532:328214 — Guide-mode empty state: greeting
59509
59656
  + slash-command onboarding list share one scroll region,
59510
59657
  with a pinned quick-action chip row above the composer. */
59511
- /* @__PURE__ */ jsx380(
59658
+ /* @__PURE__ */ jsx381(
59512
59659
  GuideWelcome,
59513
59660
  {
59514
59661
  subtitle: effectiveGreeting ?? void 0,
@@ -59524,8 +59671,8 @@ function EmbeddableChatInner({
59524
59671
  onQuickActionHover: (action) => setQuickActionPreview(action.prompt ?? action.label),
59525
59672
  onQuickActionHoverEnd: () => setQuickActionPreview(null),
59526
59673
  agentSlug: activeAgentSlug,
59527
- children: (chipCommands.length > 0 || !commandsLoaded) && /* @__PURE__ */ jsxs302("div", { className: "shrink-0 overflow-hidden rounded-md border border-ods-border", children: [
59528
- !commandsLoaded && chipCommands.length === 0 && SKELETON_ROW_VARIANTS.map((variant, i) => /* @__PURE__ */ jsx380(
59674
+ children: (chipCommands.length > 0 || !commandsLoaded) && /* @__PURE__ */ jsxs303("div", { className: "shrink-0 overflow-hidden rounded-md border border-ods-border", children: [
59675
+ !commandsLoaded && chipCommands.length === 0 && SKELETON_ROW_VARIANTS.map((variant, i) => /* @__PURE__ */ jsx381(
59529
59676
  MingoOnboardingCardSkeleton,
59530
59677
  {
59531
59678
  titleWidth: variant.titleWidth,
@@ -59547,10 +59694,10 @@ function EmbeddableChatInner({
59547
59694
  chatInputRef
59548
59695
  )
59549
59696
  }));
59550
- return /* @__PURE__ */ jsx380(
59697
+ return /* @__PURE__ */ jsx381(
59551
59698
  MingoOnboardingCard,
59552
59699
  {
59553
- icon: /* @__PURE__ */ jsx380(Icon2, { size: 16 }),
59700
+ icon: /* @__PURE__ */ jsx381(Icon2, { size: 16 }),
59554
59701
  title: label,
59555
59702
  slashCommand: `/${cmdId}`,
59556
59703
  description: cmd.description,
@@ -59568,7 +59715,7 @@ function EmbeddableChatInner({
59568
59715
  )
59569
59716
  }
59570
59717
  ),
59571
- /* @__PURE__ */ jsx380(
59718
+ /* @__PURE__ */ jsx381(
59572
59719
  ChatAttachmentChipStrip,
59573
59720
  {
59574
59721
  attachments: stagedAttachments,
@@ -59576,7 +59723,7 @@ function EmbeddableChatInner({
59576
59723
  disabled: chatLoading
59577
59724
  }
59578
59725
  ),
59579
- /* @__PURE__ */ jsx380(
59726
+ /* @__PURE__ */ jsx381(
59580
59727
  ChatComposer,
59581
59728
  {
59582
59729
  archived: isViewingArchived,
@@ -59625,7 +59772,7 @@ function EmbeddableChatInner({
59625
59772
  }
59626
59773
  ),
59627
59774
  galleryModal,
59628
- /* @__PURE__ */ jsx380(
59775
+ /* @__PURE__ */ jsx381(
59629
59776
  ChatDialogModals,
59630
59777
  {
59631
59778
  renameTarget,
@@ -59639,15 +59786,15 @@ function EmbeddableChatInner({
59639
59786
  onConfirmRestore: handleConfirmRestore
59640
59787
  }
59641
59788
  ),
59642
- /* @__PURE__ */ jsx380("div", { ref: setPortalHost, style: { display: "contents" } })
59789
+ /* @__PURE__ */ jsx381("div", { ref: setPortalHost, style: { display: "contents" } })
59643
59790
  ] }) });
59644
- const panel = shellLess ? /* @__PURE__ */ jsxs302(ChatPanelContext.Provider, { value: chatPanelHandle, children: [
59645
- /* @__PURE__ */ jsx380(VisuallyHidden, { children: /* @__PURE__ */ jsxs302(DialogPrimitive5.Title, { children: [
59791
+ const panel = shellLess ? /* @__PURE__ */ jsxs303(ChatPanelContext.Provider, { value: chatPanelHandle, children: [
59792
+ /* @__PURE__ */ jsx381(VisuallyHidden, { children: /* @__PURE__ */ jsxs303(DialogPrimitive5.Title, { children: [
59646
59793
  sourceLabel,
59647
59794
  " AI Assistant"
59648
59795
  ] }) }),
59649
59796
  body
59650
- ] }) : /* @__PURE__ */ jsx380(Drawer, { open: isOpen, onOpenChange: (o) => !o && handleClose(), children: /* @__PURE__ */ jsx380(ChatPanelContext.Provider, { value: chatPanelHandle, children: /* @__PURE__ */ jsxs302(
59797
+ ] }) : /* @__PURE__ */ jsx381(Drawer, { open: isOpen, onOpenChange: (o) => !o && handleClose(), children: /* @__PURE__ */ jsx381(ChatPanelContext.Provider, { value: chatPanelHandle, children: /* @__PURE__ */ jsxs303(
59651
59798
  DrawerContent,
59652
59799
  {
59653
59800
  side: "right",
@@ -59662,7 +59809,7 @@ function EmbeddableChatInner({
59662
59809
  "aria-describedby": void 0,
59663
59810
  className: "\n mingo-chat-content !bg-ods-bg shadow-2xl\n focus:outline-none focus-visible:outline-none\n w-screen md:w-auto\n ",
59664
59811
  children: [
59665
- /* @__PURE__ */ jsx380(VisuallyHidden, { children: /* @__PURE__ */ jsxs302(DialogPrimitive5.Title, { children: [
59812
+ /* @__PURE__ */ jsx381(VisuallyHidden, { children: /* @__PURE__ */ jsxs303(DialogPrimitive5.Title, { children: [
59666
59813
  sourceLabel,
59667
59814
  " AI Assistant"
59668
59815
  ] }) }),
@@ -59670,17 +59817,17 @@ function EmbeddableChatInner({
59670
59817
  ]
59671
59818
  }
59672
59819
  ) }) });
59673
- return /* @__PURE__ */ jsxs302(Fragment88, { children: [
59674
- showInternalTrigger && !shellLess && /* @__PURE__ */ jsx380(
59820
+ return /* @__PURE__ */ jsxs303(Fragment88, { children: [
59821
+ showInternalTrigger && !shellLess && /* @__PURE__ */ jsx381(
59675
59822
  "div",
59676
59823
  {
59677
59824
  "aria-hidden": isOpen,
59678
59825
  className: `sticky bottom-0 h-0 z-[9990] pointer-events-none ${isOpen ? "opacity-0" : "opacity-100"}`,
59679
- children: /* @__PURE__ */ jsx380("div", { className: "absolute bottom-4 md:bottom-6 right-4 md:right-6", children: /* @__PURE__ */ jsx380(
59826
+ children: /* @__PURE__ */ jsx381("div", { className: "absolute bottom-4 md:bottom-6 right-4 md:right-6", children: /* @__PURE__ */ jsx381(
59680
59827
  Button,
59681
59828
  {
59682
59829
  onClick: handleOpen,
59683
- leftIcon: /* @__PURE__ */ jsx380(MingoIcon, { className: "h-5 w-5", color: "currentColor" }),
59830
+ leftIcon: /* @__PURE__ */ jsx381(MingoIcon, { className: "h-5 w-5", color: "currentColor" }),
59684
59831
  tabIndex: isOpen ? -1 : 0,
59685
59832
  className: `shadow-lg !w-auto pointer-events-auto ${isOpen ? "!pointer-events-none" : ""}`,
59686
59833
  children: "Ask AI"
@@ -60770,4 +60917,4 @@ export {
60770
60917
  LogsList,
60771
60918
  assets
60772
60919
  };
60773
- //# sourceMappingURL=chunk-X7AJ3J42.js.map
60920
+ //# sourceMappingURL=chunk-6ETOEANJ.js.map