@flamingo-stack/openframe-frontend-core 0.0.383 → 0.0.384-snapshot.20260708165506

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 (105) hide show
  1. package/dist/{chunk-FL6YJLPC.cjs → chunk-4PXS3XNY.cjs} +7 -7
  2. package/dist/{chunk-FL6YJLPC.cjs.map → chunk-4PXS3XNY.cjs.map} +1 -1
  3. package/dist/{chunk-KGSOMSHT.cjs → chunk-4RGWQE26.cjs} +25 -25
  4. package/dist/{chunk-KGSOMSHT.cjs.map → chunk-4RGWQE26.cjs.map} +1 -1
  5. package/dist/{chunk-ZFIDR55N.cjs → chunk-5SMNVXIF.cjs} +9 -9
  6. package/dist/{chunk-ZFIDR55N.cjs.map → chunk-5SMNVXIF.cjs.map} +1 -1
  7. package/dist/{chunk-KQQ6U4UW.js → chunk-AIMUYSOW.js} +4 -4
  8. package/dist/{chunk-LI7OAUSA.js → chunk-BFLPXPWF.js} +4 -4
  9. package/dist/{chunk-AJJF43ZL.js → chunk-CES6HK7Y.js} +2 -2
  10. package/dist/{chunk-WVJFSCXR.cjs → chunk-FLYWXXYF.cjs} +26 -26
  11. package/dist/{chunk-WVJFSCXR.cjs.map → chunk-FLYWXXYF.cjs.map} +1 -1
  12. package/dist/{chunk-VQCV3GGI.cjs → chunk-FX75P47M.cjs} +186 -121
  13. package/dist/chunk-FX75P47M.cjs.map +1 -0
  14. package/dist/{chunk-CNDLMBFN.js → chunk-IZIVDLN5.js} +349 -284
  15. package/dist/chunk-IZIVDLN5.js.map +1 -0
  16. package/dist/{chunk-SGMZQTP6.js → chunk-KOYLFI7L.js} +2 -2
  17. package/dist/{chunk-YW6K7IYF.cjs → chunk-KUUKMK6R.cjs} +31 -31
  18. package/dist/{chunk-YW6K7IYF.cjs.map → chunk-KUUKMK6R.cjs.map} +1 -1
  19. package/dist/{chunk-AHCBZ6TC.cjs → chunk-L3I7HAZ2.cjs} +62 -62
  20. package/dist/{chunk-AHCBZ6TC.cjs.map → chunk-L3I7HAZ2.cjs.map} +1 -1
  21. package/dist/{chunk-MY7TV47R.js → chunk-LB5NHXL2.js} +2 -2
  22. package/dist/{chunk-6SR7HXGW.js → chunk-MKTUZSHY.js} +4 -4
  23. package/dist/{chunk-KBG3PLKS.js → chunk-OHVOXFGF.js} +2 -2
  24. package/dist/{chunk-EGFLSQEJ.js → chunk-QS4HXEQH.js} +4 -4
  25. package/dist/{chunk-KFTCNBSJ.cjs → chunk-RPBA7EVD.cjs} +5 -5
  26. package/dist/{chunk-KFTCNBSJ.cjs.map → chunk-RPBA7EVD.cjs.map} +1 -1
  27. package/dist/{chunk-7TU6MLIQ.cjs → chunk-U6ZRFH6F.cjs} +12 -12
  28. package/dist/{chunk-7TU6MLIQ.cjs.map → chunk-U6ZRFH6F.cjs.map} +1 -1
  29. package/dist/{chunk-ZD6GZX7E.js → chunk-UT4OHF5S.js} +2 -2
  30. package/dist/{chunk-S2V4EPKL.cjs → chunk-WT37HVVE.cjs} +15 -15
  31. package/dist/{chunk-S2V4EPKL.cjs.map → chunk-WT37HVVE.cjs.map} +1 -1
  32. package/dist/{chunk-BALSUWWU.cjs → chunk-XS6VOGM6.cjs} +37 -37
  33. package/dist/{chunk-BALSUWWU.cjs.map → chunk-XS6VOGM6.cjs.map} +1 -1
  34. package/dist/{chunk-W456FUZG.cjs → chunk-ZHHJEUXL.cjs} +57 -57
  35. package/dist/{chunk-W456FUZG.cjs.map → chunk-ZHHJEUXL.cjs.map} +1 -1
  36. package/dist/{chunk-B45U4FY5.js → chunk-ZI2ACZJG.js} +2 -2
  37. package/dist/{chunk-EBOK7SG7.js → chunk-ZLD3BKEI.js} +2 -2
  38. package/dist/components/case-studies/index.cjs +8 -8
  39. package/dist/components/case-studies/index.js +2 -2
  40. package/dist/components/chat/approval-batch-message.d.ts +20 -0
  41. package/dist/components/chat/approval-batch-message.d.ts.map +1 -1
  42. package/dist/components/chat/index.cjs +4 -2
  43. package/dist/components/chat/index.cjs.map +1 -1
  44. package/dist/components/chat/index.js +3 -1
  45. package/dist/components/contact/index.cjs +3 -3
  46. package/dist/components/contact/index.js +2 -2
  47. package/dist/components/docs/index.cjs +5 -5
  48. package/dist/components/docs/index.js +4 -4
  49. package/dist/components/embeds/index.cjs +3 -3
  50. package/dist/components/embeds/index.js +2 -2
  51. package/dist/components/faq/index.cjs +3 -3
  52. package/dist/components/faq/index.js +2 -2
  53. package/dist/components/features/index.cjs +2 -2
  54. package/dist/components/features/index.js +1 -1
  55. package/dist/components/features/notifications/approval-request-notification-tile.d.ts.map +1 -1
  56. package/dist/components/features/notifications/notification-tile.d.ts +8 -2
  57. package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
  58. package/dist/components/features/notifications/types.d.ts +11 -1
  59. package/dist/components/features/notifications/types.d.ts.map +1 -1
  60. package/dist/components/help-center-pages/index.cjs +20 -20
  61. package/dist/components/help-center-pages/index.js +11 -11
  62. package/dist/components/index.cjs +122 -120
  63. package/dist/components/index.cjs.map +1 -1
  64. package/dist/components/index.js +11 -9
  65. package/dist/components/index.js.map +1 -1
  66. package/dist/components/navigation/index.cjs +2 -2
  67. package/dist/components/navigation/index.js +1 -1
  68. package/dist/components/onboarding-guides/index.cjs +5 -5
  69. package/dist/components/onboarding-guides/index.js +4 -4
  70. package/dist/components/related-content/index.cjs +3 -3
  71. package/dist/components/related-content/index.js +2 -2
  72. package/dist/components/tickets/index.cjs +5 -5
  73. package/dist/components/tickets/index.js +4 -4
  74. package/dist/components/ui/data-table/data-table-body.d.ts +6 -1
  75. package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
  76. package/dist/components/ui/data-table/data-table-row.d.ts +7 -1
  77. package/dist/components/ui/data-table/data-table-row.d.ts.map +1 -1
  78. package/dist/components/ui/data-table/index.d.ts +1 -1
  79. package/dist/components/ui/index.cjs +4 -2
  80. package/dist/components/ui/index.cjs.map +1 -1
  81. package/dist/components/ui/index.js +3 -1
  82. package/dist/index.cjs +4 -2
  83. package/dist/index.cjs.map +1 -1
  84. package/dist/index.js +3 -1
  85. package/package.json +1 -1
  86. package/src/components/chat/approval-batch-message.tsx +28 -15
  87. package/src/components/features/notifications/approval-request-notification-tile.tsx +70 -46
  88. package/src/components/features/notifications/notification-tile.tsx +125 -41
  89. package/src/components/features/notifications/types.ts +11 -1
  90. package/src/components/ui/data-table/data-table-body.tsx +7 -0
  91. package/src/components/ui/data-table/data-table-row.tsx +12 -1
  92. package/src/stories/NotificationDrawer.stories.tsx +220 -31
  93. package/dist/chunk-CNDLMBFN.js.map +0 -1
  94. package/dist/chunk-VQCV3GGI.cjs.map +0 -1
  95. /package/dist/{chunk-KQQ6U4UW.js.map → chunk-AIMUYSOW.js.map} +0 -0
  96. /package/dist/{chunk-LI7OAUSA.js.map → chunk-BFLPXPWF.js.map} +0 -0
  97. /package/dist/{chunk-AJJF43ZL.js.map → chunk-CES6HK7Y.js.map} +0 -0
  98. /package/dist/{chunk-SGMZQTP6.js.map → chunk-KOYLFI7L.js.map} +0 -0
  99. /package/dist/{chunk-MY7TV47R.js.map → chunk-LB5NHXL2.js.map} +0 -0
  100. /package/dist/{chunk-6SR7HXGW.js.map → chunk-MKTUZSHY.js.map} +0 -0
  101. /package/dist/{chunk-KBG3PLKS.js.map → chunk-OHVOXFGF.js.map} +0 -0
  102. /package/dist/{chunk-EGFLSQEJ.js.map → chunk-QS4HXEQH.js.map} +0 -0
  103. /package/dist/{chunk-ZD6GZX7E.js.map → chunk-UT4OHF5S.js.map} +0 -0
  104. /package/dist/{chunk-B45U4FY5.js.map → chunk-ZI2ACZJG.js.map} +0 -0
  105. /package/dist/{chunk-EBOK7SG7.js.map → chunk-ZLD3BKEI.js.map} +0 -0
@@ -826,15 +826,18 @@ function CommandBlock({ command, className }) {
826
826
  // src/components/chat/approval-batch-message.tsx
827
827
  import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
828
828
  var COMMAND_BODY_KEYS = new Set(COMMAND_BODY_ARG_KEYS);
829
- function renderStatusTag(status, isClient, resolvedByName) {
830
- const suffix = isClient && resolvedByName ? ` by ${resolvedByName}` : "";
829
+ function ApprovalStatusTag({ status, resolvedByName, inlineResolver = false }) {
830
+ const suffix = inlineResolver && resolvedByName ? ` by ${resolvedByName}` : "";
831
831
  if (status === "approved") {
832
832
  return /* @__PURE__ */ jsx5(Tag, { label: `Approved${suffix}`, variant: "success", icon: /* @__PURE__ */ jsx5(CheckCircleIcon, { className: "w-4 h-4" }) });
833
833
  }
834
834
  if (status === "cancelled") {
835
835
  return /* @__PURE__ */ jsx5(Tag, { label: `Canceled${suffix}`, variant: "grey", icon: /* @__PURE__ */ jsx5(XmarkIcon, { className: "w-4 h-4" }) });
836
836
  }
837
- return /* @__PURE__ */ jsx5(Tag, { label: `Rejected${suffix}`, variant: "error", icon: /* @__PURE__ */ jsx5(XmarkCircleIcon, { className: "w-4 h-4" }) });
837
+ if (status === "rejected") {
838
+ return /* @__PURE__ */ jsx5(Tag, { label: `Rejected${suffix}`, variant: "error", icon: /* @__PURE__ */ jsx5(XmarkCircleIcon, { className: "w-4 h-4" }) });
839
+ }
840
+ return null;
838
841
  }
839
842
  function getArgEntries(call) {
840
843
  const args = call.toolCallArguments;
@@ -916,7 +919,7 @@ function ToolCallRow({ call, expanded, onToggle, batchStatus, execution, showExe
916
919
  );
917
920
  }
918
921
  var ApprovalBatchMessage = forwardRef2(
919
- ({ className, data, onApprove, onReject, status = "pending", maxBodyHeight, resolvedByName, showExecutionStatus = true, assistantType, ...props }, ref) => {
922
+ ({ className, data, onApprove, onReject, status = "pending", maxBodyHeight, resolvedByName, showExecutionStatus = true, assistantType, showFooterActions = true, ...props }, ref) => {
920
923
  const [expandedId, setExpandedId] = useState3(null);
921
924
  const [isProcessing, setIsProcessing] = useState3(false);
922
925
  const isClient = assistantType === "fae";
@@ -937,7 +940,7 @@ var ApprovalBatchMessage = forwardRef2(
937
940
  setIsProcessing(false);
938
941
  }
939
942
  };
940
- const showFooterBlock = explanations.length > 0 || status !== void 0;
943
+ const showFooterBlock = explanations.length > 0 || showFooterActions;
941
944
  return /* @__PURE__ */ jsxs4(
942
945
  "div",
943
946
  {
@@ -988,7 +991,7 @@ var ApprovalBatchMessage = forwardRef2(
988
991
  ),
989
992
  children: [
990
993
  explanations.length > 0 && /* @__PURE__ */ jsx5("ul", { className: "list-disc pl-5 text-h6 text-ods-text-primary w-full", children: explanations.map((expl, i) => /* @__PURE__ */ jsx5("li", { children: expl }, i)) }),
991
- status === "pending" ? /* @__PURE__ */ jsxs4("div", { className: "flex gap-[var(--spacing-system-xsf)] items-center", children: [
994
+ showFooterActions && (status === "pending" ? /* @__PURE__ */ jsxs4("div", { className: "flex gap-[var(--spacing-system-xsf)] items-center", children: [
992
995
  /* @__PURE__ */ jsx5(
993
996
  Button,
994
997
  {
@@ -1020,12 +1023,12 @@ var ApprovalBatchMessage = forwardRef2(
1020
1023
  }
1021
1024
  )
1022
1025
  ] }) : /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
1023
- renderStatusTag(status, isClient, resolvedByName),
1026
+ /* @__PURE__ */ jsx5(ApprovalStatusTag, { status, resolvedByName, inlineResolver: isClient }),
1024
1027
  !isClient && resolvedByName && /* @__PURE__ */ jsxs4("span", { className: "text-h6 text-ods-text-secondary", children: [
1025
1028
  "by ",
1026
1029
  resolvedByName
1027
1030
  ] })
1028
- ] })
1031
+ ] }))
1029
1032
  ]
1030
1033
  }
1031
1034
  )
@@ -11549,7 +11552,7 @@ function OnboardingGuideCard({
11549
11552
  }
11550
11553
 
11551
11554
  // src/components/chat/entity-cards/roadmap-card.tsx
11552
- import { useState as useState100 } from "react";
11555
+ import { useState as useState101 } from "react";
11553
11556
  import { ThumbsUp, ThumbsDown } from "lucide-react";
11554
11557
 
11555
11558
  // src/components/chat/entity-cards/roadmap-vote-button.tsx
@@ -11590,7 +11593,7 @@ function RoadmapVoteButton({
11590
11593
  init_button();
11591
11594
 
11592
11595
  // src/components/ui/image-gallery-modal.tsx
11593
- import { useState as useState99, useEffect as useEffect74 } from "react";
11596
+ import { useState as useState100, useEffect as useEffect74 } from "react";
11594
11597
 
11595
11598
  // src/components/ui/allowed-domains-input.tsx
11596
11599
  init_cn();
@@ -24099,7 +24102,7 @@ function OrganizationCard({
24099
24102
 
24100
24103
  // src/components/ui/service-card.tsx
24101
24104
  init_cn();
24102
- import { useMemo as useMemo35, useState as useState86 } from "react";
24105
+ import { useMemo as useMemo35, useState as useState87 } from "react";
24103
24106
  import { ExternalLink as ExternalLink7 } from "lucide-react";
24104
24107
 
24105
24108
  // src/components/providers/dynamic-theme-provider.tsx
@@ -31048,20 +31051,51 @@ init_button2();
31048
31051
  init_cn();
31049
31052
 
31050
31053
  // src/components/features/notifications/notification-tile.tsx
31051
- import { useMemo as useMemo28, useEffect as useEffect52 } from "react";
31052
- init_button();
31054
+ import { useMemo as useMemo28, useEffect as useEffect52, useState as useState72 } from "react";
31053
31055
  init_cn();
31054
31056
  import { jsx as jsx247, jsxs as jsxs194 } from "react/jsx-runtime";
31057
+ var variantBySeverity = {
31058
+ INFO: "info",
31059
+ SUCCESS: "success",
31060
+ WARNING: "warning",
31061
+ DANGER: "error"
31062
+ };
31063
+ var typeColorByVariant = {
31064
+ default: "text-ods-text-secondary",
31065
+ info: "text-ods-text-secondary",
31066
+ success: "text-ods-success",
31067
+ warning: "text-ods-warning",
31068
+ error: "text-ods-error"
31069
+ };
31070
+ var headerControlClass = "absolute inset-0 flex items-center justify-center text-ods-text-secondary transition-opacity duration-200 hover:text-ods-text-primary";
31055
31071
  function NotificationTile({
31056
31072
  notification,
31057
31073
  liveDurationMs = 4e3,
31058
31074
  onComplete,
31059
31075
  onSettle,
31060
31076
  className,
31077
+ actions,
31061
31078
  children,
31062
31079
  paused = false
31063
31080
  }) {
31064
- const { id, variant = "default", title, description, createdAt, read, settled } = notification;
31081
+ const {
31082
+ id,
31083
+ variant = "default",
31084
+ severity,
31085
+ type,
31086
+ icon,
31087
+ imageUrl,
31088
+ title,
31089
+ description,
31090
+ createdAt,
31091
+ read,
31092
+ settled
31093
+ } = notification;
31094
+ const accentVariant = (severity ? variantBySeverity[severity] : void 0) ?? variant;
31095
+ const [failedImageUrl, setFailedImageUrl] = useState72(null);
31096
+ const image = imageUrl && imageUrl !== failedImageUrl ? imageUrl : void 0;
31097
+ const createdAtDate = new Date(createdAt);
31098
+ const createdAtIso = Number.isNaN(createdAtDate.getTime()) ? null : createdAtDate.toISOString();
31065
31099
  const initialElapsed = useMemo28(() => Date.now() - createdAt, [createdAt]);
31066
31100
  const isLive = !read && !settled && initialElapsed < liveDurationMs;
31067
31101
  const counting = isLive && !paused;
@@ -31085,37 +31119,75 @@ function NotificationTile({
31085
31119
  "div",
31086
31120
  {
31087
31121
  className: cn(
31088
- "relative flex items-center gap-[var(--spacing-system-xs)] p-[var(--spacing-system-s)]",
31089
- children ? "border-b border-ods-border" : null
31122
+ "relative flex flex-col gap-[var(--spacing-system-xs)] p-[var(--spacing-system-s)]",
31123
+ isLive && "pb-[var(--spacing-system-m)]"
31090
31124
  ),
31091
31125
  children: [
31092
- /* @__PURE__ */ jsx247("div", { className: "flex size-6 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsx247("span", { className: cn("size-1.5 rounded-full", dotColorByVariant[variant]) }) }),
31093
- /* @__PURE__ */ jsxs194("div", { className: "flex min-w-0 flex-1 flex-col", children: [
31126
+ /* @__PURE__ */ jsxs194("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
31127
+ /* @__PURE__ */ jsx247(
31128
+ "span",
31129
+ {
31130
+ className: cn(
31131
+ "flex size-4 shrink-0 items-center justify-center",
31132
+ typeColorByVariant[accentVariant]
31133
+ ),
31134
+ children: image ? /* @__PURE__ */ jsx247(
31135
+ "img",
31136
+ {
31137
+ src: image,
31138
+ alt: "",
31139
+ onError: () => setFailedImageUrl(image),
31140
+ className: "size-4 rounded-[2px] object-cover"
31141
+ }
31142
+ ) : icon ?? /* @__PURE__ */ jsx247("span", { className: cn("size-1.5 rounded-full", dotColorByVariant[accentVariant]) })
31143
+ }
31144
+ ),
31145
+ type ? /* @__PURE__ */ jsx247(
31146
+ "p",
31147
+ {
31148
+ className: cn("min-w-0 flex-1 truncate text-h5", typeColorByVariant[accentVariant]),
31149
+ title: type,
31150
+ children: type
31151
+ }
31152
+ ) : /* @__PURE__ */ jsx247("span", { className: "min-w-0 flex-1" }),
31153
+ !isLive && createdAtIso ? /* @__PURE__ */ jsx247(
31154
+ "time",
31155
+ {
31156
+ dateTime: createdAtIso,
31157
+ className: "shrink-0 whitespace-nowrap text-h6 text-ods-text-secondary",
31158
+ children: formatTicketRelativeTime(createdAtIso)
31159
+ }
31160
+ ) : null,
31161
+ /* @__PURE__ */ jsx247("span", { className: "relative size-4 shrink-0", children: [
31162
+ { active: isLive, label: "Dismiss notification", icon: /* @__PURE__ */ jsx247(XmarkIcon, { size: 16 }), onClick: () => onSettle?.(id) },
31163
+ { active: !isLive, label: "Mark notification complete", icon: /* @__PURE__ */ jsx247(CheckCircleIcon, { size: 16 }), onClick: () => onComplete(id) }
31164
+ ].map(({ active, label, icon: icon2, onClick }) => /* @__PURE__ */ jsx247(
31165
+ "button",
31166
+ {
31167
+ type: "button",
31168
+ onClick,
31169
+ "aria-label": label,
31170
+ "aria-hidden": !active,
31171
+ disabled: !active,
31172
+ tabIndex: active ? 0 : -1,
31173
+ className: cn(headerControlClass, !active && "pointer-events-none opacity-0"),
31174
+ children: icon2
31175
+ },
31176
+ label
31177
+ )) })
31178
+ ] }),
31179
+ /* @__PURE__ */ jsxs194("div", { className: "flex min-w-0 flex-col", children: [
31094
31180
  title ? /* @__PURE__ */ jsx247("p", { className: "truncate text-h4 text-ods-text-primary", title: typeof title === "string" ? title : void 0, children: title }) : null,
31095
- description ? /* @__PURE__ */ jsx247("p", { className: "text-h6 line-clamp-2 text-ods-text-secondary", title: typeof description === "string" ? description : void 0, children: description }) : null
31181
+ description ? /* @__PURE__ */ jsx247("p", { className: "text-h6 line-clamp-3 text-ods-text-secondary", title: typeof description === "string" ? description : void 0, children: description }) : null
31096
31182
  ] }),
31097
- /* @__PURE__ */ jsx247(
31098
- Button,
31099
- {
31100
- variant: "outline",
31101
- size: "small",
31102
- onClick: () => onComplete(id),
31103
- "aria-label": "Mark notification complete",
31104
- tabIndex: isLive ? -1 : 0,
31105
- className: cn(
31106
- "shrink-0 hover:text-ods-text-primary",
31107
- isLive && "invisible"
31108
- ),
31109
- children: /* @__PURE__ */ jsx247(CheckCircleIcon, {})
31110
- }
31111
- ),
31183
+ actions,
31112
31184
  counting ? /* @__PURE__ */ jsx247(
31113
31185
  "div",
31114
31186
  {
31115
31187
  "aria-hidden": true,
31116
31188
  className: cn(
31117
31189
  "absolute inset-x-0 -bottom-px h-1 origin-left",
31118
- progressColorByVariant[variant]
31190
+ progressColorByVariant[accentVariant]
31119
31191
  ),
31120
31192
  style: {
31121
31193
  animation: `toast-progress ${liveDurationMs}ms linear forwards`,
@@ -31126,21 +31198,7 @@ function NotificationTile({
31126
31198
  ]
31127
31199
  }
31128
31200
  ),
31129
- children,
31130
- /* @__PURE__ */ jsx247(
31131
- "button",
31132
- {
31133
- type: "button",
31134
- onClick: () => onSettle?.(id),
31135
- "aria-label": "Dismiss notification",
31136
- tabIndex: isLive ? 0 : -1,
31137
- className: cn(
31138
- "absolute right-[var(--spacing-system-xsf)] top-[var(--spacing-system-xsf)] flex size-4 items-center justify-center text-ods-text-secondary transition-opacity duration-200 hover:text-ods-text-primary",
31139
- !isLive && "pointer-events-none opacity-0"
31140
- ),
31141
- children: /* @__PURE__ */ jsx247(XmarkIcon, { size: 16 })
31142
- }
31143
- )
31201
+ children
31144
31202
  ]
31145
31203
  }
31146
31204
  );
@@ -31476,8 +31534,8 @@ function NotificationPopups({
31476
31534
  }
31477
31535
 
31478
31536
  // src/components/features/notifications/approval-request-notification-tile.tsx
31479
- init_cn();
31480
- import { useMemo as useMemo29, useState as useState72 } from "react";
31537
+ init_button2();
31538
+ import { useMemo as useMemo29, useState as useState73 } from "react";
31481
31539
 
31482
31540
  // src/components/chat/types/chat.types.ts
31483
31541
  var CHAT_TYPE = {
@@ -31671,7 +31729,7 @@ function approvalMetaToBatchData(approval) {
31671
31729
  }
31672
31730
 
31673
31731
  // src/components/features/notifications/approval-request-notification-tile.tsx
31674
- import { jsx as jsx250, jsxs as jsxs196 } from "react/jsx-runtime";
31732
+ import { Fragment as Fragment41, jsx as jsx250, jsxs as jsxs196 } from "react/jsx-runtime";
31675
31733
  function ApprovalRequestNotificationTile({
31676
31734
  notification,
31677
31735
  onApprove,
@@ -31682,78 +31740,81 @@ function ApprovalRequestNotificationTile({
31682
31740
  defaultExpanded = false,
31683
31741
  className
31684
31742
  }) {
31685
- const [expanded, setExpanded] = useState72(defaultExpanded);
31686
- const [pinned, setPinned] = useState72(defaultExpanded);
31687
- const [localStatus, setLocalStatus] = useState72(null);
31743
+ const [expanded, setExpanded] = useState73(defaultExpanded);
31744
+ const [pinned, setPinned] = useState73(defaultExpanded);
31745
+ const [processing, setProcessing] = useState73(false);
31746
+ const [localStatus, setLocalStatus] = useState73(null);
31688
31747
  const approval = getApprovalMeta(notification);
31689
31748
  const resolvedStatus = resolutionToStatus(approval?.resolution);
31690
31749
  const status = resolvedStatus !== "pending" ? resolvedStatus : localStatus ?? "pending";
31691
31750
  const batchData = useMemo29(() => approval ? approvalMetaToBatchData(approval) : null, [approval]);
31692
31751
  const { innerRef, containerStyle } = useCollapsible({ expanded });
31693
31752
  if (!approval || !batchData) return null;
31694
- const commandWord = batchData.toolCalls.length > 1 ? "Commands" : "Command";
31695
- const toggleLabel = `${expanded ? "Hide" : "Show"} ${commandWord}`;
31696
- const handleApprove = async () => {
31697
- setLocalStatus("approved");
31753
+ const tileNotification = {
31754
+ ...notification,
31755
+ type: notification.type ?? "Approval Required"
31756
+ };
31757
+ const commandWord = batchData.toolCalls.length > 1 ? "commands" : "command";
31758
+ const toggleLabel = `${expanded ? "Hide" : "Show"} ${commandWord} section`;
31759
+ const resolve = async (nextStatus, action) => {
31760
+ setProcessing(true);
31761
+ setLocalStatus(nextStatus);
31698
31762
  try {
31699
- await onApprove(batchData.approvalRequestId);
31700
- onComplete(notification.id);
31701
- } catch {
31702
- setLocalStatus(null);
31703
- }
31704
- };
31705
- const handleReject = async () => {
31706
- setLocalStatus("rejected");
31707
- try {
31708
- await onReject(batchData.approvalRequestId);
31709
- onComplete(notification.id);
31763
+ await action(batchData.approvalRequestId);
31710
31764
  } catch {
31711
31765
  setLocalStatus(null);
31766
+ return;
31767
+ } finally {
31768
+ setProcessing(false);
31712
31769
  }
31770
+ onComplete(notification.id);
31713
31771
  };
31714
- return /* @__PURE__ */ jsxs196(
31772
+ return /* @__PURE__ */ jsx250(
31715
31773
  NotificationTile,
31716
31774
  {
31717
- notification,
31775
+ notification: tileNotification,
31718
31776
  liveDurationMs,
31719
31777
  onComplete,
31720
31778
  onSettle,
31721
31779
  className,
31722
- paused: pinned,
31723
- children: [
31724
- /* @__PURE__ */ jsxs196(
31725
- "button",
31780
+ paused: pinned || processing,
31781
+ actions: /* @__PURE__ */ jsxs196("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
31782
+ status === "pending" ? /* @__PURE__ */ jsxs196(Fragment41, { children: [
31783
+ /* @__PURE__ */ jsx250(Button, { variant: "accent", size: "small", onClick: () => resolve("approved", onApprove), disabled: processing, children: "Approve" }),
31784
+ /* @__PURE__ */ jsx250(Button, { variant: "outline", size: "small", onClick: () => resolve("rejected", onReject), disabled: processing, children: "Reject" })
31785
+ ] }) : /* @__PURE__ */ jsxs196("span", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
31786
+ /* @__PURE__ */ jsx250(ApprovalStatusTag, { status }),
31787
+ approval.resolvedByName ? /* @__PURE__ */ jsxs196("span", { className: "truncate text-h6 text-ods-text-secondary", children: [
31788
+ "by ",
31789
+ approval.resolvedByName
31790
+ ] }) : null
31791
+ ] }),
31792
+ /* @__PURE__ */ jsx250(
31793
+ Button,
31726
31794
  {
31727
- type: "button",
31795
+ variant: "outline",
31796
+ size: "small",
31728
31797
  onClick: () => {
31729
31798
  setExpanded((prev) => !prev);
31730
31799
  setPinned(true);
31731
31800
  },
31732
31801
  "aria-expanded": expanded,
31733
- className: cn(
31734
- "flex w-full items-center gap-[var(--spacing-system-xs)] bg-ods-card px-[var(--spacing-system-s)] py-[var(--spacing-system-xs)] text-left",
31735
- expanded && "border-b border-ods-border"
31736
- ),
31737
- children: [
31738
- /* @__PURE__ */ jsx250("span", { className: "min-w-0 flex-1 text-h6 text-ods-text-primary", children: toggleLabel }),
31739
- /* @__PURE__ */ jsx250(ExpandChevron, { expanded })
31740
- ]
31741
- }
31742
- ),
31743
- /* @__PURE__ */ jsx250("div", { style: containerStyle, children: /* @__PURE__ */ jsx250("div", { ref: innerRef, children: /* @__PURE__ */ jsx250(
31744
- ApprovalBatchMessage,
31745
- {
31746
- data: batchData,
31747
- status,
31748
- resolvedByName: approval.resolvedByName,
31749
- showExecutionStatus: false,
31750
- onApprove: handleApprove,
31751
- onReject: handleReject,
31752
- maxBodyHeight: "50vh",
31753
- className: "mb-0 rounded-none border-0"
31802
+ "aria-label": toggleLabel,
31803
+ className: "ml-auto w-6 shrink-0 px-0 md:w-8",
31804
+ children: /* @__PURE__ */ jsx250(ExpandChevron, { expanded })
31754
31805
  }
31755
- ) }) })
31756
- ]
31806
+ )
31807
+ ] }),
31808
+ children: /* @__PURE__ */ jsx250("div", { style: containerStyle, children: /* @__PURE__ */ jsx250("div", { ref: innerRef, children: /* @__PURE__ */ jsx250("div", { className: "border-t border-ods-border", children: /* @__PURE__ */ jsx250(
31809
+ ApprovalBatchMessage,
31810
+ {
31811
+ data: batchData,
31812
+ showExecutionStatus: false,
31813
+ showFooterActions: false,
31814
+ maxBodyHeight: "50vh",
31815
+ className: "mb-0 rounded-none border-0"
31816
+ }
31817
+ ) }) }) })
31757
31818
  }
31758
31819
  );
31759
31820
  }
@@ -31783,12 +31844,12 @@ function useOptionalTimeTracker() {
31783
31844
 
31784
31845
  // src/components/features/time-tracker/time-tracker-panel.tsx
31785
31846
  init_cn();
31786
- import { useEffect as useEffect55, useState as useState75 } from "react";
31847
+ import { useEffect as useEffect55, useState as useState76 } from "react";
31787
31848
  init_button();
31788
31849
  init_split_button();
31789
31850
 
31790
31851
  // src/components/features/time-tracker/use-tracker-clock.ts
31791
- import { useEffect as useEffect54, useState as useState74 } from "react";
31852
+ import { useEffect as useEffect54, useState as useState75 } from "react";
31792
31853
  function formatElapsed(totalMs) {
31793
31854
  const totalSeconds = Math.max(0, Math.floor(totalMs / 1e3));
31794
31855
  const hours = Math.floor(totalSeconds / 3600);
@@ -31798,7 +31859,7 @@ function formatElapsed(totalMs) {
31798
31859
  return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
31799
31860
  }
31800
31861
  function useTrackerClock({ status, runningSince, accumulatedMs = 0 }) {
31801
- const [now, setNow] = useState74(() => Date.now());
31862
+ const [now, setNow] = useState75(() => Date.now());
31802
31863
  useEffect54(() => {
31803
31864
  if (status !== "tracking") return;
31804
31865
  setNow(Date.now());
@@ -31854,7 +31915,7 @@ function TimeTrackerPanel({
31854
31915
  className
31855
31916
  }) {
31856
31917
  const elapsedLabel = useTrackerClock({ status, runningSince, accumulatedMs });
31857
- const [showValidationError, setShowValidationError] = useState75(false);
31918
+ const [showValidationError, setShowValidationError] = useState76(false);
31858
31919
  const isRunning = status === "tracking";
31859
31920
  const isActive = status !== "ready";
31860
31921
  const hasContent = selectedTicketId != null || notes.trim() !== "";
@@ -32136,7 +32197,7 @@ function HeaderButton({
32136
32197
  }
32137
32198
 
32138
32199
  // src/components/features/time-tracker/time-tracker-header-button.tsx
32139
- import { Fragment as Fragment41, jsx as jsx254, jsxs as jsxs198 } from "react/jsx-runtime";
32200
+ import { Fragment as Fragment42, jsx as jsx254, jsxs as jsxs198 } from "react/jsx-runtime";
32140
32201
  function TimeTrackerHeaderButton({ className, disabled }) {
32141
32202
  const ctx = useOptionalTimeTracker();
32142
32203
  const elapsedLabel = useTrackerClock({
@@ -32160,7 +32221,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
32160
32221
  isActive && "w-auto gap-[var(--spacing-system-xsf)] px-[var(--spacing-system-sf)] md:w-auto",
32161
32222
  className
32162
32223
  ),
32163
- icon: /* @__PURE__ */ jsxs198(Fragment41, { children: [
32224
+ icon: /* @__PURE__ */ jsxs198(Fragment42, { children: [
32164
32225
  /* @__PURE__ */ jsx254(
32165
32226
  ClockHistoryIcon,
32166
32227
  {
@@ -32402,7 +32463,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
32402
32463
  }
32403
32464
 
32404
32465
  // src/components/features/board/ticket-card.tsx
32405
- import { Fragment as Fragment42, jsx as jsx257, jsxs as jsxs201 } from "react/jsx-runtime";
32466
+ import { Fragment as Fragment43, jsx as jsx257, jsxs as jsxs201 } from "react/jsx-runtime";
32406
32467
  var PRIORITY_COLOR_CLASS = {
32407
32468
  low: "text-ods-text-secondary",
32408
32469
  medium: "text-ods-info",
@@ -32475,7 +32536,7 @@ function TicketCard({
32475
32536
  ] }) : null;
32476
32537
  const timestampLabel = ticket.createdAt ? formatTicketRelativeTime(ticket.createdAt) : null;
32477
32538
  const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
32478
- const body = /* @__PURE__ */ jsxs201(Fragment42, { children: [
32539
+ const body = /* @__PURE__ */ jsxs201(Fragment43, { children: [
32479
32540
  /* @__PURE__ */ jsxs201("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
32480
32541
  /* @__PURE__ */ jsxs201("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
32481
32542
  /* @__PURE__ */ jsx257("p", { className: "text-h3 truncate text-ods-text-primary", children: ticket.title }),
@@ -32603,7 +32664,7 @@ var TicketCardSkeleton = React100.forwardRef(
32603
32664
  TicketCardSkeleton.displayName = "TicketCardSkeleton";
32604
32665
 
32605
32666
  // src/components/features/board/board-column.tsx
32606
- import { Fragment as Fragment43, jsx as jsx259, jsxs as jsxs203 } from "react/jsx-runtime";
32667
+ import { Fragment as Fragment44, jsx as jsx259, jsxs as jsxs203 } from "react/jsx-runtime";
32607
32668
  function BoardColumn({
32608
32669
  column,
32609
32670
  collapsed = false,
@@ -32642,7 +32703,7 @@ function BoardColumn({
32642
32703
  onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
32643
32704
  }
32644
32705
  ),
32645
- !collapsed && /* @__PURE__ */ jsxs203(Fragment43, { children: [
32706
+ !collapsed && /* @__PURE__ */ jsxs203(Fragment44, { children: [
32646
32707
  /* @__PURE__ */ jsx259("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
32647
32708
  /* @__PURE__ */ jsx259(
32648
32709
  ColumnBody,
@@ -32735,7 +32796,7 @@ function SkeletonStack({ count = 4 }) {
32735
32796
  () => Array.from({ length: count }, () => Math.random().toString(36).slice(2)),
32736
32797
  [count]
32737
32798
  );
32738
- return /* @__PURE__ */ jsx259(Fragment43, { children: keys.map((k) => /* @__PURE__ */ jsx259(TicketCardSkeleton, {}, k)) });
32799
+ return /* @__PURE__ */ jsx259(Fragment44, { children: keys.map((k) => /* @__PURE__ */ jsx259(TicketCardSkeleton, {}, k)) });
32739
32800
  }
32740
32801
  function EmptyState2() {
32741
32802
  return /* @__PURE__ */ jsxs203("div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-lf)] p-[var(--spacing-system-lf)] text-center text-ods-text-secondary", children: [
@@ -32748,13 +32809,13 @@ function EmptyState2() {
32748
32809
  }
32749
32810
 
32750
32811
  // src/components/features/board/use-board-collapse.ts
32751
- import { useCallback as useCallback30, useState as useState77 } from "react";
32812
+ import { useCallback as useCallback30, useState as useState78 } from "react";
32752
32813
  function useBoardCollapse(storageKey) {
32753
32814
  const [persisted, setPersisted] = useLocalStorage(
32754
32815
  storageKey ?? "__board_collapse_unused__",
32755
32816
  {}
32756
32817
  );
32757
- const [memory, setMemory] = useState77({});
32818
+ const [memory, setMemory] = useState78({});
32758
32819
  const collapsed = storageKey ? persisted : memory;
32759
32820
  const setMap = storageKey ? setPersisted : setMemory;
32760
32821
  const toggle = useCallback30(
@@ -33145,13 +33206,13 @@ function SortableRow({
33145
33206
 
33146
33207
  // src/components/navigation/header.tsx
33147
33208
  init_next_link();
33148
- import React104, { useEffect as useEffect58, useRef as useRef42, useState as useState79 } from "react";
33209
+ import React104, { useEffect as useEffect58, useRef as useRef42, useState as useState80 } from "react";
33149
33210
  init_button2();
33150
- import { Fragment as Fragment45, jsx as jsx262, jsxs as jsxs205 } from "react/jsx-runtime";
33211
+ import { Fragment as Fragment46, jsx as jsx262, jsxs as jsxs205 } from "react/jsx-runtime";
33151
33212
  function Header2({ config, platform }) {
33152
- const [show, setShow] = useState79(true);
33153
- const [lastScrollY, setLastScrollY] = useState79(0);
33154
- const [openDropdowns, setOpenDropdowns] = useState79({});
33213
+ const [show, setShow] = useState80(true);
33214
+ const [lastScrollY, setLastScrollY] = useState80(0);
33215
+ const [openDropdowns, setOpenDropdowns] = useState80({});
33155
33216
  const dropdownRefs = useRef42({});
33156
33217
  const triggerRefs = useRef42({});
33157
33218
  useEffect58(() => {
@@ -33292,7 +33353,7 @@ function Header2({ config, platform }) {
33292
33353
  },
33293
33354
  child.id
33294
33355
  )) }),
33295
- item.dropdownContent && /* @__PURE__ */ jsxs205(Fragment45, { children: [
33356
+ item.dropdownContent && /* @__PURE__ */ jsxs205(Fragment46, { children: [
33296
33357
  item.showDropdownDivider !== false && /* @__PURE__ */ jsx262("div", { className: "h-px my-2 mx-2 bg-ods-border" }),
33297
33358
  /* @__PURE__ */ jsx262("div", { className: "px-2 pb-2", children: item.dropdownContent })
33298
33359
  ] })
@@ -33413,7 +33474,7 @@ function Header2({ config, platform }) {
33413
33474
  }
33414
33475
 
33415
33476
  // src/components/navigation/client-only-header.tsx
33416
- import { useState as useState80, useEffect as useEffect59 } from "react";
33477
+ import { useState as useState81, useEffect as useEffect59 } from "react";
33417
33478
 
33418
33479
  // src/components/navigation/header-skeleton.tsx
33419
33480
  import { jsx as jsx263, jsxs as jsxs206 } from "react/jsx-runtime";
@@ -33461,7 +33522,7 @@ function HeaderSkeleton({ config }) {
33461
33522
  // src/components/navigation/client-only-header.tsx
33462
33523
  import { jsx as jsx264 } from "react/jsx-runtime";
33463
33524
  function ClientOnlyHeader({ config, skeleton }) {
33464
- const [isClient, setIsClient] = useState80(false);
33525
+ const [isClient, setIsClient] = useState81(false);
33465
33526
  useEffect59(() => {
33466
33527
  setIsClient(true);
33467
33528
  }, []);
@@ -33475,7 +33536,7 @@ function ClientOnlyHeader({ config, skeleton }) {
33475
33536
  import { useEffect as useEffect60, useRef as useRef43 } from "react";
33476
33537
  init_button2();
33477
33538
  import { X as X10 } from "lucide-react";
33478
- import { Fragment as Fragment46, jsx as jsx265, jsxs as jsxs207 } from "react/jsx-runtime";
33539
+ import { Fragment as Fragment47, jsx as jsx265, jsxs as jsxs207 } from "react/jsx-runtime";
33479
33540
  function MobileNavPanel({ isOpen, config }) {
33480
33541
  const panelRef = useRef43(null);
33481
33542
  useEffect60(() => {
@@ -33548,7 +33609,7 @@ function MobileNavPanel({ isOpen, config }) {
33548
33609
  item.id
33549
33610
  );
33550
33611
  };
33551
- return /* @__PURE__ */ jsxs207(Fragment46, { children: [
33612
+ return /* @__PURE__ */ jsxs207(Fragment47, { children: [
33552
33613
  /* @__PURE__ */ jsx265(
33553
33614
  "div",
33554
33615
  {
@@ -33596,13 +33657,13 @@ function MobileNavPanel({ isOpen, config }) {
33596
33657
  }
33597
33658
 
33598
33659
  // src/components/navigation/sliding-sidebar.tsx
33599
- import { useState as useState81, useEffect as useEffect61 } from "react";
33660
+ import { useState as useState82, useEffect as useEffect61 } from "react";
33600
33661
  import { motion as motion2, AnimatePresence } from "framer-motion";
33601
33662
  init_button2();
33602
- import { Fragment as Fragment47, jsx as jsx266, jsxs as jsxs208 } from "react/jsx-runtime";
33663
+ import { Fragment as Fragment48, jsx as jsx266, jsxs as jsxs208 } from "react/jsx-runtime";
33603
33664
  function SlidingSidebar({ config }) {
33604
- const [expandedItems, setExpandedItems] = useState81(/* @__PURE__ */ new Set());
33605
- const [mounted, setMounted] = useState81(false);
33665
+ const [expandedItems, setExpandedItems] = useState82(/* @__PURE__ */ new Set());
33666
+ const [mounted, setMounted] = useState82(false);
33606
33667
  const headerHeight = useHeaderHeight();
33607
33668
  useEffect61(() => {
33608
33669
  setMounted(true);
@@ -33721,7 +33782,7 @@ function SlidingSidebar({ config }) {
33721
33782
  if (!mounted) {
33722
33783
  return null;
33723
33784
  }
33724
- return /* @__PURE__ */ jsxs208(Fragment47, { children: [
33785
+ return /* @__PURE__ */ jsxs208(Fragment48, { children: [
33725
33786
  /* @__PURE__ */ jsx266(AnimatePresence, { children: config.isOpen && /* @__PURE__ */ jsx266(
33726
33787
  motion2.div,
33727
33788
  {
@@ -33767,7 +33828,7 @@ function SlidingSidebar({ config }) {
33767
33828
  }
33768
33829
 
33769
33830
  // src/components/navigation/sticky-section-nav.tsx
33770
- import { useEffect as useEffect62, useState as useState82, useCallback as useCallback32, useRef as useRef44 } from "react";
33831
+ import { useEffect as useEffect62, useState as useState83, useCallback as useCallback32, useRef as useRef44 } from "react";
33771
33832
  import { jsx as jsx267, jsxs as jsxs209 } from "react/jsx-runtime";
33772
33833
  function StickySectionNav({
33773
33834
  sections,
@@ -33828,7 +33889,7 @@ function StickySectionNav({
33828
33889
  ] });
33829
33890
  }
33830
33891
  function useSectionNavigation(sections, options) {
33831
- const [activeSection, setActiveSection] = useState82(sections[0]?.id || "");
33892
+ const [activeSection, setActiveSection] = useState83(sections[0]?.id || "");
33832
33893
  const isScrollingFromClick = useRef44(false);
33833
33894
  const { offset: offset2 = 100 } = options || {};
33834
33895
  const handleSectionClick = useCallback32((sectionId) => {
@@ -33881,7 +33942,7 @@ function useSectionNavigation(sections, options) {
33881
33942
  }
33882
33943
 
33883
33944
  // src/components/navigation/navigation-sidebar.tsx
33884
- import { useCallback as useCallback33, useEffect as useEffect63, useLayoutEffect as useLayoutEffect6, useMemo as useMemo33, useState as useState83 } from "react";
33945
+ import { useCallback as useCallback33, useEffect as useEffect63, useLayoutEffect as useLayoutEffect6, useMemo as useMemo33, useState as useState84 } from "react";
33885
33946
 
33886
33947
  // src/components/navigation/navigation-sidebar-header.tsx
33887
33948
  import { jsx as jsx268, jsxs as jsxs210 } from "react/jsx-runtime";
@@ -34027,7 +34088,7 @@ function NavigationSidebarToggle({
34027
34088
  }
34028
34089
 
34029
34090
  // src/components/navigation/navigation-sidebar.tsx
34030
- import { Fragment as Fragment48, jsx as jsx271, jsxs as jsxs213 } from "react/jsx-runtime";
34091
+ import { Fragment as Fragment49, jsx as jsx271, jsxs as jsxs213 } from "react/jsx-runtime";
34031
34092
  var MINIMIZED_WIDTH = 56;
34032
34093
  var EXPANDED_WIDTH = 224;
34033
34094
  var STORAGE_KEY = "of.navigationSidebar.minimized";
@@ -34039,12 +34100,12 @@ function NavigationSidebar({ config, disabled = false }) {
34039
34100
  STORAGE_KEY,
34040
34101
  config.minimized ?? false
34041
34102
  );
34042
- const [tabletMinimized, setTabletMinimized] = useState83(true);
34103
+ const [tabletMinimized, setTabletMinimized] = useState84(true);
34043
34104
  useEffect63(() => {
34044
34105
  if (isTablet) setTabletMinimized(true);
34045
34106
  }, [isTablet]);
34046
34107
  const minimized = isTablet ? tabletMinimized : desktopMinimized;
34047
- const [transitionsEnabled, setTransitionsEnabled] = useState83(false);
34108
+ const [transitionsEnabled, setTransitionsEnabled] = useState84(false);
34048
34109
  const isOverlayOpen = isTablet && !minimized;
34049
34110
  const showLabel = !minimized;
34050
34111
  const handleToggle = useCallback33(() => {
@@ -34092,7 +34153,7 @@ function NavigationSidebar({ config, disabled = false }) {
34092
34153
  return () => cancelAnimationFrame(id);
34093
34154
  }
34094
34155
  }, [isHydrated, transitionsEnabled]);
34095
- return /* @__PURE__ */ jsxs213(Fragment48, { children: [
34156
+ return /* @__PURE__ */ jsxs213(Fragment49, { children: [
34096
34157
  /* @__PURE__ */ jsx271(
34097
34158
  "div",
34098
34159
  {
@@ -34126,7 +34187,7 @@ function NavigationSidebar({ config, disabled = false }) {
34126
34187
  ),
34127
34188
  style: { width: sidebarWidth },
34128
34189
  "aria-label": "Main navigation sidebar",
34129
- children: isHydrated && /* @__PURE__ */ jsxs213(Fragment48, { children: [
34190
+ children: isHydrated && /* @__PURE__ */ jsxs213(Fragment49, { children: [
34130
34191
  /* @__PURE__ */ jsx271(NavigationSidebarHeader, { minimized }),
34131
34192
  /* @__PURE__ */ jsxs213("div", { className: "flex-1 flex flex-col justify-between py-4 overflow-y-auto", children: [
34132
34193
  /* @__PURE__ */ jsx271("nav", { className: "flex flex-col", "aria-label": "Primary navigation", children: primaryItems.map((item) => /* @__PURE__ */ jsx271(
@@ -34534,11 +34595,11 @@ function NotificationsHeaderButton({
34534
34595
  }
34535
34596
 
34536
34597
  // src/components/navigation/app-layout.tsx
34537
- import { createContext as createContext9, Suspense as Suspense2, useCallback as useCallback35, useContext as useContext9, useMemo as useMemo34, useRef as useRef45, useState as useState84 } from "react";
34598
+ import { createContext as createContext9, Suspense as Suspense2, useCallback as useCallback35, useContext as useContext9, useMemo as useMemo34, useRef as useRef45, useState as useState85 } from "react";
34538
34599
 
34539
34600
  // src/components/navigation/mobile-burger-menu.tsx
34540
34601
  import React110, { useCallback as useCallback34, useEffect as useEffect64 } from "react";
34541
- import { Fragment as Fragment49, jsx as jsx276, jsxs as jsxs218 } from "react/jsx-runtime";
34602
+ import { Fragment as Fragment50, jsx as jsx276, jsxs as jsxs218 } from "react/jsx-runtime";
34542
34603
  var HEADER_HEIGHT = 48;
34543
34604
  var MobileBurgerMenu = React110.memo(function MobileBurgerMenu2({
34544
34605
  isOpen,
@@ -34624,7 +34685,7 @@ var MobileBurgerMenu = React110.memo(function MobileBurgerMenu2({
34624
34685
  row.length === 1 && /* @__PURE__ */ jsx276("div", { className: "flex-1" })
34625
34686
  ] }, rowIndex)) });
34626
34687
  };
34627
- return /* @__PURE__ */ jsxs218(Fragment49, { children: [
34688
+ return /* @__PURE__ */ jsxs218(Fragment50, { children: [
34628
34689
  /* @__PURE__ */ jsx276(
34629
34690
  "div",
34630
34691
  {
@@ -34755,8 +34816,8 @@ function AppLayout({
34755
34816
  disabled = false,
34756
34817
  drawer
34757
34818
  }) {
34758
- const [mobileMenuOpen, setMobileMenuOpen] = useState84(false);
34759
- const [drawerContainer, setDrawerContainer] = useState84(null);
34819
+ const [mobileMenuOpen, setMobileMenuOpen] = useState85(false);
34820
+ const [drawerContainer, setDrawerContainer] = useState85(null);
34760
34821
  const mobileMenuOpenRef = useRef45(mobileMenuOpen);
34761
34822
  mobileMenuOpenRef.current = mobileMenuOpen;
34762
34823
  const drawerHandlesRef = useRef45(/* @__PURE__ */ new Set());
@@ -35856,7 +35917,7 @@ import React113, { useRef as useRef47, useCallback as useCallback37 } from "reac
35856
35917
  import React112 from "react";
35857
35918
  init_button2();
35858
35919
  init_cn();
35859
- import { Fragment as Fragment50, jsx as jsx287, jsxs as jsxs229 } from "react/jsx-runtime";
35920
+ import { Fragment as Fragment51, jsx as jsx287, jsxs as jsxs229 } from "react/jsx-runtime";
35860
35921
  function OnboardingStepCard({
35861
35922
  step,
35862
35923
  isCompleted,
@@ -35898,10 +35959,10 @@ function OnboardingStepCard({
35898
35959
  /* @__PURE__ */ jsx287("h3", { className: "text-h4 text-ods-text-primary truncate", title: step.title, children: step.title }),
35899
35960
  /* @__PURE__ */ jsx287("p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary truncate h-[20px]", title: step.description, children: step.description })
35900
35961
  ] }),
35901
- /* @__PURE__ */ jsx287("div", { className: "flex items-center gap-2 w-full md:w-auto justify-start md:justify-end shrink-0", onClick: (e) => e.stopPropagation(), children: isCheckingCompletion ? /* @__PURE__ */ jsxs229(Fragment50, { children: [
35962
+ /* @__PURE__ */ jsx287("div", { className: "flex items-center gap-2 w-full md:w-auto justify-start md:justify-end shrink-0", onClick: (e) => e.stopPropagation(), children: isCheckingCompletion ? /* @__PURE__ */ jsxs229(Fragment51, { children: [
35902
35963
  /* @__PURE__ */ jsx287("div", { className: "h-[32px] w-[100px] bg-ods-border rounded-[6px] animate-pulse" }),
35903
35964
  /* @__PURE__ */ jsx287("div", { className: "h-[32px] w-[120px] bg-ods-border rounded-[6px] animate-pulse" })
35904
- ] }) : isCompleted ? /* @__PURE__ */ jsxs229(Fragment50, { children: [
35965
+ ] }) : isCompleted ? /* @__PURE__ */ jsxs229(Fragment51, { children: [
35905
35966
  /* @__PURE__ */ jsx287(
35906
35967
  StatusBadge,
35907
35968
  {
@@ -35920,14 +35981,14 @@ function OnboardingStepCard({
35920
35981
  children: step.completedText
35921
35982
  }
35922
35983
  )
35923
- ] }) : isSkipped ? /* @__PURE__ */ jsx287(Fragment50, { children: /* @__PURE__ */ jsx287(
35984
+ ] }) : isSkipped ? /* @__PURE__ */ jsx287(Fragment51, { children: /* @__PURE__ */ jsx287(
35924
35985
  StatusBadge,
35925
35986
  {
35926
35987
  text: "SKIPPED",
35927
35988
  variant: "card",
35928
35989
  colorScheme: "default"
35929
35990
  }
35930
- ) }) : /* @__PURE__ */ jsxs229(Fragment50, { children: [
35991
+ ) }) : /* @__PURE__ */ jsxs229(Fragment51, { children: [
35931
35992
  /* @__PURE__ */ jsx287(
35932
35993
  Button,
35933
35994
  {
@@ -36316,7 +36377,7 @@ function ServiceCard({ title, subtitle, icon, tag, rows, className }) {
36316
36377
  ] });
36317
36378
  }
36318
36379
  function ServiceCardRowItem({ row }) {
36319
- const [revealed, setRevealed] = useState86(false);
36380
+ const [revealed, setRevealed] = useState87(false);
36320
36381
  const { copy, copied } = useCopyToClipboard();
36321
36382
  const actions = useMemo35(() => ({ copy: true, open: !!row.href, reveal: !!row.isSecret, ...row.actions }), [row]);
36322
36383
  const displayValue = row.isSecret ? /* @__PURE__ */ jsx291(MaskedValue, { value: row.value, isRevealed: revealed }) : /* @__PURE__ */ jsx291("span", { children: row.value });
@@ -36934,7 +36995,7 @@ function getHideClasses(hideAt) {
36934
36995
  }
36935
36996
 
36936
36997
  // src/components/ui/table/table-header.tsx
36937
- import { Fragment as Fragment51, jsx as jsx301, jsxs as jsxs240 } from "react/jsx-runtime";
36998
+ import { Fragment as Fragment52, jsx as jsx301, jsxs as jsxs240 } from "react/jsx-runtime";
36938
36999
  function TableHeader({
36939
37000
  columns,
36940
37001
  className,
@@ -37045,10 +37106,10 @@ function TableHeader({
37045
37106
  column.sortable && "cursor-pointer hover:text-ods-text-primary transition-colors"
37046
37107
  ),
37047
37108
  onClick: () => handleSort(column),
37048
- children: column.renderHeader ? /* @__PURE__ */ jsxs240(Fragment51, { children: [
37109
+ children: column.renderHeader ? /* @__PURE__ */ jsxs240(Fragment52, { children: [
37049
37110
  column.renderHeader(),
37050
37111
  getSortIcon(column)
37051
- ] }) : /* @__PURE__ */ jsxs240(Fragment51, { children: [
37112
+ ] }) : /* @__PURE__ */ jsxs240(Fragment52, { children: [
37052
37113
  /* @__PURE__ */ jsx301("span", { className: "text-h5 text-ods-text-secondary uppercase whitespace-nowrap", children: column.label }),
37053
37114
  getSortIcon(column)
37054
37115
  ] })
@@ -37103,7 +37164,7 @@ function TableCell({
37103
37164
 
37104
37165
  // src/components/ui/table/table-skeleton.tsx
37105
37166
  init_cn();
37106
- import { Fragment as Fragment52, jsx as jsx303, jsxs as jsxs241 } from "react/jsx-runtime";
37167
+ import { Fragment as Fragment53, jsx as jsx303, jsxs as jsxs241 } from "react/jsx-runtime";
37107
37168
  var ROW_HEIGHT_DESKTOP = "h-[68px] md:h-[80px]";
37108
37169
  var ROW_HEIGHT_MOBILE = "h-[68px]";
37109
37170
  function TableCardSkeleton({
@@ -37115,7 +37176,7 @@ function TableCardSkeleton({
37115
37176
  rowClassName
37116
37177
  }) {
37117
37178
  const primaryKey = (columns.find((c) => /flex-(1|\[)/.test(c.width || "")) ?? columns[0])?.key;
37118
- return /* @__PURE__ */ jsx303(Fragment52, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs241(
37179
+ return /* @__PURE__ */ jsx303(Fragment53, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs241(
37119
37180
  "div",
37120
37181
  {
37121
37182
  className: cn(
@@ -37276,9 +37337,9 @@ function TableRow({
37276
37337
  }
37277
37338
 
37278
37339
  // src/components/ui/table/use-table-motion.ts
37279
- import { useEffect as useEffect66, useState as useState87 } from "react";
37340
+ import { useEffect as useEffect66, useState as useState88 } from "react";
37280
37341
  function useTableMotion(enabled) {
37281
- const [runtime, setRuntime] = useState87(null);
37342
+ const [runtime, setRuntime] = useState88(null);
37282
37343
  useEffect66(() => {
37283
37344
  if (!enabled || runtime) return;
37284
37345
  let active = true;
@@ -37294,7 +37355,7 @@ function useTableMotion(enabled) {
37294
37355
  }
37295
37356
 
37296
37357
  // src/components/ui/table/table.tsx
37297
- import { Fragment as Fragment53, jsx as jsx305, jsxs as jsxs243 } from "react/jsx-runtime";
37358
+ import { Fragment as Fragment54, jsx as jsx305, jsxs as jsxs243 } from "react/jsx-runtime";
37298
37359
  function injectSyntheticColumns(columns, rowActions, renderRowActions, rowHref) {
37299
37360
  const hasActions = Boolean(rowActions?.length) || Boolean(renderRowActions);
37300
37361
  const result = [...columns];
@@ -37496,7 +37557,7 @@ function Table({
37496
37557
  hasActions: Boolean(rowActions) && rowActions.length > 0,
37497
37558
  hasChevron: Boolean(rowHref)
37498
37559
  }
37499
- ) : data.length === 0 ? /* @__PURE__ */ jsx305(TableEmptyState, { message: emptyMessage }) : /* @__PURE__ */ jsxs243(Fragment53, { children: [
37560
+ ) : data.length === 0 ? /* @__PURE__ */ jsx305(TableEmptyState, { message: emptyMessage }) : /* @__PURE__ */ jsxs243(Fragment54, { children: [
37500
37561
  (() => {
37501
37562
  const rows = data.map((item, index) => /* @__PURE__ */ jsx305(
37502
37563
  TableRow,
@@ -37646,7 +37707,7 @@ import { useMemo as useMemo36 } from "react";
37646
37707
 
37647
37708
  // src/components/ui/query-report-table/query-report-table-header.tsx
37648
37709
  init_cn();
37649
- import { useRef as useRef50, useState as useState88, useCallback as useCallback38 } from "react";
37710
+ import { useRef as useRef50, useState as useState89, useCallback as useCallback38 } from "react";
37650
37711
  import { jsx as jsx308, jsxs as jsxs245 } from "react/jsx-runtime";
37651
37712
  function QueryReportTableHeader({
37652
37713
  columns,
@@ -37676,7 +37737,7 @@ function QueryReportTableHeader({
37676
37737
  }
37677
37738
  function TruncatedHeaderCell({ value, width }) {
37678
37739
  const textRef = useRef50(null);
37679
- const [isTruncated, setIsTruncated] = useState88(false);
37740
+ const [isTruncated, setIsTruncated] = useState89(false);
37680
37741
  const checkTruncation = useCallback38(() => {
37681
37742
  const el = textRef.current;
37682
37743
  if (el) {
@@ -37705,7 +37766,7 @@ function TruncatedHeaderCell({ value, width }) {
37705
37766
 
37706
37767
  // src/components/ui/query-report-table/query-report-table-row.tsx
37707
37768
  init_cn();
37708
- import { useRef as useRef51, useState as useState89, useCallback as useCallback39 } from "react";
37769
+ import { useRef as useRef51, useState as useState90, useCallback as useCallback39 } from "react";
37709
37770
  import { jsx as jsx309, jsxs as jsxs246 } from "react/jsx-runtime";
37710
37771
  function QueryReportTableRow({
37711
37772
  row,
@@ -37752,7 +37813,7 @@ function QueryReportTableRow({
37752
37813
  }
37753
37814
  function TruncatedCell({ value, className }) {
37754
37815
  const textRef = useRef51(null);
37755
- const [isTruncated, setIsTruncated] = useState89(false);
37816
+ const [isTruncated, setIsTruncated] = useState90(false);
37756
37817
  const checkTruncation = useCallback39(() => {
37757
37818
  const el = textRef.current;
37758
37819
  if (el) {
@@ -38123,7 +38184,7 @@ function DataTableColumnFilter({
38123
38184
  }
38124
38185
 
38125
38186
  // src/components/ui/data-table/data-table-header.tsx
38126
- import { Fragment as Fragment54, jsx as jsx314, jsxs as jsxs250 } from "react/jsx-runtime";
38187
+ import { Fragment as Fragment55, jsx as jsx314, jsxs as jsxs250 } from "react/jsx-runtime";
38127
38188
  function DataTableHeader({
38128
38189
  className,
38129
38190
  stickyHeader,
@@ -38217,7 +38278,7 @@ function HeaderLabel({ header }) {
38217
38278
  if (typeof headerDef === "string") {
38218
38279
  return /* @__PURE__ */ jsx314("span", { className: "text-h5 text-ods-text-secondary uppercase whitespace-nowrap transition-colors duration-200 group-hover:text-ods-text-primary", children: headerDef });
38219
38280
  }
38220
- return /* @__PURE__ */ jsx314(Fragment54, { children: flexRender(headerDef, header.getContext()) });
38281
+ return /* @__PURE__ */ jsx314(Fragment55, { children: flexRender(headerDef, header.getContext()) });
38221
38282
  }
38222
38283
  function SortIcon({ sorted }) {
38223
38284
  if (sorted === "asc") return /* @__PURE__ */ jsx314(Arrow01UpIcon, { className: "w-4 h-4 text-ods-accent" });
@@ -38256,7 +38317,7 @@ import { flexRender as flexRender2 } from "@tanstack/react-table";
38256
38317
 
38257
38318
  // src/components/ui/data-table/data-table-skeleton.tsx
38258
38319
  init_cn();
38259
- import { Fragment as Fragment55, jsx as jsx316, jsxs as jsxs251 } from "react/jsx-runtime";
38320
+ import { Fragment as Fragment56, jsx as jsx316, jsxs as jsxs251 } from "react/jsx-runtime";
38260
38321
  var ROW_HEIGHT_DESKTOP2 = "h-[68px] md:h-[80px]";
38261
38322
  var ROW_HEIGHT_MOBILE2 = "h-[68px]";
38262
38323
  function DataTableSkeleton({
@@ -38267,7 +38328,7 @@ function DataTableSkeleton({
38267
38328
  const table = useDataTableContext();
38268
38329
  const columns = table.getVisibleFlatColumns();
38269
38330
  const firstColumnId = columns[0]?.id;
38270
- return /* @__PURE__ */ jsx316(Fragment55, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs251(
38331
+ return /* @__PURE__ */ jsx316(Fragment56, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs251(
38271
38332
  "div",
38272
38333
  {
38273
38334
  className: cn(
@@ -38323,12 +38384,13 @@ function DataTableSkeleton({
38323
38384
  }
38324
38385
 
38325
38386
  // src/components/ui/data-table/data-table-row.tsx
38326
- import { Fragment as Fragment56, jsx as jsx317, jsxs as jsxs252 } from "react/jsx-runtime";
38387
+ import { Fragment as Fragment57, jsx as jsx317, jsxs as jsxs252 } from "react/jsx-runtime";
38327
38388
  function DataTableRowImpl({
38328
38389
  row,
38329
38390
  onClick,
38330
38391
  href,
38331
38392
  compact,
38393
+ autoHeight,
38332
38394
  className,
38333
38395
  subRow
38334
38396
  }) {
@@ -38362,7 +38424,7 @@ function DataTableRowImpl({
38362
38424
  {
38363
38425
  className: cn(
38364
38426
  "flex items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)]",
38365
- compact ? "py-[var(--spacing-system-xsf)]" : `py-0 ${ROW_HEIGHT_DESKTOP2}`,
38427
+ compact ? "py-[var(--spacing-system-xsf)]" : autoHeight ? "py-[var(--spacing-system-sf)] min-h-[68px] md:min-h-[80px]" : `py-0 ${ROW_HEIGHT_DESKTOP2}`,
38366
38428
  hasSubRow && "border-b border-ods-border"
38367
38429
  ),
38368
38430
  children: row.getVisibleCells().map((cell) => {
@@ -38424,7 +38486,7 @@ function CellContent({ children }) {
38424
38486
  if (typeof children === "string" || typeof children === "number") {
38425
38487
  return /* @__PURE__ */ jsx317("span", { className: "text-h4 text-ods-text-primary truncate", title: String(children), children });
38426
38488
  }
38427
- return /* @__PURE__ */ jsx317(Fragment56, { children });
38489
+ return /* @__PURE__ */ jsx317(Fragment57, { children });
38428
38490
  }
38429
38491
 
38430
38492
  // src/components/ui/data-table/data-table-body.tsx
@@ -38437,6 +38499,7 @@ function DataTableBody({
38437
38499
  className,
38438
38500
  rowClassName,
38439
38501
  compact,
38502
+ autoHeight,
38440
38503
  onRowClick,
38441
38504
  rowHref,
38442
38505
  minRows,
@@ -38463,6 +38526,7 @@ function DataTableBody({
38463
38526
  onClick: onRowClick,
38464
38527
  href,
38465
38528
  compact,
38529
+ autoHeight,
38466
38530
  className: cls,
38467
38531
  subRow: renderSubRow?.(item)
38468
38532
  },
@@ -38502,7 +38566,7 @@ function DataTableBody({
38502
38566
 
38503
38567
  // src/components/ui/data-table/data-table-infinite-footer.tsx
38504
38568
  import { useEffect as useEffect68, useRef as useRef53 } from "react";
38505
- import { Fragment as Fragment57, jsx as jsx319, jsxs as jsxs254 } from "react/jsx-runtime";
38569
+ import { Fragment as Fragment58, jsx as jsx319, jsxs as jsxs254 } from "react/jsx-runtime";
38506
38570
  function DataTableInfiniteFooter({
38507
38571
  hasNextPage,
38508
38572
  isFetchingNextPage,
@@ -38526,7 +38590,7 @@ function DataTableInfiniteFooter({
38526
38590
  observer.observe(sentinel);
38527
38591
  return () => observer.disconnect();
38528
38592
  }, [hasNextPage, isFetchingNextPage, rootMargin]);
38529
- return /* @__PURE__ */ jsxs254(Fragment57, { children: [
38593
+ return /* @__PURE__ */ jsxs254(Fragment58, { children: [
38530
38594
  isFetchingNextPage && /* @__PURE__ */ jsx319(DataTableSkeleton, { rows: skeletonRows }),
38531
38595
  hasNextPage && /* @__PURE__ */ jsx319("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
38532
38596
  ] });
@@ -39149,7 +39213,7 @@ function FilterList({
39149
39213
  import {
39150
39214
  useEffect as useEffect70,
39151
39215
  useRef as useRef55,
39152
- useState as useState91
39216
+ useState as useState92
39153
39217
  } from "react";
39154
39218
  init_cn();
39155
39219
  import { jsx as jsx323, jsxs as jsxs258 } from "react/jsx-runtime";
@@ -39186,7 +39250,7 @@ function TagSearchInput({
39186
39250
  const wrapperRef = useRef55(null);
39187
39251
  const hiddenTagsRef = useRef55(null);
39188
39252
  const hiddenTagsPopupRef = useRef55(null);
39189
- const [showHiddenTags, setShowHiddenTags] = useState91(false);
39253
+ const [showHiddenTags, setShowHiddenTags] = useState92(false);
39190
39254
  useEffect70(() => {
39191
39255
  if (!showHiddenTags) return;
39192
39256
  const handleClick = (e) => {
@@ -39342,7 +39406,7 @@ function TagSearchInput({
39342
39406
  }
39343
39407
 
39344
39408
  // src/components/ui/markdown-editor.tsx
39345
- import { useRef as useRef56, useCallback as useCallback42, useState as useState92, useEffect as useEffect71 } from "react";
39409
+ import { useRef as useRef56, useCallback as useCallback42, useState as useState93, useEffect as useEffect71 } from "react";
39346
39410
  init_cn();
39347
39411
  import { Loader2 as Loader29, Upload as Upload8 } from "lucide-react";
39348
39412
  import { jsx as jsx324, jsxs as jsxs259 } from "react/jsx-runtime";
@@ -39398,9 +39462,9 @@ function MarkdownEditor({
39398
39462
  renderPreview
39399
39463
  }) {
39400
39464
  const fileInputRef = useRef56(null);
39401
- const [isUploading, setIsUploading] = useState92(false);
39402
- const [uploadProgress, setUploadProgress] = useState92("");
39403
- const [defaultExtraCommands, setDefaultExtraCommands] = useState92([]);
39465
+ const [isUploading, setIsUploading] = useState93(false);
39466
+ const [uploadProgress, setUploadProgress] = useState93("");
39467
+ const [defaultExtraCommands, setDefaultExtraCommands] = useState93([]);
39404
39468
  useEffect71(() => {
39405
39469
  import("@uiw/react-md-editor").then((mod) => {
39406
39470
  if (mod.commands?.getExtraCommands) {
@@ -39936,7 +40000,7 @@ function FileUpload({
39936
40000
  import * as React124 from "react";
39937
40001
  import { Loader2 as Loader211 } from "lucide-react";
39938
40002
  init_cn();
39939
- import { Fragment as Fragment59, jsx as jsx326, jsxs as jsxs261 } from "react/jsx-runtime";
40003
+ import { Fragment as Fragment60, jsx as jsx326, jsxs as jsxs261 } from "react/jsx-runtime";
39940
40004
  var DEFAULT_MAX_SIZE = 25 * 1024 * 1024;
39941
40005
  function formatSize(bytes) {
39942
40006
  const mb = bytes / (1024 * 1024);
@@ -40064,7 +40128,7 @@ function ImageUploader({
40064
40128
  !hasImage && !interactive && "cursor-not-allowed",
40065
40129
  dropzoneClassName
40066
40130
  ),
40067
- children: hasImage ? /* @__PURE__ */ jsxs261(Fragment59, { children: [
40131
+ children: hasImage ? /* @__PURE__ */ jsxs261(Fragment60, { children: [
40068
40132
  /* @__PURE__ */ jsx326("div", { className: "relative min-h-0 w-full flex-1 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx326(
40069
40133
  "img",
40070
40134
  {
@@ -40101,7 +40165,7 @@ function ImageUploader({
40101
40165
  )
40102
40166
  ] }),
40103
40167
  loading && /* @__PURE__ */ jsx326("div", { className: "absolute inset-0 flex items-center justify-center rounded-md bg-ods-overlay", children: /* @__PURE__ */ jsx326(Loader211, { className: "size-8 animate-spin text-ods-text-on-dark" }) })
40104
- ] }) : loading ? /* @__PURE__ */ jsx326(Loader211, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs261(Fragment59, { children: [
40168
+ ] }) : loading ? /* @__PURE__ */ jsx326(Loader211, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs261(Fragment60, { children: [
40105
40169
  /* @__PURE__ */ jsx326("div", { className: "flex shrink-0 items-center justify-center rounded-full border border-ods-border bg-ods-card p-[var(--spacing-system-s)]", children: /* @__PURE__ */ jsx326(ImagePlusIcon, { className: "size-6 text-ods-text-primary" }) }),
40106
40170
  /* @__PURE__ */ jsxs261("div", { className: "flex w-full flex-col items-center text-center", children: [
40107
40171
  /* @__PURE__ */ jsx326("p", { className: "text-h4 text-ods-text-primary", children: label }),
@@ -40171,7 +40235,7 @@ PopoverContent.displayName = PopoverPrimitive7.Content.displayName;
40171
40235
 
40172
40236
  // src/components/ui/color-preset-select.tsx
40173
40237
  init_cn();
40174
- import { Fragment as Fragment60, jsx as jsx328, jsxs as jsxs262 } from "react/jsx-runtime";
40238
+ import { Fragment as Fragment61, jsx as jsx328, jsxs as jsxs262 } from "react/jsx-runtime";
40175
40239
  var TICKET_STATUS_COLOR_PRESETS = [
40176
40240
  { key: "green", label: "Green", color: "#5ea62e" },
40177
40241
  { key: "lime", label: "Lime", color: "#8bc34a" },
@@ -40322,7 +40386,7 @@ function RgbInputs({ value, onChange }) {
40322
40386
  const b = next.b ?? rgb.b;
40323
40387
  onChange(rgbToHex(r, g, b));
40324
40388
  };
40325
- return /* @__PURE__ */ jsxs262(Fragment60, { children: [
40389
+ return /* @__PURE__ */ jsxs262(Fragment61, { children: [
40326
40390
  /* @__PURE__ */ jsx328(ChannelInput, { value: rgb.r, min: 0, max: 255, ariaLabel: "Red", onCommit: (r) => update({ r }) }),
40327
40391
  /* @__PURE__ */ jsx328(ChannelInput, { value: rgb.g, min: 0, max: 255, ariaLabel: "Green", onCommit: (g) => update({ g }) }),
40328
40392
  /* @__PURE__ */ jsx328(ChannelInput, { value: rgb.b, min: 0, max: 255, ariaLabel: "Blue", onCommit: (b) => update({ b }) })
@@ -40338,7 +40402,7 @@ function HslInputs({ value, onChange }) {
40338
40402
  const out = hslToRgb(h, s, l);
40339
40403
  onChange(rgbToHex(out.r, out.g, out.b));
40340
40404
  };
40341
- return /* @__PURE__ */ jsxs262(Fragment60, { children: [
40405
+ return /* @__PURE__ */ jsxs262(Fragment61, { children: [
40342
40406
  /* @__PURE__ */ jsx328(ChannelInput, { value: hsl.h, min: 0, max: 360, ariaLabel: "Hue", onCommit: (h) => update({ h }) }),
40343
40407
  /* @__PURE__ */ jsx328(ChannelInput, { value: hsl.s, min: 0, max: 100, ariaLabel: "Saturation", onCommit: (s) => update({ s }) }),
40344
40408
  /* @__PURE__ */ jsx328(ChannelInput, { value: hsl.l, min: 0, max: 100, ariaLabel: "Lightness", onCommit: (l) => update({ l }) })
@@ -40635,7 +40699,7 @@ init_cn();
40635
40699
  // src/components/ui/ticket-note-card.tsx
40636
40700
  import * as React128 from "react";
40637
40701
  init_cn();
40638
- import { Fragment as Fragment61, jsx as jsx332, jsxs as jsxs266 } from "react/jsx-runtime";
40702
+ import { Fragment as Fragment62, jsx as jsx332, jsxs as jsxs266 } from "react/jsx-runtime";
40639
40703
  function TicketNoteCard({ note, onEdit, onDelete, className }) {
40640
40704
  const [isEditing, setIsEditing] = React128.useState(false);
40641
40705
  const [editText, setEditText] = React128.useState(note.text);
@@ -40709,7 +40773,7 @@ function TicketNoteCard({ note, onEdit, onDelete, className }) {
40709
40773
  children: /* @__PURE__ */ jsx332(XmarkIcon, { className: "size-5" })
40710
40774
  }
40711
40775
  )
40712
- ] }) : /* @__PURE__ */ jsxs266(Fragment61, { children: [
40776
+ ] }) : /* @__PURE__ */ jsxs266(Fragment62, { children: [
40713
40777
  /* @__PURE__ */ jsx332("p", { className: "text-h4 text-ods-text-primary", children: note.text }),
40714
40778
  /* @__PURE__ */ jsxs266(
40715
40779
  "p",
@@ -40816,7 +40880,7 @@ function TicketNotesSection({
40816
40880
  }
40817
40881
 
40818
40882
  // src/components/ui/ticket-info-section.tsx
40819
- import { Fragment as Fragment62, jsx as jsx334, jsxs as jsxs268 } from "react/jsx-runtime";
40883
+ import { Fragment as Fragment63, jsx as jsx334, jsxs as jsxs268 } from "react/jsx-runtime";
40820
40884
  function InfoCell2({ value, label, icon, onClick }) {
40821
40885
  return /* @__PURE__ */ jsx334("div", { className: "flex-1 min-w-0 overflow-hidden", children: /* @__PURE__ */ jsxs268("div", { className: "flex flex-col justify-center", children: [
40822
40886
  /* @__PURE__ */ jsxs268("div", { className: "flex items-center gap-1 w-full min-w-0", children: [
@@ -40941,7 +41005,7 @@ function TicketInfoSection({
40941
41005
  )
40942
41006
  ] })
40943
41007
  ] }),
40944
- expanded && /* @__PURE__ */ jsxs268(Fragment62, { children: [
41008
+ expanded && /* @__PURE__ */ jsxs268(Fragment63, { children: [
40945
41009
  createdAt && /* @__PURE__ */ jsx334("div", { className: "grid grid-cols-2 gap-4 px-4 py-3 bg-ods-bg border-b border-ods-border items-center", children: /* @__PURE__ */ jsx334(InfoCell2, { value: createdAt, label: "Created" }) }),
40946
41010
  /* @__PURE__ */ jsxs268("div", { className: "flex flex-col gap-4 p-4 bg-ods-bg border-b border-ods-border", children: [
40947
41011
  description && /* @__PURE__ */ jsx334(SimpleMarkdownRenderer, { content: description }),
@@ -40999,14 +41063,14 @@ function FilterPillRow({
40999
41063
 
41000
41064
  // src/components/ui/image-gallery-modal.tsx
41001
41065
  import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight10 } from "lucide-react";
41002
- import { Fragment as Fragment63, jsx as jsx336, jsxs as jsxs270 } from "react/jsx-runtime";
41066
+ import { Fragment as Fragment64, jsx as jsx336, jsxs as jsxs270 } from "react/jsx-runtime";
41003
41067
  function ImageGalleryModal({
41004
41068
  images,
41005
41069
  isOpen,
41006
41070
  onClose,
41007
41071
  initialIndex = 0
41008
41072
  }) {
41009
- const [selectedImageIndex, setSelectedImageIndex] = useState99(initialIndex);
41073
+ const [selectedImageIndex, setSelectedImageIndex] = useState100(initialIndex);
41010
41074
  useEffect74(() => {
41011
41075
  if (isOpen) {
41012
41076
  setSelectedImageIndex(initialIndex);
@@ -41055,7 +41119,7 @@ function ImageGalleryModal({
41055
41119
  onClose,
41056
41120
  className: "max-w-[95vw]",
41057
41121
  children: /* @__PURE__ */ jsxs270("div", { className: "relative flex items-center justify-center bg-black rounded-lg", children: [
41058
- images.length > 1 && /* @__PURE__ */ jsxs270(Fragment63, { children: [
41122
+ images.length > 1 && /* @__PURE__ */ jsxs270(Fragment64, { children: [
41059
41123
  selectedImageIndex > 0 && /* @__PURE__ */ jsx336("div", { className: "absolute left-4 top-1/2 -translate-y-1/2 z-[10000]", children: /* @__PURE__ */ jsx336(
41060
41124
  Button,
41061
41125
  {
@@ -41173,7 +41237,7 @@ function TaskTypeIcon({ customItemId, className = "h-5 w-5" }) {
41173
41237
  }
41174
41238
 
41175
41239
  // src/components/chat/entity-cards/roadmap-card.tsx
41176
- import { Fragment as Fragment64, jsx as jsx338, jsxs as jsxs271 } from "react/jsx-runtime";
41240
+ import { Fragment as Fragment65, jsx as jsx338, jsxs as jsxs271 } from "react/jsx-runtime";
41177
41241
  function RoadmapCardSkeleton({ size: size2 = "default" }) {
41178
41242
  if (size2 === "sm") {
41179
41243
  return /* @__PURE__ */ jsxs271("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -41225,7 +41289,7 @@ function RoadmapCard({
41225
41289
  onVote,
41226
41290
  isVoting = false
41227
41291
  }) {
41228
- const [showScreenshots, setShowScreenshots] = useState100(false);
41292
+ const [showScreenshots, setShowScreenshots] = useState101(false);
41229
41293
  const logoUrl = item.icon && item.icon.startsWith("http") ? item.icon : null;
41230
41294
  const iconSrc = logoUrl ? getProxiedImageUrl(logoUrl, { directHttps: true }) || logoUrl : null;
41231
41295
  if (size2 === "sm") {
@@ -41235,7 +41299,7 @@ function RoadmapCard({
41235
41299
  const hasScreenshots = (item.screenshots?.length ?? 0) > 0;
41236
41300
  const typeLabel = getTaskTypeLabel(item.customItemId);
41237
41301
  const useTypeIcon = cardType === "internal_task" || !iconSrc && item.customItemId != null;
41238
- const body = /* @__PURE__ */ jsxs271(Fragment64, { children: [
41302
+ const body = /* @__PURE__ */ jsxs271(Fragment65, { children: [
41239
41303
  /* @__PURE__ */ jsx338(
41240
41304
  "span",
41241
41305
  {
@@ -41427,7 +41491,7 @@ function RoadmapCard({
41427
41491
  // src/components/chat/entity-cards/github-activity-card.tsx
41428
41492
  import React131 from "react";
41429
41493
  import { GitPullRequest, Eye as Eye4, ExternalLink as ExternalLink8 } from "lucide-react";
41430
- import { Fragment as Fragment65, jsx as jsx339, jsxs as jsxs272 } from "react/jsx-runtime";
41494
+ import { Fragment as Fragment66, jsx as jsx339, jsxs as jsxs272 } from "react/jsx-runtime";
41431
41495
  function parseRepoFromUrl(url) {
41432
41496
  if (!url) return null;
41433
41497
  try {
@@ -41559,7 +41623,7 @@ function GitHubActivityCard({ item, variant = "compact", className, anchorProps
41559
41623
  if (repo) metaParts.push(/* @__PURE__ */ jsx339("span", { className: "font-mono truncate", children: repo }, "repo"));
41560
41624
  if (dateText) metaParts.push(/* @__PURE__ */ jsx339("span", { className: "whitespace-nowrap", children: dateText }, "date"));
41561
41625
  const href = safeHref(item.url);
41562
- const body = /* @__PURE__ */ jsxs272(Fragment65, { children: [
41626
+ const body = /* @__PURE__ */ jsxs272(Fragment66, { children: [
41563
41627
  /* @__PURE__ */ jsx339("span", { className: COMPACT_CARD_ICON_SLOT, children: kindIcon(kind, "h-5 w-5") }),
41564
41628
  /* @__PURE__ */ jsxs272("span", { className: COMPACT_CARD_TEXT_COL, children: [
41565
41629
  /* @__PURE__ */ jsxs272("span", { className: `${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-1.5`, children: [
@@ -41614,7 +41678,7 @@ function GitHubActivityCardSkeleton({ variant = "compact", className }) {
41614
41678
  // src/components/chat/entity-cards/slack-message-card.tsx
41615
41679
  import React132 from "react";
41616
41680
  import { ExternalLink as ExternalLink9, Hash } from "lucide-react";
41617
- import { Fragment as Fragment66, jsx as jsx340, jsxs as jsxs273 } from "react/jsx-runtime";
41681
+ import { Fragment as Fragment67, jsx as jsx340, jsxs as jsxs273 } from "react/jsx-runtime";
41618
41682
  function parseChannelFromUrl(url) {
41619
41683
  if (!url) return null;
41620
41684
  try {
@@ -41653,7 +41717,7 @@ function SlackMessageCard({ item, variant = "compact", className, anchorProps })
41653
41717
  }
41654
41718
  if (dateText) metaParts.push(/* @__PURE__ */ jsx340("span", { className: "whitespace-nowrap", children: dateText }, "date"));
41655
41719
  const href = safeHref(item.url);
41656
- const body = /* @__PURE__ */ jsxs273(Fragment66, { children: [
41720
+ const body = /* @__PURE__ */ jsxs273(Fragment67, { children: [
41657
41721
  /* @__PURE__ */ jsx340("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx340(SlackIcon, { className: "h-5 w-5" }) }),
41658
41722
  /* @__PURE__ */ jsxs273("span", { className: COMPACT_CARD_TEXT_COL, children: [
41659
41723
  /* @__PURE__ */ jsx340("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx340("span", { className: COMPACT_CARD_TITLE, children: item.title }) }),
@@ -41703,7 +41767,7 @@ function SlackMessageCardSkeleton({ variant = "compact", className }) {
41703
41767
  // src/components/chat/entity-cards/hubspot-ticket-card.tsx
41704
41768
  import React133 from "react";
41705
41769
  import { ExternalLink as ExternalLink10 } from "lucide-react";
41706
- import { Fragment as Fragment67, jsx as jsx341, jsxs as jsxs274 } from "react/jsx-runtime";
41770
+ import { Fragment as Fragment68, jsx as jsx341, jsxs as jsxs274 } from "react/jsx-runtime";
41707
41771
  function formatToken(token) {
41708
41772
  if (!token) return null;
41709
41773
  const lower = token.toLowerCase().replace(/_/g, " ");
@@ -41742,7 +41806,7 @@ function HubspotTicketCard({ item, variant = "compact", className, anchorProps }
41742
41806
  }
41743
41807
  if (dateText) metaParts.push(/* @__PURE__ */ jsx341("span", { className: "whitespace-nowrap", children: dateText }, "date"));
41744
41808
  const href = safeHref(item.url);
41745
- const body = /* @__PURE__ */ jsxs274(Fragment67, { children: [
41809
+ const body = /* @__PURE__ */ jsxs274(Fragment68, { children: [
41746
41810
  /* @__PURE__ */ jsxs274("span", { className: COMPACT_CARD_TEXT_COL, children: [
41747
41811
  /* @__PURE__ */ jsxs274("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
41748
41812
  /* @__PURE__ */ jsx341("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -41822,9 +41886,9 @@ function HubspotTicketCardSkeleton({ variant = "compact", className }) {
41822
41886
 
41823
41887
  // src/components/chat/entity-cards/data-room-doc-card.tsx
41824
41888
  import { ExternalLink as ExternalLink11 } from "lucide-react";
41825
- import { Fragment as Fragment68, jsx as jsx342, jsxs as jsxs275 } from "react/jsx-runtime";
41889
+ import { Fragment as Fragment69, jsx as jsx342, jsxs as jsxs275 } from "react/jsx-runtime";
41826
41890
  function DataRoomDocCard({ item, className, badgeText, anchorProps }) {
41827
- const body = /* @__PURE__ */ jsxs275(Fragment68, { children: [
41891
+ const body = /* @__PURE__ */ jsxs275(Fragment69, { children: [
41828
41892
  /* @__PURE__ */ jsxs275("span", { className: COMPACT_CARD_TEXT_COL, children: [
41829
41893
  /* @__PURE__ */ jsxs275("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
41830
41894
  /* @__PURE__ */ jsx342("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -41861,7 +41925,7 @@ function DataRoomDocCardSkeleton({ className }) {
41861
41925
  }
41862
41926
 
41863
41927
  // src/components/chat/entity-cards/program-card.tsx
41864
- import { useState as useState101 } from "react";
41928
+ import { useState as useState102 } from "react";
41865
41929
 
41866
41930
  // node_modules/date-fns/toDate.mjs
41867
41931
  function toDate(argument) {
@@ -43434,7 +43498,7 @@ function cleanEscapedString(input) {
43434
43498
  init_button();
43435
43499
  import { ExternalLink as ExternalLink12, Clock as Clock2, Play as Play4, Video as Video8 } from "lucide-react";
43436
43500
  init_cn();
43437
- import { Fragment as Fragment69, jsx as jsx343, jsxs as jsxs276 } from "react/jsx-runtime";
43501
+ import { Fragment as Fragment70, jsx as jsx343, jsxs as jsxs276 } from "react/jsx-runtime";
43438
43502
  function formatUtc(date, fmt) {
43439
43503
  return format(new Date(date.getTime() + date.getTimezoneOffset() * 6e4), fmt);
43440
43504
  }
@@ -43498,8 +43562,8 @@ function getHosts(hosts) {
43498
43562
  return [];
43499
43563
  }
43500
43564
  function MediaGallery({ images, title }) {
43501
- const [selectedImageIndex, setSelectedImageIndex] = useState101(null);
43502
- const [isModalOpen, setIsModalOpen] = useState101(false);
43565
+ const [selectedImageIndex, setSelectedImageIndex] = useState102(null);
43566
+ const [isModalOpen, setIsModalOpen] = useState102(false);
43503
43567
  const openImageModal = (index, event) => {
43504
43568
  if (event) event.stopPropagation();
43505
43569
  setSelectedImageIndex(index);
@@ -43509,7 +43573,7 @@ function MediaGallery({ images, title }) {
43509
43573
  setIsModalOpen(false);
43510
43574
  setSelectedImageIndex(null);
43511
43575
  };
43512
- return /* @__PURE__ */ jsxs276(Fragment69, { children: [
43576
+ return /* @__PURE__ */ jsxs276(Fragment70, { children: [
43513
43577
  /* @__PURE__ */ jsx343("div", { className: "p-6 pt-4", children: /* @__PURE__ */ jsx343("div", { className: "overflow-x-auto mb-4", children: /* @__PURE__ */ jsx343("div", { className: "flex gap-3 pb-2", style: { width: "max-content" }, children: images.map((mediaItem, index) => /* @__PURE__ */ jsxs276(
43514
43578
  "div",
43515
43579
  {
@@ -43626,7 +43690,7 @@ function ProgramCard({
43626
43690
  const dateFormat = formatUtc(itemDate, "EEEE d MMMM");
43627
43691
  const defaultRenderMeta = () => {
43628
43692
  if (config.type === "podcast" && "duration_seconds" in item && !isScheduled) {
43629
- return /* @__PURE__ */ jsxs276(Fragment69, { children: [
43693
+ return /* @__PURE__ */ jsxs276(Fragment70, { children: [
43630
43694
  /* @__PURE__ */ jsx343(Clock2, { className: "w-4 h-4 text-ods-text-secondary" }),
43631
43695
  /* @__PURE__ */ jsx343("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: formatDurationCompact(item.duration_seconds) })
43632
43696
  ] });
@@ -43637,7 +43701,7 @@ function ProgramCard({
43637
43701
  if (config.type === "webinar" && "start_at" in item) {
43638
43702
  const webinarItem = item;
43639
43703
  const duration = formatDurationFromRange(webinarItem.start_at, webinarItem.end_at);
43640
- return /* @__PURE__ */ jsxs276(Fragment69, { children: [
43704
+ return /* @__PURE__ */ jsxs276(Fragment70, { children: [
43641
43705
  /* @__PURE__ */ jsx343(Video8, { className: "w-4 h-4 text-ods-text-secondary" }),
43642
43706
  /* @__PURE__ */ jsxs276("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: [
43643
43707
  formatTimeWithTimezone(webinarItem.start_at, webinarItem.timezone ?? null),
@@ -43671,10 +43735,10 @@ function ProgramCard({
43671
43735
  /* @__PURE__ */ jsx343("h3", { className: "font-['Azeret_Mono'] font-semibold text-xl md:text-2xl text-ods-text-primary leading-tight mb-3 min-h-[3rem] md:min-h-[3.5rem] line-clamp-2 flex items-center", children: item.title }),
43672
43736
  /* @__PURE__ */ jsxs276("div", { className: "flex flex-col md:flex-row md:items-center gap-2 md:gap-4 mb-4", children: [
43673
43737
  /* @__PURE__ */ jsx343("span", { className: "font-['DM_Sans'] font-medium", style: { color: accentColor }, children: dateFormat }),
43674
- renderMeta ? /* @__PURE__ */ jsxs276(Fragment69, { children: [
43738
+ renderMeta ? /* @__PURE__ */ jsxs276(Fragment70, { children: [
43675
43739
  /* @__PURE__ */ jsx343("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
43676
43740
  renderMeta(item)
43677
- ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs276(Fragment69, { children: [
43741
+ ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs276(Fragment70, { children: [
43678
43742
  /* @__PURE__ */ jsx343("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
43679
43743
  /* @__PURE__ */ jsx343("div", { className: "flex items-center gap-2", children: defaultRenderMeta() })
43680
43744
  ] })
@@ -43751,10 +43815,10 @@ function ProgramCard({
43751
43815
 
43752
43816
  // src/components/chat/entity-cards/campaign-card-admin.tsx
43753
43817
  import { Megaphone as Megaphone3 } from "lucide-react";
43754
- import { Fragment as Fragment70, jsx as jsx344, jsxs as jsxs277 } from "react/jsx-runtime";
43818
+ import { Fragment as Fragment71, jsx as jsx344, jsxs as jsxs277 } from "react/jsx-runtime";
43755
43819
  function CampaignCardAdmin({ campaign, className, anchorProps }) {
43756
43820
  const goalsCount = campaign.goals?.length || 0;
43757
- const innerChildren = /* @__PURE__ */ jsxs277(Fragment70, { children: [
43821
+ const innerChildren = /* @__PURE__ */ jsxs277(Fragment71, { children: [
43758
43822
  /* @__PURE__ */ jsx344("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx344(Megaphone3, { className: "h-5 w-5" }) }),
43759
43823
  /* @__PURE__ */ jsxs277("span", { className: COMPACT_CARD_TEXT_COL, children: [
43760
43824
  /* @__PURE__ */ jsx344("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx344("span", { className: COMPACT_CARD_TITLE, children: campaign.name }) }),
@@ -43784,11 +43848,11 @@ function CampaignCardAdminSkeleton({ className }) {
43784
43848
 
43785
43849
  // src/components/chat/entity-cards/generic-entity-card.tsx
43786
43850
  import { ExternalLink as ExternalLink13 } from "lucide-react";
43787
- import { Fragment as Fragment71, jsx as jsx345, jsxs as jsxs278 } from "react/jsx-runtime";
43851
+ import { Fragment as Fragment72, jsx as jsx345, jsxs as jsxs278 } from "react/jsx-runtime";
43788
43852
  function GenericEntityCard({ item, className, anchorProps }) {
43789
43853
  const href = safeHref(item.url);
43790
43854
  const dateText = formatDateUTC(item.dateUpdated, { fallback: "", timezone: "local" });
43791
- const body = /* @__PURE__ */ jsxs278(Fragment71, { children: [
43855
+ const body = /* @__PURE__ */ jsxs278(Fragment72, { children: [
43792
43856
  /* @__PURE__ */ jsxs278("span", { className: COMPACT_CARD_TEXT_COL, children: [
43793
43857
  /* @__PURE__ */ jsxs278("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
43794
43858
  /* @__PURE__ */ jsx345("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -43973,7 +44037,7 @@ function resolveSourceIcon(input, ctx = {}) {
43973
44037
 
43974
44038
  // src/components/chat/mingo-info-card.tsx
43975
44039
  init_cn();
43976
- import { Fragment as Fragment72, jsx as jsx346, jsxs as jsxs279 } from "react/jsx-runtime";
44040
+ import { Fragment as Fragment73, jsx as jsx346, jsxs as jsxs279 } from "react/jsx-runtime";
43977
44041
  function CardMedia({
43978
44042
  imageSrc,
43979
44043
  imageAlt,
@@ -44017,7 +44081,7 @@ function MingoInfoCard({
44017
44081
  const hasMenu = !!menuGroups && menuGroups.length > 0;
44018
44082
  const isAnchor = !!anchorProps;
44019
44083
  const isInteractive = isAnchor || !!onClick;
44020
- const content = /* @__PURE__ */ jsxs279(Fragment72, { children: [
44084
+ const content = /* @__PURE__ */ jsxs279(Fragment73, { children: [
44021
44085
  hasMedia && /* @__PURE__ */ jsx346(CardMedia, { imageSrc, imageAlt, icon }),
44022
44086
  /* @__PURE__ */ jsxs279("span", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
44023
44087
  /* @__PURE__ */ jsx346("span", { className: "truncate text-h4 font-medium text-ods-text-primary", children: title }),
@@ -44066,7 +44130,7 @@ function MingoInfoCard({
44066
44130
  }
44067
44131
 
44068
44132
  // src/components/chat/entity-cards/dispatch.tsx
44069
- import { Fragment as Fragment73, jsx as jsx347, jsxs as jsxs280 } from "react/jsx-runtime";
44133
+ import { Fragment as Fragment74, jsx as jsx347, jsxs as jsxs280 } from "react/jsx-runtime";
44070
44134
  function githubKindIcon(kind) {
44071
44135
  switch (kind) {
44072
44136
  case "pull_request":
@@ -45034,10 +45098,10 @@ function ChatCardLoader({
45034
45098
  }
45035
45099
  );
45036
45100
  }
45037
- if (isLoading) return /* @__PURE__ */ jsx347(Fragment73, { children: entry.skeleton() });
45101
+ if (isLoading) return /* @__PURE__ */ jsx347(Fragment74, { children: entry.skeleton() });
45038
45102
  if (!item) return null;
45039
45103
  if (entry.bareInline) {
45040
- return /* @__PURE__ */ jsx347(Fragment73, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
45104
+ return /* @__PURE__ */ jsx347(Fragment74, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
45041
45105
  }
45042
45106
  return /* @__PURE__ */ jsx347(
45043
45107
  ChatCardWithDiscuss,
@@ -45284,7 +45348,7 @@ function useChunkCatchup({
45284
45348
  }
45285
45349
 
45286
45350
  // src/components/chat/hooks/use-jetstream-dialog-subscription.ts
45287
- import { useEffect as useEffect75, useRef as useRef61, useState as useState102 } from "react";
45351
+ import { useEffect as useEffect75, useRef as useRef61, useState as useState103 } from "react";
45288
45352
  var DEFAULT_INACTIVE_THRESHOLD_MS = 5 * 6e4;
45289
45353
  var DEFAULT_STREAM_NAME = "CHAT_CHUNKS";
45290
45354
  function useJetStreamDialogSubscription({
@@ -45303,10 +45367,10 @@ function useJetStreamDialogSubscription({
45303
45367
  reconnectionBackoff,
45304
45368
  inactiveThresholdMs
45305
45369
  }) {
45306
- const [isConnected, setIsConnected] = useState102(false);
45307
- const [isSubscribed, setIsSubscribed] = useState102(false);
45308
- const [reconnectionCount, setReconnectionCount] = useState102(0);
45309
- const [currentStreamSeq, setCurrentStreamSeq] = useState102(null);
45370
+ const [isConnected, setIsConnected] = useState103(false);
45371
+ const [isSubscribed, setIsSubscribed] = useState103(false);
45372
+ const [reconnectionCount, setReconnectionCount] = useState103(0);
45373
+ const [currentStreamSeq, setCurrentStreamSeq] = useState103(null);
45310
45374
  const clientRef = useRef61(null);
45311
45375
  const subscriptionRef = useRef61(null);
45312
45376
  const highestStreamSeqRef = useRef61(null);
@@ -45525,7 +45589,7 @@ function useJetStreamDialogSubscription({
45525
45589
  }
45526
45590
 
45527
45591
  // src/components/chat/hooks/use-nats-dialog-subscription.ts
45528
- import { useEffect as useEffect76, useRef as useRef62, useState as useState103 } from "react";
45592
+ import { useEffect as useEffect76, useRef as useRef62, useState as useState104 } from "react";
45529
45593
  function useNatsDialogSubscription({
45530
45594
  enabled,
45531
45595
  dialogId,
@@ -45539,9 +45603,9 @@ function useNatsDialogSubscription({
45539
45603
  clientConfig = {},
45540
45604
  reconnectionBackoff
45541
45605
  }) {
45542
- const [isConnected, setIsConnected] = useState103(false);
45543
- const [isSubscribed, setIsSubscribed] = useState103(false);
45544
- const [reconnectionCount, setReconnectionCount] = useState103(0);
45606
+ const [isConnected, setIsConnected] = useState104(false);
45607
+ const [isSubscribed, setIsSubscribed] = useState104(false);
45608
+ const [reconnectionCount, setReconnectionCount] = useState104(0);
45545
45609
  const clientRef = useRef62(null);
45546
45610
  const subscriptionRefs = useRef62(/* @__PURE__ */ new Map());
45547
45611
  const onEventRef = useRef62(onEvent);
@@ -46735,7 +46799,7 @@ function useRealtimeChunkProcessor(options) {
46735
46799
  }
46736
46800
 
46737
46801
  // src/components/chat/hooks/use-slash-commands.ts
46738
- import { useEffect as useEffect78, useState as useState104 } from "react";
46802
+ import { useEffect as useEffect78, useState as useState105 } from "react";
46739
46803
  import { useQuery as useQuery2 } from "@tanstack/react-query";
46740
46804
  async function fetchSlashCommands(prefix, signal, commandsUrl) {
46741
46805
  try {
@@ -46752,8 +46816,8 @@ async function fetchSlashCommands(prefix, signal, commandsUrl) {
46752
46816
  }
46753
46817
  }
46754
46818
  function useSlashCommands(prefix, commandsUrl) {
46755
- const [commands, setCommands] = useState104([]);
46756
- const [loading, setLoading] = useState104(false);
46819
+ const [commands, setCommands] = useState105([]);
46820
+ const [loading, setLoading] = useState105(false);
46757
46821
  useEffect78(() => {
46758
46822
  if (prefix == null) {
46759
46823
  setCommands([]);
@@ -46860,7 +46924,7 @@ function useEmptyStateConfig(emptyStateUrl, options) {
46860
46924
  }
46861
46925
 
46862
46926
  // src/components/chat/hooks/use-chat-attachments.ts
46863
- import { useCallback as useCallback46, useMemo as useMemo40, useRef as useRef64, useState as useState105 } from "react";
46927
+ import { useCallback as useCallback46, useMemo as useMemo40, useRef as useRef64, useState as useState106 } from "react";
46864
46928
  import { fileTypeFromBlob } from "file-type";
46865
46929
  var CHAT_ATTACHMENTS_BUCKET = "chat-attachments";
46866
46930
  var CHAT_ATTACHMENTS_FOLDER = "chat";
@@ -46936,7 +47000,7 @@ function uploadWithProgress(url, file, token, onProgress, signal) {
46936
47000
  function useChatAttachments() {
46937
47001
  const runtime = useRequiredChatRuntime();
46938
47002
  const uploadUrlEndpoint = runtime.endpoints.attachmentUploadUrl;
46939
- const [attachments, setAttachments] = useState105([]);
47003
+ const [attachments, setAttachments] = useState106([]);
46940
47004
  const controllersRef = useRef64(/* @__PURE__ */ new Map());
46941
47005
  const updateOne = useCallback46((id, patch) => {
46942
47006
  setAttachments((prev) => prev.map((a) => a.id === id ? { ...a, ...patch } : a));
@@ -47103,14 +47167,14 @@ function useChatAttachments() {
47103
47167
  }
47104
47168
 
47105
47169
  // src/components/chat/hooks/use-chat-attachment-image-gallery.tsx
47106
- import { useCallback as useCallback47, useEffect as useEffect79, useRef as useRef65, useState as useState106 } from "react";
47170
+ import { useCallback as useCallback47, useEffect as useEffect79, useRef as useRef65, useState as useState107 } from "react";
47107
47171
  import { jsx as jsx348 } from "react/jsx-runtime";
47108
47172
  var CLOSED = { isOpen: false, images: [], initialIndex: 0 };
47109
47173
  function useChatAttachmentImageGallery() {
47110
47174
  const runtime = useRequiredChatRuntime();
47111
47175
  const viewUrlPrefix = runtime.endpoints.attachmentViewUrlPrefix;
47112
47176
  const panelRef = useRef65(null);
47113
- const [state, setState] = useState106(CLOSED);
47177
+ const [state, setState] = useState107(CLOSED);
47114
47178
  const handleClose = useCallback47(() => setState(CLOSED), []);
47115
47179
  useEffect79(() => {
47116
47180
  const root = panelRef.current;
@@ -47158,7 +47222,7 @@ function absolutize(prefix) {
47158
47222
  }
47159
47223
 
47160
47224
  // src/components/chat/hooks/use-chat-identity.ts
47161
- import { createContext as createContext12, createElement as createElement2, useContext as useContext12, useEffect as useEffect80, useState as useState107 } from "react";
47225
+ import { createContext as createContext12, createElement as createElement2, useContext as useContext12, useEffect as useEffect80, useState as useState108 } from "react";
47162
47226
  var ANON_DEFAULTS = {
47163
47227
  authTier: "anon",
47164
47228
  source: null,
@@ -47169,8 +47233,8 @@ function useResolveChatIdentity(enabled) {
47169
47233
  const runtime = useRequiredChatRuntime();
47170
47234
  const url = runtime.endpoints.identityUrl;
47171
47235
  const proxyEmail = getEmbedProxyAuth()?.email ?? null;
47172
- const [data, setData] = useState107(ANON_DEFAULTS);
47173
- const [isLoading, setIsLoading] = useState107(enabled);
47236
+ const [data, setData] = useState108(ANON_DEFAULTS);
47237
+ const [isLoading, setIsLoading] = useState108(enabled);
47174
47238
  useEffect80(() => {
47175
47239
  if (!enabled) return;
47176
47240
  let cancelled = false;
@@ -47231,13 +47295,13 @@ function useCloseOnNavigation(close, pathname) {
47231
47295
  }
47232
47296
 
47233
47297
  // src/components/chat/hooks/use-chat.ts
47234
- import { useState as useState109, useCallback as useCallback49, useEffect as useEffect82, useRef as useRef68 } from "react";
47298
+ import { useState as useState110, useCallback as useCallback49, useEffect as useEffect82, useRef as useRef68 } from "react";
47235
47299
 
47236
47300
  // src/components/chat/hooks/use-sse.ts
47237
- import { useState as useState108, useCallback as useCallback48, useRef as useRef67 } from "react";
47301
+ import { useState as useState109, useCallback as useCallback48, useRef as useRef67 } from "react";
47238
47302
  function useSSE({ useMock = true, debugMode = false, streamFn } = {}) {
47239
- const [isStreaming, setIsStreaming] = useState108(false);
47240
- const [error, setError] = useState108(null);
47303
+ const [isStreaming, setIsStreaming] = useState109(false);
47304
+ const [error, setError] = useState109(null);
47241
47305
  const abortControllerRef = useRef67(null);
47242
47306
  const fallbackStream = useCallback48(async function* () {
47243
47307
  throw new Error(
@@ -47304,8 +47368,8 @@ function useChat({
47304
47368
  initialMessages,
47305
47369
  onMessagesChange
47306
47370
  } = {}) {
47307
- const [messages, setMessages] = useState109(() => initialMessages ?? []);
47308
- const [isTyping, setIsTyping] = useState109(false);
47371
+ const [messages, setMessages] = useState110(() => initialMessages ?? []);
47372
+ const [isTyping, setIsTyping] = useState110(false);
47309
47373
  const currentAssistantSegmentsRef = useRef68([]);
47310
47374
  const onMessagesChangeRef = useRef68(onMessagesChange);
47311
47375
  onMessagesChangeRef.current = onMessagesChange;
@@ -47598,7 +47662,7 @@ function useChat({
47598
47662
  }
47599
47663
 
47600
47664
  // src/components/chat/hooks/use-sse-chat-adapter.ts
47601
- import { useState as useState110, useEffect as useEffect83, useCallback as useCallback50, useMemo as useMemo41, useRef as useRef69 } from "react";
47665
+ import { useState as useState111, useEffect as useEffect83, useCallback as useCallback50, useMemo as useMemo41, useRef as useRef69 } from "react";
47602
47666
  function createEmptyTurnMeta() {
47603
47667
  return {
47604
47668
  provider: null,
@@ -47933,8 +47997,8 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
47933
47997
  const metaMapRef = useRef69(/* @__PURE__ */ new Map());
47934
47998
  const messagesRef = useRef69(persistedRef.current.messages);
47935
47999
  const sendCountRef = useRef69(persistedRef.current.sendCount);
47936
- const [streamingPhase, setStreamingPhase] = useState110("idle");
47937
- const [metaTick, setMetaTick] = useState110(0);
48000
+ const [streamingPhase, setStreamingPhase] = useState111("idle");
48001
+ const [metaTick, setMetaTick] = useState111(0);
47938
48002
  const bumpMetaTick = useCallback50(() => setMetaTick((t) => t + 1), []);
47939
48003
  const streamFn = useMemo41(
47940
48004
  () => createDocStreamFn(
@@ -48207,7 +48271,7 @@ import {
48207
48271
  useEffect as useEffect84,
48208
48272
  useMemo as useMemo42,
48209
48273
  useRef as useRef70,
48210
- useState as useState111
48274
+ useState as useState112
48211
48275
  } from "react";
48212
48276
 
48213
48277
  // src/components/chat/utils/process-historical-messages.ts
@@ -48697,23 +48761,23 @@ function useNatsChatAdapter(config, options = {}) {
48697
48761
  modelLabel = null
48698
48762
  } = config;
48699
48763
  const isManagedMode = fetchDialogs !== void 0;
48700
- const [internalDialogId, setInternalDialogId] = useState111(null);
48764
+ const [internalDialogId, setInternalDialogId] = useState112(null);
48701
48765
  const dialogId = isManagedMode ? internalDialogId : controlledDialogId !== void 0 ? controlledDialogId : null;
48702
- const [messages, setMessages] = useState111([]);
48703
- const [streamingPhase, setStreamingPhase] = useState111("idle");
48704
- const [approvalStatuses, setApprovalStatuses] = useState111({});
48705
- const [dialogs, setDialogs] = useState111([]);
48706
- const [dialogsNextCursor, setDialogsNextCursor] = useState111(null);
48707
- const [isDialogsLoading, setIsDialogsLoading] = useState111(false);
48708
- const [dialogsError, setDialogsError] = useState111(false);
48709
- const [isCreatingDialog, setIsCreatingDialog] = useState111(false);
48710
- const [messagesNextCursor, setMessagesNextCursor] = useState111(null);
48711
- const [isMessagesLoading, setIsMessagesLoading] = useState111(false);
48712
- const [dialogTokenUsage, setDialogTokenUsage] = useState111(
48766
+ const [messages, setMessages] = useState112([]);
48767
+ const [streamingPhase, setStreamingPhase] = useState112("idle");
48768
+ const [approvalStatuses, setApprovalStatuses] = useState112({});
48769
+ const [dialogs, setDialogs] = useState112([]);
48770
+ const [dialogsNextCursor, setDialogsNextCursor] = useState112(null);
48771
+ const [isDialogsLoading, setIsDialogsLoading] = useState112(false);
48772
+ const [dialogsError, setDialogsError] = useState112(false);
48773
+ const [isCreatingDialog, setIsCreatingDialog] = useState112(false);
48774
+ const [messagesNextCursor, setMessagesNextCursor] = useState112(null);
48775
+ const [isMessagesLoading, setIsMessagesLoading] = useState112(false);
48776
+ const [dialogTokenUsage, setDialogTokenUsage] = useState112(
48713
48777
  null
48714
48778
  );
48715
- const [liveModel, setLiveModel] = useState111(null);
48716
- const [connectionState, setConnectionState] = useState111("connecting");
48779
+ const [liveModel, setLiveModel] = useState112(null);
48780
+ const [connectionState, setConnectionState] = useState112("connecting");
48717
48781
  const handleApprove = useCallback51(
48718
48782
  async (requestId) => {
48719
48783
  if (!approveRequestCallback) return;
@@ -49509,7 +49573,7 @@ function chatChipClass({ tone, density = "chip", extra }) {
49509
49573
  }
49510
49574
 
49511
49575
  // src/components/chat/embeddable-chat.tsx
49512
- import { useCallback as useCallback54, useEffect as useEffect85, useMemo as useMemo45, useRef as useRef72, useState as useState113 } from "react";
49576
+ import { useCallback as useCallback54, useEffect as useEffect85, useMemo as useMemo45, useRef as useRef72, useState as useState114 } from "react";
49513
49577
  import * as DialogPrimitive4 from "@radix-ui/react-dialog";
49514
49578
  import { usePreventScroll } from "@react-aria/overlays";
49515
49579
  import { isIOS } from "@react-aria/utils";
@@ -49590,7 +49654,7 @@ init_button2();
49590
49654
  import { FileText as FileText8, MessageSquare as MessageSquare3 } from "lucide-react";
49591
49655
 
49592
49656
  // src/components/chat/hooks/use-chat-dialog-manager.ts
49593
- import { useCallback as useCallback53, useMemo as useMemo44, useState as useState112 } from "react";
49657
+ import { useCallback as useCallback53, useMemo as useMemo44, useState as useState113 } from "react";
49594
49658
  function useChatDialogManager({
49595
49659
  dialogs,
49596
49660
  activeDialogId,
@@ -49601,8 +49665,8 @@ function useChatDialogManager({
49601
49665
  fetchArchivedDialogs,
49602
49666
  unarchiveDialog
49603
49667
  }) {
49604
- const [renameTarget, setRenameTarget] = useState112(null);
49605
- const [archiveTarget, setArchiveTarget] = useState112(null);
49668
+ const [renameTarget, setRenameTarget] = useState113(null);
49669
+ const [archiveTarget, setArchiveTarget] = useState113(null);
49606
49670
  const handleConfirmRename = useCallback53(
49607
49671
  (name) => {
49608
49672
  if (renameTarget) void renameDialog(renameTarget.id, name);
@@ -49625,10 +49689,10 @@ function useChatDialogManager({
49625
49689
  }
49626
49690
  setArchiveTarget(null);
49627
49691
  }, [archiveTarget, archiveDialog, activeDialogId, clearMessages]);
49628
- const [archiveOpen, setArchiveOpen] = useState112(false);
49629
- const [archivedDialogs, setArchivedDialogs] = useState112([]);
49630
- const [archivedCursor, setArchivedCursor] = useState112(null);
49631
- const [archivedLoading, setArchivedLoading] = useState112(false);
49692
+ const [archiveOpen, setArchiveOpen] = useState113(false);
49693
+ const [archivedDialogs, setArchivedDialogs] = useState113([]);
49694
+ const [archivedCursor, setArchivedCursor] = useState113(null);
49695
+ const [archivedLoading, setArchivedLoading] = useState113(false);
49632
49696
  const loadArchivedPage = useCallback53(
49633
49697
  async (cursor) => {
49634
49698
  if (!fetchArchivedDialogs) return;
@@ -49654,10 +49718,10 @@ function useChatDialogManager({
49654
49718
  void loadArchivedPage();
49655
49719
  }, [loadArchivedPage]);
49656
49720
  const closeArchive = useCallback53(() => setArchiveOpen(false), []);
49657
- const [viewingArchivedId, setViewingArchivedId] = useState112(
49721
+ const [viewingArchivedId, setViewingArchivedId] = useState113(
49658
49722
  null
49659
49723
  );
49660
- const [openingDialogId, setOpeningDialogId] = useState112(null);
49724
+ const [openingDialogId, setOpeningDialogId] = useState113(null);
49661
49725
  const handleSelectDialog = useCallback53(
49662
49726
  (id) => {
49663
49727
  setViewingArchivedId(null);
@@ -49676,7 +49740,7 @@ function useChatDialogManager({
49676
49740
  },
49677
49741
  [selectDialog]
49678
49742
  );
49679
- const [restoreTarget, setRestoreTarget] = useState112(null);
49743
+ const [restoreTarget, setRestoreTarget] = useState113(null);
49680
49744
  const handleConfirmRestore = useCallback53(async () => {
49681
49745
  if (restoreTarget) {
49682
49746
  try {
@@ -49738,7 +49802,7 @@ function useChatDialogManager({
49738
49802
 
49739
49803
  // src/components/chat/embeddable-chat.tsx
49740
49804
  init_next_navigation();
49741
- import { Fragment as Fragment74, jsx as jsx351, jsxs as jsxs281 } from "react/jsx-runtime";
49805
+ import { Fragment as Fragment75, jsx as jsx351, jsxs as jsxs281 } from "react/jsx-runtime";
49742
49806
  var formatRelativePath = (p) => p.replace(/^\/+/, "").replace(/\/+$/, "");
49743
49807
  var mentionTokenOf = (key, markerByType) => {
49744
49808
  const ci = key.indexOf(":");
@@ -49858,7 +49922,7 @@ function SourceChip({
49858
49922
  );
49859
49923
  }
49860
49924
  const displayName = src.name || formatRelativePath(src.path);
49861
- const chipBody = (label) => /* @__PURE__ */ jsxs281(Fragment74, { children: [
49925
+ const chipBody = (label) => /* @__PURE__ */ jsxs281(Fragment75, { children: [
49862
49926
  icon,
49863
49927
  /* @__PURE__ */ jsxs281("span", { className: "truncate max-w-[160px]", children: [
49864
49928
  "[",
@@ -49928,7 +49992,7 @@ function SourceChips({
49928
49992
  onClose,
49929
49993
  onDiscuss
49930
49994
  }) {
49931
- const [expanded, setExpanded] = useState113(false);
49995
+ const [expanded, setExpanded] = useState114(false);
49932
49996
  if (cited.length === 0) {
49933
49997
  const fallback = uncited.slice(0, FALLBACK_TOP_RETRIEVED);
49934
49998
  if (fallback.length === 0) return null;
@@ -50049,7 +50113,7 @@ function EmbeddableChatInner({
50049
50113
  defaultProp: defaultOpen ?? false,
50050
50114
  onChange: onOpenChange
50051
50115
  });
50052
- const [autoFocusInput] = useState113(() => {
50116
+ const [autoFocusInput] = useState114(() => {
50053
50117
  if (typeof window === "undefined") return false;
50054
50118
  return !window.matchMedia("(pointer: coarse)").matches;
50055
50119
  });
@@ -50082,7 +50146,7 @@ function EmbeddableChatInner({
50082
50146
  };
50083
50147
  }, [isOpen, shellLess]);
50084
50148
  const chatInputRef = useRef72(null);
50085
- const [quickActionPreview, setQuickActionPreview] = useState113(null);
50149
+ const [quickActionPreview, setQuickActionPreview] = useState114(null);
50086
50150
  const slashCommandsProp = useMemo45(
50087
50151
  () => ({
50088
50152
  fetchCommands: (prefix, signal) => fetchSlashCommands(prefix, signal, commandsUrl),
@@ -50125,7 +50189,7 @@ function EmbeddableChatInner({
50125
50189
  }, [mingoState, mingoDialogCapabilities, effectiveModes]);
50126
50190
  const hasMingoMode = !!effectiveModes.mingo || !!mingoState;
50127
50191
  const initialActiveMode = controlledActiveMode ?? defaultActiveMode ?? (effectiveModes.guide ? "guide" : "mingo");
50128
- const [uncontrolledActiveMode, setUncontrolledActiveMode] = useState113(initialActiveMode);
50192
+ const [uncontrolledActiveMode, setUncontrolledActiveMode] = useState114(initialActiveMode);
50129
50193
  const activeMode = controlledActiveMode ?? uncontrolledActiveMode;
50130
50194
  const handleActiveModeChange = useCallback54(
50131
50195
  (next) => {
@@ -50207,9 +50271,9 @@ function EmbeddableChatInner({
50207
50271
  const { panelRef: galleryPanelRef, modal: galleryModal } = useChatAttachmentImageGallery();
50208
50272
  const contextMaxItems = contextPicker?.maxItems ?? 10;
50209
50273
  const contextPickerForMode = activeMode === "mingo" ? contextPicker : void 0;
50210
- const [contextItems, setContextItems] = useState113([]);
50211
- const [contextPickerOpen, setContextPickerOpen] = useState113(false);
50212
- const [mentionQuery, setMentionQuery] = useState113(null);
50274
+ const [contextItems, setContextItems] = useState114([]);
50275
+ const [contextPickerOpen, setContextPickerOpen] = useState114(false);
50276
+ const [mentionQuery, setMentionQuery] = useState114(null);
50213
50277
  const mentionActiveRef = useRef72(false);
50214
50278
  useEffect85(() => {
50215
50279
  mentionActiveRef.current = mentionQuery !== null;
@@ -50496,7 +50560,7 @@ function EmbeddableChatInner({
50496
50560
  const uncited = sources.filter((s) => !seenOrder.has(s.index));
50497
50561
  return { cited, uncited };
50498
50562
  }, [lastAssistantMsg, chatLoading]);
50499
- const [portalHost, setPortalHost] = useState113(null);
50563
+ const [portalHost, setPortalHost] = useState114(null);
50500
50564
  const body = /* @__PURE__ */ jsxs281(PortalContainerContext.Provider, { value: portalHost, children: [
50501
50565
  /* @__PURE__ */ jsx351(
50502
50566
  "div",
@@ -50804,7 +50868,7 @@ function EmbeddableChatInner({
50804
50868
  ]
50805
50869
  }
50806
50870
  ) }) });
50807
- return /* @__PURE__ */ jsxs281(Fragment74, { children: [
50871
+ return /* @__PURE__ */ jsxs281(Fragment75, { children: [
50808
50872
  showInternalTrigger && !shellLess && /* @__PURE__ */ jsx351(
50809
50873
  "div",
50810
50874
  {
@@ -51081,6 +51145,7 @@ export {
51081
51145
  ArgRow,
51082
51146
  ResultBlock,
51083
51147
  CommandBlock,
51148
+ ApprovalStatusTag,
51084
51149
  ApprovalBatchMessage,
51085
51150
  ContextCompactionDisplay,
51086
51151
  SimpleMarkdownRenderer,
@@ -51764,4 +51829,4 @@ export {
51764
51829
  LogsList,
51765
51830
  assets
51766
51831
  };
51767
- //# sourceMappingURL=chunk-CNDLMBFN.js.map
51832
+ //# sourceMappingURL=chunk-IZIVDLN5.js.map