@flamingo-stack/openframe-frontend-core 0.0.382 → 0.0.383-snapshot.20260708154433

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 (101) hide show
  1. package/dist/{chunk-JQT7PD6Z.cjs → chunk-AZOME5YC.cjs} +57 -57
  2. package/dist/{chunk-JQT7PD6Z.cjs.map → chunk-AZOME5YC.cjs.map} +1 -1
  3. package/dist/{chunk-PI3XFKEW.js → chunk-EEUUTWFQ.js} +2 -2
  4. package/dist/{chunk-HDWY2SXF.js → chunk-FBUTS5UQ.js} +4 -4
  5. package/dist/{chunk-QQAHEWSR.cjs → chunk-FG4J67VX.cjs} +31 -31
  6. package/dist/{chunk-QQAHEWSR.cjs.map → chunk-FG4J67VX.cjs.map} +1 -1
  7. package/dist/{chunk-K5P6XKIT.js → chunk-FQR2CNKB.js} +2 -2
  8. package/dist/{chunk-7IQK3Y3G.cjs → chunk-FSN3GIUJ.cjs} +25 -25
  9. package/dist/{chunk-7IQK3Y3G.cjs.map → chunk-FSN3GIUJ.cjs.map} +1 -1
  10. package/dist/{chunk-EE26RXMG.cjs → chunk-FV2FQQYF.cjs} +12 -12
  11. package/dist/{chunk-EE26RXMG.cjs.map → chunk-FV2FQQYF.cjs.map} +1 -1
  12. package/dist/{chunk-32YONDMH.cjs → chunk-H7PRWFAQ.cjs} +26 -26
  13. package/dist/{chunk-32YONDMH.cjs.map → chunk-H7PRWFAQ.cjs.map} +1 -1
  14. package/dist/{chunk-GZ5N76H2.js → chunk-JEADRVBL.js} +4 -4
  15. package/dist/{chunk-LRA7FGQC.js → chunk-K7YBWMJ6.js} +4 -4
  16. package/dist/{chunk-AS6FET7G.cjs → chunk-KI5QS5C2.cjs} +15 -15
  17. package/dist/{chunk-AS6FET7G.cjs.map → chunk-KI5QS5C2.cjs.map} +1 -1
  18. package/dist/{chunk-23PZFAET.js → chunk-KJ3O7A65.js} +4 -4
  19. package/dist/{chunk-IENK6OY5.cjs → chunk-KJTGCH3I.cjs} +5 -5
  20. package/dist/{chunk-IENK6OY5.cjs.map → chunk-KJTGCH3I.cjs.map} +1 -1
  21. package/dist/{chunk-DQJCWNRT.js → chunk-LMIN2CWQ.js} +2 -2
  22. package/dist/{chunk-QI3PW4F7.cjs → chunk-MMYAOMD4.cjs} +7 -7
  23. package/dist/{chunk-QI3PW4F7.cjs.map → chunk-MMYAOMD4.cjs.map} +1 -1
  24. package/dist/{chunk-4A4DA7OX.js → chunk-MVLWQ6OZ.js} +2 -2
  25. package/dist/{chunk-SZSBHBXE.cjs → chunk-NGWYDTZZ.cjs} +666 -598
  26. package/dist/chunk-NGWYDTZZ.cjs.map +1 -0
  27. package/dist/{chunk-XHCRZDM6.cjs → chunk-Q2OBKYTK.cjs} +37 -37
  28. package/dist/{chunk-XHCRZDM6.cjs.map → chunk-Q2OBKYTK.cjs.map} +1 -1
  29. package/dist/{chunk-L3DRZ2WE.cjs → chunk-Q6EGRFVE.cjs} +62 -62
  30. package/dist/{chunk-L3DRZ2WE.cjs.map → chunk-Q6EGRFVE.cjs.map} +1 -1
  31. package/dist/{chunk-3GGIVFSI.js → chunk-U22GJXOD.js} +2 -2
  32. package/dist/{chunk-LIK575RM.js → chunk-UOLDL3U3.js} +2 -2
  33. package/dist/{chunk-GZIHB6TH.js → chunk-VZ4NJBQT.js} +364 -296
  34. package/dist/chunk-VZ4NJBQT.js.map +1 -0
  35. package/dist/{chunk-Z56MCQ6X.cjs → chunk-WRAECAST.cjs} +9 -9
  36. package/dist/{chunk-Z56MCQ6X.cjs.map → chunk-WRAECAST.cjs.map} +1 -1
  37. package/dist/{chunk-MGDDM2UI.js → chunk-XGE53EOX.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/auth/create-organization-form.d.ts +8 -1
  54. package/dist/components/features/auth/create-organization-form.d.ts.map +1 -1
  55. package/dist/components/features/index.cjs +2 -2
  56. package/dist/components/features/index.js +1 -1
  57. package/dist/components/features/notifications/approval-request-notification-tile.d.ts.map +1 -1
  58. package/dist/components/features/notifications/notification-tile.d.ts +8 -2
  59. package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
  60. package/dist/components/features/notifications/types.d.ts +11 -1
  61. package/dist/components/features/notifications/types.d.ts.map +1 -1
  62. package/dist/components/help-center-pages/index.cjs +20 -20
  63. package/dist/components/help-center-pages/index.js +11 -11
  64. package/dist/components/index.cjs +122 -120
  65. package/dist/components/index.cjs.map +1 -1
  66. package/dist/components/index.js +11 -9
  67. package/dist/components/index.js.map +1 -1
  68. package/dist/components/navigation/index.cjs +2 -2
  69. package/dist/components/navigation/index.js +1 -1
  70. package/dist/components/onboarding-guides/index.cjs +5 -5
  71. package/dist/components/onboarding-guides/index.js +4 -4
  72. package/dist/components/related-content/index.cjs +3 -3
  73. package/dist/components/related-content/index.js +2 -2
  74. package/dist/components/tickets/index.cjs +5 -5
  75. package/dist/components/tickets/index.js +4 -4
  76. package/dist/components/ui/index.cjs +4 -2
  77. package/dist/components/ui/index.cjs.map +1 -1
  78. package/dist/components/ui/index.js +3 -1
  79. package/dist/index.cjs +4 -2
  80. package/dist/index.cjs.map +1 -1
  81. package/dist/index.js +3 -1
  82. package/package.json +1 -1
  83. package/src/components/chat/approval-batch-message.tsx +28 -15
  84. package/src/components/features/auth/create-organization-form.tsx +21 -10
  85. package/src/components/features/notifications/approval-request-notification-tile.tsx +70 -46
  86. package/src/components/features/notifications/notification-tile.tsx +125 -41
  87. package/src/components/features/notifications/types.ts +11 -1
  88. package/src/stories/NotificationDrawer.stories.tsx +220 -31
  89. package/dist/chunk-GZIHB6TH.js.map +0 -1
  90. package/dist/chunk-SZSBHBXE.cjs.map +0 -1
  91. /package/dist/{chunk-PI3XFKEW.js.map → chunk-EEUUTWFQ.js.map} +0 -0
  92. /package/dist/{chunk-HDWY2SXF.js.map → chunk-FBUTS5UQ.js.map} +0 -0
  93. /package/dist/{chunk-K5P6XKIT.js.map → chunk-FQR2CNKB.js.map} +0 -0
  94. /package/dist/{chunk-GZ5N76H2.js.map → chunk-JEADRVBL.js.map} +0 -0
  95. /package/dist/{chunk-LRA7FGQC.js.map → chunk-K7YBWMJ6.js.map} +0 -0
  96. /package/dist/{chunk-23PZFAET.js.map → chunk-KJ3O7A65.js.map} +0 -0
  97. /package/dist/{chunk-DQJCWNRT.js.map → chunk-LMIN2CWQ.js.map} +0 -0
  98. /package/dist/{chunk-4A4DA7OX.js.map → chunk-MVLWQ6OZ.js.map} +0 -0
  99. /package/dist/{chunk-3GGIVFSI.js.map → chunk-U22GJXOD.js.map} +0 -0
  100. /package/dist/{chunk-LIK575RM.js.map → chunk-UOLDL3U3.js.map} +0 -0
  101. /package/dist/{chunk-MGDDM2UI.js.map → chunk-XGE53EOX.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
@@ -24617,6 +24620,8 @@ function CreateOrganizationForm({
24617
24620
  disabled = false,
24618
24621
  errors,
24619
24622
  emailStatus,
24623
+ domainStatus,
24624
+ domainSlot,
24620
24625
  ssoProviders,
24621
24626
  onSsoClick,
24622
24627
  ssoActionLabel = "Sign Up with",
@@ -24669,19 +24674,23 @@ function CreateOrganizationForm({
24669
24674
  }
24670
24675
  ) })
24671
24676
  ] }),
24672
- /* @__PURE__ */ jsx188(
24673
- Input,
24674
- {
24675
- label: "Domain",
24676
- placeholder: domainPlaceholder,
24677
- value: domain,
24678
- error: errors?.domain,
24679
- disabled: fieldsDisabled,
24680
- endAdornment: domainSuffix ? /* @__PURE__ */ jsx188("span", { className: "whitespace-nowrap", children: domainSuffix }) : void 0,
24681
- onChange: (event) => onDomainChange(event.target.value),
24682
- onKeyDown: handleKeyDown
24683
- }
24684
- ),
24677
+ /* @__PURE__ */ jsxs147("div", { className: "flex flex-col", children: [
24678
+ /* @__PURE__ */ jsx188(
24679
+ Input,
24680
+ {
24681
+ label: "Domain",
24682
+ placeholder: domainPlaceholder,
24683
+ value: domain,
24684
+ error: errors?.domain ?? domainStatus?.message,
24685
+ errorVariant: errors?.domain ? "error" : domainStatus?.variant,
24686
+ disabled: fieldsDisabled,
24687
+ endAdornment: domainSuffix ? /* @__PURE__ */ jsx188("span", { className: "whitespace-nowrap", children: domainSuffix }) : void 0,
24688
+ onChange: (event) => onDomainChange(event.target.value),
24689
+ onKeyDown: handleKeyDown
24690
+ }
24691
+ ),
24692
+ domainSlot && /* @__PURE__ */ jsx188("div", { className: "pt-[var(--spacing-system-l)]", children: domainSlot })
24693
+ ] }),
24685
24694
  /* @__PURE__ */ jsx188(
24686
24695
  CheckboxBlock,
24687
24696
  {
@@ -31042,20 +31051,51 @@ init_button2();
31042
31051
  init_cn();
31043
31052
 
31044
31053
  // src/components/features/notifications/notification-tile.tsx
31045
- import { useMemo as useMemo28, useEffect as useEffect52 } from "react";
31046
- init_button();
31054
+ import { useMemo as useMemo28, useEffect as useEffect52, useState as useState72 } from "react";
31047
31055
  init_cn();
31048
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";
31049
31071
  function NotificationTile({
31050
31072
  notification,
31051
31073
  liveDurationMs = 4e3,
31052
31074
  onComplete,
31053
31075
  onSettle,
31054
31076
  className,
31077
+ actions,
31055
31078
  children,
31056
31079
  paused = false
31057
31080
  }) {
31058
- 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();
31059
31099
  const initialElapsed = useMemo28(() => Date.now() - createdAt, [createdAt]);
31060
31100
  const isLive = !read && !settled && initialElapsed < liveDurationMs;
31061
31101
  const counting = isLive && !paused;
@@ -31079,37 +31119,75 @@ function NotificationTile({
31079
31119
  "div",
31080
31120
  {
31081
31121
  className: cn(
31082
- "relative flex items-center gap-[var(--spacing-system-xs)] p-[var(--spacing-system-s)]",
31083
- 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)]"
31084
31124
  ),
31085
31125
  children: [
31086
- /* @__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]) }) }),
31087
- /* @__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: [
31088
31180
  title ? /* @__PURE__ */ jsx247("p", { className: "truncate text-h4 text-ods-text-primary", title: typeof title === "string" ? title : void 0, children: title }) : null,
31089
- 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
31090
31182
  ] }),
31091
- /* @__PURE__ */ jsx247(
31092
- Button,
31093
- {
31094
- variant: "outline",
31095
- size: "small",
31096
- onClick: () => onComplete(id),
31097
- "aria-label": "Mark notification complete",
31098
- tabIndex: isLive ? -1 : 0,
31099
- className: cn(
31100
- "shrink-0 hover:text-ods-text-primary",
31101
- isLive && "invisible"
31102
- ),
31103
- children: /* @__PURE__ */ jsx247(CheckCircleIcon, {})
31104
- }
31105
- ),
31183
+ actions,
31106
31184
  counting ? /* @__PURE__ */ jsx247(
31107
31185
  "div",
31108
31186
  {
31109
31187
  "aria-hidden": true,
31110
31188
  className: cn(
31111
31189
  "absolute inset-x-0 -bottom-px h-1 origin-left",
31112
- progressColorByVariant[variant]
31190
+ progressColorByVariant[accentVariant]
31113
31191
  ),
31114
31192
  style: {
31115
31193
  animation: `toast-progress ${liveDurationMs}ms linear forwards`,
@@ -31120,21 +31198,7 @@ function NotificationTile({
31120
31198
  ]
31121
31199
  }
31122
31200
  ),
31123
- children,
31124
- /* @__PURE__ */ jsx247(
31125
- "button",
31126
- {
31127
- type: "button",
31128
- onClick: () => onSettle?.(id),
31129
- "aria-label": "Dismiss notification",
31130
- tabIndex: isLive ? 0 : -1,
31131
- className: cn(
31132
- "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",
31133
- !isLive && "pointer-events-none opacity-0"
31134
- ),
31135
- children: /* @__PURE__ */ jsx247(XmarkIcon, { size: 16 })
31136
- }
31137
- )
31201
+ children
31138
31202
  ]
31139
31203
  }
31140
31204
  );
@@ -31470,8 +31534,8 @@ function NotificationPopups({
31470
31534
  }
31471
31535
 
31472
31536
  // src/components/features/notifications/approval-request-notification-tile.tsx
31473
- init_cn();
31474
- import { useMemo as useMemo29, useState as useState72 } from "react";
31537
+ init_button2();
31538
+ import { useMemo as useMemo29, useState as useState73 } from "react";
31475
31539
 
31476
31540
  // src/components/chat/types/chat.types.ts
31477
31541
  var CHAT_TYPE = {
@@ -31665,7 +31729,7 @@ function approvalMetaToBatchData(approval) {
31665
31729
  }
31666
31730
 
31667
31731
  // src/components/features/notifications/approval-request-notification-tile.tsx
31668
- 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";
31669
31733
  function ApprovalRequestNotificationTile({
31670
31734
  notification,
31671
31735
  onApprove,
@@ -31676,78 +31740,81 @@ function ApprovalRequestNotificationTile({
31676
31740
  defaultExpanded = false,
31677
31741
  className
31678
31742
  }) {
31679
- const [expanded, setExpanded] = useState72(defaultExpanded);
31680
- const [pinned, setPinned] = useState72(defaultExpanded);
31681
- 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);
31682
31747
  const approval = getApprovalMeta(notification);
31683
31748
  const resolvedStatus = resolutionToStatus(approval?.resolution);
31684
31749
  const status = resolvedStatus !== "pending" ? resolvedStatus : localStatus ?? "pending";
31685
31750
  const batchData = useMemo29(() => approval ? approvalMetaToBatchData(approval) : null, [approval]);
31686
31751
  const { innerRef, containerStyle } = useCollapsible({ expanded });
31687
31752
  if (!approval || !batchData) return null;
31688
- const commandWord = batchData.toolCalls.length > 1 ? "Commands" : "Command";
31689
- const toggleLabel = `${expanded ? "Hide" : "Show"} ${commandWord}`;
31690
- const handleApprove = async () => {
31691
- 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);
31692
31762
  try {
31693
- await onApprove(batchData.approvalRequestId);
31694
- onComplete(notification.id);
31695
- } catch {
31696
- setLocalStatus(null);
31697
- }
31698
- };
31699
- const handleReject = async () => {
31700
- setLocalStatus("rejected");
31701
- try {
31702
- await onReject(batchData.approvalRequestId);
31703
- onComplete(notification.id);
31763
+ await action(batchData.approvalRequestId);
31704
31764
  } catch {
31705
31765
  setLocalStatus(null);
31766
+ return;
31767
+ } finally {
31768
+ setProcessing(false);
31706
31769
  }
31770
+ onComplete(notification.id);
31707
31771
  };
31708
- return /* @__PURE__ */ jsxs196(
31772
+ return /* @__PURE__ */ jsx250(
31709
31773
  NotificationTile,
31710
31774
  {
31711
- notification,
31775
+ notification: tileNotification,
31712
31776
  liveDurationMs,
31713
31777
  onComplete,
31714
31778
  onSettle,
31715
31779
  className,
31716
- paused: pinned,
31717
- children: [
31718
- /* @__PURE__ */ jsxs196(
31719
- "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,
31720
31794
  {
31721
- type: "button",
31795
+ variant: "outline",
31796
+ size: "small",
31722
31797
  onClick: () => {
31723
31798
  setExpanded((prev) => !prev);
31724
31799
  setPinned(true);
31725
31800
  },
31726
31801
  "aria-expanded": expanded,
31727
- className: cn(
31728
- "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",
31729
- expanded && "border-b border-ods-border"
31730
- ),
31731
- children: [
31732
- /* @__PURE__ */ jsx250("span", { className: "min-w-0 flex-1 text-h6 text-ods-text-primary", children: toggleLabel }),
31733
- /* @__PURE__ */ jsx250(ExpandChevron, { expanded })
31734
- ]
31802
+ "aria-label": toggleLabel,
31803
+ className: "ml-auto w-6 shrink-0 px-0 md:w-8",
31804
+ children: /* @__PURE__ */ jsx250(ExpandChevron, { expanded })
31735
31805
  }
31736
- ),
31737
- /* @__PURE__ */ jsx250("div", { style: containerStyle, children: /* @__PURE__ */ jsx250("div", { ref: innerRef, children: /* @__PURE__ */ jsx250(
31738
- ApprovalBatchMessage,
31739
- {
31740
- data: batchData,
31741
- status,
31742
- resolvedByName: approval.resolvedByName,
31743
- showExecutionStatus: false,
31744
- onApprove: handleApprove,
31745
- onReject: handleReject,
31746
- maxBodyHeight: "50vh",
31747
- className: "mb-0 rounded-none border-0"
31748
- }
31749
- ) }) })
31750
- ]
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
+ ) }) }) })
31751
31818
  }
31752
31819
  );
31753
31820
  }
@@ -31777,12 +31844,12 @@ function useOptionalTimeTracker() {
31777
31844
 
31778
31845
  // src/components/features/time-tracker/time-tracker-panel.tsx
31779
31846
  init_cn();
31780
- import { useEffect as useEffect55, useState as useState75 } from "react";
31847
+ import { useEffect as useEffect55, useState as useState76 } from "react";
31781
31848
  init_button();
31782
31849
  init_split_button();
31783
31850
 
31784
31851
  // src/components/features/time-tracker/use-tracker-clock.ts
31785
- import { useEffect as useEffect54, useState as useState74 } from "react";
31852
+ import { useEffect as useEffect54, useState as useState75 } from "react";
31786
31853
  function formatElapsed(totalMs) {
31787
31854
  const totalSeconds = Math.max(0, Math.floor(totalMs / 1e3));
31788
31855
  const hours = Math.floor(totalSeconds / 3600);
@@ -31792,7 +31859,7 @@ function formatElapsed(totalMs) {
31792
31859
  return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
31793
31860
  }
31794
31861
  function useTrackerClock({ status, runningSince, accumulatedMs = 0 }) {
31795
- const [now, setNow] = useState74(() => Date.now());
31862
+ const [now, setNow] = useState75(() => Date.now());
31796
31863
  useEffect54(() => {
31797
31864
  if (status !== "tracking") return;
31798
31865
  setNow(Date.now());
@@ -31848,7 +31915,7 @@ function TimeTrackerPanel({
31848
31915
  className
31849
31916
  }) {
31850
31917
  const elapsedLabel = useTrackerClock({ status, runningSince, accumulatedMs });
31851
- const [showValidationError, setShowValidationError] = useState75(false);
31918
+ const [showValidationError, setShowValidationError] = useState76(false);
31852
31919
  const isRunning = status === "tracking";
31853
31920
  const isActive = status !== "ready";
31854
31921
  const hasContent = selectedTicketId != null || notes.trim() !== "";
@@ -32130,7 +32197,7 @@ function HeaderButton({
32130
32197
  }
32131
32198
 
32132
32199
  // src/components/features/time-tracker/time-tracker-header-button.tsx
32133
- 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";
32134
32201
  function TimeTrackerHeaderButton({ className, disabled }) {
32135
32202
  const ctx = useOptionalTimeTracker();
32136
32203
  const elapsedLabel = useTrackerClock({
@@ -32154,7 +32221,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
32154
32221
  isActive && "w-auto gap-[var(--spacing-system-xsf)] px-[var(--spacing-system-sf)] md:w-auto",
32155
32222
  className
32156
32223
  ),
32157
- icon: /* @__PURE__ */ jsxs198(Fragment41, { children: [
32224
+ icon: /* @__PURE__ */ jsxs198(Fragment42, { children: [
32158
32225
  /* @__PURE__ */ jsx254(
32159
32226
  ClockHistoryIcon,
32160
32227
  {
@@ -32396,7 +32463,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
32396
32463
  }
32397
32464
 
32398
32465
  // src/components/features/board/ticket-card.tsx
32399
- 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";
32400
32467
  var PRIORITY_COLOR_CLASS = {
32401
32468
  low: "text-ods-text-secondary",
32402
32469
  medium: "text-ods-info",
@@ -32469,7 +32536,7 @@ function TicketCard({
32469
32536
  ] }) : null;
32470
32537
  const timestampLabel = ticket.createdAt ? formatTicketRelativeTime(ticket.createdAt) : null;
32471
32538
  const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
32472
- const body = /* @__PURE__ */ jsxs201(Fragment42, { children: [
32539
+ const body = /* @__PURE__ */ jsxs201(Fragment43, { children: [
32473
32540
  /* @__PURE__ */ jsxs201("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
32474
32541
  /* @__PURE__ */ jsxs201("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
32475
32542
  /* @__PURE__ */ jsx257("p", { className: "text-h3 truncate text-ods-text-primary", children: ticket.title }),
@@ -32597,7 +32664,7 @@ var TicketCardSkeleton = React100.forwardRef(
32597
32664
  TicketCardSkeleton.displayName = "TicketCardSkeleton";
32598
32665
 
32599
32666
  // src/components/features/board/board-column.tsx
32600
- 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";
32601
32668
  function BoardColumn({
32602
32669
  column,
32603
32670
  collapsed = false,
@@ -32636,7 +32703,7 @@ function BoardColumn({
32636
32703
  onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
32637
32704
  }
32638
32705
  ),
32639
- !collapsed && /* @__PURE__ */ jsxs203(Fragment43, { children: [
32706
+ !collapsed && /* @__PURE__ */ jsxs203(Fragment44, { children: [
32640
32707
  /* @__PURE__ */ jsx259("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
32641
32708
  /* @__PURE__ */ jsx259(
32642
32709
  ColumnBody,
@@ -32729,7 +32796,7 @@ function SkeletonStack({ count = 4 }) {
32729
32796
  () => Array.from({ length: count }, () => Math.random().toString(36).slice(2)),
32730
32797
  [count]
32731
32798
  );
32732
- 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)) });
32733
32800
  }
32734
32801
  function EmptyState2() {
32735
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: [
@@ -32742,13 +32809,13 @@ function EmptyState2() {
32742
32809
  }
32743
32810
 
32744
32811
  // src/components/features/board/use-board-collapse.ts
32745
- import { useCallback as useCallback30, useState as useState77 } from "react";
32812
+ import { useCallback as useCallback30, useState as useState78 } from "react";
32746
32813
  function useBoardCollapse(storageKey) {
32747
32814
  const [persisted, setPersisted] = useLocalStorage(
32748
32815
  storageKey ?? "__board_collapse_unused__",
32749
32816
  {}
32750
32817
  );
32751
- const [memory, setMemory] = useState77({});
32818
+ const [memory, setMemory] = useState78({});
32752
32819
  const collapsed = storageKey ? persisted : memory;
32753
32820
  const setMap = storageKey ? setPersisted : setMemory;
32754
32821
  const toggle = useCallback30(
@@ -33139,13 +33206,13 @@ function SortableRow({
33139
33206
 
33140
33207
  // src/components/navigation/header.tsx
33141
33208
  init_next_link();
33142
- 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";
33143
33210
  init_button2();
33144
- 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";
33145
33212
  function Header2({ config, platform }) {
33146
- const [show, setShow] = useState79(true);
33147
- const [lastScrollY, setLastScrollY] = useState79(0);
33148
- const [openDropdowns, setOpenDropdowns] = useState79({});
33213
+ const [show, setShow] = useState80(true);
33214
+ const [lastScrollY, setLastScrollY] = useState80(0);
33215
+ const [openDropdowns, setOpenDropdowns] = useState80({});
33149
33216
  const dropdownRefs = useRef42({});
33150
33217
  const triggerRefs = useRef42({});
33151
33218
  useEffect58(() => {
@@ -33286,7 +33353,7 @@ function Header2({ config, platform }) {
33286
33353
  },
33287
33354
  child.id
33288
33355
  )) }),
33289
- item.dropdownContent && /* @__PURE__ */ jsxs205(Fragment45, { children: [
33356
+ item.dropdownContent && /* @__PURE__ */ jsxs205(Fragment46, { children: [
33290
33357
  item.showDropdownDivider !== false && /* @__PURE__ */ jsx262("div", { className: "h-px my-2 mx-2 bg-ods-border" }),
33291
33358
  /* @__PURE__ */ jsx262("div", { className: "px-2 pb-2", children: item.dropdownContent })
33292
33359
  ] })
@@ -33407,7 +33474,7 @@ function Header2({ config, platform }) {
33407
33474
  }
33408
33475
 
33409
33476
  // src/components/navigation/client-only-header.tsx
33410
- import { useState as useState80, useEffect as useEffect59 } from "react";
33477
+ import { useState as useState81, useEffect as useEffect59 } from "react";
33411
33478
 
33412
33479
  // src/components/navigation/header-skeleton.tsx
33413
33480
  import { jsx as jsx263, jsxs as jsxs206 } from "react/jsx-runtime";
@@ -33455,7 +33522,7 @@ function HeaderSkeleton({ config }) {
33455
33522
  // src/components/navigation/client-only-header.tsx
33456
33523
  import { jsx as jsx264 } from "react/jsx-runtime";
33457
33524
  function ClientOnlyHeader({ config, skeleton }) {
33458
- const [isClient, setIsClient] = useState80(false);
33525
+ const [isClient, setIsClient] = useState81(false);
33459
33526
  useEffect59(() => {
33460
33527
  setIsClient(true);
33461
33528
  }, []);
@@ -33469,7 +33536,7 @@ function ClientOnlyHeader({ config, skeleton }) {
33469
33536
  import { useEffect as useEffect60, useRef as useRef43 } from "react";
33470
33537
  init_button2();
33471
33538
  import { X as X10 } from "lucide-react";
33472
- 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";
33473
33540
  function MobileNavPanel({ isOpen, config }) {
33474
33541
  const panelRef = useRef43(null);
33475
33542
  useEffect60(() => {
@@ -33542,7 +33609,7 @@ function MobileNavPanel({ isOpen, config }) {
33542
33609
  item.id
33543
33610
  );
33544
33611
  };
33545
- return /* @__PURE__ */ jsxs207(Fragment46, { children: [
33612
+ return /* @__PURE__ */ jsxs207(Fragment47, { children: [
33546
33613
  /* @__PURE__ */ jsx265(
33547
33614
  "div",
33548
33615
  {
@@ -33590,13 +33657,13 @@ function MobileNavPanel({ isOpen, config }) {
33590
33657
  }
33591
33658
 
33592
33659
  // src/components/navigation/sliding-sidebar.tsx
33593
- import { useState as useState81, useEffect as useEffect61 } from "react";
33660
+ import { useState as useState82, useEffect as useEffect61 } from "react";
33594
33661
  import { motion as motion2, AnimatePresence } from "framer-motion";
33595
33662
  init_button2();
33596
- 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";
33597
33664
  function SlidingSidebar({ config }) {
33598
- const [expandedItems, setExpandedItems] = useState81(/* @__PURE__ */ new Set());
33599
- const [mounted, setMounted] = useState81(false);
33665
+ const [expandedItems, setExpandedItems] = useState82(/* @__PURE__ */ new Set());
33666
+ const [mounted, setMounted] = useState82(false);
33600
33667
  const headerHeight = useHeaderHeight();
33601
33668
  useEffect61(() => {
33602
33669
  setMounted(true);
@@ -33715,7 +33782,7 @@ function SlidingSidebar({ config }) {
33715
33782
  if (!mounted) {
33716
33783
  return null;
33717
33784
  }
33718
- return /* @__PURE__ */ jsxs208(Fragment47, { children: [
33785
+ return /* @__PURE__ */ jsxs208(Fragment48, { children: [
33719
33786
  /* @__PURE__ */ jsx266(AnimatePresence, { children: config.isOpen && /* @__PURE__ */ jsx266(
33720
33787
  motion2.div,
33721
33788
  {
@@ -33761,7 +33828,7 @@ function SlidingSidebar({ config }) {
33761
33828
  }
33762
33829
 
33763
33830
  // src/components/navigation/sticky-section-nav.tsx
33764
- 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";
33765
33832
  import { jsx as jsx267, jsxs as jsxs209 } from "react/jsx-runtime";
33766
33833
  function StickySectionNav({
33767
33834
  sections,
@@ -33822,7 +33889,7 @@ function StickySectionNav({
33822
33889
  ] });
33823
33890
  }
33824
33891
  function useSectionNavigation(sections, options) {
33825
- const [activeSection, setActiveSection] = useState82(sections[0]?.id || "");
33892
+ const [activeSection, setActiveSection] = useState83(sections[0]?.id || "");
33826
33893
  const isScrollingFromClick = useRef44(false);
33827
33894
  const { offset: offset2 = 100 } = options || {};
33828
33895
  const handleSectionClick = useCallback32((sectionId) => {
@@ -33875,7 +33942,7 @@ function useSectionNavigation(sections, options) {
33875
33942
  }
33876
33943
 
33877
33944
  // src/components/navigation/navigation-sidebar.tsx
33878
- 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";
33879
33946
 
33880
33947
  // src/components/navigation/navigation-sidebar-header.tsx
33881
33948
  import { jsx as jsx268, jsxs as jsxs210 } from "react/jsx-runtime";
@@ -34021,7 +34088,7 @@ function NavigationSidebarToggle({
34021
34088
  }
34022
34089
 
34023
34090
  // src/components/navigation/navigation-sidebar.tsx
34024
- 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";
34025
34092
  var MINIMIZED_WIDTH = 56;
34026
34093
  var EXPANDED_WIDTH = 224;
34027
34094
  var STORAGE_KEY = "of.navigationSidebar.minimized";
@@ -34033,12 +34100,12 @@ function NavigationSidebar({ config, disabled = false }) {
34033
34100
  STORAGE_KEY,
34034
34101
  config.minimized ?? false
34035
34102
  );
34036
- const [tabletMinimized, setTabletMinimized] = useState83(true);
34103
+ const [tabletMinimized, setTabletMinimized] = useState84(true);
34037
34104
  useEffect63(() => {
34038
34105
  if (isTablet) setTabletMinimized(true);
34039
34106
  }, [isTablet]);
34040
34107
  const minimized = isTablet ? tabletMinimized : desktopMinimized;
34041
- const [transitionsEnabled, setTransitionsEnabled] = useState83(false);
34108
+ const [transitionsEnabled, setTransitionsEnabled] = useState84(false);
34042
34109
  const isOverlayOpen = isTablet && !minimized;
34043
34110
  const showLabel = !minimized;
34044
34111
  const handleToggle = useCallback33(() => {
@@ -34086,7 +34153,7 @@ function NavigationSidebar({ config, disabled = false }) {
34086
34153
  return () => cancelAnimationFrame(id);
34087
34154
  }
34088
34155
  }, [isHydrated, transitionsEnabled]);
34089
- return /* @__PURE__ */ jsxs213(Fragment48, { children: [
34156
+ return /* @__PURE__ */ jsxs213(Fragment49, { children: [
34090
34157
  /* @__PURE__ */ jsx271(
34091
34158
  "div",
34092
34159
  {
@@ -34120,7 +34187,7 @@ function NavigationSidebar({ config, disabled = false }) {
34120
34187
  ),
34121
34188
  style: { width: sidebarWidth },
34122
34189
  "aria-label": "Main navigation sidebar",
34123
- children: isHydrated && /* @__PURE__ */ jsxs213(Fragment48, { children: [
34190
+ children: isHydrated && /* @__PURE__ */ jsxs213(Fragment49, { children: [
34124
34191
  /* @__PURE__ */ jsx271(NavigationSidebarHeader, { minimized }),
34125
34192
  /* @__PURE__ */ jsxs213("div", { className: "flex-1 flex flex-col justify-between py-4 overflow-y-auto", children: [
34126
34193
  /* @__PURE__ */ jsx271("nav", { className: "flex flex-col", "aria-label": "Primary navigation", children: primaryItems.map((item) => /* @__PURE__ */ jsx271(
@@ -34528,11 +34595,11 @@ function NotificationsHeaderButton({
34528
34595
  }
34529
34596
 
34530
34597
  // src/components/navigation/app-layout.tsx
34531
- 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";
34532
34599
 
34533
34600
  // src/components/navigation/mobile-burger-menu.tsx
34534
34601
  import React110, { useCallback as useCallback34, useEffect as useEffect64 } from "react";
34535
- 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";
34536
34603
  var HEADER_HEIGHT = 48;
34537
34604
  var MobileBurgerMenu = React110.memo(function MobileBurgerMenu2({
34538
34605
  isOpen,
@@ -34618,7 +34685,7 @@ var MobileBurgerMenu = React110.memo(function MobileBurgerMenu2({
34618
34685
  row.length === 1 && /* @__PURE__ */ jsx276("div", { className: "flex-1" })
34619
34686
  ] }, rowIndex)) });
34620
34687
  };
34621
- return /* @__PURE__ */ jsxs218(Fragment49, { children: [
34688
+ return /* @__PURE__ */ jsxs218(Fragment50, { children: [
34622
34689
  /* @__PURE__ */ jsx276(
34623
34690
  "div",
34624
34691
  {
@@ -34749,8 +34816,8 @@ function AppLayout({
34749
34816
  disabled = false,
34750
34817
  drawer
34751
34818
  }) {
34752
- const [mobileMenuOpen, setMobileMenuOpen] = useState84(false);
34753
- const [drawerContainer, setDrawerContainer] = useState84(null);
34819
+ const [mobileMenuOpen, setMobileMenuOpen] = useState85(false);
34820
+ const [drawerContainer, setDrawerContainer] = useState85(null);
34754
34821
  const mobileMenuOpenRef = useRef45(mobileMenuOpen);
34755
34822
  mobileMenuOpenRef.current = mobileMenuOpen;
34756
34823
  const drawerHandlesRef = useRef45(/* @__PURE__ */ new Set());
@@ -35850,7 +35917,7 @@ import React113, { useRef as useRef47, useCallback as useCallback37 } from "reac
35850
35917
  import React112 from "react";
35851
35918
  init_button2();
35852
35919
  init_cn();
35853
- 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";
35854
35921
  function OnboardingStepCard({
35855
35922
  step,
35856
35923
  isCompleted,
@@ -35892,10 +35959,10 @@ function OnboardingStepCard({
35892
35959
  /* @__PURE__ */ jsx287("h3", { className: "text-h4 text-ods-text-primary truncate", title: step.title, children: step.title }),
35893
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 })
35894
35961
  ] }),
35895
- /* @__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: [
35896
35963
  /* @__PURE__ */ jsx287("div", { className: "h-[32px] w-[100px] bg-ods-border rounded-[6px] animate-pulse" }),
35897
35964
  /* @__PURE__ */ jsx287("div", { className: "h-[32px] w-[120px] bg-ods-border rounded-[6px] animate-pulse" })
35898
- ] }) : isCompleted ? /* @__PURE__ */ jsxs229(Fragment50, { children: [
35965
+ ] }) : isCompleted ? /* @__PURE__ */ jsxs229(Fragment51, { children: [
35899
35966
  /* @__PURE__ */ jsx287(
35900
35967
  StatusBadge,
35901
35968
  {
@@ -35914,14 +35981,14 @@ function OnboardingStepCard({
35914
35981
  children: step.completedText
35915
35982
  }
35916
35983
  )
35917
- ] }) : isSkipped ? /* @__PURE__ */ jsx287(Fragment50, { children: /* @__PURE__ */ jsx287(
35984
+ ] }) : isSkipped ? /* @__PURE__ */ jsx287(Fragment51, { children: /* @__PURE__ */ jsx287(
35918
35985
  StatusBadge,
35919
35986
  {
35920
35987
  text: "SKIPPED",
35921
35988
  variant: "card",
35922
35989
  colorScheme: "default"
35923
35990
  }
35924
- ) }) : /* @__PURE__ */ jsxs229(Fragment50, { children: [
35991
+ ) }) : /* @__PURE__ */ jsxs229(Fragment51, { children: [
35925
35992
  /* @__PURE__ */ jsx287(
35926
35993
  Button,
35927
35994
  {
@@ -36310,7 +36377,7 @@ function ServiceCard({ title, subtitle, icon, tag, rows, className }) {
36310
36377
  ] });
36311
36378
  }
36312
36379
  function ServiceCardRowItem({ row }) {
36313
- const [revealed, setRevealed] = useState86(false);
36380
+ const [revealed, setRevealed] = useState87(false);
36314
36381
  const { copy, copied } = useCopyToClipboard();
36315
36382
  const actions = useMemo35(() => ({ copy: true, open: !!row.href, reveal: !!row.isSecret, ...row.actions }), [row]);
36316
36383
  const displayValue = row.isSecret ? /* @__PURE__ */ jsx291(MaskedValue, { value: row.value, isRevealed: revealed }) : /* @__PURE__ */ jsx291("span", { children: row.value });
@@ -36928,7 +36995,7 @@ function getHideClasses(hideAt) {
36928
36995
  }
36929
36996
 
36930
36997
  // src/components/ui/table/table-header.tsx
36931
- 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";
36932
36999
  function TableHeader({
36933
37000
  columns,
36934
37001
  className,
@@ -37039,10 +37106,10 @@ function TableHeader({
37039
37106
  column.sortable && "cursor-pointer hover:text-ods-text-primary transition-colors"
37040
37107
  ),
37041
37108
  onClick: () => handleSort(column),
37042
- children: column.renderHeader ? /* @__PURE__ */ jsxs240(Fragment51, { children: [
37109
+ children: column.renderHeader ? /* @__PURE__ */ jsxs240(Fragment52, { children: [
37043
37110
  column.renderHeader(),
37044
37111
  getSortIcon(column)
37045
- ] }) : /* @__PURE__ */ jsxs240(Fragment51, { children: [
37112
+ ] }) : /* @__PURE__ */ jsxs240(Fragment52, { children: [
37046
37113
  /* @__PURE__ */ jsx301("span", { className: "text-h5 text-ods-text-secondary uppercase whitespace-nowrap", children: column.label }),
37047
37114
  getSortIcon(column)
37048
37115
  ] })
@@ -37097,7 +37164,7 @@ function TableCell({
37097
37164
 
37098
37165
  // src/components/ui/table/table-skeleton.tsx
37099
37166
  init_cn();
37100
- 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";
37101
37168
  var ROW_HEIGHT_DESKTOP = "h-[68px] md:h-[80px]";
37102
37169
  var ROW_HEIGHT_MOBILE = "h-[68px]";
37103
37170
  function TableCardSkeleton({
@@ -37109,7 +37176,7 @@ function TableCardSkeleton({
37109
37176
  rowClassName
37110
37177
  }) {
37111
37178
  const primaryKey = (columns.find((c) => /flex-(1|\[)/.test(c.width || "")) ?? columns[0])?.key;
37112
- 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(
37113
37180
  "div",
37114
37181
  {
37115
37182
  className: cn(
@@ -37270,9 +37337,9 @@ function TableRow({
37270
37337
  }
37271
37338
 
37272
37339
  // src/components/ui/table/use-table-motion.ts
37273
- import { useEffect as useEffect66, useState as useState87 } from "react";
37340
+ import { useEffect as useEffect66, useState as useState88 } from "react";
37274
37341
  function useTableMotion(enabled) {
37275
- const [runtime, setRuntime] = useState87(null);
37342
+ const [runtime, setRuntime] = useState88(null);
37276
37343
  useEffect66(() => {
37277
37344
  if (!enabled || runtime) return;
37278
37345
  let active = true;
@@ -37288,7 +37355,7 @@ function useTableMotion(enabled) {
37288
37355
  }
37289
37356
 
37290
37357
  // src/components/ui/table/table.tsx
37291
- 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";
37292
37359
  function injectSyntheticColumns(columns, rowActions, renderRowActions, rowHref) {
37293
37360
  const hasActions = Boolean(rowActions?.length) || Boolean(renderRowActions);
37294
37361
  const result = [...columns];
@@ -37490,7 +37557,7 @@ function Table({
37490
37557
  hasActions: Boolean(rowActions) && rowActions.length > 0,
37491
37558
  hasChevron: Boolean(rowHref)
37492
37559
  }
37493
- ) : 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: [
37494
37561
  (() => {
37495
37562
  const rows = data.map((item, index) => /* @__PURE__ */ jsx305(
37496
37563
  TableRow,
@@ -37640,7 +37707,7 @@ import { useMemo as useMemo36 } from "react";
37640
37707
 
37641
37708
  // src/components/ui/query-report-table/query-report-table-header.tsx
37642
37709
  init_cn();
37643
- 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";
37644
37711
  import { jsx as jsx308, jsxs as jsxs245 } from "react/jsx-runtime";
37645
37712
  function QueryReportTableHeader({
37646
37713
  columns,
@@ -37670,7 +37737,7 @@ function QueryReportTableHeader({
37670
37737
  }
37671
37738
  function TruncatedHeaderCell({ value, width }) {
37672
37739
  const textRef = useRef50(null);
37673
- const [isTruncated, setIsTruncated] = useState88(false);
37740
+ const [isTruncated, setIsTruncated] = useState89(false);
37674
37741
  const checkTruncation = useCallback38(() => {
37675
37742
  const el = textRef.current;
37676
37743
  if (el) {
@@ -37699,7 +37766,7 @@ function TruncatedHeaderCell({ value, width }) {
37699
37766
 
37700
37767
  // src/components/ui/query-report-table/query-report-table-row.tsx
37701
37768
  init_cn();
37702
- 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";
37703
37770
  import { jsx as jsx309, jsxs as jsxs246 } from "react/jsx-runtime";
37704
37771
  function QueryReportTableRow({
37705
37772
  row,
@@ -37746,7 +37813,7 @@ function QueryReportTableRow({
37746
37813
  }
37747
37814
  function TruncatedCell({ value, className }) {
37748
37815
  const textRef = useRef51(null);
37749
- const [isTruncated, setIsTruncated] = useState89(false);
37816
+ const [isTruncated, setIsTruncated] = useState90(false);
37750
37817
  const checkTruncation = useCallback39(() => {
37751
37818
  const el = textRef.current;
37752
37819
  if (el) {
@@ -38117,7 +38184,7 @@ function DataTableColumnFilter({
38117
38184
  }
38118
38185
 
38119
38186
  // src/components/ui/data-table/data-table-header.tsx
38120
- 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";
38121
38188
  function DataTableHeader({
38122
38189
  className,
38123
38190
  stickyHeader,
@@ -38211,7 +38278,7 @@ function HeaderLabel({ header }) {
38211
38278
  if (typeof headerDef === "string") {
38212
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 });
38213
38280
  }
38214
- return /* @__PURE__ */ jsx314(Fragment54, { children: flexRender(headerDef, header.getContext()) });
38281
+ return /* @__PURE__ */ jsx314(Fragment55, { children: flexRender(headerDef, header.getContext()) });
38215
38282
  }
38216
38283
  function SortIcon({ sorted }) {
38217
38284
  if (sorted === "asc") return /* @__PURE__ */ jsx314(Arrow01UpIcon, { className: "w-4 h-4 text-ods-accent" });
@@ -38250,7 +38317,7 @@ import { flexRender as flexRender2 } from "@tanstack/react-table";
38250
38317
 
38251
38318
  // src/components/ui/data-table/data-table-skeleton.tsx
38252
38319
  init_cn();
38253
- 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";
38254
38321
  var ROW_HEIGHT_DESKTOP2 = "h-[68px] md:h-[80px]";
38255
38322
  var ROW_HEIGHT_MOBILE2 = "h-[68px]";
38256
38323
  function DataTableSkeleton({
@@ -38261,7 +38328,7 @@ function DataTableSkeleton({
38261
38328
  const table = useDataTableContext();
38262
38329
  const columns = table.getVisibleFlatColumns();
38263
38330
  const firstColumnId = columns[0]?.id;
38264
- 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(
38265
38332
  "div",
38266
38333
  {
38267
38334
  className: cn(
@@ -38317,7 +38384,7 @@ function DataTableSkeleton({
38317
38384
  }
38318
38385
 
38319
38386
  // src/components/ui/data-table/data-table-row.tsx
38320
- 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";
38321
38388
  function DataTableRowImpl({
38322
38389
  row,
38323
38390
  onClick,
@@ -38418,7 +38485,7 @@ function CellContent({ children }) {
38418
38485
  if (typeof children === "string" || typeof children === "number") {
38419
38486
  return /* @__PURE__ */ jsx317("span", { className: "text-h4 text-ods-text-primary truncate", title: String(children), children });
38420
38487
  }
38421
- return /* @__PURE__ */ jsx317(Fragment56, { children });
38488
+ return /* @__PURE__ */ jsx317(Fragment57, { children });
38422
38489
  }
38423
38490
 
38424
38491
  // src/components/ui/data-table/data-table-body.tsx
@@ -38496,7 +38563,7 @@ function DataTableBody({
38496
38563
 
38497
38564
  // src/components/ui/data-table/data-table-infinite-footer.tsx
38498
38565
  import { useEffect as useEffect68, useRef as useRef53 } from "react";
38499
- import { Fragment as Fragment57, jsx as jsx319, jsxs as jsxs254 } from "react/jsx-runtime";
38566
+ import { Fragment as Fragment58, jsx as jsx319, jsxs as jsxs254 } from "react/jsx-runtime";
38500
38567
  function DataTableInfiniteFooter({
38501
38568
  hasNextPage,
38502
38569
  isFetchingNextPage,
@@ -38520,7 +38587,7 @@ function DataTableInfiniteFooter({
38520
38587
  observer.observe(sentinel);
38521
38588
  return () => observer.disconnect();
38522
38589
  }, [hasNextPage, isFetchingNextPage, rootMargin]);
38523
- return /* @__PURE__ */ jsxs254(Fragment57, { children: [
38590
+ return /* @__PURE__ */ jsxs254(Fragment58, { children: [
38524
38591
  isFetchingNextPage && /* @__PURE__ */ jsx319(DataTableSkeleton, { rows: skeletonRows }),
38525
38592
  hasNextPage && /* @__PURE__ */ jsx319("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
38526
38593
  ] });
@@ -39143,7 +39210,7 @@ function FilterList({
39143
39210
  import {
39144
39211
  useEffect as useEffect70,
39145
39212
  useRef as useRef55,
39146
- useState as useState91
39213
+ useState as useState92
39147
39214
  } from "react";
39148
39215
  init_cn();
39149
39216
  import { jsx as jsx323, jsxs as jsxs258 } from "react/jsx-runtime";
@@ -39180,7 +39247,7 @@ function TagSearchInput({
39180
39247
  const wrapperRef = useRef55(null);
39181
39248
  const hiddenTagsRef = useRef55(null);
39182
39249
  const hiddenTagsPopupRef = useRef55(null);
39183
- const [showHiddenTags, setShowHiddenTags] = useState91(false);
39250
+ const [showHiddenTags, setShowHiddenTags] = useState92(false);
39184
39251
  useEffect70(() => {
39185
39252
  if (!showHiddenTags) return;
39186
39253
  const handleClick = (e) => {
@@ -39336,7 +39403,7 @@ function TagSearchInput({
39336
39403
  }
39337
39404
 
39338
39405
  // src/components/ui/markdown-editor.tsx
39339
- import { useRef as useRef56, useCallback as useCallback42, useState as useState92, useEffect as useEffect71 } from "react";
39406
+ import { useRef as useRef56, useCallback as useCallback42, useState as useState93, useEffect as useEffect71 } from "react";
39340
39407
  init_cn();
39341
39408
  import { Loader2 as Loader29, Upload as Upload8 } from "lucide-react";
39342
39409
  import { jsx as jsx324, jsxs as jsxs259 } from "react/jsx-runtime";
@@ -39392,9 +39459,9 @@ function MarkdownEditor({
39392
39459
  renderPreview
39393
39460
  }) {
39394
39461
  const fileInputRef = useRef56(null);
39395
- const [isUploading, setIsUploading] = useState92(false);
39396
- const [uploadProgress, setUploadProgress] = useState92("");
39397
- const [defaultExtraCommands, setDefaultExtraCommands] = useState92([]);
39462
+ const [isUploading, setIsUploading] = useState93(false);
39463
+ const [uploadProgress, setUploadProgress] = useState93("");
39464
+ const [defaultExtraCommands, setDefaultExtraCommands] = useState93([]);
39398
39465
  useEffect71(() => {
39399
39466
  import("@uiw/react-md-editor").then((mod) => {
39400
39467
  if (mod.commands?.getExtraCommands) {
@@ -39930,7 +39997,7 @@ function FileUpload({
39930
39997
  import * as React124 from "react";
39931
39998
  import { Loader2 as Loader211 } from "lucide-react";
39932
39999
  init_cn();
39933
- import { Fragment as Fragment59, jsx as jsx326, jsxs as jsxs261 } from "react/jsx-runtime";
40000
+ import { Fragment as Fragment60, jsx as jsx326, jsxs as jsxs261 } from "react/jsx-runtime";
39934
40001
  var DEFAULT_MAX_SIZE = 25 * 1024 * 1024;
39935
40002
  function formatSize(bytes) {
39936
40003
  const mb = bytes / (1024 * 1024);
@@ -40058,7 +40125,7 @@ function ImageUploader({
40058
40125
  !hasImage && !interactive && "cursor-not-allowed",
40059
40126
  dropzoneClassName
40060
40127
  ),
40061
- children: hasImage ? /* @__PURE__ */ jsxs261(Fragment59, { children: [
40128
+ children: hasImage ? /* @__PURE__ */ jsxs261(Fragment60, { children: [
40062
40129
  /* @__PURE__ */ jsx326("div", { className: "relative min-h-0 w-full flex-1 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx326(
40063
40130
  "img",
40064
40131
  {
@@ -40095,7 +40162,7 @@ function ImageUploader({
40095
40162
  )
40096
40163
  ] }),
40097
40164
  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" }) })
40098
- ] }) : loading ? /* @__PURE__ */ jsx326(Loader211, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs261(Fragment59, { children: [
40165
+ ] }) : loading ? /* @__PURE__ */ jsx326(Loader211, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs261(Fragment60, { children: [
40099
40166
  /* @__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" }) }),
40100
40167
  /* @__PURE__ */ jsxs261("div", { className: "flex w-full flex-col items-center text-center", children: [
40101
40168
  /* @__PURE__ */ jsx326("p", { className: "text-h4 text-ods-text-primary", children: label }),
@@ -40165,7 +40232,7 @@ PopoverContent.displayName = PopoverPrimitive7.Content.displayName;
40165
40232
 
40166
40233
  // src/components/ui/color-preset-select.tsx
40167
40234
  init_cn();
40168
- import { Fragment as Fragment60, jsx as jsx328, jsxs as jsxs262 } from "react/jsx-runtime";
40235
+ import { Fragment as Fragment61, jsx as jsx328, jsxs as jsxs262 } from "react/jsx-runtime";
40169
40236
  var TICKET_STATUS_COLOR_PRESETS = [
40170
40237
  { key: "green", label: "Green", color: "#5ea62e" },
40171
40238
  { key: "lime", label: "Lime", color: "#8bc34a" },
@@ -40316,7 +40383,7 @@ function RgbInputs({ value, onChange }) {
40316
40383
  const b = next.b ?? rgb.b;
40317
40384
  onChange(rgbToHex(r, g, b));
40318
40385
  };
40319
- return /* @__PURE__ */ jsxs262(Fragment60, { children: [
40386
+ return /* @__PURE__ */ jsxs262(Fragment61, { children: [
40320
40387
  /* @__PURE__ */ jsx328(ChannelInput, { value: rgb.r, min: 0, max: 255, ariaLabel: "Red", onCommit: (r) => update({ r }) }),
40321
40388
  /* @__PURE__ */ jsx328(ChannelInput, { value: rgb.g, min: 0, max: 255, ariaLabel: "Green", onCommit: (g) => update({ g }) }),
40322
40389
  /* @__PURE__ */ jsx328(ChannelInput, { value: rgb.b, min: 0, max: 255, ariaLabel: "Blue", onCommit: (b) => update({ b }) })
@@ -40332,7 +40399,7 @@ function HslInputs({ value, onChange }) {
40332
40399
  const out = hslToRgb(h, s, l);
40333
40400
  onChange(rgbToHex(out.r, out.g, out.b));
40334
40401
  };
40335
- return /* @__PURE__ */ jsxs262(Fragment60, { children: [
40402
+ return /* @__PURE__ */ jsxs262(Fragment61, { children: [
40336
40403
  /* @__PURE__ */ jsx328(ChannelInput, { value: hsl.h, min: 0, max: 360, ariaLabel: "Hue", onCommit: (h) => update({ h }) }),
40337
40404
  /* @__PURE__ */ jsx328(ChannelInput, { value: hsl.s, min: 0, max: 100, ariaLabel: "Saturation", onCommit: (s) => update({ s }) }),
40338
40405
  /* @__PURE__ */ jsx328(ChannelInput, { value: hsl.l, min: 0, max: 100, ariaLabel: "Lightness", onCommit: (l) => update({ l }) })
@@ -40629,7 +40696,7 @@ init_cn();
40629
40696
  // src/components/ui/ticket-note-card.tsx
40630
40697
  import * as React128 from "react";
40631
40698
  init_cn();
40632
- import { Fragment as Fragment61, jsx as jsx332, jsxs as jsxs266 } from "react/jsx-runtime";
40699
+ import { Fragment as Fragment62, jsx as jsx332, jsxs as jsxs266 } from "react/jsx-runtime";
40633
40700
  function TicketNoteCard({ note, onEdit, onDelete, className }) {
40634
40701
  const [isEditing, setIsEditing] = React128.useState(false);
40635
40702
  const [editText, setEditText] = React128.useState(note.text);
@@ -40703,7 +40770,7 @@ function TicketNoteCard({ note, onEdit, onDelete, className }) {
40703
40770
  children: /* @__PURE__ */ jsx332(XmarkIcon, { className: "size-5" })
40704
40771
  }
40705
40772
  )
40706
- ] }) : /* @__PURE__ */ jsxs266(Fragment61, { children: [
40773
+ ] }) : /* @__PURE__ */ jsxs266(Fragment62, { children: [
40707
40774
  /* @__PURE__ */ jsx332("p", { className: "text-h4 text-ods-text-primary", children: note.text }),
40708
40775
  /* @__PURE__ */ jsxs266(
40709
40776
  "p",
@@ -40810,7 +40877,7 @@ function TicketNotesSection({
40810
40877
  }
40811
40878
 
40812
40879
  // src/components/ui/ticket-info-section.tsx
40813
- import { Fragment as Fragment62, jsx as jsx334, jsxs as jsxs268 } from "react/jsx-runtime";
40880
+ import { Fragment as Fragment63, jsx as jsx334, jsxs as jsxs268 } from "react/jsx-runtime";
40814
40881
  function InfoCell2({ value, label, icon, onClick }) {
40815
40882
  return /* @__PURE__ */ jsx334("div", { className: "flex-1 min-w-0 overflow-hidden", children: /* @__PURE__ */ jsxs268("div", { className: "flex flex-col justify-center", children: [
40816
40883
  /* @__PURE__ */ jsxs268("div", { className: "flex items-center gap-1 w-full min-w-0", children: [
@@ -40935,7 +41002,7 @@ function TicketInfoSection({
40935
41002
  )
40936
41003
  ] })
40937
41004
  ] }),
40938
- expanded && /* @__PURE__ */ jsxs268(Fragment62, { children: [
41005
+ expanded && /* @__PURE__ */ jsxs268(Fragment63, { children: [
40939
41006
  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" }) }),
40940
41007
  /* @__PURE__ */ jsxs268("div", { className: "flex flex-col gap-4 p-4 bg-ods-bg border-b border-ods-border", children: [
40941
41008
  description && /* @__PURE__ */ jsx334(SimpleMarkdownRenderer, { content: description }),
@@ -40993,14 +41060,14 @@ function FilterPillRow({
40993
41060
 
40994
41061
  // src/components/ui/image-gallery-modal.tsx
40995
41062
  import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight10 } from "lucide-react";
40996
- import { Fragment as Fragment63, jsx as jsx336, jsxs as jsxs270 } from "react/jsx-runtime";
41063
+ import { Fragment as Fragment64, jsx as jsx336, jsxs as jsxs270 } from "react/jsx-runtime";
40997
41064
  function ImageGalleryModal({
40998
41065
  images,
40999
41066
  isOpen,
41000
41067
  onClose,
41001
41068
  initialIndex = 0
41002
41069
  }) {
41003
- const [selectedImageIndex, setSelectedImageIndex] = useState99(initialIndex);
41070
+ const [selectedImageIndex, setSelectedImageIndex] = useState100(initialIndex);
41004
41071
  useEffect74(() => {
41005
41072
  if (isOpen) {
41006
41073
  setSelectedImageIndex(initialIndex);
@@ -41049,7 +41116,7 @@ function ImageGalleryModal({
41049
41116
  onClose,
41050
41117
  className: "max-w-[95vw]",
41051
41118
  children: /* @__PURE__ */ jsxs270("div", { className: "relative flex items-center justify-center bg-black rounded-lg", children: [
41052
- images.length > 1 && /* @__PURE__ */ jsxs270(Fragment63, { children: [
41119
+ images.length > 1 && /* @__PURE__ */ jsxs270(Fragment64, { children: [
41053
41120
  selectedImageIndex > 0 && /* @__PURE__ */ jsx336("div", { className: "absolute left-4 top-1/2 -translate-y-1/2 z-[10000]", children: /* @__PURE__ */ jsx336(
41054
41121
  Button,
41055
41122
  {
@@ -41167,7 +41234,7 @@ function TaskTypeIcon({ customItemId, className = "h-5 w-5" }) {
41167
41234
  }
41168
41235
 
41169
41236
  // src/components/chat/entity-cards/roadmap-card.tsx
41170
- import { Fragment as Fragment64, jsx as jsx338, jsxs as jsxs271 } from "react/jsx-runtime";
41237
+ import { Fragment as Fragment65, jsx as jsx338, jsxs as jsxs271 } from "react/jsx-runtime";
41171
41238
  function RoadmapCardSkeleton({ size: size2 = "default" }) {
41172
41239
  if (size2 === "sm") {
41173
41240
  return /* @__PURE__ */ jsxs271("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -41219,7 +41286,7 @@ function RoadmapCard({
41219
41286
  onVote,
41220
41287
  isVoting = false
41221
41288
  }) {
41222
- const [showScreenshots, setShowScreenshots] = useState100(false);
41289
+ const [showScreenshots, setShowScreenshots] = useState101(false);
41223
41290
  const logoUrl = item.icon && item.icon.startsWith("http") ? item.icon : null;
41224
41291
  const iconSrc = logoUrl ? getProxiedImageUrl(logoUrl, { directHttps: true }) || logoUrl : null;
41225
41292
  if (size2 === "sm") {
@@ -41229,7 +41296,7 @@ function RoadmapCard({
41229
41296
  const hasScreenshots = (item.screenshots?.length ?? 0) > 0;
41230
41297
  const typeLabel = getTaskTypeLabel(item.customItemId);
41231
41298
  const useTypeIcon = cardType === "internal_task" || !iconSrc && item.customItemId != null;
41232
- const body = /* @__PURE__ */ jsxs271(Fragment64, { children: [
41299
+ const body = /* @__PURE__ */ jsxs271(Fragment65, { children: [
41233
41300
  /* @__PURE__ */ jsx338(
41234
41301
  "span",
41235
41302
  {
@@ -41421,7 +41488,7 @@ function RoadmapCard({
41421
41488
  // src/components/chat/entity-cards/github-activity-card.tsx
41422
41489
  import React131 from "react";
41423
41490
  import { GitPullRequest, Eye as Eye4, ExternalLink as ExternalLink8 } from "lucide-react";
41424
- import { Fragment as Fragment65, jsx as jsx339, jsxs as jsxs272 } from "react/jsx-runtime";
41491
+ import { Fragment as Fragment66, jsx as jsx339, jsxs as jsxs272 } from "react/jsx-runtime";
41425
41492
  function parseRepoFromUrl(url) {
41426
41493
  if (!url) return null;
41427
41494
  try {
@@ -41553,7 +41620,7 @@ function GitHubActivityCard({ item, variant = "compact", className, anchorProps
41553
41620
  if (repo) metaParts.push(/* @__PURE__ */ jsx339("span", { className: "font-mono truncate", children: repo }, "repo"));
41554
41621
  if (dateText) metaParts.push(/* @__PURE__ */ jsx339("span", { className: "whitespace-nowrap", children: dateText }, "date"));
41555
41622
  const href = safeHref(item.url);
41556
- const body = /* @__PURE__ */ jsxs272(Fragment65, { children: [
41623
+ const body = /* @__PURE__ */ jsxs272(Fragment66, { children: [
41557
41624
  /* @__PURE__ */ jsx339("span", { className: COMPACT_CARD_ICON_SLOT, children: kindIcon(kind, "h-5 w-5") }),
41558
41625
  /* @__PURE__ */ jsxs272("span", { className: COMPACT_CARD_TEXT_COL, children: [
41559
41626
  /* @__PURE__ */ jsxs272("span", { className: `${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-1.5`, children: [
@@ -41608,7 +41675,7 @@ function GitHubActivityCardSkeleton({ variant = "compact", className }) {
41608
41675
  // src/components/chat/entity-cards/slack-message-card.tsx
41609
41676
  import React132 from "react";
41610
41677
  import { ExternalLink as ExternalLink9, Hash } from "lucide-react";
41611
- import { Fragment as Fragment66, jsx as jsx340, jsxs as jsxs273 } from "react/jsx-runtime";
41678
+ import { Fragment as Fragment67, jsx as jsx340, jsxs as jsxs273 } from "react/jsx-runtime";
41612
41679
  function parseChannelFromUrl(url) {
41613
41680
  if (!url) return null;
41614
41681
  try {
@@ -41647,7 +41714,7 @@ function SlackMessageCard({ item, variant = "compact", className, anchorProps })
41647
41714
  }
41648
41715
  if (dateText) metaParts.push(/* @__PURE__ */ jsx340("span", { className: "whitespace-nowrap", children: dateText }, "date"));
41649
41716
  const href = safeHref(item.url);
41650
- const body = /* @__PURE__ */ jsxs273(Fragment66, { children: [
41717
+ const body = /* @__PURE__ */ jsxs273(Fragment67, { children: [
41651
41718
  /* @__PURE__ */ jsx340("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx340(SlackIcon, { className: "h-5 w-5" }) }),
41652
41719
  /* @__PURE__ */ jsxs273("span", { className: COMPACT_CARD_TEXT_COL, children: [
41653
41720
  /* @__PURE__ */ jsx340("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx340("span", { className: COMPACT_CARD_TITLE, children: item.title }) }),
@@ -41697,7 +41764,7 @@ function SlackMessageCardSkeleton({ variant = "compact", className }) {
41697
41764
  // src/components/chat/entity-cards/hubspot-ticket-card.tsx
41698
41765
  import React133 from "react";
41699
41766
  import { ExternalLink as ExternalLink10 } from "lucide-react";
41700
- import { Fragment as Fragment67, jsx as jsx341, jsxs as jsxs274 } from "react/jsx-runtime";
41767
+ import { Fragment as Fragment68, jsx as jsx341, jsxs as jsxs274 } from "react/jsx-runtime";
41701
41768
  function formatToken(token) {
41702
41769
  if (!token) return null;
41703
41770
  const lower = token.toLowerCase().replace(/_/g, " ");
@@ -41736,7 +41803,7 @@ function HubspotTicketCard({ item, variant = "compact", className, anchorProps }
41736
41803
  }
41737
41804
  if (dateText) metaParts.push(/* @__PURE__ */ jsx341("span", { className: "whitespace-nowrap", children: dateText }, "date"));
41738
41805
  const href = safeHref(item.url);
41739
- const body = /* @__PURE__ */ jsxs274(Fragment67, { children: [
41806
+ const body = /* @__PURE__ */ jsxs274(Fragment68, { children: [
41740
41807
  /* @__PURE__ */ jsxs274("span", { className: COMPACT_CARD_TEXT_COL, children: [
41741
41808
  /* @__PURE__ */ jsxs274("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
41742
41809
  /* @__PURE__ */ jsx341("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -41816,9 +41883,9 @@ function HubspotTicketCardSkeleton({ variant = "compact", className }) {
41816
41883
 
41817
41884
  // src/components/chat/entity-cards/data-room-doc-card.tsx
41818
41885
  import { ExternalLink as ExternalLink11 } from "lucide-react";
41819
- import { Fragment as Fragment68, jsx as jsx342, jsxs as jsxs275 } from "react/jsx-runtime";
41886
+ import { Fragment as Fragment69, jsx as jsx342, jsxs as jsxs275 } from "react/jsx-runtime";
41820
41887
  function DataRoomDocCard({ item, className, badgeText, anchorProps }) {
41821
- const body = /* @__PURE__ */ jsxs275(Fragment68, { children: [
41888
+ const body = /* @__PURE__ */ jsxs275(Fragment69, { children: [
41822
41889
  /* @__PURE__ */ jsxs275("span", { className: COMPACT_CARD_TEXT_COL, children: [
41823
41890
  /* @__PURE__ */ jsxs275("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
41824
41891
  /* @__PURE__ */ jsx342("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -41855,7 +41922,7 @@ function DataRoomDocCardSkeleton({ className }) {
41855
41922
  }
41856
41923
 
41857
41924
  // src/components/chat/entity-cards/program-card.tsx
41858
- import { useState as useState101 } from "react";
41925
+ import { useState as useState102 } from "react";
41859
41926
 
41860
41927
  // node_modules/date-fns/toDate.mjs
41861
41928
  function toDate(argument) {
@@ -43428,7 +43495,7 @@ function cleanEscapedString(input) {
43428
43495
  init_button();
43429
43496
  import { ExternalLink as ExternalLink12, Clock as Clock2, Play as Play4, Video as Video8 } from "lucide-react";
43430
43497
  init_cn();
43431
- import { Fragment as Fragment69, jsx as jsx343, jsxs as jsxs276 } from "react/jsx-runtime";
43498
+ import { Fragment as Fragment70, jsx as jsx343, jsxs as jsxs276 } from "react/jsx-runtime";
43432
43499
  function formatUtc(date, fmt) {
43433
43500
  return format(new Date(date.getTime() + date.getTimezoneOffset() * 6e4), fmt);
43434
43501
  }
@@ -43492,8 +43559,8 @@ function getHosts(hosts) {
43492
43559
  return [];
43493
43560
  }
43494
43561
  function MediaGallery({ images, title }) {
43495
- const [selectedImageIndex, setSelectedImageIndex] = useState101(null);
43496
- const [isModalOpen, setIsModalOpen] = useState101(false);
43562
+ const [selectedImageIndex, setSelectedImageIndex] = useState102(null);
43563
+ const [isModalOpen, setIsModalOpen] = useState102(false);
43497
43564
  const openImageModal = (index, event) => {
43498
43565
  if (event) event.stopPropagation();
43499
43566
  setSelectedImageIndex(index);
@@ -43503,7 +43570,7 @@ function MediaGallery({ images, title }) {
43503
43570
  setIsModalOpen(false);
43504
43571
  setSelectedImageIndex(null);
43505
43572
  };
43506
- return /* @__PURE__ */ jsxs276(Fragment69, { children: [
43573
+ return /* @__PURE__ */ jsxs276(Fragment70, { children: [
43507
43574
  /* @__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(
43508
43575
  "div",
43509
43576
  {
@@ -43620,7 +43687,7 @@ function ProgramCard({
43620
43687
  const dateFormat = formatUtc(itemDate, "EEEE d MMMM");
43621
43688
  const defaultRenderMeta = () => {
43622
43689
  if (config.type === "podcast" && "duration_seconds" in item && !isScheduled) {
43623
- return /* @__PURE__ */ jsxs276(Fragment69, { children: [
43690
+ return /* @__PURE__ */ jsxs276(Fragment70, { children: [
43624
43691
  /* @__PURE__ */ jsx343(Clock2, { className: "w-4 h-4 text-ods-text-secondary" }),
43625
43692
  /* @__PURE__ */ jsx343("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: formatDurationCompact(item.duration_seconds) })
43626
43693
  ] });
@@ -43631,7 +43698,7 @@ function ProgramCard({
43631
43698
  if (config.type === "webinar" && "start_at" in item) {
43632
43699
  const webinarItem = item;
43633
43700
  const duration = formatDurationFromRange(webinarItem.start_at, webinarItem.end_at);
43634
- return /* @__PURE__ */ jsxs276(Fragment69, { children: [
43701
+ return /* @__PURE__ */ jsxs276(Fragment70, { children: [
43635
43702
  /* @__PURE__ */ jsx343(Video8, { className: "w-4 h-4 text-ods-text-secondary" }),
43636
43703
  /* @__PURE__ */ jsxs276("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: [
43637
43704
  formatTimeWithTimezone(webinarItem.start_at, webinarItem.timezone ?? null),
@@ -43665,10 +43732,10 @@ function ProgramCard({
43665
43732
  /* @__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 }),
43666
43733
  /* @__PURE__ */ jsxs276("div", { className: "flex flex-col md:flex-row md:items-center gap-2 md:gap-4 mb-4", children: [
43667
43734
  /* @__PURE__ */ jsx343("span", { className: "font-['DM_Sans'] font-medium", style: { color: accentColor }, children: dateFormat }),
43668
- renderMeta ? /* @__PURE__ */ jsxs276(Fragment69, { children: [
43735
+ renderMeta ? /* @__PURE__ */ jsxs276(Fragment70, { children: [
43669
43736
  /* @__PURE__ */ jsx343("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
43670
43737
  renderMeta(item)
43671
- ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs276(Fragment69, { children: [
43738
+ ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs276(Fragment70, { children: [
43672
43739
  /* @__PURE__ */ jsx343("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
43673
43740
  /* @__PURE__ */ jsx343("div", { className: "flex items-center gap-2", children: defaultRenderMeta() })
43674
43741
  ] })
@@ -43745,10 +43812,10 @@ function ProgramCard({
43745
43812
 
43746
43813
  // src/components/chat/entity-cards/campaign-card-admin.tsx
43747
43814
  import { Megaphone as Megaphone3 } from "lucide-react";
43748
- import { Fragment as Fragment70, jsx as jsx344, jsxs as jsxs277 } from "react/jsx-runtime";
43815
+ import { Fragment as Fragment71, jsx as jsx344, jsxs as jsxs277 } from "react/jsx-runtime";
43749
43816
  function CampaignCardAdmin({ campaign, className, anchorProps }) {
43750
43817
  const goalsCount = campaign.goals?.length || 0;
43751
- const innerChildren = /* @__PURE__ */ jsxs277(Fragment70, { children: [
43818
+ const innerChildren = /* @__PURE__ */ jsxs277(Fragment71, { children: [
43752
43819
  /* @__PURE__ */ jsx344("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx344(Megaphone3, { className: "h-5 w-5" }) }),
43753
43820
  /* @__PURE__ */ jsxs277("span", { className: COMPACT_CARD_TEXT_COL, children: [
43754
43821
  /* @__PURE__ */ jsx344("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx344("span", { className: COMPACT_CARD_TITLE, children: campaign.name }) }),
@@ -43778,11 +43845,11 @@ function CampaignCardAdminSkeleton({ className }) {
43778
43845
 
43779
43846
  // src/components/chat/entity-cards/generic-entity-card.tsx
43780
43847
  import { ExternalLink as ExternalLink13 } from "lucide-react";
43781
- import { Fragment as Fragment71, jsx as jsx345, jsxs as jsxs278 } from "react/jsx-runtime";
43848
+ import { Fragment as Fragment72, jsx as jsx345, jsxs as jsxs278 } from "react/jsx-runtime";
43782
43849
  function GenericEntityCard({ item, className, anchorProps }) {
43783
43850
  const href = safeHref(item.url);
43784
43851
  const dateText = formatDateUTC(item.dateUpdated, { fallback: "", timezone: "local" });
43785
- const body = /* @__PURE__ */ jsxs278(Fragment71, { children: [
43852
+ const body = /* @__PURE__ */ jsxs278(Fragment72, { children: [
43786
43853
  /* @__PURE__ */ jsxs278("span", { className: COMPACT_CARD_TEXT_COL, children: [
43787
43854
  /* @__PURE__ */ jsxs278("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
43788
43855
  /* @__PURE__ */ jsx345("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -43967,7 +44034,7 @@ function resolveSourceIcon(input, ctx = {}) {
43967
44034
 
43968
44035
  // src/components/chat/mingo-info-card.tsx
43969
44036
  init_cn();
43970
- import { Fragment as Fragment72, jsx as jsx346, jsxs as jsxs279 } from "react/jsx-runtime";
44037
+ import { Fragment as Fragment73, jsx as jsx346, jsxs as jsxs279 } from "react/jsx-runtime";
43971
44038
  function CardMedia({
43972
44039
  imageSrc,
43973
44040
  imageAlt,
@@ -44011,7 +44078,7 @@ function MingoInfoCard({
44011
44078
  const hasMenu = !!menuGroups && menuGroups.length > 0;
44012
44079
  const isAnchor = !!anchorProps;
44013
44080
  const isInteractive = isAnchor || !!onClick;
44014
- const content = /* @__PURE__ */ jsxs279(Fragment72, { children: [
44081
+ const content = /* @__PURE__ */ jsxs279(Fragment73, { children: [
44015
44082
  hasMedia && /* @__PURE__ */ jsx346(CardMedia, { imageSrc, imageAlt, icon }),
44016
44083
  /* @__PURE__ */ jsxs279("span", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
44017
44084
  /* @__PURE__ */ jsx346("span", { className: "truncate text-h4 font-medium text-ods-text-primary", children: title }),
@@ -44060,7 +44127,7 @@ function MingoInfoCard({
44060
44127
  }
44061
44128
 
44062
44129
  // src/components/chat/entity-cards/dispatch.tsx
44063
- import { Fragment as Fragment73, jsx as jsx347, jsxs as jsxs280 } from "react/jsx-runtime";
44130
+ import { Fragment as Fragment74, jsx as jsx347, jsxs as jsxs280 } from "react/jsx-runtime";
44064
44131
  function githubKindIcon(kind) {
44065
44132
  switch (kind) {
44066
44133
  case "pull_request":
@@ -45028,10 +45095,10 @@ function ChatCardLoader({
45028
45095
  }
45029
45096
  );
45030
45097
  }
45031
- if (isLoading) return /* @__PURE__ */ jsx347(Fragment73, { children: entry.skeleton() });
45098
+ if (isLoading) return /* @__PURE__ */ jsx347(Fragment74, { children: entry.skeleton() });
45032
45099
  if (!item) return null;
45033
45100
  if (entry.bareInline) {
45034
- return /* @__PURE__ */ jsx347(Fragment73, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
45101
+ return /* @__PURE__ */ jsx347(Fragment74, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
45035
45102
  }
45036
45103
  return /* @__PURE__ */ jsx347(
45037
45104
  ChatCardWithDiscuss,
@@ -45278,7 +45345,7 @@ function useChunkCatchup({
45278
45345
  }
45279
45346
 
45280
45347
  // src/components/chat/hooks/use-jetstream-dialog-subscription.ts
45281
- import { useEffect as useEffect75, useRef as useRef61, useState as useState102 } from "react";
45348
+ import { useEffect as useEffect75, useRef as useRef61, useState as useState103 } from "react";
45282
45349
  var DEFAULT_INACTIVE_THRESHOLD_MS = 5 * 6e4;
45283
45350
  var DEFAULT_STREAM_NAME = "CHAT_CHUNKS";
45284
45351
  function useJetStreamDialogSubscription({
@@ -45297,10 +45364,10 @@ function useJetStreamDialogSubscription({
45297
45364
  reconnectionBackoff,
45298
45365
  inactiveThresholdMs
45299
45366
  }) {
45300
- const [isConnected, setIsConnected] = useState102(false);
45301
- const [isSubscribed, setIsSubscribed] = useState102(false);
45302
- const [reconnectionCount, setReconnectionCount] = useState102(0);
45303
- const [currentStreamSeq, setCurrentStreamSeq] = useState102(null);
45367
+ const [isConnected, setIsConnected] = useState103(false);
45368
+ const [isSubscribed, setIsSubscribed] = useState103(false);
45369
+ const [reconnectionCount, setReconnectionCount] = useState103(0);
45370
+ const [currentStreamSeq, setCurrentStreamSeq] = useState103(null);
45304
45371
  const clientRef = useRef61(null);
45305
45372
  const subscriptionRef = useRef61(null);
45306
45373
  const highestStreamSeqRef = useRef61(null);
@@ -45519,7 +45586,7 @@ function useJetStreamDialogSubscription({
45519
45586
  }
45520
45587
 
45521
45588
  // src/components/chat/hooks/use-nats-dialog-subscription.ts
45522
- import { useEffect as useEffect76, useRef as useRef62, useState as useState103 } from "react";
45589
+ import { useEffect as useEffect76, useRef as useRef62, useState as useState104 } from "react";
45523
45590
  function useNatsDialogSubscription({
45524
45591
  enabled,
45525
45592
  dialogId,
@@ -45533,9 +45600,9 @@ function useNatsDialogSubscription({
45533
45600
  clientConfig = {},
45534
45601
  reconnectionBackoff
45535
45602
  }) {
45536
- const [isConnected, setIsConnected] = useState103(false);
45537
- const [isSubscribed, setIsSubscribed] = useState103(false);
45538
- const [reconnectionCount, setReconnectionCount] = useState103(0);
45603
+ const [isConnected, setIsConnected] = useState104(false);
45604
+ const [isSubscribed, setIsSubscribed] = useState104(false);
45605
+ const [reconnectionCount, setReconnectionCount] = useState104(0);
45539
45606
  const clientRef = useRef62(null);
45540
45607
  const subscriptionRefs = useRef62(/* @__PURE__ */ new Map());
45541
45608
  const onEventRef = useRef62(onEvent);
@@ -46729,7 +46796,7 @@ function useRealtimeChunkProcessor(options) {
46729
46796
  }
46730
46797
 
46731
46798
  // src/components/chat/hooks/use-slash-commands.ts
46732
- import { useEffect as useEffect78, useState as useState104 } from "react";
46799
+ import { useEffect as useEffect78, useState as useState105 } from "react";
46733
46800
  import { useQuery as useQuery2 } from "@tanstack/react-query";
46734
46801
  async function fetchSlashCommands(prefix, signal, commandsUrl) {
46735
46802
  try {
@@ -46746,8 +46813,8 @@ async function fetchSlashCommands(prefix, signal, commandsUrl) {
46746
46813
  }
46747
46814
  }
46748
46815
  function useSlashCommands(prefix, commandsUrl) {
46749
- const [commands, setCommands] = useState104([]);
46750
- const [loading, setLoading] = useState104(false);
46816
+ const [commands, setCommands] = useState105([]);
46817
+ const [loading, setLoading] = useState105(false);
46751
46818
  useEffect78(() => {
46752
46819
  if (prefix == null) {
46753
46820
  setCommands([]);
@@ -46854,7 +46921,7 @@ function useEmptyStateConfig(emptyStateUrl, options) {
46854
46921
  }
46855
46922
 
46856
46923
  // src/components/chat/hooks/use-chat-attachments.ts
46857
- import { useCallback as useCallback46, useMemo as useMemo40, useRef as useRef64, useState as useState105 } from "react";
46924
+ import { useCallback as useCallback46, useMemo as useMemo40, useRef as useRef64, useState as useState106 } from "react";
46858
46925
  import { fileTypeFromBlob } from "file-type";
46859
46926
  var CHAT_ATTACHMENTS_BUCKET = "chat-attachments";
46860
46927
  var CHAT_ATTACHMENTS_FOLDER = "chat";
@@ -46930,7 +46997,7 @@ function uploadWithProgress(url, file, token, onProgress, signal) {
46930
46997
  function useChatAttachments() {
46931
46998
  const runtime = useRequiredChatRuntime();
46932
46999
  const uploadUrlEndpoint = runtime.endpoints.attachmentUploadUrl;
46933
- const [attachments, setAttachments] = useState105([]);
47000
+ const [attachments, setAttachments] = useState106([]);
46934
47001
  const controllersRef = useRef64(/* @__PURE__ */ new Map());
46935
47002
  const updateOne = useCallback46((id, patch) => {
46936
47003
  setAttachments((prev) => prev.map((a) => a.id === id ? { ...a, ...patch } : a));
@@ -47097,14 +47164,14 @@ function useChatAttachments() {
47097
47164
  }
47098
47165
 
47099
47166
  // src/components/chat/hooks/use-chat-attachment-image-gallery.tsx
47100
- import { useCallback as useCallback47, useEffect as useEffect79, useRef as useRef65, useState as useState106 } from "react";
47167
+ import { useCallback as useCallback47, useEffect as useEffect79, useRef as useRef65, useState as useState107 } from "react";
47101
47168
  import { jsx as jsx348 } from "react/jsx-runtime";
47102
47169
  var CLOSED = { isOpen: false, images: [], initialIndex: 0 };
47103
47170
  function useChatAttachmentImageGallery() {
47104
47171
  const runtime = useRequiredChatRuntime();
47105
47172
  const viewUrlPrefix = runtime.endpoints.attachmentViewUrlPrefix;
47106
47173
  const panelRef = useRef65(null);
47107
- const [state, setState] = useState106(CLOSED);
47174
+ const [state, setState] = useState107(CLOSED);
47108
47175
  const handleClose = useCallback47(() => setState(CLOSED), []);
47109
47176
  useEffect79(() => {
47110
47177
  const root = panelRef.current;
@@ -47152,7 +47219,7 @@ function absolutize(prefix) {
47152
47219
  }
47153
47220
 
47154
47221
  // src/components/chat/hooks/use-chat-identity.ts
47155
- import { createContext as createContext12, createElement as createElement2, useContext as useContext12, useEffect as useEffect80, useState as useState107 } from "react";
47222
+ import { createContext as createContext12, createElement as createElement2, useContext as useContext12, useEffect as useEffect80, useState as useState108 } from "react";
47156
47223
  var ANON_DEFAULTS = {
47157
47224
  authTier: "anon",
47158
47225
  source: null,
@@ -47163,8 +47230,8 @@ function useResolveChatIdentity(enabled) {
47163
47230
  const runtime = useRequiredChatRuntime();
47164
47231
  const url = runtime.endpoints.identityUrl;
47165
47232
  const proxyEmail = getEmbedProxyAuth()?.email ?? null;
47166
- const [data, setData] = useState107(ANON_DEFAULTS);
47167
- const [isLoading, setIsLoading] = useState107(enabled);
47233
+ const [data, setData] = useState108(ANON_DEFAULTS);
47234
+ const [isLoading, setIsLoading] = useState108(enabled);
47168
47235
  useEffect80(() => {
47169
47236
  if (!enabled) return;
47170
47237
  let cancelled = false;
@@ -47225,13 +47292,13 @@ function useCloseOnNavigation(close, pathname) {
47225
47292
  }
47226
47293
 
47227
47294
  // src/components/chat/hooks/use-chat.ts
47228
- import { useState as useState109, useCallback as useCallback49, useEffect as useEffect82, useRef as useRef68 } from "react";
47295
+ import { useState as useState110, useCallback as useCallback49, useEffect as useEffect82, useRef as useRef68 } from "react";
47229
47296
 
47230
47297
  // src/components/chat/hooks/use-sse.ts
47231
- import { useState as useState108, useCallback as useCallback48, useRef as useRef67 } from "react";
47298
+ import { useState as useState109, useCallback as useCallback48, useRef as useRef67 } from "react";
47232
47299
  function useSSE({ useMock = true, debugMode = false, streamFn } = {}) {
47233
- const [isStreaming, setIsStreaming] = useState108(false);
47234
- const [error, setError] = useState108(null);
47300
+ const [isStreaming, setIsStreaming] = useState109(false);
47301
+ const [error, setError] = useState109(null);
47235
47302
  const abortControllerRef = useRef67(null);
47236
47303
  const fallbackStream = useCallback48(async function* () {
47237
47304
  throw new Error(
@@ -47298,8 +47365,8 @@ function useChat({
47298
47365
  initialMessages,
47299
47366
  onMessagesChange
47300
47367
  } = {}) {
47301
- const [messages, setMessages] = useState109(() => initialMessages ?? []);
47302
- const [isTyping, setIsTyping] = useState109(false);
47368
+ const [messages, setMessages] = useState110(() => initialMessages ?? []);
47369
+ const [isTyping, setIsTyping] = useState110(false);
47303
47370
  const currentAssistantSegmentsRef = useRef68([]);
47304
47371
  const onMessagesChangeRef = useRef68(onMessagesChange);
47305
47372
  onMessagesChangeRef.current = onMessagesChange;
@@ -47592,7 +47659,7 @@ function useChat({
47592
47659
  }
47593
47660
 
47594
47661
  // src/components/chat/hooks/use-sse-chat-adapter.ts
47595
- import { useState as useState110, useEffect as useEffect83, useCallback as useCallback50, useMemo as useMemo41, useRef as useRef69 } from "react";
47662
+ import { useState as useState111, useEffect as useEffect83, useCallback as useCallback50, useMemo as useMemo41, useRef as useRef69 } from "react";
47596
47663
  function createEmptyTurnMeta() {
47597
47664
  return {
47598
47665
  provider: null,
@@ -47927,8 +47994,8 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
47927
47994
  const metaMapRef = useRef69(/* @__PURE__ */ new Map());
47928
47995
  const messagesRef = useRef69(persistedRef.current.messages);
47929
47996
  const sendCountRef = useRef69(persistedRef.current.sendCount);
47930
- const [streamingPhase, setStreamingPhase] = useState110("idle");
47931
- const [metaTick, setMetaTick] = useState110(0);
47997
+ const [streamingPhase, setStreamingPhase] = useState111("idle");
47998
+ const [metaTick, setMetaTick] = useState111(0);
47932
47999
  const bumpMetaTick = useCallback50(() => setMetaTick((t) => t + 1), []);
47933
48000
  const streamFn = useMemo41(
47934
48001
  () => createDocStreamFn(
@@ -48201,7 +48268,7 @@ import {
48201
48268
  useEffect as useEffect84,
48202
48269
  useMemo as useMemo42,
48203
48270
  useRef as useRef70,
48204
- useState as useState111
48271
+ useState as useState112
48205
48272
  } from "react";
48206
48273
 
48207
48274
  // src/components/chat/utils/process-historical-messages.ts
@@ -48691,23 +48758,23 @@ function useNatsChatAdapter(config, options = {}) {
48691
48758
  modelLabel = null
48692
48759
  } = config;
48693
48760
  const isManagedMode = fetchDialogs !== void 0;
48694
- const [internalDialogId, setInternalDialogId] = useState111(null);
48761
+ const [internalDialogId, setInternalDialogId] = useState112(null);
48695
48762
  const dialogId = isManagedMode ? internalDialogId : controlledDialogId !== void 0 ? controlledDialogId : null;
48696
- const [messages, setMessages] = useState111([]);
48697
- const [streamingPhase, setStreamingPhase] = useState111("idle");
48698
- const [approvalStatuses, setApprovalStatuses] = useState111({});
48699
- const [dialogs, setDialogs] = useState111([]);
48700
- const [dialogsNextCursor, setDialogsNextCursor] = useState111(null);
48701
- const [isDialogsLoading, setIsDialogsLoading] = useState111(false);
48702
- const [dialogsError, setDialogsError] = useState111(false);
48703
- const [isCreatingDialog, setIsCreatingDialog] = useState111(false);
48704
- const [messagesNextCursor, setMessagesNextCursor] = useState111(null);
48705
- const [isMessagesLoading, setIsMessagesLoading] = useState111(false);
48706
- const [dialogTokenUsage, setDialogTokenUsage] = useState111(
48763
+ const [messages, setMessages] = useState112([]);
48764
+ const [streamingPhase, setStreamingPhase] = useState112("idle");
48765
+ const [approvalStatuses, setApprovalStatuses] = useState112({});
48766
+ const [dialogs, setDialogs] = useState112([]);
48767
+ const [dialogsNextCursor, setDialogsNextCursor] = useState112(null);
48768
+ const [isDialogsLoading, setIsDialogsLoading] = useState112(false);
48769
+ const [dialogsError, setDialogsError] = useState112(false);
48770
+ const [isCreatingDialog, setIsCreatingDialog] = useState112(false);
48771
+ const [messagesNextCursor, setMessagesNextCursor] = useState112(null);
48772
+ const [isMessagesLoading, setIsMessagesLoading] = useState112(false);
48773
+ const [dialogTokenUsage, setDialogTokenUsage] = useState112(
48707
48774
  null
48708
48775
  );
48709
- const [liveModel, setLiveModel] = useState111(null);
48710
- const [connectionState, setConnectionState] = useState111("connecting");
48776
+ const [liveModel, setLiveModel] = useState112(null);
48777
+ const [connectionState, setConnectionState] = useState112("connecting");
48711
48778
  const handleApprove = useCallback51(
48712
48779
  async (requestId) => {
48713
48780
  if (!approveRequestCallback) return;
@@ -49503,7 +49570,7 @@ function chatChipClass({ tone, density = "chip", extra }) {
49503
49570
  }
49504
49571
 
49505
49572
  // src/components/chat/embeddable-chat.tsx
49506
- import { useCallback as useCallback54, useEffect as useEffect85, useMemo as useMemo45, useRef as useRef72, useState as useState113 } from "react";
49573
+ import { useCallback as useCallback54, useEffect as useEffect85, useMemo as useMemo45, useRef as useRef72, useState as useState114 } from "react";
49507
49574
  import * as DialogPrimitive4 from "@radix-ui/react-dialog";
49508
49575
  import { usePreventScroll } from "@react-aria/overlays";
49509
49576
  import { isIOS } from "@react-aria/utils";
@@ -49584,7 +49651,7 @@ init_button2();
49584
49651
  import { FileText as FileText8, MessageSquare as MessageSquare3 } from "lucide-react";
49585
49652
 
49586
49653
  // src/components/chat/hooks/use-chat-dialog-manager.ts
49587
- import { useCallback as useCallback53, useMemo as useMemo44, useState as useState112 } from "react";
49654
+ import { useCallback as useCallback53, useMemo as useMemo44, useState as useState113 } from "react";
49588
49655
  function useChatDialogManager({
49589
49656
  dialogs,
49590
49657
  activeDialogId,
@@ -49595,8 +49662,8 @@ function useChatDialogManager({
49595
49662
  fetchArchivedDialogs,
49596
49663
  unarchiveDialog
49597
49664
  }) {
49598
- const [renameTarget, setRenameTarget] = useState112(null);
49599
- const [archiveTarget, setArchiveTarget] = useState112(null);
49665
+ const [renameTarget, setRenameTarget] = useState113(null);
49666
+ const [archiveTarget, setArchiveTarget] = useState113(null);
49600
49667
  const handleConfirmRename = useCallback53(
49601
49668
  (name) => {
49602
49669
  if (renameTarget) void renameDialog(renameTarget.id, name);
@@ -49619,10 +49686,10 @@ function useChatDialogManager({
49619
49686
  }
49620
49687
  setArchiveTarget(null);
49621
49688
  }, [archiveTarget, archiveDialog, activeDialogId, clearMessages]);
49622
- const [archiveOpen, setArchiveOpen] = useState112(false);
49623
- const [archivedDialogs, setArchivedDialogs] = useState112([]);
49624
- const [archivedCursor, setArchivedCursor] = useState112(null);
49625
- const [archivedLoading, setArchivedLoading] = useState112(false);
49689
+ const [archiveOpen, setArchiveOpen] = useState113(false);
49690
+ const [archivedDialogs, setArchivedDialogs] = useState113([]);
49691
+ const [archivedCursor, setArchivedCursor] = useState113(null);
49692
+ const [archivedLoading, setArchivedLoading] = useState113(false);
49626
49693
  const loadArchivedPage = useCallback53(
49627
49694
  async (cursor) => {
49628
49695
  if (!fetchArchivedDialogs) return;
@@ -49648,10 +49715,10 @@ function useChatDialogManager({
49648
49715
  void loadArchivedPage();
49649
49716
  }, [loadArchivedPage]);
49650
49717
  const closeArchive = useCallback53(() => setArchiveOpen(false), []);
49651
- const [viewingArchivedId, setViewingArchivedId] = useState112(
49718
+ const [viewingArchivedId, setViewingArchivedId] = useState113(
49652
49719
  null
49653
49720
  );
49654
- const [openingDialogId, setOpeningDialogId] = useState112(null);
49721
+ const [openingDialogId, setOpeningDialogId] = useState113(null);
49655
49722
  const handleSelectDialog = useCallback53(
49656
49723
  (id) => {
49657
49724
  setViewingArchivedId(null);
@@ -49670,7 +49737,7 @@ function useChatDialogManager({
49670
49737
  },
49671
49738
  [selectDialog]
49672
49739
  );
49673
- const [restoreTarget, setRestoreTarget] = useState112(null);
49740
+ const [restoreTarget, setRestoreTarget] = useState113(null);
49674
49741
  const handleConfirmRestore = useCallback53(async () => {
49675
49742
  if (restoreTarget) {
49676
49743
  try {
@@ -49732,7 +49799,7 @@ function useChatDialogManager({
49732
49799
 
49733
49800
  // src/components/chat/embeddable-chat.tsx
49734
49801
  init_next_navigation();
49735
- import { Fragment as Fragment74, jsx as jsx351, jsxs as jsxs281 } from "react/jsx-runtime";
49802
+ import { Fragment as Fragment75, jsx as jsx351, jsxs as jsxs281 } from "react/jsx-runtime";
49736
49803
  var formatRelativePath = (p) => p.replace(/^\/+/, "").replace(/\/+$/, "");
49737
49804
  var mentionTokenOf = (key, markerByType) => {
49738
49805
  const ci = key.indexOf(":");
@@ -49852,7 +49919,7 @@ function SourceChip({
49852
49919
  );
49853
49920
  }
49854
49921
  const displayName = src.name || formatRelativePath(src.path);
49855
- const chipBody = (label) => /* @__PURE__ */ jsxs281(Fragment74, { children: [
49922
+ const chipBody = (label) => /* @__PURE__ */ jsxs281(Fragment75, { children: [
49856
49923
  icon,
49857
49924
  /* @__PURE__ */ jsxs281("span", { className: "truncate max-w-[160px]", children: [
49858
49925
  "[",
@@ -49922,7 +49989,7 @@ function SourceChips({
49922
49989
  onClose,
49923
49990
  onDiscuss
49924
49991
  }) {
49925
- const [expanded, setExpanded] = useState113(false);
49992
+ const [expanded, setExpanded] = useState114(false);
49926
49993
  if (cited.length === 0) {
49927
49994
  const fallback = uncited.slice(0, FALLBACK_TOP_RETRIEVED);
49928
49995
  if (fallback.length === 0) return null;
@@ -50043,7 +50110,7 @@ function EmbeddableChatInner({
50043
50110
  defaultProp: defaultOpen ?? false,
50044
50111
  onChange: onOpenChange
50045
50112
  });
50046
- const [autoFocusInput] = useState113(() => {
50113
+ const [autoFocusInput] = useState114(() => {
50047
50114
  if (typeof window === "undefined") return false;
50048
50115
  return !window.matchMedia("(pointer: coarse)").matches;
50049
50116
  });
@@ -50076,7 +50143,7 @@ function EmbeddableChatInner({
50076
50143
  };
50077
50144
  }, [isOpen, shellLess]);
50078
50145
  const chatInputRef = useRef72(null);
50079
- const [quickActionPreview, setQuickActionPreview] = useState113(null);
50146
+ const [quickActionPreview, setQuickActionPreview] = useState114(null);
50080
50147
  const slashCommandsProp = useMemo45(
50081
50148
  () => ({
50082
50149
  fetchCommands: (prefix, signal) => fetchSlashCommands(prefix, signal, commandsUrl),
@@ -50119,7 +50186,7 @@ function EmbeddableChatInner({
50119
50186
  }, [mingoState, mingoDialogCapabilities, effectiveModes]);
50120
50187
  const hasMingoMode = !!effectiveModes.mingo || !!mingoState;
50121
50188
  const initialActiveMode = controlledActiveMode ?? defaultActiveMode ?? (effectiveModes.guide ? "guide" : "mingo");
50122
- const [uncontrolledActiveMode, setUncontrolledActiveMode] = useState113(initialActiveMode);
50189
+ const [uncontrolledActiveMode, setUncontrolledActiveMode] = useState114(initialActiveMode);
50123
50190
  const activeMode = controlledActiveMode ?? uncontrolledActiveMode;
50124
50191
  const handleActiveModeChange = useCallback54(
50125
50192
  (next) => {
@@ -50201,9 +50268,9 @@ function EmbeddableChatInner({
50201
50268
  const { panelRef: galleryPanelRef, modal: galleryModal } = useChatAttachmentImageGallery();
50202
50269
  const contextMaxItems = contextPicker?.maxItems ?? 10;
50203
50270
  const contextPickerForMode = activeMode === "mingo" ? contextPicker : void 0;
50204
- const [contextItems, setContextItems] = useState113([]);
50205
- const [contextPickerOpen, setContextPickerOpen] = useState113(false);
50206
- const [mentionQuery, setMentionQuery] = useState113(null);
50271
+ const [contextItems, setContextItems] = useState114([]);
50272
+ const [contextPickerOpen, setContextPickerOpen] = useState114(false);
50273
+ const [mentionQuery, setMentionQuery] = useState114(null);
50207
50274
  const mentionActiveRef = useRef72(false);
50208
50275
  useEffect85(() => {
50209
50276
  mentionActiveRef.current = mentionQuery !== null;
@@ -50490,7 +50557,7 @@ function EmbeddableChatInner({
50490
50557
  const uncited = sources.filter((s) => !seenOrder.has(s.index));
50491
50558
  return { cited, uncited };
50492
50559
  }, [lastAssistantMsg, chatLoading]);
50493
- const [portalHost, setPortalHost] = useState113(null);
50560
+ const [portalHost, setPortalHost] = useState114(null);
50494
50561
  const body = /* @__PURE__ */ jsxs281(PortalContainerContext.Provider, { value: portalHost, children: [
50495
50562
  /* @__PURE__ */ jsx351(
50496
50563
  "div",
@@ -50798,7 +50865,7 @@ function EmbeddableChatInner({
50798
50865
  ]
50799
50866
  }
50800
50867
  ) }) });
50801
- return /* @__PURE__ */ jsxs281(Fragment74, { children: [
50868
+ return /* @__PURE__ */ jsxs281(Fragment75, { children: [
50802
50869
  showInternalTrigger && !shellLess && /* @__PURE__ */ jsx351(
50803
50870
  "div",
50804
50871
  {
@@ -51075,6 +51142,7 @@ export {
51075
51142
  ArgRow,
51076
51143
  ResultBlock,
51077
51144
  CommandBlock,
51145
+ ApprovalStatusTag,
51078
51146
  ApprovalBatchMessage,
51079
51147
  ContextCompactionDisplay,
51080
51148
  SimpleMarkdownRenderer,
@@ -51758,4 +51826,4 @@ export {
51758
51826
  LogsList,
51759
51827
  assets
51760
51828
  };
51761
- //# sourceMappingURL=chunk-GZIHB6TH.js.map
51829
+ //# sourceMappingURL=chunk-VZ4NJBQT.js.map