@flamingo-stack/openframe-frontend-core 0.0.290 → 0.0.291-snapshot.20260618233000

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 (138) hide show
  1. package/dist/{chunk-EL5GCMPU.cjs → chunk-2BMVBPC7.cjs} +9 -9
  2. package/dist/{chunk-EL5GCMPU.cjs.map → chunk-2BMVBPC7.cjs.map} +1 -1
  3. package/dist/{chunk-OYXZIPNM.cjs → chunk-2NJ44RTT.cjs} +27 -27
  4. package/dist/{chunk-OYXZIPNM.cjs.map → chunk-2NJ44RTT.cjs.map} +1 -1
  5. package/dist/{chunk-R4CLIWAU.js → chunk-5FK7X3EE.js} +270 -172
  6. package/dist/chunk-5FK7X3EE.js.map +1 -0
  7. package/dist/{chunk-3SDBXXDP.cjs → chunk-5PELVUFT.cjs} +26 -26
  8. package/dist/{chunk-3SDBXXDP.cjs.map → chunk-5PELVUFT.cjs.map} +1 -1
  9. package/dist/{chunk-2V6RCQ5M.cjs → chunk-5R5OODNE.cjs} +40 -40
  10. package/dist/{chunk-2V6RCQ5M.cjs.map → chunk-5R5OODNE.cjs.map} +1 -1
  11. package/dist/{chunk-ODR6A6FC.js → chunk-6FHO73AP.js} +22 -10
  12. package/dist/{chunk-ODR6A6FC.js.map → chunk-6FHO73AP.js.map} +1 -1
  13. package/dist/{chunk-KJF7SRKH.js → chunk-B2U6INNO.js} +3 -3
  14. package/dist/{chunk-4F3X2AOB.js → chunk-C667P6LZ.js} +5 -5
  15. package/dist/{chunk-UC5GB255.cjs → chunk-CDJOKNCS.cjs} +17 -17
  16. package/dist/{chunk-UC5GB255.cjs.map → chunk-CDJOKNCS.cjs.map} +1 -1
  17. package/dist/{chunk-7NM7DEUK.js → chunk-CUQH4SHH.js} +2 -2
  18. package/dist/{chunk-ZLN6SM2U.js → chunk-DUIWR7RQ.js} +3 -3
  19. package/dist/{chunk-4XMYOZFO.js → chunk-E2YXRSDG.js} +5 -5
  20. package/dist/{chunk-AAK6IY6Y.cjs → chunk-FFP2A77V.cjs} +10 -10
  21. package/dist/{chunk-AAK6IY6Y.cjs.map → chunk-FFP2A77V.cjs.map} +1 -1
  22. package/dist/{chunk-Z5QIVHJW.js → chunk-HTYUZXQP.js} +5 -5
  23. package/dist/{chunk-LVOBI2M5.js → chunk-IXDTNQF4.js} +3 -3
  24. package/dist/{chunk-I6ZPGKZ2.cjs → chunk-JC5RN7ZS.cjs} +6 -6
  25. package/dist/{chunk-I6ZPGKZ2.cjs.map → chunk-JC5RN7ZS.cjs.map} +1 -1
  26. package/dist/{chunk-VJ4ZWD5G.cjs → chunk-MDLWEJAV.cjs} +1072 -974
  27. package/dist/chunk-MDLWEJAV.cjs.map +1 -0
  28. package/dist/{chunk-R2KT5GDD.js → chunk-N45M3TK3.js} +14 -4
  29. package/dist/chunk-N45M3TK3.js.map +1 -0
  30. package/dist/{chunk-EI4WALN2.cjs → chunk-OXOTKEYY.cjs} +39 -29
  31. package/dist/chunk-OXOTKEYY.cjs.map +1 -0
  32. package/dist/{chunk-7L22MF3U.cjs → chunk-PZZGDS5I.cjs} +17 -17
  33. package/dist/{chunk-7L22MF3U.cjs.map → chunk-PZZGDS5I.cjs.map} +1 -1
  34. package/dist/{chunk-VRSXJ5QJ.js → chunk-SLP4KXP6.js} +3 -2
  35. package/dist/chunk-SLP4KXP6.js.map +1 -0
  36. package/dist/{chunk-7EYWERFT.js → chunk-VK4B6UGU.js} +4 -4
  37. package/dist/{chunk-D6RK5YXX.cjs → chunk-Z6BK4XHH.cjs} +22 -10
  38. package/dist/chunk-Z6BK4XHH.cjs.map +1 -0
  39. package/dist/{chunk-Y4JNA4W6.cjs → chunk-ZHNL2IPK.cjs} +3 -2
  40. package/dist/chunk-ZHNL2IPK.cjs.map +1 -0
  41. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  42. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  43. package/dist/components/chat/embeddable-chat.d.ts +15 -0
  44. package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
  45. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +1 -1
  46. package/dist/components/chat/index.cjs +7 -5
  47. package/dist/components/chat/index.cjs.map +1 -1
  48. package/dist/components/chat/index.d.ts +1 -0
  49. package/dist/components/chat/index.d.ts.map +1 -1
  50. package/dist/components/chat/index.js +6 -4
  51. package/dist/components/chat/remark-mention-chips.d.ts +30 -0
  52. package/dist/components/chat/remark-mention-chips.d.ts.map +1 -0
  53. package/dist/components/chat/types/api.types.d.ts +4 -0
  54. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  55. package/dist/components/chat/types/component.types.d.ts +24 -0
  56. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  57. package/dist/components/chat/types/context-item.types.d.ts +5 -0
  58. package/dist/components/chat/types/context-item.types.d.ts.map +1 -1
  59. package/dist/components/chat/types/processing.types.d.ts +4 -0
  60. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  61. package/dist/components/chat/utils/chunk-parser.d.ts.map +1 -1
  62. package/dist/components/chat/utils/nav-anchor-props.d.ts +8 -3
  63. package/dist/components/chat/utils/nav-anchor-props.d.ts.map +1 -1
  64. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  65. package/dist/components/contact/index.cjs +6 -6
  66. package/dist/components/contact/index.js +5 -5
  67. package/dist/components/docs/index.cjs +5 -5
  68. package/dist/components/docs/index.js +4 -4
  69. package/dist/components/embeds/index.cjs +6 -6
  70. package/dist/components/embeds/index.js +5 -5
  71. package/dist/components/faq/index.cjs +6 -6
  72. package/dist/components/faq/index.js +5 -5
  73. package/dist/components/features/index.cjs +5 -5
  74. package/dist/components/features/index.js +4 -4
  75. package/dist/components/features/paths-display.d.ts +1 -1
  76. package/dist/components/features/paths-display.d.ts.map +1 -1
  77. package/dist/components/index.cjs +178 -176
  78. package/dist/components/index.cjs.map +1 -1
  79. package/dist/components/index.js +13 -11
  80. package/dist/components/index.js.map +1 -1
  81. package/dist/components/navigation/index.cjs +5 -5
  82. package/dist/components/navigation/index.js +4 -4
  83. package/dist/components/onboarding-guides/index.cjs +24 -24
  84. package/dist/components/onboarding-guides/index.js +4 -4
  85. package/dist/components/related-content/index.cjs +6 -6
  86. package/dist/components/related-content/index.js +5 -5
  87. package/dist/components/tickets/index.cjs +63 -63
  88. package/dist/components/tickets/index.js +6 -6
  89. package/dist/components/ui/index.cjs +7 -5
  90. package/dist/components/ui/index.cjs.map +1 -1
  91. package/dist/components/ui/index.js +6 -4
  92. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  93. package/dist/components/ui/tag.d.ts +10 -1
  94. package/dist/components/ui/tag.d.ts.map +1 -1
  95. package/dist/index.cjs +7 -5
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.js +6 -4
  98. package/dist/utils/index.cjs +21 -9
  99. package/dist/utils/index.cjs.map +1 -1
  100. package/dist/utils/index.js +21 -9
  101. package/dist/utils/index.js.map +1 -1
  102. package/dist/utils/scroll-into-view.d.ts +12 -0
  103. package/dist/utils/scroll-into-view.d.ts.map +1 -1
  104. package/package.json +1 -1
  105. package/src/components/chat/chat-message-enhanced.tsx +71 -9
  106. package/src/components/chat/chat-message-list.tsx +2 -0
  107. package/src/components/chat/embeddable-chat.tsx +50 -6
  108. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +1 -0
  109. package/src/components/chat/index.ts +1 -0
  110. package/src/components/chat/remark-mention-chips.ts +72 -0
  111. package/src/components/chat/types/api.types.ts +1 -1
  112. package/src/components/chat/types/component.types.ts +18 -0
  113. package/src/components/chat/types/context-item.types.ts +5 -0
  114. package/src/components/chat/types/processing.types.ts +8 -1
  115. package/src/components/chat/utils/chunk-parser.ts +11 -0
  116. package/src/components/chat/utils/nav-anchor-props.ts +22 -4
  117. package/src/components/chat/utils/process-historical-messages.ts +22 -0
  118. package/src/components/features/.paths-display.md +1 -1
  119. package/src/components/features/command-box.tsx +1 -1
  120. package/src/components/features/paths-display.tsx +13 -14
  121. package/src/components/ui/simple-markdown-renderer.tsx +14 -11
  122. package/src/components/ui/tag.tsx +12 -2
  123. package/src/utils/scroll-into-view.ts +51 -9
  124. package/dist/chunk-D6RK5YXX.cjs.map +0 -1
  125. package/dist/chunk-EI4WALN2.cjs.map +0 -1
  126. package/dist/chunk-R2KT5GDD.js.map +0 -1
  127. package/dist/chunk-R4CLIWAU.js.map +0 -1
  128. package/dist/chunk-VJ4ZWD5G.cjs.map +0 -1
  129. package/dist/chunk-VRSXJ5QJ.js.map +0 -1
  130. package/dist/chunk-Y4JNA4W6.cjs.map +0 -1
  131. /package/dist/{chunk-KJF7SRKH.js.map → chunk-B2U6INNO.js.map} +0 -0
  132. /package/dist/{chunk-4F3X2AOB.js.map → chunk-C667P6LZ.js.map} +0 -0
  133. /package/dist/{chunk-7NM7DEUK.js.map → chunk-CUQH4SHH.js.map} +0 -0
  134. /package/dist/{chunk-ZLN6SM2U.js.map → chunk-DUIWR7RQ.js.map} +0 -0
  135. /package/dist/{chunk-4XMYOZFO.js.map → chunk-E2YXRSDG.js.map} +0 -0
  136. /package/dist/{chunk-Z5QIVHJW.js.map → chunk-HTYUZXQP.js.map} +0 -0
  137. /package/dist/{chunk-LVOBI2M5.js.map → chunk-IXDTNQF4.js.map} +0 -0
  138. /package/dist/{chunk-7EYWERFT.js.map → chunk-VK4B6UGU.js.map} +0 -0
@@ -44,7 +44,7 @@ import {
44
44
  rgbToHsl,
45
45
  sanitizeTitleForChat,
46
46
  validatePhoneNumber
47
- } from "./chunk-ODR6A6FC.js";
47
+ } from "./chunk-6FHO73AP.js";
48
48
  import {
49
49
  ToolIcon,
50
50
  dotColorByVariant,
@@ -93,7 +93,7 @@ import {
93
93
  useControllableState,
94
94
  useEntityCardLink,
95
95
  useEntityCardPlaceholder
96
- } from "./chunk-R2KT5GDD.js";
96
+ } from "./chunk-N45M3TK3.js";
97
97
  import {
98
98
  COMPACT_CARD_ICON_SLOT,
99
99
  COMPACT_CARD_IMAGE_SLOT,
@@ -133,7 +133,7 @@ import {
133
133
  sourceRowCtxFromRuntime,
134
134
  stripSameOriginToPath,
135
135
  tagVariants
136
- } from "./chunk-VRSXJ5QJ.js";
136
+ } from "./chunk-SLP4KXP6.js";
137
137
  import {
138
138
  embedAuthedFetch,
139
139
  getEmbedProxyAuth,
@@ -253,6 +253,7 @@ import {
253
253
  CoinsExchangeCurrencyIcon,
254
254
  CompassIcon,
255
255
  Copy01Icon,
256
+ Copy02Icon,
256
257
  DotsLoaderIcon,
257
258
  Download02Icon,
258
259
  DraggerIcon,
@@ -2672,6 +2673,46 @@ var remarkCardLinks = () => {
2672
2673
  };
2673
2674
  };
2674
2675
 
2676
+ // src/components/chat/remark-mention-chips.ts
2677
+ import { visit as visit2, SKIP as SKIP2 } from "unist-util-visit";
2678
+ var MENTION_REGEX = /(^|\s)@([a-z]+):([A-Za-z0-9_.+/=-]+)/g;
2679
+ var remarkMentionChips = () => {
2680
+ return (tree) => {
2681
+ visit2(tree, "text", (node, index, parent) => {
2682
+ if (!parent || typeof index !== "number") return;
2683
+ const text = node.value;
2684
+ if (!text || !text.includes("@")) return;
2685
+ const parts = [];
2686
+ let lastIndex = 0;
2687
+ MENTION_REGEX.lastIndex = 0;
2688
+ let match2;
2689
+ while ((match2 = MENTION_REGEX.exec(text)) !== null) {
2690
+ const lead = match2[1];
2691
+ const marker = match2[2];
2692
+ const id = match2[3];
2693
+ const tokenStart = match2.index + lead.length;
2694
+ if (tokenStart > lastIndex) {
2695
+ parts.push({ type: "text", value: text.slice(lastIndex, tokenStart) });
2696
+ }
2697
+ parts.push({
2698
+ type: "link",
2699
+ url: `mention://${marker}:${id}`,
2700
+ // Keep the raw token as the visible children so an unresolved mention
2701
+ // (no matching context item) falls back to the literal text.
2702
+ children: [{ type: "text", value: `@${marker}:${id}` }]
2703
+ });
2704
+ lastIndex = match2.index + match2[0].length;
2705
+ }
2706
+ if (lastIndex === 0) return;
2707
+ if (lastIndex < text.length) {
2708
+ parts.push({ type: "text", value: text.slice(lastIndex) });
2709
+ }
2710
+ parent.children.splice(index, 1, ...parts);
2711
+ return [SKIP2, index + parts.length];
2712
+ });
2713
+ };
2714
+ };
2715
+
2675
2716
  // src/components/chat/entity-cards/block-card.tsx
2676
2717
  function BlockCard(_props) {
2677
2718
  return null;
@@ -3046,7 +3087,8 @@ function ChatContextChipStrip({
3046
3087
  }
3047
3088
 
3048
3089
  // src/components/chat/chat-message-enhanced.tsx
3049
- import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
3090
+ import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
3091
+ var MENTION_MARKER_REGEX = /(^|\s)@[a-z]+:([A-Za-z0-9_.+/=-]+)/g;
3050
3092
  var CARD_MARKER_REGEX = /\[card:\/\/([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)[\])]/g;
3051
3093
  function normalizeContent(content) {
3052
3094
  if (typeof content === "string") {
@@ -3055,16 +3097,33 @@ function normalizeContent(content) {
3055
3097
  return content;
3056
3098
  }
3057
3099
  var ChatMessageEnhanced = forwardRef11(
3058
- ({ className, role, content, name, avatar, isTyping = false, timestamp, showAvatar = true, assistantType, authorType: authorTypeProp, assistantIcon, chatRefs, contextItems, resolveContextIcon, renderEntityCard, NavLinkAnchor, ...props }, ref) => {
3100
+ ({ className, role, content, name, avatar, isTyping = false, timestamp, showAvatar = true, assistantType, authorType: authorTypeProp, assistantIcon, chatRefs, contextItems, resolveContextIcon, renderMention, renderEntityCard, NavLinkAnchor, ...props }, ref) => {
3059
3101
  const isUser = role === "user";
3060
3102
  const isError = role === "error";
3061
3103
  const authorType = authorTypeProp ?? (isUser ? "user" : assistantType === "mingo" ? "mingo" : "fae");
3062
3104
  const hasMarkerSupport = !!chatRefs || !!renderEntityCard;
3105
+ const segments = useMemo4(() => normalizeContent(content), [content]);
3106
+ const hasMentionSupport = !!renderMention;
3107
+ const inlineMentionIds = useMemo4(() => {
3108
+ const ids = /* @__PURE__ */ new Set();
3109
+ if (!hasMentionSupport) return ids;
3110
+ for (const seg of segments) {
3111
+ if (seg.type !== "text" || !seg.text || !seg.text.includes("@")) continue;
3112
+ for (const mm of seg.text.matchAll(MENTION_MARKER_REGEX)) ids.add(mm[2]);
3113
+ }
3114
+ return ids;
3115
+ }, [hasMentionSupport, segments]);
3116
+ const stripContextItems = useMemo4(
3117
+ () => inlineMentionIds.size > 0 && contextItems ? contextItems.filter((it) => !inlineMentionIds.has(it.id)) : contextItems,
3118
+ [contextItems, inlineMentionIds]
3119
+ );
3063
3120
  const cardRemarkPlugins = useMemo4(
3064
- () => hasMarkerSupport ? [remarkCardLinks] : [],
3065
- [hasMarkerSupport]
3121
+ () => [
3122
+ ...hasMarkerSupport ? [remarkCardLinks] : [],
3123
+ ...hasMentionSupport ? [remarkMentionChips] : []
3124
+ ],
3125
+ [hasMarkerSupport, hasMentionSupport]
3066
3126
  );
3067
- const segments = useMemo4(() => normalizeContent(content), [content]);
3068
3127
  const renderedCardNodeCache = useRef3(
3069
3128
  /* @__PURE__ */ new Map()
3070
3129
  );
@@ -3140,7 +3199,7 @@ var ChatMessageEnhanced = forwardRef11(
3140
3199
  return { inlineByKey, partsBySegment };
3141
3200
  }, [hasMarkerSupport, chatRefs, renderEntityCard, segments]);
3142
3201
  const cardComponentOverrides = useMemo4(() => {
3143
- if (!hasMarkerSupport) return void 0;
3202
+ if (!hasMarkerSupport && !hasMentionSupport) return void 0;
3144
3203
  const refs = chatRefs ?? {};
3145
3204
  const inlineByKey = renderingPlan?.inlineByKey;
3146
3205
  return {
@@ -3150,6 +3209,15 @@ var ChatMessageEnhanced = forwardRef11(
3150
3209
  // paragraph as siblings — the inline pill stays at the marker
3151
3210
  // position. Other href schemes pass through unchanged.
3152
3211
  a: ({ href, children, className: linkClassName, ...rest }) => {
3212
+ if (typeof href === "string" && href.startsWith("mention://")) {
3213
+ const stripped = href.slice("mention://".length);
3214
+ const sepIdx = stripped.indexOf(":");
3215
+ const marker = sepIdx === -1 ? stripped : stripped.slice(0, sepIdx);
3216
+ const id = sepIdx === -1 ? "" : stripped.slice(sepIdx + 1);
3217
+ const node = renderMention?.({ marker, id });
3218
+ if (node != null) return /* @__PURE__ */ jsx21(Fragment4, { children: node });
3219
+ return /* @__PURE__ */ jsx21("span", { className: "text-ods-text-secondary opacity-60", children });
3220
+ }
3153
3221
  if (typeof href === "string" && href.startsWith("card://")) {
3154
3222
  const stripped = href.slice("card://".length);
3155
3223
  const sepIdx = stripped.lastIndexOf(":");
@@ -3172,7 +3240,7 @@ var ChatMessageEnhanced = forwardRef11(
3172
3240
  return /* @__PURE__ */ jsx21("a", { href, className: linkClassName, ...rest, children });
3173
3241
  }
3174
3242
  };
3175
- }, [hasMarkerSupport, chatRefs, renderingPlan, NavLinkAnchor]);
3243
+ }, [hasMarkerSupport, hasMentionSupport, renderMention, chatRefs, renderingPlan, NavLinkAnchor]);
3176
3244
  const getAvatarProps = () => {
3177
3245
  const displayName = name || (isUser ? "User" : assistantType === "mingo" ? "Mingo" : "Fae");
3178
3246
  const isMingo = assistantType === "mingo";
@@ -3317,10 +3385,10 @@ var ChatMessageEnhanced = forwardRef11(
3317
3385
  }
3318
3386
  return null;
3319
3387
  }) }),
3320
- contextItems && contextItems.length > 0 && /* @__PURE__ */ jsx21(
3388
+ stripContextItems && stripContextItems.length > 0 && /* @__PURE__ */ jsx21(
3321
3389
  ChatContextChipStrip,
3322
3390
  {
3323
- items: contextItems,
3391
+ items: stripContextItems,
3324
3392
  resolveIcon: resolveContextIcon,
3325
3393
  className: "mt-2"
3326
3394
  }
@@ -3338,7 +3406,9 @@ var MemoizedChatMessageEnhanced = memo(ChatMessageEnhanced, (prevProps, nextProp
3338
3406
  // refs object would force a full markdown re-render every keystroke.
3339
3407
  prevProps.chatRefs === nextProps.chatRefs && // Reference equality — the host re-uses the same array instance per
3340
3408
  // message (it's set once on the optimistic send and never mutated).
3341
- prevProps.contextItems === nextProps.contextItems && prevProps.resolveContextIcon === nextProps.resolveContextIcon && prevProps.renderEntityCard === nextProps.renderEntityCard && prevProps.NavLinkAnchor === nextProps.NavLinkAnchor;
3409
+ prevProps.contextItems === nextProps.contextItems && prevProps.resolveContextIcon === nextProps.resolveContextIcon && // Host keeps this stable (module const / useCallback), so reference
3410
+ // equality holds across streaming chunks.
3411
+ prevProps.renderMention === nextProps.renderMention && prevProps.renderEntityCard === nextProps.renderEntityCard && prevProps.NavLinkAnchor === nextProps.NavLinkAnchor;
3342
3412
  });
3343
3413
  MemoizedChatMessageEnhanced.displayName = "MemoizedChatMessageEnhanced";
3344
3414
 
@@ -3541,6 +3611,7 @@ var ChatMessageList = forwardRef12(
3541
3611
  onLoadMore,
3542
3612
  renderEntityCard,
3543
3613
  resolveContextIcon,
3614
+ renderMention,
3544
3615
  NavLinkAnchor,
3545
3616
  ...props
3546
3617
  }, ref) => {
@@ -3766,6 +3837,7 @@ var ChatMessageList = forwardRef12(
3766
3837
  chatRefs: message2.chatRefs,
3767
3838
  contextItems: message2.contextItems,
3768
3839
  resolveContextIcon,
3840
+ renderMention,
3769
3841
  renderEntityCard,
3770
3842
  NavLinkAnchor
3771
3843
  },
@@ -4545,7 +4617,7 @@ function MingoChatHistory({
4545
4617
 
4546
4618
  // src/components/chat/mingo-welcome.tsx
4547
4619
  init_button2();
4548
- import { Fragment as Fragment4, jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
4620
+ import { Fragment as Fragment5, jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
4549
4621
  var DEFAULT_SUBTITLE = "Ready to help with your technical tasks. What can I do for you?";
4550
4622
  var DEFAULT_FEATURE_CARDS = [
4551
4623
  {
@@ -4659,7 +4731,7 @@ function MingoWelcome({
4659
4731
  children: "Try again"
4660
4732
  }
4661
4733
  )
4662
- ] }) : isLoadingHistory ? /* @__PURE__ */ jsx32(MingoChatHistorySkeleton, {}) : /* @__PURE__ */ jsx32(Fragment4, { children: /* @__PURE__ */ jsxs28("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
4734
+ ] }) : isLoadingHistory ? /* @__PURE__ */ jsx32(MingoChatHistorySkeleton, {}) : /* @__PURE__ */ jsx32(Fragment5, { children: /* @__PURE__ */ jsxs28("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
4663
4735
  /* @__PURE__ */ jsxs28(
4664
4736
  "div",
4665
4737
  {
@@ -5102,7 +5174,7 @@ var ModalFooter = React13.forwardRef(
5102
5174
  ModalFooter.displayName = "ModalV2Footer";
5103
5175
 
5104
5176
  // src/components/chat/mingo-chat-modals.tsx
5105
- import { Fragment as Fragment5, jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
5177
+ import { Fragment as Fragment6, jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
5106
5178
  var footerBtn = "flex-1 min-w-0 rounded-md px-[var(--spacing-system-m)] py-[var(--spacing-system-sf)] text-h3 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent disabled:opacity-50 disabled:cursor-not-allowed";
5107
5179
  var cancelBtn = cn(
5108
5180
  footerBtn,
@@ -5193,7 +5265,7 @@ function ChatDialogModals({
5193
5265
  setRestoreTarget,
5194
5266
  onConfirmRestore
5195
5267
  }) {
5196
- return /* @__PURE__ */ jsxs32(Fragment5, { children: [
5268
+ return /* @__PURE__ */ jsxs32(Fragment6, { children: [
5197
5269
  /* @__PURE__ */ jsx37(
5198
5270
  RenameChatModal,
5199
5271
  {
@@ -5302,7 +5374,7 @@ function ChatPanelHeaderMobile({
5302
5374
  }
5303
5375
 
5304
5376
  // src/components/chat/chat-panel-header.tsx
5305
- import { Fragment as Fragment6, jsx as jsx40, jsxs as jsxs34 } from "react/jsx-runtime";
5377
+ import { Fragment as Fragment7, jsx as jsx40, jsxs as jsxs34 } from "react/jsx-runtime";
5306
5378
  var COMPACT_HEADER_BUTTON = "inline-flex shrink-0 items-center justify-center size-8 rounded-md text-ods-text-secondary transition-colors hover:bg-ods-bg-hover hover:text-ods-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent";
5307
5379
  function ChatPanelHeader({
5308
5380
  showBack = false,
@@ -5320,7 +5392,7 @@ function ChatPanelHeader({
5320
5392
  onRename && { id: "rename", label: "Rename chat", onClick: onRename },
5321
5393
  onArchive && { id: "archive", label: "Archive chat", onClick: onArchive }
5322
5394
  ].filter(Boolean);
5323
- return /* @__PURE__ */ jsxs34(Fragment6, { children: [
5395
+ return /* @__PURE__ */ jsxs34(Fragment7, { children: [
5324
5396
  /* @__PURE__ */ jsx40(
5325
5397
  ChatPanelHeaderMobile,
5326
5398
  {
@@ -5338,7 +5410,7 @@ function ChatPanelHeader({
5338
5410
  }
5339
5411
  ),
5340
5412
  /* @__PURE__ */ jsxs34("div", { className: "hidden md:flex flex-shrink-0 h-14 w-full overflow-hidden border-b border-ods-border bg-ods-card", children: [
5341
- /* @__PURE__ */ jsx40("div", { className: "flex flex-1 min-w-0 items-center gap-2 px-4 py-3", children: showBack ? /* @__PURE__ */ jsxs34(Fragment6, { children: [
5413
+ /* @__PURE__ */ jsx40("div", { className: "flex flex-1 min-w-0 items-center gap-2 px-4 py-3", children: showBack ? /* @__PURE__ */ jsxs34(Fragment7, { children: [
5342
5414
  /* @__PURE__ */ jsx40(
5343
5415
  "button",
5344
5416
  {
@@ -5374,7 +5446,7 @@ import * as React18 from "react";
5374
5446
  import { useEffect as useEffect10, useRef as useRef9, useState as useState17 } from "react";
5375
5447
  init_button2();
5376
5448
  init_cn();
5377
- import { Fragment as Fragment7, jsx as jsx41, jsxs as jsxs35 } from "react/jsx-runtime";
5449
+ import { Fragment as Fragment8, jsx as jsx41, jsxs as jsxs35 } from "react/jsx-runtime";
5378
5450
  var CHAT_ATTACHMENT_MIME_TYPES = [
5379
5451
  "image/jpeg",
5380
5452
  "image/png",
@@ -5407,7 +5479,7 @@ function ChatAttachmentAddButton({
5407
5479
  if (!canAddMore) return;
5408
5480
  fileInputRef.current?.click();
5409
5481
  };
5410
- return /* @__PURE__ */ jsxs35(Fragment7, { children: [
5482
+ return /* @__PURE__ */ jsxs35(Fragment8, { children: [
5411
5483
  /* @__PURE__ */ jsx41(
5412
5484
  "input",
5413
5485
  {
@@ -5869,7 +5941,7 @@ function ChatComposer({
5869
5941
  }
5870
5942
 
5871
5943
  // src/components/chat/chat-archive-page.tsx
5872
- import { Fragment as Fragment8, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
5944
+ import { Fragment as Fragment9, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
5873
5945
  function ChatArchivePage({
5874
5946
  dialogs,
5875
5947
  onSelectDialog,
@@ -5879,7 +5951,7 @@ function ChatArchivePage({
5879
5951
  hasMore = false,
5880
5952
  onLoadMore
5881
5953
  }) {
5882
- return /* @__PURE__ */ jsxs38(Fragment8, { children: [
5954
+ return /* @__PURE__ */ jsxs38(Fragment9, { children: [
5883
5955
  /* @__PURE__ */ jsx45(
5884
5956
  ChatPanelHeaderMobile,
5885
5957
  {
@@ -6011,7 +6083,7 @@ var ChatSidebarSkeleton = React19.forwardRef(
6011
6083
  ChatSidebarSkeleton.displayName = "ChatSidebarSkeleton";
6012
6084
 
6013
6085
  // src/components/chat/chat-sidebar.tsx
6014
- import { Fragment as Fragment9, jsx as jsx47, jsxs as jsxs40 } from "react/jsx-runtime";
6086
+ import { Fragment as Fragment10, jsx as jsx47, jsxs as jsxs40 } from "react/jsx-runtime";
6015
6087
  var DialogListItem = forwardRef21(
6016
6088
  ({ className, dialog, isActive, onDialogSelect, onClick, ...props }, ref) => {
6017
6089
  const handleClick = (e) => {
@@ -6140,7 +6212,7 @@ var ChatSidebar = forwardRef21(
6140
6212
  },
6141
6213
  dialog.id
6142
6214
  )),
6143
- hasNextPage && /* @__PURE__ */ jsx47("div", { ref: loadMoreRef, children: isFetchingNextPage && /* @__PURE__ */ jsxs40(Fragment9, { children: [
6215
+ hasNextPage && /* @__PURE__ */ jsx47("div", { ref: loadMoreRef, children: isFetchingNextPage && /* @__PURE__ */ jsxs40(Fragment10, { children: [
6144
6216
  /* @__PURE__ */ jsx47(DialogListItemSkeleton, {}),
6145
6217
  /* @__PURE__ */ jsx47(DialogListItemSkeleton, {}),
6146
6218
  /* @__PURE__ */ jsx47(DialogListItemSkeleton, {})
@@ -6515,7 +6587,7 @@ function PlatformBadge({
6515
6587
  }
6516
6588
 
6517
6589
  // src/components/chat/entity-cards/admin-content-card.tsx
6518
- import { Fragment as Fragment10, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
6590
+ import { Fragment as Fragment11, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
6519
6591
  function AdminContentCard({
6520
6592
  imageUrl,
6521
6593
  placeholderUrl,
@@ -6549,7 +6621,7 @@ function AdminContentCard({
6549
6621
  {
6550
6622
  className: "relative aspect-[3/2] w-full overflow-hidden shrink-0",
6551
6623
  style: { backgroundColor: imageBgColor },
6552
- children: displayUrl ? /* @__PURE__ */ jsxs43(Fragment10, { children: [
6624
+ children: displayUrl ? /* @__PURE__ */ jsxs43(Fragment11, { children: [
6553
6625
  !imageLoaded && /* @__PURE__ */ jsx53("div", { className: "absolute inset-0 animate-pulse bg-ods-border/20" }),
6554
6626
  /* @__PURE__ */ jsx53(
6555
6627
  next_image_default,
@@ -6609,7 +6681,7 @@ function getProxiedImageUrl2(imageUrl) {
6609
6681
  }
6610
6682
 
6611
6683
  // src/components/chat/entity-cards/what-i-shipped-card.tsx
6612
- import { Fragment as Fragment11, jsx as jsx54, jsxs as jsxs44 } from "react/jsx-runtime";
6684
+ import { Fragment as Fragment12, jsx as jsx54, jsxs as jsxs44 } from "react/jsx-runtime";
6613
6685
  var STATUS_BADGE_CLASS = {
6614
6686
  published: "bg-ods-success-secondary text-ods-success",
6615
6687
  draft: "bg-ods-warning-secondary text-ods-warning",
@@ -6631,7 +6703,7 @@ function WhatIShippedCard({ entry, placeholderUrl, actions, anchorProps, classNa
6631
6703
  children: entry.status
6632
6704
  }
6633
6705
  ) : null,
6634
- meta: /* @__PURE__ */ jsxs44(Fragment11, { children: [
6706
+ meta: /* @__PURE__ */ jsxs44(Fragment12, { children: [
6635
6707
  /* @__PURE__ */ jsxs44("span", { className: "flex items-center gap-2 min-w-0", children: [
6636
6708
  entry.author?.avatar_url ? /* @__PURE__ */ jsx54("img", { src: getProxiedImageUrl2(entry.author.avatar_url) ?? entry.author.avatar_url, alt: "", className: "h-5 w-5 rounded-full object-cover shrink-0" }) : null,
6637
6709
  /* @__PURE__ */ jsx54("span", { className: "truncate", children: entry.author?.full_name ?? "" })
@@ -6775,7 +6847,7 @@ import {
6775
6847
  TrendingUp,
6776
6848
  Wrench
6777
6849
  } from "lucide-react";
6778
- import { Fragment as Fragment12, jsx as jsx57, jsxs as jsxs45 } from "react/jsx-runtime";
6850
+ import { Fragment as Fragment13, jsx as jsx57, jsxs as jsxs45 } from "react/jsx-runtime";
6779
6851
  function ProductReleaseCard({
6780
6852
  title,
6781
6853
  summary,
@@ -6826,7 +6898,7 @@ function ProductReleaseCard({
6826
6898
  "no-underline",
6827
6899
  className
6828
6900
  );
6829
- const innerLayout = /* @__PURE__ */ jsxs45(Fragment12, { children: [
6901
+ const innerLayout = /* @__PURE__ */ jsxs45(Fragment13, { children: [
6830
6902
  /* @__PURE__ */ jsxs45("div", { className: "flex flex-col md:flex-row gap-4 md:gap-6", children: [
6831
6903
  /* @__PURE__ */ jsx57("div", { className: "w-full md:w-[256px] flex-shrink-0", children: /* @__PURE__ */ jsxs45("div", { className: "relative rounded-lg overflow-hidden w-full aspect-[1200/630] bg-ods-bg", children: [
6832
6904
  coverImage ? /* @__PURE__ */ jsx57(
@@ -6851,7 +6923,7 @@ function ProductReleaseCard({
6851
6923
  /* @__PURE__ */ jsx57("div", { className: "min-h-[68px] md:min-h-[78px]", children: /* @__PURE__ */ jsx57("p", { className: "font-['DM_Sans'] text-sm md:text-base text-ods-text-secondary leading-relaxed line-clamp-3", children: summary ?? "" }) })
6852
6924
  ] })
6853
6925
  ] }),
6854
- /* @__PURE__ */ jsx57("div", { className: "border-t border-ods-border pt-3 flex flex-wrap items-center gap-x-4 gap-y-1.5 font-['DM_Sans'] text-sm text-ods-text-secondary", children: totalChangelog > 0 && changelogCounts ? /* @__PURE__ */ jsxs45(Fragment12, { children: [
6926
+ /* @__PURE__ */ jsx57("div", { className: "border-t border-ods-border pt-3 flex flex-wrap items-center gap-x-4 gap-y-1.5 font-['DM_Sans'] text-sm text-ods-text-secondary", children: totalChangelog > 0 && changelogCounts ? /* @__PURE__ */ jsxs45(Fragment13, { children: [
6855
6927
  changelogCounts.features > 0 && /* @__PURE__ */ jsxs45("span", { className: "inline-flex items-center gap-1.5", children: [
6856
6928
  /* @__PURE__ */ jsx57(Sparkles, { className: "w-3.5 h-3.5" }),
6857
6929
  changelogCounts.features,
@@ -6984,7 +7056,7 @@ function ProductReleaseCard({
6984
7056
  isInteractive ? "transition-colors hover:border-ods-text-secondary/40 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-1 focus-visible:ring-offset-ods-card" : "cursor-default",
6985
7057
  className
6986
7058
  );
6987
- const innerChildren = /* @__PURE__ */ jsxs45(Fragment12, { children: [
7059
+ const innerChildren = /* @__PURE__ */ jsxs45(Fragment13, { children: [
6988
7060
  /* @__PURE__ */ jsxs45("span", { className: "relative flex h-14 w-14 aspect-square shrink-0 self-start items-center justify-center overflow-hidden rounded-md bg-ods-bg text-ods-accent", children: [
6989
7061
  coverImage ? /* @__PURE__ */ jsx57(
6990
7062
  next_image_default,
@@ -7161,7 +7233,7 @@ function buildProductReleaseCardProps(item) {
7161
7233
  import { useState as useState19 } from "react";
7162
7234
  import { Eye as Eye2 } from "lucide-react";
7163
7235
  init_cn();
7164
- import { Fragment as Fragment13, jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
7236
+ import { Fragment as Fragment14, jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
7165
7237
  function BlogCardSkeleton({ size = "default" }) {
7166
7238
  if (size === "sm") {
7167
7239
  return /* @__PURE__ */ jsxs47("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -7333,7 +7405,7 @@ function BlogCard({
7333
7405
  ) : null,
7334
7406
  /* @__PURE__ */ jsxs47("span", { className: "truncate", children: [
7335
7407
  post.author_name || "Anonymous",
7336
- dateStr ? /* @__PURE__ */ jsxs47(Fragment13, { children: [
7408
+ dateStr ? /* @__PURE__ */ jsxs47(Fragment14, { children: [
7337
7409
  " \xB7 ",
7338
7410
  dateStr
7339
7411
  ] }) : null
@@ -7488,7 +7560,7 @@ function CaseStudyCard({
7488
7560
  // src/components/chat/entity-cards/customer-interview-card.tsx
7489
7561
  init_cn();
7490
7562
  import { Video } from "lucide-react";
7491
- import { Fragment as Fragment14, jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
7563
+ import { Fragment as Fragment15, jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
7492
7564
  var hideOnError2 = (e) => {
7493
7565
  ;
7494
7566
  e.currentTarget.style.display = "none";
@@ -7568,7 +7640,7 @@ function CustomerInterviewCard({
7568
7640
  ] });
7569
7641
  }
7570
7642
  return /* @__PURE__ */ jsx61("a", { href, target, rel, className: cn("block h-full", className), children: /* @__PURE__ */ jsxs49(Card, { className: "bg-ods-card border border-ods-border hover:border-ods-accent transition-colors p-6 flex flex-col gap-6 overflow-hidden", children: [
7571
- /* @__PURE__ */ jsx61("div", { className: "w-full aspect-[1200/630] rounded-sm overflow-hidden bg-ods-bg shrink-0 relative", children: thumbnailUrl ? /* @__PURE__ */ jsxs49(Fragment14, { children: [
7643
+ /* @__PURE__ */ jsx61("div", { className: "w-full aspect-[1200/630] rounded-sm overflow-hidden bg-ods-bg shrink-0 relative", children: thumbnailUrl ? /* @__PURE__ */ jsxs49(Fragment15, { children: [
7572
7644
  /* @__PURE__ */ jsx61(
7573
7645
  "img",
7574
7646
  {
@@ -7938,7 +8010,7 @@ import * as PopoverPrimitive from "@radix-ui/react-popover";
7938
8010
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
7939
8011
  init_cn();
7940
8012
  import { Loader2 } from "lucide-react";
7941
- import { Fragment as Fragment15, jsx as jsx66, jsxs as jsxs52 } from "react/jsx-runtime";
8013
+ import { Fragment as Fragment16, jsx as jsx66, jsxs as jsxs52 } from "react/jsx-runtime";
7942
8014
  var innerInputStyles = cn(
7943
8015
  "flex-1 min-w-[60px] bg-transparent border-none outline-none",
7944
8016
  "text-h4",
@@ -8374,7 +8446,7 @@ function AutocompleteInner(props, ref) {
8374
8446
  }
8375
8447
  }
8376
8448
  ),
8377
- multiple && /* @__PURE__ */ jsxs52(Fragment15, { children: [
8449
+ multiple && /* @__PURE__ */ jsxs52(Fragment16, { children: [
8378
8450
  /* @__PURE__ */ jsx66(
8379
8451
  "span",
8380
8452
  {
@@ -11738,7 +11810,7 @@ function TabContent({
11738
11810
  init_next_navigation();
11739
11811
  init_cn();
11740
11812
  import { useState as useState29, useEffect as useEffect19, useMemo as useMemo11, useRef as useRef16, useCallback as useCallback12 } from "react";
11741
- import { Fragment as Fragment16, jsx as jsx97, jsxs as jsxs78 } from "react/jsx-runtime";
11813
+ import { Fragment as Fragment17, jsx as jsx97, jsxs as jsxs78 } from "react/jsx-runtime";
11742
11814
  function TabNavigation({
11743
11815
  activeTab: controlledActiveTab,
11744
11816
  onTabChange: controlledOnTabChange,
@@ -11825,7 +11897,7 @@ function TabNavigation({
11825
11897
  }
11826
11898
  return { background: c };
11827
11899
  })();
11828
- return /* @__PURE__ */ jsxs78(Fragment16, { children: [
11900
+ return /* @__PURE__ */ jsxs78(Fragment17, { children: [
11829
11901
  /* @__PURE__ */ jsxs78("div", { className: cn("relative w-full", className), children: [
11830
11902
  /* @__PURE__ */ jsx97("div", { ref: scrollRef, className: "flex gap-[var(--spacing-system-xxs)] items-center justify-start h-full overflow-x-auto overflow-y-hidden", children: tabs.map((tab) => {
11831
11903
  const isActive = activeTab === tab.id;
@@ -12101,7 +12173,7 @@ function StatusIndicator({ status, label, href }) {
12101
12173
 
12102
12174
  // src/components/ui/hover-dropdown.tsx
12103
12175
  import { useState as useState31, useRef as useRef18, useCallback as useCallback13 } from "react";
12104
- import { Fragment as Fragment17, jsx as jsx102, jsxs as jsxs81 } from "react/jsx-runtime";
12176
+ import { Fragment as Fragment18, jsx as jsx102, jsxs as jsxs81 } from "react/jsx-runtime";
12105
12177
  function DefaultAnchor({
12106
12178
  href,
12107
12179
  className,
@@ -12127,7 +12199,7 @@ function HoverDropdown({
12127
12199
  const hide = useCallback13(() => {
12128
12200
  timeoutRef.current = setTimeout(() => setOpen(false), hideDelay);
12129
12201
  }, [hideDelay]);
12130
- if (items.length === 0) return /* @__PURE__ */ jsx102(Fragment17, { children });
12202
+ if (items.length === 0) return /* @__PURE__ */ jsx102(Fragment18, { children });
12131
12203
  const toggle = useCallback13((e) => {
12132
12204
  e.stopPropagation();
12133
12205
  clearTimeout(timeoutRef.current);
@@ -12174,7 +12246,7 @@ function HoverDropdown({
12174
12246
  }
12175
12247
  },
12176
12248
  children: items.map((item, i) => {
12177
- const content = /* @__PURE__ */ jsxs81(Fragment17, { children: [
12249
+ const content = /* @__PURE__ */ jsxs81(Fragment18, { children: [
12178
12250
  item.icon && /* @__PURE__ */ jsx102("span", { className: "flex-shrink-0 [&_svg]:size-3.5", children: item.icon }),
12179
12251
  /* @__PURE__ */ jsx102("span", { className: "truncate flex-1 min-w-0", children: item.label })
12180
12252
  ] });
@@ -12405,7 +12477,7 @@ function TagKeyValueFilter({
12405
12477
  }
12406
12478
 
12407
12479
  // src/components/ui/filter-modal.tsx
12408
- import { Fragment as Fragment18, jsx as jsx106, jsxs as jsxs85 } from "react/jsx-runtime";
12480
+ import { Fragment as Fragment19, jsx as jsx106, jsxs as jsxs85 } from "react/jsx-runtime";
12409
12481
  function FilterModal({
12410
12482
  isOpen,
12411
12483
  onClose,
@@ -12481,7 +12553,7 @@ function FilterModal({
12481
12553
  "flex-1 min-h-0 flex flex-col",
12482
12554
  !isEmpty && "md:bg-ods-bg md:border md:border-ods-border md:rounded-md md:px-3"
12483
12555
  ),
12484
- children: /* @__PURE__ */ jsx106("div", { className: "flex-1 min-h-0 overflow-y-auto flex flex-col gap-4 md:py-3", children: isLoading ? /* @__PURE__ */ jsx106(Fragment18, { children: [0, 1].map((group) => /* @__PURE__ */ jsxs85("div", { className: "flex flex-col gap-1", children: [
12556
+ children: /* @__PURE__ */ jsx106("div", { className: "flex-1 min-h-0 overflow-y-auto flex flex-col gap-4 md:py-3", children: isLoading ? /* @__PURE__ */ jsx106(Fragment19, { children: [0, 1].map((group) => /* @__PURE__ */ jsxs85("div", { className: "flex flex-col gap-1", children: [
12485
12557
  /* @__PURE__ */ jsx106(Skeleton, { className: "h-5 w-24" }),
12486
12558
  /* @__PURE__ */ jsx106("div", { className: "rounded-md border border-ods-border overflow-hidden", children: [0, 1, 2].map((row) => /* @__PURE__ */ jsxs85(
12487
12559
  "div",
@@ -12501,7 +12573,7 @@ function FilterModal({
12501
12573
  /* @__PURE__ */ jsx106("p", { className: "text-h4", children: emptyStateTitle }),
12502
12574
  /* @__PURE__ */ jsx106("p", { className: "text-h6", children: emptyStateDescription })
12503
12575
  ] })
12504
- ] }) : /* @__PURE__ */ jsxs85(Fragment18, { children: [
12576
+ ] }) : /* @__PURE__ */ jsxs85(Fragment19, { children: [
12505
12577
  sortConfig && sortConfig.columns.length > 0 && /* @__PURE__ */ jsxs85("div", { className: "flex flex-col gap-1", children: [
12506
12578
  /* @__PURE__ */ jsx106("span", { className: "text-h5 text-ods-text-secondary", children: sortConfig.title || "Sort By" }),
12507
12579
  /* @__PURE__ */ jsx106("div", { className: "rounded-md border border-ods-border overflow-hidden", children: sortConfig.columns.map((column) => /* @__PURE__ */ jsx106(
@@ -13276,7 +13348,7 @@ import {
13276
13348
  safePolygon,
13277
13349
  arrow
13278
13350
  } from "@floating-ui/react";
13279
- import { Fragment as Fragment19, jsx as jsx118, jsxs as jsxs93 } from "react/jsx-runtime";
13351
+ import { Fragment as Fragment20, jsx as jsx118, jsxs as jsxs93 } from "react/jsx-runtime";
13280
13352
  function parseColoredText(text) {
13281
13353
  if (typeof text !== "string") return text;
13282
13354
  const parts = [];
@@ -13301,7 +13373,7 @@ function parseColoredText(text) {
13301
13373
  const remainingText = text.slice(lastIndex);
13302
13374
  parts.push(/* @__PURE__ */ jsx118("span", { children: remainingText }, `text-${keyIndex++}`));
13303
13375
  }
13304
- return parts.length > 0 ? /* @__PURE__ */ jsx118(Fragment19, { children: parts }) : text;
13376
+ return parts.length > 0 ? /* @__PURE__ */ jsx118(Fragment20, { children: parts }) : text;
13305
13377
  }
13306
13378
  function FloatingTooltip({
13307
13379
  content,
@@ -13355,7 +13427,7 @@ function FloatingTooltip({
13355
13427
  bottom: "top",
13356
13428
  left: "right"
13357
13429
  }[placement.split("-")[0]];
13358
- return /* @__PURE__ */ jsxs93(Fragment19, { children: [
13430
+ return /* @__PURE__ */ jsxs93(Fragment20, { children: [
13359
13431
  /* @__PURE__ */ jsx118("div", { ref: refs.setReference, ...getReferenceProps(), children }),
13360
13432
  /* @__PURE__ */ jsx118(FloatingPortal, { children: isOpen && /* @__PURE__ */ jsxs93(
13361
13433
  "div",
@@ -13406,7 +13478,7 @@ function FloatingTooltip({
13406
13478
  }
13407
13479
 
13408
13480
  // src/components/ui/dashboard-info-card.tsx
13409
- import { Fragment as Fragment20, jsx as jsx119, jsxs as jsxs94 } from "react/jsx-runtime";
13481
+ import { Fragment as Fragment21, jsx as jsx119, jsxs as jsxs94 } from "react/jsx-runtime";
13410
13482
  function DashboardInfoCard({
13411
13483
  title,
13412
13484
  titleSlot,
@@ -13421,7 +13493,7 @@ function DashboardInfoCard({
13421
13493
  valueClassName
13422
13494
  }) {
13423
13495
  const formattedValue = typeof value === "number" ? value.toLocaleString() : value;
13424
- const cardContent = /* @__PURE__ */ jsxs94(Fragment20, { children: [
13496
+ const cardContent = /* @__PURE__ */ jsxs94(Fragment21, { children: [
13425
13497
  /* @__PURE__ */ jsxs94("div", { className: "flex-1 flex flex-col", children: [
13426
13498
  titleSlot ?? /* @__PURE__ */ jsx119("p", { className: "text-h5 text-ods-text-secondary", children: title }),
13427
13499
  /* @__PURE__ */ jsxs94("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
@@ -13639,7 +13711,7 @@ function DeviceCard({
13639
13711
 
13640
13712
  // src/components/ui/device-card-compact.tsx
13641
13713
  init_cn();
13642
- import { Fragment as Fragment21, jsx as jsx122, jsxs as jsxs97 } from "react/jsx-runtime";
13714
+ import { Fragment as Fragment22, jsx as jsx122, jsxs as jsxs97 } from "react/jsx-runtime";
13643
13715
  function DeviceCardCompact({
13644
13716
  deviceName,
13645
13717
  organization,
@@ -13649,7 +13721,7 @@ function DeviceCardCompact({
13649
13721
  const hasName = deviceName && deviceName !== "-" && deviceName !== "null";
13650
13722
  const hasOrg = organization && organization !== "-" && organization !== "null";
13651
13723
  if (!hasName && !hasOrg) {
13652
- return /* @__PURE__ */ jsx122(Fragment21, {});
13724
+ return /* @__PURE__ */ jsx122(Fragment22, {});
13653
13725
  }
13654
13726
  return /* @__PURE__ */ jsxs97(
13655
13727
  "div",
@@ -14063,7 +14135,7 @@ function DropdownButton({
14063
14135
  init_next_link();
14064
14136
  init_cn();
14065
14137
  init_button2();
14066
- import { Fragment as Fragment22, jsx as jsx129, jsxs as jsxs102 } from "react/jsx-runtime";
14138
+ import { Fragment as Fragment23, jsx as jsx129, jsxs as jsxs102 } from "react/jsx-runtime";
14067
14139
  function MoreActionsMenu({
14068
14140
  items,
14069
14141
  align = "end",
@@ -14101,7 +14173,7 @@ function MoreActionsMenu({
14101
14173
  ),
14102
14174
  children: items.map((item, idx) => {
14103
14175
  const itemClassName = "flex items-center gap-2 px-4 py-3 bg-ods-bg hover:bg-ods-bg-hover focus:bg-ods-bg-hover border-b border-ods-border last:border-b-0 rounded-none cursor-pointer data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed";
14104
- const content = /* @__PURE__ */ jsxs102(Fragment22, { children: [
14176
+ const content = /* @__PURE__ */ jsxs102(Fragment23, { children: [
14105
14177
  item.icon && /* @__PURE__ */ jsx129("div", { className: cn(item.danger ? "text-ods-error" : "text-ods-text-secondary", "[&_svg]:size-6 [&_svg]:shrink-0"), children: item.icon }),
14106
14178
  /* @__PURE__ */ jsx129("span", { className: "font-medium text-[18px] leading-6 text-ods-text-primary", children: item.label })
14107
14179
  ] });
@@ -14841,7 +14913,7 @@ function CommandBox({
14841
14913
  const lineClampClass = maxLines > 0 ? lineClampClasses[maxLines] : void 0;
14842
14914
  return /* @__PURE__ */ jsxs108("div", { className: cn("flex flex-col gap-2", className), children: [
14843
14915
  title && /* @__PURE__ */ jsx139("div", { className: "text-ods-text-primary text-[18px] font-medium", children: title }),
14844
- /* @__PURE__ */ jsxs108("div", { className: "bg-ods-card border border-ods-border rounded-[6px] p-4", children: [
14916
+ /* @__PURE__ */ jsxs108("div", { className: "bg-ods-bg border border-ods-border rounded-[6px] p-4", children: [
14845
14917
  /* @__PURE__ */ jsx139(
14846
14918
  "div",
14847
14919
  {
@@ -16535,9 +16607,7 @@ var ParallaxImageShowcase = ({
16535
16607
  };
16536
16608
 
16537
16609
  // src/components/features/paths-display.tsx
16538
- init_button2();
16539
16610
  init_cn();
16540
- import { Copy } from "lucide-react";
16541
16611
  import { jsx as jsx150, jsxs as jsxs116 } from "react/jsx-runtime";
16542
16612
  function PathsDisplay({
16543
16613
  paths,
@@ -16546,28 +16616,28 @@ function PathsDisplay({
16546
16616
  description,
16547
16617
  className,
16548
16618
  showCopyButtons = true,
16549
- copyIconSize = "w-5 h-5"
16619
+ copyIconSize = "w-6 h-6"
16550
16620
  }) {
16551
16621
  if (!paths || paths.length === 0) {
16552
16622
  return null;
16553
16623
  }
16554
16624
  return /* @__PURE__ */ jsxs116("div", { className: cn("flex flex-col gap-3", className), children: [
16555
- title && /* @__PURE__ */ jsx150("div", { className: "text-ods-text-primary text-[16px] md:text-[18px]", children: title }),
16556
- description && /* @__PURE__ */ jsx150("div", { className: "text-ods-text-secondary text-[14px] md:text-[16px]", children: description }),
16625
+ title && /* @__PURE__ */ jsx150("div", { className: "text-h4 text-ods-text-primary", children: title }),
16626
+ description && /* @__PURE__ */ jsx150("div", { className: "text-h6 text-ods-text-secondary", children: description }),
16557
16627
  /* @__PURE__ */ jsx150("div", { className: "bg-ods-bg border border-ods-border rounded-[6px] overflow-hidden", children: paths.map((path) => /* @__PURE__ */ jsxs116(
16558
16628
  "div",
16559
16629
  {
16560
- className: "flex items-center justify-between p-4 border-b border-ods-border last:border-b-0",
16630
+ className: "flex items-center gap-4 p-4 border-b border-ods-border last:border-b-0",
16561
16631
  children: [
16562
- /* @__PURE__ */ jsx150("span", { className: "text-ods-text-primary font-medium text-[14px] md:text-[16px] font-mono break-all", children: path }),
16632
+ /* @__PURE__ */ jsx150("span", { className: "flex-1 min-w-0 text-h4 text-ods-text-primary truncate", children: path }),
16563
16633
  showCopyButtons && onCopyPath && /* @__PURE__ */ jsx150(
16564
- Button,
16634
+ "button",
16565
16635
  {
16566
- variant: "transparent",
16567
- size: "small-legacy",
16636
+ type: "button",
16568
16637
  onClick: () => onCopyPath(path),
16569
- className: "ml-4 shrink-0",
16570
- children: /* @__PURE__ */ jsx150(Copy, { className: copyIconSize })
16638
+ "aria-label": `Copy ${path}`,
16639
+ className: "shrink-0 rounded-md text-ods-text-secondary transition-colors hover:text-ods-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus",
16640
+ children: /* @__PURE__ */ jsx150(Copy02Icon, { className: copyIconSize })
16571
16641
  }
16572
16642
  )
16573
16643
  ]
@@ -17065,7 +17135,7 @@ SelectButton.displayName = "SelectButton";
17065
17135
  // src/components/features/seo-editor-preview.tsx
17066
17136
  import { useState as useState47 } from "react";
17067
17137
  import { Globe as Globe2, ExternalLink as ExternalLink3, Upload as Upload3, X as X6, Loader2 as Loader25, Sparkles as Sparkles2 } from "lucide-react";
17068
- import { Fragment as Fragment23, jsx as jsx155, jsxs as jsxs121 } from "react/jsx-runtime";
17138
+ import { Fragment as Fragment24, jsx as jsx155, jsxs as jsxs121 } from "react/jsx-runtime";
17069
17139
  function SEOEditorPreview({
17070
17140
  seoTitle,
17071
17141
  seoDescription,
@@ -17114,7 +17184,7 @@ function SEOEditorPreview({
17114
17184
  /* @__PURE__ */ jsxs121("div", { className: "space-y-2", children: [
17115
17185
  /* @__PURE__ */ jsxs121("div", { className: "flex items-center gap-2", children: [
17116
17186
  /* @__PURE__ */ jsx155(Label, { className: "font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary", children: "SEO Title" }),
17117
- aiConfidenceSeoTitle !== void 0 && /* @__PURE__ */ jsxs121(Fragment23, { children: [
17187
+ aiConfidenceSeoTitle !== void 0 && /* @__PURE__ */ jsxs121(Fragment24, { children: [
17118
17188
  /* @__PURE__ */ jsxs121(Badge, { variant: "secondary", className: "flex items-center gap-1", children: [
17119
17189
  /* @__PURE__ */ jsx155(Sparkles2, { className: "h-3 w-3" }),
17120
17190
  "AI Generated"
@@ -17145,7 +17215,7 @@ function SEOEditorPreview({
17145
17215
  /* @__PURE__ */ jsxs121("div", { className: "space-y-2", children: [
17146
17216
  /* @__PURE__ */ jsxs121("div", { className: "flex items-center gap-2", children: [
17147
17217
  /* @__PURE__ */ jsx155(Label, { className: "font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary", children: "SEO Keywords" }),
17148
- aiConfidenceSeoKeywords !== void 0 && /* @__PURE__ */ jsxs121(Fragment23, { children: [
17218
+ aiConfidenceSeoKeywords !== void 0 && /* @__PURE__ */ jsxs121(Fragment24, { children: [
17149
17219
  /* @__PURE__ */ jsxs121(Badge, { variant: "secondary", className: "flex items-center gap-1", children: [
17150
17220
  /* @__PURE__ */ jsx155(Sparkles2, { className: "h-3 w-3" }),
17151
17221
  "AI Generated"
@@ -17177,7 +17247,7 @@ function SEOEditorPreview({
17177
17247
  /* @__PURE__ */ jsxs121("div", { className: "space-y-2 flex flex-col h-full", children: [
17178
17248
  /* @__PURE__ */ jsxs121("div", { className: "flex items-center gap-2", children: [
17179
17249
  /* @__PURE__ */ jsx155(Label, { className: "font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary", children: "SEO Description" }),
17180
- aiConfidenceSeoDescription !== void 0 && /* @__PURE__ */ jsxs121(Fragment23, { children: [
17250
+ aiConfidenceSeoDescription !== void 0 && /* @__PURE__ */ jsxs121(Fragment24, { children: [
17181
17251
  /* @__PURE__ */ jsxs121(Badge, { variant: "secondary", className: "flex items-center gap-1", children: [
17182
17252
  /* @__PURE__ */ jsx155(Sparkles2, { className: "h-3 w-3" }),
17183
17253
  "AI Generated"
@@ -17251,7 +17321,7 @@ function SEOEditorPreview({
17251
17321
  {
17252
17322
  className: "h-full min-h-[280px] border-2 border-dashed border-ods-border rounded-lg flex flex-col items-center justify-center cursor-pointer hover:border-ods-accent transition-colors bg-ods-bg-hover",
17253
17323
  onClick: () => onOgImageUpload && fileInputRef?.click(),
17254
- children: isUploading ? /* @__PURE__ */ jsx155(Loader25, { className: "h-8 w-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs121(Fragment23, { children: [
17324
+ children: isUploading ? /* @__PURE__ */ jsx155(Loader25, { className: "h-8 w-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs121(Fragment24, { children: [
17255
17325
  /* @__PURE__ */ jsx155(Upload3, { className: "h-8 w-8 text-ods-text-secondary mb-2" }),
17256
17326
  /* @__PURE__ */ jsx155("span", { className: "text-sm text-ods-text-secondary font-['DM_Sans']", children: onOgImageUpload ? "Click to upload OG image" : "No image" })
17257
17327
  ] })
@@ -19407,7 +19477,7 @@ var DropdownMenuShortcut = ({
19407
19477
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
19408
19478
 
19409
19479
  // src/components/features/policy-configuration-panel.tsx
19410
- import { Fragment as Fragment24, jsx as jsx179, jsxs as jsxs140 } from "react/jsx-runtime";
19480
+ import { Fragment as Fragment25, jsx as jsx179, jsxs as jsxs140 } from "react/jsx-runtime";
19411
19481
  var approvalLevelOptions = [
19412
19482
  { value: "ALLOW", label: "Allow" },
19413
19483
  { value: "ASK_USER", label: "Ask User" },
@@ -19469,7 +19539,7 @@ var CategorySection = ({
19469
19539
  onPolicyPermissionChange
19470
19540
  }) => {
19471
19541
  const { contentRef, height } = useAnimatedHeight(category.isExpanded);
19472
- return /* @__PURE__ */ jsxs140(Fragment24, { children: [
19542
+ return /* @__PURE__ */ jsxs140(Fragment25, { children: [
19473
19543
  /* @__PURE__ */ jsxs140(
19474
19544
  "div",
19475
19545
  {
@@ -19712,7 +19782,7 @@ function CountryOption({ country }) {
19712
19782
  init_cn();
19713
19783
  import { getCountries } from "libphonenumber-js";
19714
19784
  import { useEffect as useEffect35, useState as useState53 } from "react";
19715
- import { Fragment as Fragment25, jsx as jsx181, jsxs as jsxs142 } from "react/jsx-runtime";
19785
+ import { Fragment as Fragment26, jsx as jsx181, jsxs as jsxs142 } from "react/jsx-runtime";
19716
19786
  function WaitlistForm({
19717
19787
  id = "waitlist-form",
19718
19788
  className,
@@ -19857,7 +19927,7 @@ function WaitlistForm({
19857
19927
  error: showConsentError ? "Please agree to SMS notifications to continue." : void 0,
19858
19928
  disabled: isSubmitting,
19859
19929
  label: smsCheckboxLabel,
19860
- description: /* @__PURE__ */ jsxs142(Fragment25, { children: [
19930
+ description: /* @__PURE__ */ jsxs142(Fragment26, { children: [
19861
19931
  consentText,
19862
19932
  " View our ",
19863
19933
  /* @__PURE__ */ jsx181(
@@ -20235,7 +20305,7 @@ function NotificationTile({
20235
20305
  }
20236
20306
 
20237
20307
  // src/components/features/notifications/notification-drawer.tsx
20238
- import { Fragment as Fragment26, jsx as jsx184, jsxs as jsxs144 } from "react/jsx-runtime";
20308
+ import { Fragment as Fragment27, jsx as jsx184, jsxs as jsxs144 } from "react/jsx-runtime";
20239
20309
  function NotificationDrawer({
20240
20310
  className,
20241
20311
  liveDurationMs,
@@ -20363,7 +20433,7 @@ function DrawerScrollList({
20363
20433
  {
20364
20434
  ref: scrollRef,
20365
20435
  className: "flex flex-1 flex-col gap-[var(--spacing-system-xs)] overflow-y-auto px-[var(--spacing-system-m)]",
20366
- children: isEmpty && !isLoadingMore ? /* @__PURE__ */ jsx184(EmptyState, {}) : /* @__PURE__ */ jsxs144(Fragment26, { children: [
20436
+ children: isEmpty && !isLoadingMore ? /* @__PURE__ */ jsx184(EmptyState, {}) : /* @__PURE__ */ jsxs144(Fragment27, { children: [
20367
20437
  unreadNotifications.map((n) => {
20368
20438
  const custom = renderTile?.(n, { onComplete, onSettle, liveDurationMs });
20369
20439
  if (custom) return /* @__PURE__ */ jsx184("div", { children: custom }, n.id);
@@ -20385,7 +20455,7 @@ function DrawerScrollList({
20385
20455
  );
20386
20456
  }
20387
20457
  function DrawerLoadingTiles() {
20388
- return /* @__PURE__ */ jsxs144(Fragment26, { children: [
20458
+ return /* @__PURE__ */ jsxs144(Fragment27, { children: [
20389
20459
  /* @__PURE__ */ jsx184(
20390
20460
  "div",
20391
20461
  {
@@ -21137,7 +21207,7 @@ function HeaderButton({
21137
21207
  }
21138
21208
 
21139
21209
  // src/components/features/time-tracker/time-tracker-header-button.tsx
21140
- import { Fragment as Fragment27, jsx as jsx190, jsxs as jsxs147 } from "react/jsx-runtime";
21210
+ import { Fragment as Fragment28, jsx as jsx190, jsxs as jsxs147 } from "react/jsx-runtime";
21141
21211
  function TimeTrackerHeaderButton({ className, disabled }) {
21142
21212
  const ctx = useOptionalTimeTracker();
21143
21213
  const elapsedLabel = useTrackerClock({
@@ -21160,7 +21230,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
21160
21230
  isActive && "w-auto gap-[var(--spacing-system-xsf)] px-[var(--spacing-system-sf)] md:w-auto",
21161
21231
  className
21162
21232
  ),
21163
- icon: /* @__PURE__ */ jsxs147(Fragment27, { children: [
21233
+ icon: /* @__PURE__ */ jsxs147(Fragment28, { children: [
21164
21234
  /* @__PURE__ */ jsx190(
21165
21235
  ClockHistoryIcon,
21166
21236
  {
@@ -21389,7 +21459,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
21389
21459
  }
21390
21460
 
21391
21461
  // src/components/features/board/ticket-card.tsx
21392
- import { Fragment as Fragment28, jsx as jsx193, jsxs as jsxs150 } from "react/jsx-runtime";
21462
+ import { Fragment as Fragment29, jsx as jsx193, jsxs as jsxs150 } from "react/jsx-runtime";
21393
21463
  var PRIORITY_COLOR_CLASS = {
21394
21464
  low: "text-ods-text-secondary",
21395
21465
  medium: "text-ods-info",
@@ -21462,7 +21532,7 @@ function TicketCard({
21462
21532
  ] }) : null;
21463
21533
  const timestampLabel = ticket.createdAt ? formatTicketRelativeTime(ticket.createdAt) : null;
21464
21534
  const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
21465
- const body = /* @__PURE__ */ jsxs150(Fragment28, { children: [
21535
+ const body = /* @__PURE__ */ jsxs150(Fragment29, { children: [
21466
21536
  /* @__PURE__ */ jsxs150("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
21467
21537
  /* @__PURE__ */ jsxs150("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
21468
21538
  /* @__PURE__ */ jsx193("p", { className: "text-h3 truncate text-ods-text-primary", children: ticket.title }),
@@ -21590,7 +21660,7 @@ var TicketCardSkeleton = React78.forwardRef(
21590
21660
  TicketCardSkeleton.displayName = "TicketCardSkeleton";
21591
21661
 
21592
21662
  // src/components/features/board/board-column.tsx
21593
- import { Fragment as Fragment29, jsx as jsx195, jsxs as jsxs152 } from "react/jsx-runtime";
21663
+ import { Fragment as Fragment30, jsx as jsx195, jsxs as jsxs152 } from "react/jsx-runtime";
21594
21664
  function BoardColumn({
21595
21665
  column,
21596
21666
  collapsed = false,
@@ -21629,7 +21699,7 @@ function BoardColumn({
21629
21699
  onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
21630
21700
  }
21631
21701
  ),
21632
- !collapsed && /* @__PURE__ */ jsxs152(Fragment29, { children: [
21702
+ !collapsed && /* @__PURE__ */ jsxs152(Fragment30, { children: [
21633
21703
  /* @__PURE__ */ jsx195("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
21634
21704
  /* @__PURE__ */ jsx195(
21635
21705
  ColumnBody,
@@ -21722,7 +21792,7 @@ function SkeletonStack({ count = 4 }) {
21722
21792
  () => Array.from({ length: count }, () => Math.random().toString(36).slice(2)),
21723
21793
  [count]
21724
21794
  );
21725
- return /* @__PURE__ */ jsx195(Fragment29, { children: keys.map((k) => /* @__PURE__ */ jsx195(TicketCardSkeleton, {}, k)) });
21795
+ return /* @__PURE__ */ jsx195(Fragment30, { children: keys.map((k) => /* @__PURE__ */ jsx195(TicketCardSkeleton, {}, k)) });
21726
21796
  }
21727
21797
  function EmptyState2() {
21728
21798
  return /* @__PURE__ */ jsxs152("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: [
@@ -22134,7 +22204,7 @@ function SortableRow({
22134
22204
  init_next_link();
22135
22205
  import React82, { useEffect as useEffect43, useRef as useRef32, useState as useState62 } from "react";
22136
22206
  init_button2();
22137
- import { Fragment as Fragment31, jsx as jsx198, jsxs as jsxs154 } from "react/jsx-runtime";
22207
+ import { Fragment as Fragment32, jsx as jsx198, jsxs as jsxs154 } from "react/jsx-runtime";
22138
22208
  function Header2({ config, platform }) {
22139
22209
  const [show, setShow] = useState62(true);
22140
22210
  const [lastScrollY, setLastScrollY] = useState62(0);
@@ -22279,7 +22349,7 @@ function Header2({ config, platform }) {
22279
22349
  },
22280
22350
  child.id
22281
22351
  )) }),
22282
- item.dropdownContent && /* @__PURE__ */ jsxs154(Fragment31, { children: [
22352
+ item.dropdownContent && /* @__PURE__ */ jsxs154(Fragment32, { children: [
22283
22353
  item.showDropdownDivider !== false && /* @__PURE__ */ jsx198("div", { className: "h-px my-2 mx-2 bg-ods-border" }),
22284
22354
  /* @__PURE__ */ jsx198("div", { className: "px-2 pb-2", children: item.dropdownContent })
22285
22355
  ] })
@@ -22462,7 +22532,7 @@ function ClientOnlyHeader({ config, skeleton }) {
22462
22532
  import { useEffect as useEffect45, useRef as useRef33 } from "react";
22463
22533
  init_button2();
22464
22534
  import { X as X10 } from "lucide-react";
22465
- import { Fragment as Fragment32, jsx as jsx201, jsxs as jsxs156 } from "react/jsx-runtime";
22535
+ import { Fragment as Fragment33, jsx as jsx201, jsxs as jsxs156 } from "react/jsx-runtime";
22466
22536
  function MobileNavPanel({ isOpen, config }) {
22467
22537
  const panelRef = useRef33(null);
22468
22538
  useEffect45(() => {
@@ -22535,7 +22605,7 @@ function MobileNavPanel({ isOpen, config }) {
22535
22605
  item.id
22536
22606
  );
22537
22607
  };
22538
- return /* @__PURE__ */ jsxs156(Fragment32, { children: [
22608
+ return /* @__PURE__ */ jsxs156(Fragment33, { children: [
22539
22609
  /* @__PURE__ */ jsx201(
22540
22610
  "div",
22541
22611
  {
@@ -22586,7 +22656,7 @@ function MobileNavPanel({ isOpen, config }) {
22586
22656
  import { useState as useState64, useEffect as useEffect46 } from "react";
22587
22657
  import { motion as motion2, AnimatePresence } from "framer-motion";
22588
22658
  init_button2();
22589
- import { Fragment as Fragment33, jsx as jsx202, jsxs as jsxs157 } from "react/jsx-runtime";
22659
+ import { Fragment as Fragment34, jsx as jsx202, jsxs as jsxs157 } from "react/jsx-runtime";
22590
22660
  function SlidingSidebar({ config }) {
22591
22661
  const [expandedItems, setExpandedItems] = useState64(/* @__PURE__ */ new Set());
22592
22662
  const [mounted, setMounted] = useState64(false);
@@ -22708,7 +22778,7 @@ function SlidingSidebar({ config }) {
22708
22778
  if (!mounted) {
22709
22779
  return null;
22710
22780
  }
22711
- return /* @__PURE__ */ jsxs157(Fragment33, { children: [
22781
+ return /* @__PURE__ */ jsxs157(Fragment34, { children: [
22712
22782
  /* @__PURE__ */ jsx202(AnimatePresence, { children: config.isOpen && /* @__PURE__ */ jsx202(
22713
22783
  motion2.div,
22714
22784
  {
@@ -22900,7 +22970,7 @@ function NavigationSidebarToggle({
22900
22970
  }
22901
22971
 
22902
22972
  // src/components/navigation/navigation-sidebar.tsx
22903
- import { Fragment as Fragment34, jsx as jsx206, jsxs as jsxs161 } from "react/jsx-runtime";
22973
+ import { Fragment as Fragment35, jsx as jsx206, jsxs as jsxs161 } from "react/jsx-runtime";
22904
22974
  var MINIMIZED_WIDTH = 56;
22905
22975
  var EXPANDED_WIDTH = 224;
22906
22976
  var STORAGE_KEY = "of.navigationSidebar.minimized";
@@ -22965,7 +23035,7 @@ function NavigationSidebar({ config, disabled = false }) {
22965
23035
  return () => cancelAnimationFrame(id);
22966
23036
  }
22967
23037
  }, [isHydrated, transitionsEnabled]);
22968
- return /* @__PURE__ */ jsxs161(Fragment34, { children: [
23038
+ return /* @__PURE__ */ jsxs161(Fragment35, { children: [
22969
23039
  /* @__PURE__ */ jsx206(
22970
23040
  "div",
22971
23041
  {
@@ -22999,7 +23069,7 @@ function NavigationSidebar({ config, disabled = false }) {
22999
23069
  ),
23000
23070
  style: { width: sidebarWidth },
23001
23071
  "aria-label": "Main navigation sidebar",
23002
- children: isHydrated && /* @__PURE__ */ jsxs161(Fragment34, { children: [
23072
+ children: isHydrated && /* @__PURE__ */ jsxs161(Fragment35, { children: [
23003
23073
  /* @__PURE__ */ jsx206(NavigationSidebarHeader, { minimized }),
23004
23074
  /* @__PURE__ */ jsxs161("div", { className: "flex-1 flex flex-col justify-between py-4 overflow-y-auto", children: [
23005
23075
  /* @__PURE__ */ jsx206("nav", { className: "flex flex-col", "aria-label": "Primary navigation", children: primaryItems.map((item) => /* @__PURE__ */ jsx206(
@@ -23408,7 +23478,7 @@ import { createContext as createContext8, Suspense as Suspense2, useCallback as
23408
23478
 
23409
23479
  // src/components/navigation/mobile-burger-menu.tsx
23410
23480
  import React87, { useCallback as useCallback25, useEffect as useEffect48 } from "react";
23411
- import { Fragment as Fragment35, jsx as jsx211, jsxs as jsxs166 } from "react/jsx-runtime";
23481
+ import { Fragment as Fragment36, jsx as jsx211, jsxs as jsxs166 } from "react/jsx-runtime";
23412
23482
  var HEADER_HEIGHT = 48;
23413
23483
  var MobileBurgerMenu = React87.memo(function MobileBurgerMenu2({
23414
23484
  isOpen,
@@ -23494,7 +23564,7 @@ var MobileBurgerMenu = React87.memo(function MobileBurgerMenu2({
23494
23564
  row.length === 1 && /* @__PURE__ */ jsx211("div", { className: "flex-1" })
23495
23565
  ] }, rowIndex)) });
23496
23566
  };
23497
- return /* @__PURE__ */ jsxs166(Fragment35, { children: [
23567
+ return /* @__PURE__ */ jsxs166(Fragment36, { children: [
23498
23568
  /* @__PURE__ */ jsx211(
23499
23569
  "div",
23500
23570
  {
@@ -24468,7 +24538,7 @@ import React90, { useRef as useRef35, useCallback as useCallback28 } from "react
24468
24538
  import React89 from "react";
24469
24539
  init_button2();
24470
24540
  init_cn();
24471
- import { Fragment as Fragment36, jsx as jsx221, jsxs as jsxs176 } from "react/jsx-runtime";
24541
+ import { Fragment as Fragment37, jsx as jsx221, jsxs as jsxs176 } from "react/jsx-runtime";
24472
24542
  function OnboardingStepCard({
24473
24543
  step,
24474
24544
  isCompleted,
@@ -24510,10 +24580,10 @@ function OnboardingStepCard({
24510
24580
  /* @__PURE__ */ jsx221("h3", { className: "text-h4 text-ods-text-primary truncate", title: step.title, children: step.title }),
24511
24581
  /* @__PURE__ */ jsx221("p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary truncate h-[20px]", title: step.description, children: step.description })
24512
24582
  ] }),
24513
- /* @__PURE__ */ jsx221("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__ */ jsxs176(Fragment36, { children: [
24583
+ /* @__PURE__ */ jsx221("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__ */ jsxs176(Fragment37, { children: [
24514
24584
  /* @__PURE__ */ jsx221("div", { className: "h-[32px] w-[100px] bg-ods-border rounded-[6px] animate-pulse" }),
24515
24585
  /* @__PURE__ */ jsx221("div", { className: "h-[32px] w-[120px] bg-ods-border rounded-[6px] animate-pulse" })
24516
- ] }) : isCompleted ? /* @__PURE__ */ jsxs176(Fragment36, { children: [
24586
+ ] }) : isCompleted ? /* @__PURE__ */ jsxs176(Fragment37, { children: [
24517
24587
  /* @__PURE__ */ jsx221(
24518
24588
  StatusBadge,
24519
24589
  {
@@ -24532,14 +24602,14 @@ function OnboardingStepCard({
24532
24602
  children: step.completedText
24533
24603
  }
24534
24604
  )
24535
- ] }) : isSkipped ? /* @__PURE__ */ jsx221(Fragment36, { children: /* @__PURE__ */ jsx221(
24605
+ ] }) : isSkipped ? /* @__PURE__ */ jsx221(Fragment37, { children: /* @__PURE__ */ jsx221(
24536
24606
  StatusBadge,
24537
24607
  {
24538
24608
  text: "SKIPPED",
24539
24609
  variant: "card",
24540
24610
  colorScheme: "default"
24541
24611
  }
24542
- ) }) : /* @__PURE__ */ jsxs176(Fragment36, { children: [
24612
+ ) }) : /* @__PURE__ */ jsxs176(Fragment37, { children: [
24543
24613
  /* @__PURE__ */ jsx221(
24544
24614
  Button,
24545
24615
  {
@@ -25424,7 +25494,7 @@ function getHideClasses(hideAt) {
25424
25494
  }
25425
25495
 
25426
25496
  // src/components/ui/table/table-header.tsx
25427
- import { Fragment as Fragment37, jsx as jsx234, jsxs as jsxs186 } from "react/jsx-runtime";
25497
+ import { Fragment as Fragment38, jsx as jsx234, jsxs as jsxs186 } from "react/jsx-runtime";
25428
25498
  function TableHeader({
25429
25499
  columns,
25430
25500
  className,
@@ -25535,10 +25605,10 @@ function TableHeader({
25535
25605
  column.sortable && "cursor-pointer hover:text-ods-text-primary transition-colors"
25536
25606
  ),
25537
25607
  onClick: () => handleSort(column),
25538
- children: column.renderHeader ? /* @__PURE__ */ jsxs186(Fragment37, { children: [
25608
+ children: column.renderHeader ? /* @__PURE__ */ jsxs186(Fragment38, { children: [
25539
25609
  column.renderHeader(),
25540
25610
  getSortIcon(column)
25541
- ] }) : /* @__PURE__ */ jsxs186(Fragment37, { children: [
25611
+ ] }) : /* @__PURE__ */ jsxs186(Fragment38, { children: [
25542
25612
  /* @__PURE__ */ jsx234("span", { className: "text-h5 text-ods-text-secondary uppercase whitespace-nowrap", children: column.label }),
25543
25613
  getSortIcon(column)
25544
25614
  ] })
@@ -25593,7 +25663,7 @@ function TableCell({
25593
25663
 
25594
25664
  // src/components/ui/table/table-skeleton.tsx
25595
25665
  init_cn();
25596
- import { Fragment as Fragment38, jsx as jsx236, jsxs as jsxs187 } from "react/jsx-runtime";
25666
+ import { Fragment as Fragment39, jsx as jsx236, jsxs as jsxs187 } from "react/jsx-runtime";
25597
25667
  var ROW_HEIGHT_DESKTOP = "h-[68px] md:h-[80px]";
25598
25668
  var ROW_HEIGHT_MOBILE = "h-[68px]";
25599
25669
  function TableCardSkeleton({
@@ -25604,7 +25674,7 @@ function TableCardSkeleton({
25604
25674
  className,
25605
25675
  rowClassName
25606
25676
  }) {
25607
- return /* @__PURE__ */ jsx236(Fragment38, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs187(
25677
+ return /* @__PURE__ */ jsx236(Fragment39, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs187(
25608
25678
  "div",
25609
25679
  {
25610
25680
  className: cn(
@@ -25759,7 +25829,7 @@ function TableRow({
25759
25829
  }
25760
25830
 
25761
25831
  // src/components/ui/table/table.tsx
25762
- import { Fragment as Fragment39, jsx as jsx238, jsxs as jsxs189 } from "react/jsx-runtime";
25832
+ import { Fragment as Fragment40, jsx as jsx238, jsxs as jsxs189 } from "react/jsx-runtime";
25763
25833
  function injectSyntheticColumns(columns, rowActions, renderRowActions, rowHref) {
25764
25834
  const hasActions = Boolean(rowActions?.length) || Boolean(renderRowActions);
25765
25835
  const result = [...columns];
@@ -25959,7 +26029,7 @@ function Table({
25959
26029
  hasActions: Boolean(rowActions) && rowActions.length > 0,
25960
26030
  hasChevron: Boolean(rowHref)
25961
26031
  }
25962
- ) : data.length === 0 ? /* @__PURE__ */ jsx238(TableEmptyState, { message: emptyMessage }) : /* @__PURE__ */ jsxs189(Fragment39, { children: [
26032
+ ) : data.length === 0 ? /* @__PURE__ */ jsx238(TableEmptyState, { message: emptyMessage }) : /* @__PURE__ */ jsxs189(Fragment40, { children: [
25963
26033
  data.map((item, index) => /* @__PURE__ */ jsx238(
25964
26034
  TableRow,
25965
26035
  {
@@ -26580,7 +26650,7 @@ function DataTableColumnFilter({
26580
26650
  }
26581
26651
 
26582
26652
  // src/components/ui/data-table/data-table-header.tsx
26583
- import { Fragment as Fragment40, jsx as jsx247, jsxs as jsxs196 } from "react/jsx-runtime";
26653
+ import { Fragment as Fragment41, jsx as jsx247, jsxs as jsxs196 } from "react/jsx-runtime";
26584
26654
  function DataTableHeader({
26585
26655
  className,
26586
26656
  stickyHeader,
@@ -26674,7 +26744,7 @@ function HeaderLabel({ header }) {
26674
26744
  if (typeof headerDef === "string") {
26675
26745
  return /* @__PURE__ */ jsx247("span", { className: "text-h5 text-ods-text-secondary uppercase whitespace-nowrap transition-colors duration-200 group-hover:text-ods-text-primary", children: headerDef });
26676
26746
  }
26677
- return /* @__PURE__ */ jsx247(Fragment40, { children: flexRender(headerDef, header.getContext()) });
26747
+ return /* @__PURE__ */ jsx247(Fragment41, { children: flexRender(headerDef, header.getContext()) });
26678
26748
  }
26679
26749
  function SortIcon({ sorted }) {
26680
26750
  if (sorted === "asc") return /* @__PURE__ */ jsx247(Arrow01UpIcon, { className: "w-4 h-4 text-ods-accent" });
@@ -26713,7 +26783,7 @@ import { flexRender as flexRender2 } from "@tanstack/react-table";
26713
26783
 
26714
26784
  // src/components/ui/data-table/data-table-skeleton.tsx
26715
26785
  init_cn();
26716
- import { Fragment as Fragment41, jsx as jsx249, jsxs as jsxs197 } from "react/jsx-runtime";
26786
+ import { Fragment as Fragment42, jsx as jsx249, jsxs as jsxs197 } from "react/jsx-runtime";
26717
26787
  var ROW_HEIGHT_DESKTOP2 = "h-[68px] md:h-[80px]";
26718
26788
  var ROW_HEIGHT_MOBILE2 = "h-[68px]";
26719
26789
  function DataTableSkeleton({
@@ -26724,7 +26794,7 @@ function DataTableSkeleton({
26724
26794
  const table = useDataTableContext();
26725
26795
  const columns = table.getVisibleFlatColumns();
26726
26796
  const firstColumnId = columns[0]?.id;
26727
- return /* @__PURE__ */ jsx249(Fragment41, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs197(
26797
+ return /* @__PURE__ */ jsx249(Fragment42, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsxs197(
26728
26798
  "div",
26729
26799
  {
26730
26800
  className: cn(
@@ -26780,7 +26850,7 @@ function DataTableSkeleton({
26780
26850
  }
26781
26851
 
26782
26852
  // src/components/ui/data-table/data-table-row.tsx
26783
- import { Fragment as Fragment42, jsx as jsx250, jsxs as jsxs198 } from "react/jsx-runtime";
26853
+ import { Fragment as Fragment43, jsx as jsx250, jsxs as jsxs198 } from "react/jsx-runtime";
26784
26854
  function DataTableRowImpl({
26785
26855
  row,
26786
26856
  onClick,
@@ -26881,7 +26951,7 @@ function CellContent({ children }) {
26881
26951
  if (typeof children === "string" || typeof children === "number") {
26882
26952
  return /* @__PURE__ */ jsx250("span", { className: "text-h4 text-ods-text-primary truncate", title: String(children), children });
26883
26953
  }
26884
- return /* @__PURE__ */ jsx250(Fragment42, { children });
26954
+ return /* @__PURE__ */ jsx250(Fragment43, { children });
26885
26955
  }
26886
26956
 
26887
26957
  // src/components/ui/data-table/data-table-body.tsx
@@ -26959,7 +27029,7 @@ function DataTableBody({
26959
27029
 
26960
27030
  // src/components/ui/data-table/data-table-infinite-footer.tsx
26961
27031
  import { useEffect as useEffect51, useRef as useRef41 } from "react";
26962
- import { Fragment as Fragment43, jsx as jsx252, jsxs as jsxs200 } from "react/jsx-runtime";
27032
+ import { Fragment as Fragment44, jsx as jsx252, jsxs as jsxs200 } from "react/jsx-runtime";
26963
27033
  function DataTableInfiniteFooter({
26964
27034
  hasNextPage,
26965
27035
  isFetchingNextPage,
@@ -26983,7 +27053,7 @@ function DataTableInfiniteFooter({
26983
27053
  observer.observe(sentinel);
26984
27054
  return () => observer.disconnect();
26985
27055
  }, [hasNextPage, isFetchingNextPage, rootMargin]);
26986
- return /* @__PURE__ */ jsxs200(Fragment43, { children: [
27056
+ return /* @__PURE__ */ jsxs200(Fragment44, { children: [
26987
27057
  isFetchingNextPage && /* @__PURE__ */ jsx252(DataTableSkeleton, { rows: skeletonRows }),
26988
27058
  hasNextPage && /* @__PURE__ */ jsx252("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
26989
27059
  ] });
@@ -28008,7 +28078,7 @@ function FileUpload({
28008
28078
  import * as React100 from "react";
28009
28079
  import { Loader2 as Loader211 } from "lucide-react";
28010
28080
  init_cn();
28011
- import { Fragment as Fragment45, jsx as jsx258, jsxs as jsxs206 } from "react/jsx-runtime";
28081
+ import { Fragment as Fragment46, jsx as jsx258, jsxs as jsxs206 } from "react/jsx-runtime";
28012
28082
  var DEFAULT_MAX_SIZE = 25 * 1024 * 1024;
28013
28083
  function formatSize(bytes) {
28014
28084
  const mb = bytes / (1024 * 1024);
@@ -28134,7 +28204,7 @@ function ImageUploader({
28134
28204
  !interactive && "opacity-60",
28135
28205
  !hasImage && !interactive && "cursor-not-allowed"
28136
28206
  ),
28137
- children: hasImage ? /* @__PURE__ */ jsxs206(Fragment45, { children: [
28207
+ children: hasImage ? /* @__PURE__ */ jsxs206(Fragment46, { children: [
28138
28208
  /* @__PURE__ */ jsx258("div", { className: "relative min-h-0 w-full flex-1 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx258(
28139
28209
  "img",
28140
28210
  {
@@ -28171,7 +28241,7 @@ function ImageUploader({
28171
28241
  )
28172
28242
  ] }),
28173
28243
  loading && /* @__PURE__ */ jsx258("div", { className: "absolute inset-0 flex items-center justify-center rounded-md bg-ods-overlay", children: /* @__PURE__ */ jsx258(Loader211, { className: "size-8 animate-spin text-ods-text-on-dark" }) })
28174
- ] }) : loading ? /* @__PURE__ */ jsx258(Loader211, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs206(Fragment45, { children: [
28244
+ ] }) : loading ? /* @__PURE__ */ jsx258(Loader211, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs206(Fragment46, { children: [
28175
28245
  /* @__PURE__ */ jsx258("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__ */ jsx258(ImagePlusIcon, { className: "size-6 text-ods-text-primary" }) }),
28176
28246
  /* @__PURE__ */ jsxs206("div", { className: "flex w-full flex-col items-center text-center", children: [
28177
28247
  /* @__PURE__ */ jsx258("p", { className: "text-h4 text-ods-text-primary", children: label }),
@@ -28241,7 +28311,7 @@ PopoverContent.displayName = PopoverPrimitive4.Content.displayName;
28241
28311
 
28242
28312
  // src/components/ui/color-preset-select.tsx
28243
28313
  init_cn();
28244
- import { Fragment as Fragment46, jsx as jsx260, jsxs as jsxs207 } from "react/jsx-runtime";
28314
+ import { Fragment as Fragment47, jsx as jsx260, jsxs as jsxs207 } from "react/jsx-runtime";
28245
28315
  var TICKET_STATUS_COLOR_PRESETS = [
28246
28316
  { key: "green", label: "Green", color: "#5ea62e" },
28247
28317
  { key: "lime", label: "Lime", color: "#8bc34a" },
@@ -28392,7 +28462,7 @@ function RgbInputs({ value, onChange }) {
28392
28462
  const b = next.b ?? rgb.b;
28393
28463
  onChange(rgbToHex(r, g, b));
28394
28464
  };
28395
- return /* @__PURE__ */ jsxs207(Fragment46, { children: [
28465
+ return /* @__PURE__ */ jsxs207(Fragment47, { children: [
28396
28466
  /* @__PURE__ */ jsx260(ChannelInput, { value: rgb.r, min: 0, max: 255, ariaLabel: "Red", onCommit: (r) => update({ r }) }),
28397
28467
  /* @__PURE__ */ jsx260(ChannelInput, { value: rgb.g, min: 0, max: 255, ariaLabel: "Green", onCommit: (g) => update({ g }) }),
28398
28468
  /* @__PURE__ */ jsx260(ChannelInput, { value: rgb.b, min: 0, max: 255, ariaLabel: "Blue", onCommit: (b) => update({ b }) })
@@ -28408,7 +28478,7 @@ function HslInputs({ value, onChange }) {
28408
28478
  const out = hslToRgb(h, s, l);
28409
28479
  onChange(rgbToHex(out.r, out.g, out.b));
28410
28480
  };
28411
- return /* @__PURE__ */ jsxs207(Fragment46, { children: [
28481
+ return /* @__PURE__ */ jsxs207(Fragment47, { children: [
28412
28482
  /* @__PURE__ */ jsx260(ChannelInput, { value: hsl.h, min: 0, max: 360, ariaLabel: "Hue", onCommit: (h) => update({ h }) }),
28413
28483
  /* @__PURE__ */ jsx260(ChannelInput, { value: hsl.s, min: 0, max: 100, ariaLabel: "Saturation", onCommit: (s) => update({ s }) }),
28414
28484
  /* @__PURE__ */ jsx260(ChannelInput, { value: hsl.l, min: 0, max: 100, ariaLabel: "Lightness", onCommit: (l) => update({ l }) })
@@ -28938,7 +29008,7 @@ init_cn();
28938
29008
  // src/components/ui/ticket-note-card.tsx
28939
29009
  import * as React105 from "react";
28940
29010
  init_cn();
28941
- import { Fragment as Fragment47, jsx as jsx265, jsxs as jsxs212 } from "react/jsx-runtime";
29011
+ import { Fragment as Fragment48, jsx as jsx265, jsxs as jsxs212 } from "react/jsx-runtime";
28942
29012
  function TicketNoteCard({ note, onEdit, onDelete, className }) {
28943
29013
  const [isEditing, setIsEditing] = React105.useState(false);
28944
29014
  const [editText, setEditText] = React105.useState(note.text);
@@ -29012,7 +29082,7 @@ function TicketNoteCard({ note, onEdit, onDelete, className }) {
29012
29082
  children: /* @__PURE__ */ jsx265(XmarkIcon, { className: "size-5" })
29013
29083
  }
29014
29084
  )
29015
- ] }) : /* @__PURE__ */ jsxs212(Fragment47, { children: [
29085
+ ] }) : /* @__PURE__ */ jsxs212(Fragment48, { children: [
29016
29086
  /* @__PURE__ */ jsx265("p", { className: "text-h4 text-ods-text-primary", children: note.text }),
29017
29087
  /* @__PURE__ */ jsxs212(
29018
29088
  "p",
@@ -29119,7 +29189,7 @@ function TicketNotesSection({
29119
29189
  }
29120
29190
 
29121
29191
  // src/components/ui/ticket-info-section.tsx
29122
- import { Fragment as Fragment48, jsx as jsx267, jsxs as jsxs214 } from "react/jsx-runtime";
29192
+ import { Fragment as Fragment49, jsx as jsx267, jsxs as jsxs214 } from "react/jsx-runtime";
29123
29193
  function InfoCell2({ value, label, icon, onClick }) {
29124
29194
  return /* @__PURE__ */ jsx267("div", { className: "flex-1 min-w-0 overflow-hidden", children: /* @__PURE__ */ jsxs214("div", { className: "flex flex-col justify-center", children: [
29125
29195
  /* @__PURE__ */ jsxs214("div", { className: "flex items-center gap-1 w-full min-w-0", children: [
@@ -29244,7 +29314,7 @@ function TicketInfoSection({
29244
29314
  )
29245
29315
  ] })
29246
29316
  ] }),
29247
- expanded && /* @__PURE__ */ jsxs214(Fragment48, { children: [
29317
+ expanded && /* @__PURE__ */ jsxs214(Fragment49, { children: [
29248
29318
  createdAt && /* @__PURE__ */ jsx267("div", { className: "grid grid-cols-2 gap-4 px-4 py-3 bg-ods-bg border-b border-ods-border items-center", children: /* @__PURE__ */ jsx267(InfoCell2, { value: createdAt, label: "Created" }) }),
29249
29319
  /* @__PURE__ */ jsxs214("div", { className: "flex flex-col gap-4 p-4 bg-ods-bg border-b border-ods-border", children: [
29250
29320
  description && /* @__PURE__ */ jsx267(SimpleMarkdownRenderer, { content: description }),
@@ -29269,7 +29339,7 @@ function TicketInfoSection({
29269
29339
 
29270
29340
  // src/components/ui/image-gallery-modal.tsx
29271
29341
  import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight9 } from "lucide-react";
29272
- import { Fragment as Fragment49, jsx as jsx268, jsxs as jsxs215 } from "react/jsx-runtime";
29342
+ import { Fragment as Fragment50, jsx as jsx268, jsxs as jsxs215 } from "react/jsx-runtime";
29273
29343
  function ImageGalleryModal({
29274
29344
  images,
29275
29345
  isOpen,
@@ -29325,7 +29395,7 @@ function ImageGalleryModal({
29325
29395
  onClose,
29326
29396
  className: "max-w-[95vw]",
29327
29397
  children: /* @__PURE__ */ jsxs215("div", { className: "relative flex items-center justify-center bg-black rounded-lg", children: [
29328
- images.length > 1 && /* @__PURE__ */ jsxs215(Fragment49, { children: [
29398
+ images.length > 1 && /* @__PURE__ */ jsxs215(Fragment50, { children: [
29329
29399
  selectedImageIndex > 0 && /* @__PURE__ */ jsx268("div", { className: "absolute left-4 top-1/2 -translate-y-1/2 z-[10000]", children: /* @__PURE__ */ jsx268(
29330
29400
  Button,
29331
29401
  {
@@ -29443,7 +29513,7 @@ function TaskTypeIcon({ customItemId, className = "h-5 w-5" }) {
29443
29513
  }
29444
29514
 
29445
29515
  // src/components/chat/entity-cards/roadmap-card.tsx
29446
- import { Fragment as Fragment50, jsx as jsx270, jsxs as jsxs216 } from "react/jsx-runtime";
29516
+ import { Fragment as Fragment51, jsx as jsx270, jsxs as jsxs216 } from "react/jsx-runtime";
29447
29517
  function RoadmapCardSkeleton({ size = "default" }) {
29448
29518
  if (size === "sm") {
29449
29519
  return /* @__PURE__ */ jsxs216("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -29504,7 +29574,7 @@ function RoadmapCard({
29504
29574
  const hasScreenshots = (item.screenshots?.length ?? 0) > 0;
29505
29575
  const typeLabel = getTaskTypeLabel(item.customItemId);
29506
29576
  const useTypeIcon = cardType === "internal_task" || !iconSrc && item.customItemId != null;
29507
- const body = /* @__PURE__ */ jsxs216(Fragment50, { children: [
29577
+ const body = /* @__PURE__ */ jsxs216(Fragment51, { children: [
29508
29578
  /* @__PURE__ */ jsx270(
29509
29579
  "span",
29510
29580
  {
@@ -29696,7 +29766,7 @@ function RoadmapCard({
29696
29766
  // src/components/chat/entity-cards/github-activity-card.tsx
29697
29767
  import React108 from "react";
29698
29768
  import { GitPullRequest, Eye as Eye4, ExternalLink as ExternalLink5 } from "lucide-react";
29699
- import { Fragment as Fragment51, jsx as jsx271, jsxs as jsxs217 } from "react/jsx-runtime";
29769
+ import { Fragment as Fragment52, jsx as jsx271, jsxs as jsxs217 } from "react/jsx-runtime";
29700
29770
  function parseRepoFromUrl(url) {
29701
29771
  if (!url) return null;
29702
29772
  try {
@@ -29828,7 +29898,7 @@ function GitHubActivityCard({ item, variant = "compact", className, anchorProps
29828
29898
  if (repo) metaParts.push(/* @__PURE__ */ jsx271("span", { className: "font-mono truncate", children: repo }, "repo"));
29829
29899
  if (dateText) metaParts.push(/* @__PURE__ */ jsx271("span", { className: "whitespace-nowrap", children: dateText }, "date"));
29830
29900
  const href = safeHref(item.url);
29831
- const body = /* @__PURE__ */ jsxs217(Fragment51, { children: [
29901
+ const body = /* @__PURE__ */ jsxs217(Fragment52, { children: [
29832
29902
  /* @__PURE__ */ jsx271("span", { className: COMPACT_CARD_ICON_SLOT, children: kindIcon(kind, "h-5 w-5") }),
29833
29903
  /* @__PURE__ */ jsxs217("span", { className: COMPACT_CARD_TEXT_COL, children: [
29834
29904
  /* @__PURE__ */ jsxs217("span", { className: `${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-1.5`, children: [
@@ -29883,7 +29953,7 @@ function GitHubActivityCardSkeleton({ variant = "compact", className }) {
29883
29953
  // src/components/chat/entity-cards/slack-message-card.tsx
29884
29954
  import React109 from "react";
29885
29955
  import { ExternalLink as ExternalLink6, Hash } from "lucide-react";
29886
- import { Fragment as Fragment52, jsx as jsx272, jsxs as jsxs218 } from "react/jsx-runtime";
29956
+ import { Fragment as Fragment53, jsx as jsx272, jsxs as jsxs218 } from "react/jsx-runtime";
29887
29957
  function parseChannelFromUrl(url) {
29888
29958
  if (!url) return null;
29889
29959
  try {
@@ -29922,7 +29992,7 @@ function SlackMessageCard({ item, variant = "compact", className, anchorProps })
29922
29992
  }
29923
29993
  if (dateText) metaParts.push(/* @__PURE__ */ jsx272("span", { className: "whitespace-nowrap", children: dateText }, "date"));
29924
29994
  const href = safeHref(item.url);
29925
- const body = /* @__PURE__ */ jsxs218(Fragment52, { children: [
29995
+ const body = /* @__PURE__ */ jsxs218(Fragment53, { children: [
29926
29996
  /* @__PURE__ */ jsx272("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx272(SlackIcon, { className: "h-5 w-5" }) }),
29927
29997
  /* @__PURE__ */ jsxs218("span", { className: COMPACT_CARD_TEXT_COL, children: [
29928
29998
  /* @__PURE__ */ jsx272("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx272("span", { className: COMPACT_CARD_TITLE, children: item.title }) }),
@@ -29972,7 +30042,7 @@ function SlackMessageCardSkeleton({ variant = "compact", className }) {
29972
30042
  // src/components/chat/entity-cards/hubspot-ticket-card.tsx
29973
30043
  import React110 from "react";
29974
30044
  import { ExternalLink as ExternalLink7 } from "lucide-react";
29975
- import { Fragment as Fragment53, jsx as jsx273, jsxs as jsxs219 } from "react/jsx-runtime";
30045
+ import { Fragment as Fragment54, jsx as jsx273, jsxs as jsxs219 } from "react/jsx-runtime";
29976
30046
  function formatToken(token) {
29977
30047
  if (!token) return null;
29978
30048
  const lower = token.toLowerCase().replace(/_/g, " ");
@@ -30011,7 +30081,7 @@ function HubspotTicketCard({ item, variant = "compact", className, anchorProps }
30011
30081
  }
30012
30082
  if (dateText) metaParts.push(/* @__PURE__ */ jsx273("span", { className: "whitespace-nowrap", children: dateText }, "date"));
30013
30083
  const href = safeHref(item.url);
30014
- const body = /* @__PURE__ */ jsxs219(Fragment53, { children: [
30084
+ const body = /* @__PURE__ */ jsxs219(Fragment54, { children: [
30015
30085
  /* @__PURE__ */ jsxs219("span", { className: COMPACT_CARD_TEXT_COL, children: [
30016
30086
  /* @__PURE__ */ jsxs219("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
30017
30087
  /* @__PURE__ */ jsx273("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -30091,9 +30161,9 @@ function HubspotTicketCardSkeleton({ variant = "compact", className }) {
30091
30161
 
30092
30162
  // src/components/chat/entity-cards/data-room-doc-card.tsx
30093
30163
  import { ExternalLink as ExternalLink8 } from "lucide-react";
30094
- import { Fragment as Fragment54, jsx as jsx274, jsxs as jsxs220 } from "react/jsx-runtime";
30164
+ import { Fragment as Fragment55, jsx as jsx274, jsxs as jsxs220 } from "react/jsx-runtime";
30095
30165
  function DataRoomDocCard({ item, className, badgeText, anchorProps }) {
30096
- const body = /* @__PURE__ */ jsxs220(Fragment54, { children: [
30166
+ const body = /* @__PURE__ */ jsxs220(Fragment55, { children: [
30097
30167
  /* @__PURE__ */ jsxs220("span", { className: COMPACT_CARD_TEXT_COL, children: [
30098
30168
  /* @__PURE__ */ jsxs220("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
30099
30169
  /* @__PURE__ */ jsx274("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -31703,7 +31773,7 @@ function cleanEscapedString(input) {
31703
31773
  init_button();
31704
31774
  import { ExternalLink as ExternalLink9, Clock, Play as Play2, Video as Video6 } from "lucide-react";
31705
31775
  init_cn();
31706
- import { Fragment as Fragment55, jsx as jsx275, jsxs as jsxs221 } from "react/jsx-runtime";
31776
+ import { Fragment as Fragment56, jsx as jsx275, jsxs as jsxs221 } from "react/jsx-runtime";
31707
31777
  function ProgramCardSkeleton({ size = "default" }) {
31708
31778
  if (size === "sm") {
31709
31779
  return /* @__PURE__ */ jsxs221("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -31775,7 +31845,7 @@ function MediaGallery({ images, title }) {
31775
31845
  setIsModalOpen(false);
31776
31846
  setSelectedImageIndex(null);
31777
31847
  };
31778
- return /* @__PURE__ */ jsxs221(Fragment55, { children: [
31848
+ return /* @__PURE__ */ jsxs221(Fragment56, { children: [
31779
31849
  /* @__PURE__ */ jsx275("div", { className: "p-6 pt-4", children: /* @__PURE__ */ jsx275("div", { className: "overflow-x-auto mb-4", children: /* @__PURE__ */ jsx275("div", { className: "flex gap-3 pb-2", style: { width: "max-content" }, children: images.map((mediaItem, index) => /* @__PURE__ */ jsxs221(
31780
31850
  "div",
31781
31851
  {
@@ -31892,7 +31962,7 @@ function ProgramCard({
31892
31962
  const dateFormat = format(itemDate, "EEEE d MMMM");
31893
31963
  const defaultRenderMeta = () => {
31894
31964
  if (config.type === "podcast" && "duration_seconds" in item && !isScheduled) {
31895
- return /* @__PURE__ */ jsxs221(Fragment55, { children: [
31965
+ return /* @__PURE__ */ jsxs221(Fragment56, { children: [
31896
31966
  /* @__PURE__ */ jsx275(Clock, { className: "w-4 h-4 text-ods-text-secondary" }),
31897
31967
  /* @__PURE__ */ jsx275("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: formatDurationCompact(item.duration_seconds) })
31898
31968
  ] });
@@ -31903,7 +31973,7 @@ function ProgramCard({
31903
31973
  if (config.type === "webinar" && "start_at" in item) {
31904
31974
  const webinarItem = item;
31905
31975
  const duration = formatDurationFromRange(webinarItem.start_at, webinarItem.end_at);
31906
- return /* @__PURE__ */ jsxs221(Fragment55, { children: [
31976
+ return /* @__PURE__ */ jsxs221(Fragment56, { children: [
31907
31977
  /* @__PURE__ */ jsx275(Video6, { className: "w-4 h-4 text-ods-text-secondary" }),
31908
31978
  /* @__PURE__ */ jsxs221("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: [
31909
31979
  formatTimeWithTimezone(webinarItem.start_at, null),
@@ -31937,10 +32007,10 @@ function ProgramCard({
31937
32007
  /* @__PURE__ */ jsx275("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 }),
31938
32008
  /* @__PURE__ */ jsxs221("div", { className: "flex flex-col md:flex-row md:items-center gap-2 md:gap-4 mb-4", children: [
31939
32009
  /* @__PURE__ */ jsx275("span", { className: "font-['DM_Sans'] font-medium", style: { color: accentColor }, children: dateFormat }),
31940
- renderMeta ? /* @__PURE__ */ jsxs221(Fragment55, { children: [
32010
+ renderMeta ? /* @__PURE__ */ jsxs221(Fragment56, { children: [
31941
32011
  /* @__PURE__ */ jsx275("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
31942
32012
  renderMeta(item)
31943
- ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs221(Fragment55, { children: [
32013
+ ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs221(Fragment56, { children: [
31944
32014
  /* @__PURE__ */ jsx275("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
31945
32015
  /* @__PURE__ */ jsx275("div", { className: "flex items-center gap-2", children: defaultRenderMeta() })
31946
32016
  ] })
@@ -32017,10 +32087,10 @@ function ProgramCard({
32017
32087
 
32018
32088
  // src/components/chat/entity-cards/campaign-card-admin.tsx
32019
32089
  import { Megaphone } from "lucide-react";
32020
- import { Fragment as Fragment56, jsx as jsx276, jsxs as jsxs222 } from "react/jsx-runtime";
32090
+ import { Fragment as Fragment57, jsx as jsx276, jsxs as jsxs222 } from "react/jsx-runtime";
32021
32091
  function CampaignCardAdmin({ campaign, className, anchorProps }) {
32022
32092
  const goalsCount = campaign.goals?.length || 0;
32023
- const innerChildren = /* @__PURE__ */ jsxs222(Fragment56, { children: [
32093
+ const innerChildren = /* @__PURE__ */ jsxs222(Fragment57, { children: [
32024
32094
  /* @__PURE__ */ jsx276("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx276(Megaphone, { className: "h-5 w-5" }) }),
32025
32095
  /* @__PURE__ */ jsxs222("span", { className: COMPACT_CARD_TEXT_COL, children: [
32026
32096
  /* @__PURE__ */ jsx276("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx276("span", { className: COMPACT_CARD_TITLE, children: campaign.name }) }),
@@ -32050,11 +32120,11 @@ function CampaignCardAdminSkeleton({ className }) {
32050
32120
 
32051
32121
  // src/components/chat/entity-cards/generic-entity-card.tsx
32052
32122
  import { ExternalLink as ExternalLink10 } from "lucide-react";
32053
- import { Fragment as Fragment57, jsx as jsx277, jsxs as jsxs223 } from "react/jsx-runtime";
32123
+ import { Fragment as Fragment58, jsx as jsx277, jsxs as jsxs223 } from "react/jsx-runtime";
32054
32124
  function GenericEntityCard({ item, className, anchorProps }) {
32055
32125
  const href = safeHref(item.url);
32056
32126
  const dateText = formatDateUTC(item.dateUpdated, { fallback: "", timezone: "local" });
32057
- const body = /* @__PURE__ */ jsxs223(Fragment57, { children: [
32127
+ const body = /* @__PURE__ */ jsxs223(Fragment58, { children: [
32058
32128
  /* @__PURE__ */ jsxs223("span", { className: COMPACT_CARD_TEXT_COL, children: [
32059
32129
  /* @__PURE__ */ jsxs223("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
32060
32130
  /* @__PURE__ */ jsx277("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -32149,7 +32219,7 @@ function useChatCardItem(type, id) {
32149
32219
 
32150
32220
  // src/components/chat/mingo-info-card.tsx
32151
32221
  init_cn();
32152
- import { Fragment as Fragment58, jsx as jsx278, jsxs as jsxs224 } from "react/jsx-runtime";
32222
+ import { Fragment as Fragment59, jsx as jsx278, jsxs as jsxs224 } from "react/jsx-runtime";
32153
32223
  function CardMedia({
32154
32224
  imageSrc,
32155
32225
  imageAlt,
@@ -32193,7 +32263,7 @@ function MingoInfoCard({
32193
32263
  const hasMenu = !!menuGroups && menuGroups.length > 0;
32194
32264
  const isAnchor = !!anchorProps;
32195
32265
  const isInteractive = isAnchor || !!onClick;
32196
- const content = /* @__PURE__ */ jsxs224(Fragment58, { children: [
32266
+ const content = /* @__PURE__ */ jsxs224(Fragment59, { children: [
32197
32267
  hasMedia && /* @__PURE__ */ jsx278(CardMedia, { imageSrc, imageAlt, icon }),
32198
32268
  /* @__PURE__ */ jsxs224("span", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
32199
32269
  /* @__PURE__ */ jsx278("span", { className: "truncate text-h4 font-medium text-ods-text-primary", children: title }),
@@ -32242,7 +32312,7 @@ function MingoInfoCard({
32242
32312
  }
32243
32313
 
32244
32314
  // src/components/chat/entity-cards/dispatch.tsx
32245
- import { Fragment as Fragment59, jsx as jsx279, jsxs as jsxs225 } from "react/jsx-runtime";
32315
+ import { Fragment as Fragment60, jsx as jsx279, jsxs as jsxs225 } from "react/jsx-runtime";
32246
32316
  function githubKindIcon(kind) {
32247
32317
  switch (kind) {
32248
32318
  case "pull_request":
@@ -33210,10 +33280,10 @@ function ChatCardLoader({
33210
33280
  }
33211
33281
  );
33212
33282
  }
33213
- if (isLoading) return /* @__PURE__ */ jsx279(Fragment59, { children: entry.skeleton() });
33283
+ if (isLoading) return /* @__PURE__ */ jsx279(Fragment60, { children: entry.skeleton() });
33214
33284
  if (!item) return null;
33215
33285
  if (entry.bareInline) {
33216
- return /* @__PURE__ */ jsx279(Fragment59, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
33286
+ return /* @__PURE__ */ jsx279(Fragment60, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
33217
33287
  }
33218
33288
  return /* @__PURE__ */ jsx279(
33219
33289
  ChatCardWithDiscuss,
@@ -34097,7 +34167,14 @@ function parseChunkToAction(chunk) {
34097
34167
  text: String(data.text || ""),
34098
34168
  ownerType: typeof data.ownerType === "string" ? data.ownerType : void 0,
34099
34169
  displayName: typeof data.displayName === "string" ? data.displayName : void 0,
34100
- userId: typeof data.userId === "string" ? data.userId : void 0
34170
+ userId: typeof data.userId === "string" ? data.userId : void 0,
34171
+ // Entity-context refs the user attached to this message (backend
34172
+ // `MESSAGE_REQUEST` chunk → `contextItems: [{ type, id }]`). The wire
34173
+ // shape carries no label; the host resolves display text + icon. `label`
34174
+ // is REQUIRED on `ChatContextItem`, so fall back to the id (same as the
34175
+ // historical path in `process-historical-messages.ts`) — keeps both
34176
+ // message sources producing an identical shape.
34177
+ contextItems: Array.isArray(data.contextItems) ? data.contextItems.filter((it) => typeof it?.type === "string" && typeof it?.id === "string").map((it) => ({ type: it.type, id: it.id, label: it.id })) : void 0
34101
34178
  };
34102
34179
  case MESSAGE_TYPE.TOKEN_USAGE:
34103
34180
  return {
@@ -34852,7 +34929,8 @@ function useRealtimeChunkProcessor(options) {
34852
34929
  ownerType: action.ownerType,
34853
34930
  displayName: action.displayName,
34854
34931
  userId: action.userId,
34855
- streamSeq
34932
+ streamSeq,
34933
+ contextItems: action.contextItems
34856
34934
  });
34857
34935
  break;
34858
34936
  case "token_usage":
@@ -36431,6 +36509,8 @@ function processHistoricalMessages(messages, options = {}) {
36431
36509
  const userAuthorType = msg.owner?.type === OWNER_TYPE.ADMIN ? "admin" : "user";
36432
36510
  messageDataArray.forEach((data) => {
36433
36511
  if (data.type === MESSAGE_TYPE.TEXT && "text" in data && data.text) {
36512
+ const rawContext = data.contextItems;
36513
+ const contextItems = Array.isArray(rawContext) ? rawContext.filter((c) => typeof c?.type === "string" && typeof c?.id === "string").map((c) => ({ type: c.type, id: c.id, label: c.id })) : void 0;
36434
36514
  processedMessages.push({
36435
36515
  id: msg.id,
36436
36516
  role: "user",
@@ -36438,7 +36518,8 @@ function processHistoricalMessages(messages, options = {}) {
36438
36518
  name: getOwnerDisplayName(msg.owner),
36439
36519
  avatar: getOwnerAvatar(msg.owner),
36440
36520
  authorType: userAuthorType,
36441
- timestamp: new Date(msg.createdAt)
36521
+ timestamp: new Date(msg.createdAt),
36522
+ ...contextItems && contextItems.length > 0 ? { contextItems } : {}
36442
36523
  });
36443
36524
  }
36444
36525
  });
@@ -36716,6 +36797,8 @@ function processHistoricalMessagesWithErrors(messages, options = {}) {
36716
36797
  const userAuthorType = msg.owner?.type === OWNER_TYPE.ADMIN ? "admin" : "user";
36717
36798
  messageDataArray.forEach((data) => {
36718
36799
  if (data.type === MESSAGE_TYPE.TEXT && "text" in data && data.text) {
36800
+ const rawContext = data.contextItems;
36801
+ const contextItems = Array.isArray(rawContext) ? rawContext.filter((c) => typeof c?.type === "string" && typeof c?.id === "string").map((c) => ({ type: c.type, id: c.id, label: c.id })) : void 0;
36719
36802
  processedMessages.push({
36720
36803
  id: msg.id,
36721
36804
  role: "user",
@@ -36723,7 +36806,8 @@ function processHistoricalMessagesWithErrors(messages, options = {}) {
36723
36806
  name: getOwnerDisplayName(msg.owner),
36724
36807
  avatar: getOwnerAvatar(msg.owner),
36725
36808
  authorType: userAuthorType,
36726
- timestamp: new Date(msg.createdAt)
36809
+ timestamp: new Date(msg.createdAt),
36810
+ ...contextItems && contextItems.length > 0 ? { contextItems } : {}
36727
36811
  });
36728
36812
  }
36729
36813
  });
@@ -37876,8 +37960,14 @@ function useChatDialogManager({
37876
37960
 
37877
37961
  // src/components/chat/embeddable-chat.tsx
37878
37962
  init_next_navigation();
37879
- import { Fragment as Fragment60, jsx as jsx283, jsxs as jsxs226 } from "react/jsx-runtime";
37963
+ import { Fragment as Fragment61, jsx as jsx283, jsxs as jsxs226 } from "react/jsx-runtime";
37880
37964
  var formatRelativePath = (p) => p.replace(/^\/+/, "").replace(/\/+$/, "");
37965
+ var mentionTokenOf = (key, markerByType) => {
37966
+ const ci = key.indexOf(":");
37967
+ const type = ci === -1 ? key : key.slice(0, ci);
37968
+ const id = ci === -1 ? "" : key.slice(ci + 1);
37969
+ return `${markerByType.get(type) ?? type.toLowerCase()}:${id}`;
37970
+ };
37881
37971
  var FALLBACK_TOP_RETRIEVED = 3;
37882
37972
  var SKELETON_ROW_VARIANTS = [
37883
37973
  { titleWidth: "w-32", slashWidth: "w-20", descriptionLines: 2 },
@@ -37989,7 +38079,7 @@ function SourceChip({
37989
38079
  );
37990
38080
  }
37991
38081
  const displayName = src.name || formatRelativePath(src.path);
37992
- const chipBody = (label) => /* @__PURE__ */ jsxs226(Fragment60, { children: [
38082
+ const chipBody = (label) => /* @__PURE__ */ jsxs226(Fragment61, { children: [
37993
38083
  icon,
37994
38084
  /* @__PURE__ */ jsxs226("span", { className: "truncate max-w-[160px]", children: [
37995
38085
  "[",
@@ -38148,7 +38238,8 @@ function EmbeddableChatInner({
38148
38238
  shell = "drawer",
38149
38239
  mingoWelcome,
38150
38240
  guideWelcome,
38151
- contextPicker
38241
+ contextPicker,
38242
+ renderMention
38152
38243
  }) {
38153
38244
  const shellLess = shell === "none";
38154
38245
  const runtime = useRequiredChatRuntime();
@@ -38319,6 +38410,11 @@ function EmbeddableChatInner({
38319
38410
  setMentionQuery(null);
38320
38411
  mentionKeyRef.current = null;
38321
38412
  }, [activeDialogId, activeMode]);
38413
+ const mentionMarkerByType = useMemo33(() => {
38414
+ const m = /* @__PURE__ */ new Map();
38415
+ for (const t of contextPicker?.entityTypes ?? []) if (t.marker) m.set(t.type, t.marker);
38416
+ return m;
38417
+ }, [contextPicker?.entityTypes]);
38322
38418
  const toggleContextItem = useCallback46(
38323
38419
  (item) => {
38324
38420
  const key = `${item.type}:${item.id}`;
@@ -38328,7 +38424,7 @@ function EmbeddableChatInner({
38328
38424
  );
38329
38425
  const grows = !alreadySelected && !mentionKeyRef.current;
38330
38426
  if (grows && contextItems.length >= contextMaxItems) return;
38331
- chatInputRef.current?.commitMention(key);
38427
+ chatInputRef.current?.commitMention(mentionTokenOf(key, mentionMarkerByType));
38332
38428
  setContextItems((prev) => {
38333
38429
  const withoutPrevMention = mentionKeyRef.current ? prev.filter((p) => `${p.type}:${p.id}` !== mentionKeyRef.current) : prev;
38334
38430
  const deduped = withoutPrevMention.filter(
@@ -38346,7 +38442,7 @@ function EmbeddableChatInner({
38346
38442
  return [...prev, item];
38347
38443
  });
38348
38444
  },
38349
- [contextMaxItems, contextItems]
38445
+ [contextMaxItems, contextItems, mentionMarkerByType]
38350
38446
  );
38351
38447
  const removeContextItem = useCallback46((item) => {
38352
38448
  const key = `${item.type}:${item.id}`;
@@ -38354,18 +38450,18 @@ function EmbeddableChatInner({
38354
38450
  if (mentionKeyRef.current === key) {
38355
38451
  mentionKeyRef.current = null;
38356
38452
  const cur = chatInputRef.current?.getValue() ?? "";
38357
- const next = cur.replace(`@${key}`, "").replace(/\s{2,}/g, " ").trimStart();
38453
+ const next = cur.replace(`@${mentionTokenOf(key, mentionMarkerByType)}`, "").replace(/\s{2,}/g, " ").trimStart();
38358
38454
  chatInputRef.current?.setValue(next);
38359
38455
  }
38360
- }, []);
38456
+ }, [mentionMarkerByType]);
38361
38457
  const handleContextValueChange = useCallback46((value) => {
38362
38458
  const key = mentionKeyRef.current;
38363
38459
  if (!key) return;
38364
- if (!value.includes(`@${key}`)) {
38460
+ if (!value.includes(`@${mentionTokenOf(key, mentionMarkerByType)}`)) {
38365
38461
  setContextItems((prev) => prev.filter((p) => `${p.type}:${p.id}` !== key));
38366
38462
  mentionKeyRef.current = null;
38367
38463
  }
38368
- }, []);
38464
+ }, [mentionMarkerByType]);
38369
38465
  const openContextPicker = useCallback46(() => {
38370
38466
  setMentionQuery(null);
38371
38467
  setContextPickerOpen(true);
@@ -38653,6 +38749,7 @@ function EmbeddableChatInner({
38653
38749
  assistantIcon: mingoAssistantIcon,
38654
38750
  renderEntityCard,
38655
38751
  resolveContextIcon,
38752
+ renderMention,
38656
38753
  NavLinkAnchor: NavLinkAnchorViaRuntime,
38657
38754
  className: "flex-1",
38658
38755
  contentClassName: "max-w-none pb-0",
@@ -38860,7 +38957,7 @@ function EmbeddableChatInner({
38860
38957
  ]
38861
38958
  }
38862
38959
  ) }) });
38863
- return /* @__PURE__ */ jsxs226(Fragment60, { children: [
38960
+ return /* @__PURE__ */ jsxs226(Fragment61, { children: [
38864
38961
  showInternalTrigger && !shellLess && /* @__PURE__ */ jsx283(
38865
38962
  "div",
38866
38963
  {
@@ -39058,6 +39155,7 @@ export {
39058
39155
  ChatInput,
39059
39156
  ToolExecutionDisplay,
39060
39157
  remarkCardLinks,
39158
+ remarkMentionChips,
39061
39159
  BlockCard,
39062
39160
  CONTEXT_ROW_CLASS,
39063
39161
  CONTEXT_ICON_CLASS,
@@ -39462,4 +39560,4 @@ export {
39462
39560
  LogsList,
39463
39561
  assets
39464
39562
  };
39465
- //# sourceMappingURL=chunk-R4CLIWAU.js.map
39563
+ //# sourceMappingURL=chunk-5FK7X3EE.js.map