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

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