@flamingo-stack/openframe-frontend-core 0.0.291 → 0.0.292

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 (133) 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-ZYBUFVQV.cjs → chunk-2NJ44RTT.cjs} +27 -27
  4. package/dist/{chunk-ZYBUFVQV.cjs.map → chunk-2NJ44RTT.cjs.map} +1 -1
  5. package/dist/{chunk-Z2EOXZBW.js → chunk-5FK7X3EE.js} +258 -159
  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-BVNYQDZE.cjs → chunk-5R5OODNE.cjs} +40 -40
  10. package/dist/{chunk-BVNYQDZE.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-EGSAB76W.js → chunk-B2U6INNO.js} +3 -3
  14. package/dist/{chunk-RSIFEDZX.js → chunk-C667P6LZ.js} +5 -5
  15. package/dist/{chunk-VMRPM24G.cjs → chunk-CDJOKNCS.cjs} +17 -17
  16. package/dist/{chunk-VMRPM24G.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-AGRSALEN.js → chunk-E2YXRSDG.js} +5 -5
  20. package/dist/{chunk-Z4GAFSNM.cjs → chunk-FFP2A77V.cjs} +10 -10
  21. package/dist/{chunk-Z4GAFSNM.cjs.map → chunk-FFP2A77V.cjs.map} +1 -1
  22. package/dist/{chunk-D4R2MUPA.js → chunk-HTYUZXQP.js} +5 -5
  23. package/dist/{chunk-CSL3ECOF.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-2YSC3API.cjs → chunk-MDLWEJAV.cjs} +1060 -961
  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-6BWZFRUG.cjs → chunk-PZZGDS5I.cjs} +17 -17
  33. package/dist/{chunk-6BWZFRUG.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/index.cjs +178 -176
  76. package/dist/components/index.cjs.map +1 -1
  77. package/dist/components/index.js +13 -11
  78. package/dist/components/index.js.map +1 -1
  79. package/dist/components/navigation/index.cjs +5 -5
  80. package/dist/components/navigation/index.js +4 -4
  81. package/dist/components/onboarding-guides/index.cjs +24 -24
  82. package/dist/components/onboarding-guides/index.js +4 -4
  83. package/dist/components/related-content/index.cjs +6 -6
  84. package/dist/components/related-content/index.js +5 -5
  85. package/dist/components/tickets/index.cjs +63 -63
  86. package/dist/components/tickets/index.js +6 -6
  87. package/dist/components/ui/index.cjs +7 -5
  88. package/dist/components/ui/index.cjs.map +1 -1
  89. package/dist/components/ui/index.js +6 -4
  90. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  91. package/dist/components/ui/tag.d.ts +10 -1
  92. package/dist/components/ui/tag.d.ts.map +1 -1
  93. package/dist/index.cjs +7 -5
  94. package/dist/index.cjs.map +1 -1
  95. package/dist/index.js +6 -4
  96. package/dist/utils/index.cjs +21 -9
  97. package/dist/utils/index.cjs.map +1 -1
  98. package/dist/utils/index.js +21 -9
  99. package/dist/utils/index.js.map +1 -1
  100. package/dist/utils/scroll-into-view.d.ts +12 -0
  101. package/dist/utils/scroll-into-view.d.ts.map +1 -1
  102. package/package.json +1 -1
  103. package/src/components/chat/chat-message-enhanced.tsx +71 -9
  104. package/src/components/chat/chat-message-list.tsx +2 -0
  105. package/src/components/chat/embeddable-chat.tsx +50 -6
  106. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +1 -0
  107. package/src/components/chat/index.ts +1 -0
  108. package/src/components/chat/remark-mention-chips.ts +72 -0
  109. package/src/components/chat/types/api.types.ts +1 -1
  110. package/src/components/chat/types/component.types.ts +18 -0
  111. package/src/components/chat/types/context-item.types.ts +5 -0
  112. package/src/components/chat/types/processing.types.ts +8 -1
  113. package/src/components/chat/utils/chunk-parser.ts +11 -0
  114. package/src/components/chat/utils/nav-anchor-props.ts +22 -4
  115. package/src/components/chat/utils/process-historical-messages.ts +22 -0
  116. package/src/components/ui/simple-markdown-renderer.tsx +14 -11
  117. package/src/components/ui/tag.tsx +12 -2
  118. package/src/utils/scroll-into-view.ts +51 -9
  119. package/dist/chunk-2YSC3API.cjs.map +0 -1
  120. package/dist/chunk-D6RK5YXX.cjs.map +0 -1
  121. package/dist/chunk-EI4WALN2.cjs.map +0 -1
  122. package/dist/chunk-R2KT5GDD.js.map +0 -1
  123. package/dist/chunk-VRSXJ5QJ.js.map +0 -1
  124. package/dist/chunk-Y4JNA4W6.cjs.map +0 -1
  125. package/dist/chunk-Z2EOXZBW.js.map +0 -1
  126. /package/dist/{chunk-EGSAB76W.js.map → chunk-B2U6INNO.js.map} +0 -0
  127. /package/dist/{chunk-RSIFEDZX.js.map → chunk-C667P6LZ.js.map} +0 -0
  128. /package/dist/{chunk-7NM7DEUK.js.map → chunk-CUQH4SHH.js.map} +0 -0
  129. /package/dist/{chunk-ZLN6SM2U.js.map → chunk-DUIWR7RQ.js.map} +0 -0
  130. /package/dist/{chunk-AGRSALEN.js.map → chunk-E2YXRSDG.js.map} +0 -0
  131. /package/dist/{chunk-D4R2MUPA.js.map → chunk-HTYUZXQP.js.map} +0 -0
  132. /package/dist/{chunk-CSL3ECOF.js.map → chunk-IXDTNQF4.js.map} +0 -0
  133. /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,
@@ -2673,6 +2673,46 @@ var remarkCardLinks = () => {
2673
2673
  };
2674
2674
  };
2675
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
+
2676
2716
  // src/components/chat/entity-cards/block-card.tsx
2677
2717
  function BlockCard(_props) {
2678
2718
  return null;
@@ -3047,7 +3087,8 @@ function ChatContextChipStrip({
3047
3087
  }
3048
3088
 
3049
3089
  // src/components/chat/chat-message-enhanced.tsx
3050
- 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;
3051
3092
  var CARD_MARKER_REGEX = /\[card:\/\/([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)[\])]/g;
3052
3093
  function normalizeContent(content) {
3053
3094
  if (typeof content === "string") {
@@ -3056,16 +3097,33 @@ function normalizeContent(content) {
3056
3097
  return content;
3057
3098
  }
3058
3099
  var ChatMessageEnhanced = forwardRef11(
3059
- ({ 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) => {
3060
3101
  const isUser = role === "user";
3061
3102
  const isError = role === "error";
3062
3103
  const authorType = authorTypeProp ?? (isUser ? "user" : assistantType === "mingo" ? "mingo" : "fae");
3063
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
+ );
3064
3120
  const cardRemarkPlugins = useMemo4(
3065
- () => hasMarkerSupport ? [remarkCardLinks] : [],
3066
- [hasMarkerSupport]
3121
+ () => [
3122
+ ...hasMarkerSupport ? [remarkCardLinks] : [],
3123
+ ...hasMentionSupport ? [remarkMentionChips] : []
3124
+ ],
3125
+ [hasMarkerSupport, hasMentionSupport]
3067
3126
  );
3068
- const segments = useMemo4(() => normalizeContent(content), [content]);
3069
3127
  const renderedCardNodeCache = useRef3(
3070
3128
  /* @__PURE__ */ new Map()
3071
3129
  );
@@ -3141,7 +3199,7 @@ var ChatMessageEnhanced = forwardRef11(
3141
3199
  return { inlineByKey, partsBySegment };
3142
3200
  }, [hasMarkerSupport, chatRefs, renderEntityCard, segments]);
3143
3201
  const cardComponentOverrides = useMemo4(() => {
3144
- if (!hasMarkerSupport) return void 0;
3202
+ if (!hasMarkerSupport && !hasMentionSupport) return void 0;
3145
3203
  const refs = chatRefs ?? {};
3146
3204
  const inlineByKey = renderingPlan?.inlineByKey;
3147
3205
  return {
@@ -3151,6 +3209,15 @@ var ChatMessageEnhanced = forwardRef11(
3151
3209
  // paragraph as siblings — the inline pill stays at the marker
3152
3210
  // position. Other href schemes pass through unchanged.
3153
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
+ }
3154
3221
  if (typeof href === "string" && href.startsWith("card://")) {
3155
3222
  const stripped = href.slice("card://".length);
3156
3223
  const sepIdx = stripped.lastIndexOf(":");
@@ -3173,7 +3240,7 @@ var ChatMessageEnhanced = forwardRef11(
3173
3240
  return /* @__PURE__ */ jsx21("a", { href, className: linkClassName, ...rest, children });
3174
3241
  }
3175
3242
  };
3176
- }, [hasMarkerSupport, chatRefs, renderingPlan, NavLinkAnchor]);
3243
+ }, [hasMarkerSupport, hasMentionSupport, renderMention, chatRefs, renderingPlan, NavLinkAnchor]);
3177
3244
  const getAvatarProps = () => {
3178
3245
  const displayName = name || (isUser ? "User" : assistantType === "mingo" ? "Mingo" : "Fae");
3179
3246
  const isMingo = assistantType === "mingo";
@@ -3318,10 +3385,10 @@ var ChatMessageEnhanced = forwardRef11(
3318
3385
  }
3319
3386
  return null;
3320
3387
  }) }),
3321
- contextItems && contextItems.length > 0 && /* @__PURE__ */ jsx21(
3388
+ stripContextItems && stripContextItems.length > 0 && /* @__PURE__ */ jsx21(
3322
3389
  ChatContextChipStrip,
3323
3390
  {
3324
- items: contextItems,
3391
+ items: stripContextItems,
3325
3392
  resolveIcon: resolveContextIcon,
3326
3393
  className: "mt-2"
3327
3394
  }
@@ -3339,7 +3406,9 @@ var MemoizedChatMessageEnhanced = memo(ChatMessageEnhanced, (prevProps, nextProp
3339
3406
  // refs object would force a full markdown re-render every keystroke.
3340
3407
  prevProps.chatRefs === nextProps.chatRefs && // Reference equality — the host re-uses the same array instance per
3341
3408
  // message (it's set once on the optimistic send and never mutated).
3342
- 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;
3343
3412
  });
3344
3413
  MemoizedChatMessageEnhanced.displayName = "MemoizedChatMessageEnhanced";
3345
3414
 
@@ -3542,6 +3611,7 @@ var ChatMessageList = forwardRef12(
3542
3611
  onLoadMore,
3543
3612
  renderEntityCard,
3544
3613
  resolveContextIcon,
3614
+ renderMention,
3545
3615
  NavLinkAnchor,
3546
3616
  ...props
3547
3617
  }, ref) => {
@@ -3767,6 +3837,7 @@ var ChatMessageList = forwardRef12(
3767
3837
  chatRefs: message2.chatRefs,
3768
3838
  contextItems: message2.contextItems,
3769
3839
  resolveContextIcon,
3840
+ renderMention,
3770
3841
  renderEntityCard,
3771
3842
  NavLinkAnchor
3772
3843
  },
@@ -4546,7 +4617,7 @@ function MingoChatHistory({
4546
4617
 
4547
4618
  // src/components/chat/mingo-welcome.tsx
4548
4619
  init_button2();
4549
- 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";
4550
4621
  var DEFAULT_SUBTITLE = "Ready to help with your technical tasks. What can I do for you?";
4551
4622
  var DEFAULT_FEATURE_CARDS = [
4552
4623
  {
@@ -4660,7 +4731,7 @@ function MingoWelcome({
4660
4731
  children: "Try again"
4661
4732
  }
4662
4733
  )
4663
- ] }) : 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: [
4664
4735
  /* @__PURE__ */ jsxs28(
4665
4736
  "div",
4666
4737
  {
@@ -5103,7 +5174,7 @@ var ModalFooter = React13.forwardRef(
5103
5174
  ModalFooter.displayName = "ModalV2Footer";
5104
5175
 
5105
5176
  // src/components/chat/mingo-chat-modals.tsx
5106
- 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";
5107
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";
5108
5179
  var cancelBtn = cn(
5109
5180
  footerBtn,
@@ -5194,7 +5265,7 @@ function ChatDialogModals({
5194
5265
  setRestoreTarget,
5195
5266
  onConfirmRestore
5196
5267
  }) {
5197
- return /* @__PURE__ */ jsxs32(Fragment5, { children: [
5268
+ return /* @__PURE__ */ jsxs32(Fragment6, { children: [
5198
5269
  /* @__PURE__ */ jsx37(
5199
5270
  RenameChatModal,
5200
5271
  {
@@ -5303,7 +5374,7 @@ function ChatPanelHeaderMobile({
5303
5374
  }
5304
5375
 
5305
5376
  // src/components/chat/chat-panel-header.tsx
5306
- 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";
5307
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";
5308
5379
  function ChatPanelHeader({
5309
5380
  showBack = false,
@@ -5321,7 +5392,7 @@ function ChatPanelHeader({
5321
5392
  onRename && { id: "rename", label: "Rename chat", onClick: onRename },
5322
5393
  onArchive && { id: "archive", label: "Archive chat", onClick: onArchive }
5323
5394
  ].filter(Boolean);
5324
- return /* @__PURE__ */ jsxs34(Fragment6, { children: [
5395
+ return /* @__PURE__ */ jsxs34(Fragment7, { children: [
5325
5396
  /* @__PURE__ */ jsx40(
5326
5397
  ChatPanelHeaderMobile,
5327
5398
  {
@@ -5339,7 +5410,7 @@ function ChatPanelHeader({
5339
5410
  }
5340
5411
  ),
5341
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: [
5342
- /* @__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: [
5343
5414
  /* @__PURE__ */ jsx40(
5344
5415
  "button",
5345
5416
  {
@@ -5375,7 +5446,7 @@ import * as React18 from "react";
5375
5446
  import { useEffect as useEffect10, useRef as useRef9, useState as useState17 } from "react";
5376
5447
  init_button2();
5377
5448
  init_cn();
5378
- 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";
5379
5450
  var CHAT_ATTACHMENT_MIME_TYPES = [
5380
5451
  "image/jpeg",
5381
5452
  "image/png",
@@ -5408,7 +5479,7 @@ function ChatAttachmentAddButton({
5408
5479
  if (!canAddMore) return;
5409
5480
  fileInputRef.current?.click();
5410
5481
  };
5411
- return /* @__PURE__ */ jsxs35(Fragment7, { children: [
5482
+ return /* @__PURE__ */ jsxs35(Fragment8, { children: [
5412
5483
  /* @__PURE__ */ jsx41(
5413
5484
  "input",
5414
5485
  {
@@ -5870,7 +5941,7 @@ function ChatComposer({
5870
5941
  }
5871
5942
 
5872
5943
  // src/components/chat/chat-archive-page.tsx
5873
- 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";
5874
5945
  function ChatArchivePage({
5875
5946
  dialogs,
5876
5947
  onSelectDialog,
@@ -5880,7 +5951,7 @@ function ChatArchivePage({
5880
5951
  hasMore = false,
5881
5952
  onLoadMore
5882
5953
  }) {
5883
- return /* @__PURE__ */ jsxs38(Fragment8, { children: [
5954
+ return /* @__PURE__ */ jsxs38(Fragment9, { children: [
5884
5955
  /* @__PURE__ */ jsx45(
5885
5956
  ChatPanelHeaderMobile,
5886
5957
  {
@@ -6012,7 +6083,7 @@ var ChatSidebarSkeleton = React19.forwardRef(
6012
6083
  ChatSidebarSkeleton.displayName = "ChatSidebarSkeleton";
6013
6084
 
6014
6085
  // src/components/chat/chat-sidebar.tsx
6015
- 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";
6016
6087
  var DialogListItem = forwardRef21(
6017
6088
  ({ className, dialog, isActive, onDialogSelect, onClick, ...props }, ref) => {
6018
6089
  const handleClick = (e) => {
@@ -6141,7 +6212,7 @@ var ChatSidebar = forwardRef21(
6141
6212
  },
6142
6213
  dialog.id
6143
6214
  )),
6144
- 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: [
6145
6216
  /* @__PURE__ */ jsx47(DialogListItemSkeleton, {}),
6146
6217
  /* @__PURE__ */ jsx47(DialogListItemSkeleton, {}),
6147
6218
  /* @__PURE__ */ jsx47(DialogListItemSkeleton, {})
@@ -6516,7 +6587,7 @@ function PlatformBadge({
6516
6587
  }
6517
6588
 
6518
6589
  // src/components/chat/entity-cards/admin-content-card.tsx
6519
- 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";
6520
6591
  function AdminContentCard({
6521
6592
  imageUrl,
6522
6593
  placeholderUrl,
@@ -6550,7 +6621,7 @@ function AdminContentCard({
6550
6621
  {
6551
6622
  className: "relative aspect-[3/2] w-full overflow-hidden shrink-0",
6552
6623
  style: { backgroundColor: imageBgColor },
6553
- children: displayUrl ? /* @__PURE__ */ jsxs43(Fragment10, { children: [
6624
+ children: displayUrl ? /* @__PURE__ */ jsxs43(Fragment11, { children: [
6554
6625
  !imageLoaded && /* @__PURE__ */ jsx53("div", { className: "absolute inset-0 animate-pulse bg-ods-border/20" }),
6555
6626
  /* @__PURE__ */ jsx53(
6556
6627
  next_image_default,
@@ -6610,7 +6681,7 @@ function getProxiedImageUrl2(imageUrl) {
6610
6681
  }
6611
6682
 
6612
6683
  // src/components/chat/entity-cards/what-i-shipped-card.tsx
6613
- 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";
6614
6685
  var STATUS_BADGE_CLASS = {
6615
6686
  published: "bg-ods-success-secondary text-ods-success",
6616
6687
  draft: "bg-ods-warning-secondary text-ods-warning",
@@ -6632,7 +6703,7 @@ function WhatIShippedCard({ entry, placeholderUrl, actions, anchorProps, classNa
6632
6703
  children: entry.status
6633
6704
  }
6634
6705
  ) : null,
6635
- meta: /* @__PURE__ */ jsxs44(Fragment11, { children: [
6706
+ meta: /* @__PURE__ */ jsxs44(Fragment12, { children: [
6636
6707
  /* @__PURE__ */ jsxs44("span", { className: "flex items-center gap-2 min-w-0", children: [
6637
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,
6638
6709
  /* @__PURE__ */ jsx54("span", { className: "truncate", children: entry.author?.full_name ?? "" })
@@ -6776,7 +6847,7 @@ import {
6776
6847
  TrendingUp,
6777
6848
  Wrench
6778
6849
  } from "lucide-react";
6779
- 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";
6780
6851
  function ProductReleaseCard({
6781
6852
  title,
6782
6853
  summary,
@@ -6827,7 +6898,7 @@ function ProductReleaseCard({
6827
6898
  "no-underline",
6828
6899
  className
6829
6900
  );
6830
- const innerLayout = /* @__PURE__ */ jsxs45(Fragment12, { children: [
6901
+ const innerLayout = /* @__PURE__ */ jsxs45(Fragment13, { children: [
6831
6902
  /* @__PURE__ */ jsxs45("div", { className: "flex flex-col md:flex-row gap-4 md:gap-6", children: [
6832
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: [
6833
6904
  coverImage ? /* @__PURE__ */ jsx57(
@@ -6852,7 +6923,7 @@ function ProductReleaseCard({
6852
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 ?? "" }) })
6853
6924
  ] })
6854
6925
  ] }),
6855
- /* @__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: [
6856
6927
  changelogCounts.features > 0 && /* @__PURE__ */ jsxs45("span", { className: "inline-flex items-center gap-1.5", children: [
6857
6928
  /* @__PURE__ */ jsx57(Sparkles, { className: "w-3.5 h-3.5" }),
6858
6929
  changelogCounts.features,
@@ -6985,7 +7056,7 @@ function ProductReleaseCard({
6985
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",
6986
7057
  className
6987
7058
  );
6988
- const innerChildren = /* @__PURE__ */ jsxs45(Fragment12, { children: [
7059
+ const innerChildren = /* @__PURE__ */ jsxs45(Fragment13, { children: [
6989
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: [
6990
7061
  coverImage ? /* @__PURE__ */ jsx57(
6991
7062
  next_image_default,
@@ -7162,7 +7233,7 @@ function buildProductReleaseCardProps(item) {
7162
7233
  import { useState as useState19 } from "react";
7163
7234
  import { Eye as Eye2 } from "lucide-react";
7164
7235
  init_cn();
7165
- 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";
7166
7237
  function BlogCardSkeleton({ size = "default" }) {
7167
7238
  if (size === "sm") {
7168
7239
  return /* @__PURE__ */ jsxs47("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -7334,7 +7405,7 @@ function BlogCard({
7334
7405
  ) : null,
7335
7406
  /* @__PURE__ */ jsxs47("span", { className: "truncate", children: [
7336
7407
  post.author_name || "Anonymous",
7337
- dateStr ? /* @__PURE__ */ jsxs47(Fragment13, { children: [
7408
+ dateStr ? /* @__PURE__ */ jsxs47(Fragment14, { children: [
7338
7409
  " \xB7 ",
7339
7410
  dateStr
7340
7411
  ] }) : null
@@ -7489,7 +7560,7 @@ function CaseStudyCard({
7489
7560
  // src/components/chat/entity-cards/customer-interview-card.tsx
7490
7561
  init_cn();
7491
7562
  import { Video } from "lucide-react";
7492
- 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";
7493
7564
  var hideOnError2 = (e) => {
7494
7565
  ;
7495
7566
  e.currentTarget.style.display = "none";
@@ -7569,7 +7640,7 @@ function CustomerInterviewCard({
7569
7640
  ] });
7570
7641
  }
7571
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: [
7572
- /* @__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: [
7573
7644
  /* @__PURE__ */ jsx61(
7574
7645
  "img",
7575
7646
  {
@@ -7939,7 +8010,7 @@ import * as PopoverPrimitive from "@radix-ui/react-popover";
7939
8010
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
7940
8011
  init_cn();
7941
8012
  import { Loader2 } from "lucide-react";
7942
- 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";
7943
8014
  var innerInputStyles = cn(
7944
8015
  "flex-1 min-w-[60px] bg-transparent border-none outline-none",
7945
8016
  "text-h4",
@@ -8375,7 +8446,7 @@ function AutocompleteInner(props, ref) {
8375
8446
  }
8376
8447
  }
8377
8448
  ),
8378
- multiple && /* @__PURE__ */ jsxs52(Fragment15, { children: [
8449
+ multiple && /* @__PURE__ */ jsxs52(Fragment16, { children: [
8379
8450
  /* @__PURE__ */ jsx66(
8380
8451
  "span",
8381
8452
  {
@@ -11739,7 +11810,7 @@ function TabContent({
11739
11810
  init_next_navigation();
11740
11811
  init_cn();
11741
11812
  import { useState as useState29, useEffect as useEffect19, useMemo as useMemo11, useRef as useRef16, useCallback as useCallback12 } from "react";
11742
- 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";
11743
11814
  function TabNavigation({
11744
11815
  activeTab: controlledActiveTab,
11745
11816
  onTabChange: controlledOnTabChange,
@@ -11826,7 +11897,7 @@ function TabNavigation({
11826
11897
  }
11827
11898
  return { background: c };
11828
11899
  })();
11829
- return /* @__PURE__ */ jsxs78(Fragment16, { children: [
11900
+ return /* @__PURE__ */ jsxs78(Fragment17, { children: [
11830
11901
  /* @__PURE__ */ jsxs78("div", { className: cn("relative w-full", className), children: [
11831
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) => {
11832
11903
  const isActive = activeTab === tab.id;
@@ -12102,7 +12173,7 @@ function StatusIndicator({ status, label, href }) {
12102
12173
 
12103
12174
  // src/components/ui/hover-dropdown.tsx
12104
12175
  import { useState as useState31, useRef as useRef18, useCallback as useCallback13 } from "react";
12105
- 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";
12106
12177
  function DefaultAnchor({
12107
12178
  href,
12108
12179
  className,
@@ -12128,7 +12199,7 @@ function HoverDropdown({
12128
12199
  const hide = useCallback13(() => {
12129
12200
  timeoutRef.current = setTimeout(() => setOpen(false), hideDelay);
12130
12201
  }, [hideDelay]);
12131
- if (items.length === 0) return /* @__PURE__ */ jsx102(Fragment17, { children });
12202
+ if (items.length === 0) return /* @__PURE__ */ jsx102(Fragment18, { children });
12132
12203
  const toggle = useCallback13((e) => {
12133
12204
  e.stopPropagation();
12134
12205
  clearTimeout(timeoutRef.current);
@@ -12175,7 +12246,7 @@ function HoverDropdown({
12175
12246
  }
12176
12247
  },
12177
12248
  children: items.map((item, i) => {
12178
- const content = /* @__PURE__ */ jsxs81(Fragment17, { children: [
12249
+ const content = /* @__PURE__ */ jsxs81(Fragment18, { children: [
12179
12250
  item.icon && /* @__PURE__ */ jsx102("span", { className: "flex-shrink-0 [&_svg]:size-3.5", children: item.icon }),
12180
12251
  /* @__PURE__ */ jsx102("span", { className: "truncate flex-1 min-w-0", children: item.label })
12181
12252
  ] });
@@ -12406,7 +12477,7 @@ function TagKeyValueFilter({
12406
12477
  }
12407
12478
 
12408
12479
  // src/components/ui/filter-modal.tsx
12409
- 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";
12410
12481
  function FilterModal({
12411
12482
  isOpen,
12412
12483
  onClose,
@@ -12482,7 +12553,7 @@ function FilterModal({
12482
12553
  "flex-1 min-h-0 flex flex-col",
12483
12554
  !isEmpty && "md:bg-ods-bg md:border md:border-ods-border md:rounded-md md:px-3"
12484
12555
  ),
12485
- 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: [
12486
12557
  /* @__PURE__ */ jsx106(Skeleton, { className: "h-5 w-24" }),
12487
12558
  /* @__PURE__ */ jsx106("div", { className: "rounded-md border border-ods-border overflow-hidden", children: [0, 1, 2].map((row) => /* @__PURE__ */ jsxs85(
12488
12559
  "div",
@@ -12502,7 +12573,7 @@ function FilterModal({
12502
12573
  /* @__PURE__ */ jsx106("p", { className: "text-h4", children: emptyStateTitle }),
12503
12574
  /* @__PURE__ */ jsx106("p", { className: "text-h6", children: emptyStateDescription })
12504
12575
  ] })
12505
- ] }) : /* @__PURE__ */ jsxs85(Fragment18, { children: [
12576
+ ] }) : /* @__PURE__ */ jsxs85(Fragment19, { children: [
12506
12577
  sortConfig && sortConfig.columns.length > 0 && /* @__PURE__ */ jsxs85("div", { className: "flex flex-col gap-1", children: [
12507
12578
  /* @__PURE__ */ jsx106("span", { className: "text-h5 text-ods-text-secondary", children: sortConfig.title || "Sort By" }),
12508
12579
  /* @__PURE__ */ jsx106("div", { className: "rounded-md border border-ods-border overflow-hidden", children: sortConfig.columns.map((column) => /* @__PURE__ */ jsx106(
@@ -13277,7 +13348,7 @@ import {
13277
13348
  safePolygon,
13278
13349
  arrow
13279
13350
  } from "@floating-ui/react";
13280
- 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";
13281
13352
  function parseColoredText(text) {
13282
13353
  if (typeof text !== "string") return text;
13283
13354
  const parts = [];
@@ -13302,7 +13373,7 @@ function parseColoredText(text) {
13302
13373
  const remainingText = text.slice(lastIndex);
13303
13374
  parts.push(/* @__PURE__ */ jsx118("span", { children: remainingText }, `text-${keyIndex++}`));
13304
13375
  }
13305
- return parts.length > 0 ? /* @__PURE__ */ jsx118(Fragment19, { children: parts }) : text;
13376
+ return parts.length > 0 ? /* @__PURE__ */ jsx118(Fragment20, { children: parts }) : text;
13306
13377
  }
13307
13378
  function FloatingTooltip({
13308
13379
  content,
@@ -13356,7 +13427,7 @@ function FloatingTooltip({
13356
13427
  bottom: "top",
13357
13428
  left: "right"
13358
13429
  }[placement.split("-")[0]];
13359
- return /* @__PURE__ */ jsxs93(Fragment19, { children: [
13430
+ return /* @__PURE__ */ jsxs93(Fragment20, { children: [
13360
13431
  /* @__PURE__ */ jsx118("div", { ref: refs.setReference, ...getReferenceProps(), children }),
13361
13432
  /* @__PURE__ */ jsx118(FloatingPortal, { children: isOpen && /* @__PURE__ */ jsxs93(
13362
13433
  "div",
@@ -13407,7 +13478,7 @@ function FloatingTooltip({
13407
13478
  }
13408
13479
 
13409
13480
  // src/components/ui/dashboard-info-card.tsx
13410
- 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";
13411
13482
  function DashboardInfoCard({
13412
13483
  title,
13413
13484
  titleSlot,
@@ -13422,7 +13493,7 @@ function DashboardInfoCard({
13422
13493
  valueClassName
13423
13494
  }) {
13424
13495
  const formattedValue = typeof value === "number" ? value.toLocaleString() : value;
13425
- const cardContent = /* @__PURE__ */ jsxs94(Fragment20, { children: [
13496
+ const cardContent = /* @__PURE__ */ jsxs94(Fragment21, { children: [
13426
13497
  /* @__PURE__ */ jsxs94("div", { className: "flex-1 flex flex-col", children: [
13427
13498
  titleSlot ?? /* @__PURE__ */ jsx119("p", { className: "text-h5 text-ods-text-secondary", children: title }),
13428
13499
  /* @__PURE__ */ jsxs94("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
@@ -13640,7 +13711,7 @@ function DeviceCard({
13640
13711
 
13641
13712
  // src/components/ui/device-card-compact.tsx
13642
13713
  init_cn();
13643
- 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";
13644
13715
  function DeviceCardCompact({
13645
13716
  deviceName,
13646
13717
  organization,
@@ -13650,7 +13721,7 @@ function DeviceCardCompact({
13650
13721
  const hasName = deviceName && deviceName !== "-" && deviceName !== "null";
13651
13722
  const hasOrg = organization && organization !== "-" && organization !== "null";
13652
13723
  if (!hasName && !hasOrg) {
13653
- return /* @__PURE__ */ jsx122(Fragment21, {});
13724
+ return /* @__PURE__ */ jsx122(Fragment22, {});
13654
13725
  }
13655
13726
  return /* @__PURE__ */ jsxs97(
13656
13727
  "div",
@@ -14064,7 +14135,7 @@ function DropdownButton({
14064
14135
  init_next_link();
14065
14136
  init_cn();
14066
14137
  init_button2();
14067
- 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";
14068
14139
  function MoreActionsMenu({
14069
14140
  items,
14070
14141
  align = "end",
@@ -14102,7 +14173,7 @@ function MoreActionsMenu({
14102
14173
  ),
14103
14174
  children: items.map((item, idx) => {
14104
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";
14105
- const content = /* @__PURE__ */ jsxs102(Fragment22, { children: [
14176
+ const content = /* @__PURE__ */ jsxs102(Fragment23, { children: [
14106
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 }),
14107
14178
  /* @__PURE__ */ jsx129("span", { className: "font-medium text-[18px] leading-6 text-ods-text-primary", children: item.label })
14108
14179
  ] });
@@ -17064,7 +17135,7 @@ SelectButton.displayName = "SelectButton";
17064
17135
  // src/components/features/seo-editor-preview.tsx
17065
17136
  import { useState as useState47 } from "react";
17066
17137
  import { Globe as Globe2, ExternalLink as ExternalLink3, Upload as Upload3, X as X6, Loader2 as Loader25, Sparkles as Sparkles2 } from "lucide-react";
17067
- 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";
17068
17139
  function SEOEditorPreview({
17069
17140
  seoTitle,
17070
17141
  seoDescription,
@@ -17113,7 +17184,7 @@ function SEOEditorPreview({
17113
17184
  /* @__PURE__ */ jsxs121("div", { className: "space-y-2", children: [
17114
17185
  /* @__PURE__ */ jsxs121("div", { className: "flex items-center gap-2", children: [
17115
17186
  /* @__PURE__ */ jsx155(Label, { className: "font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary", children: "SEO Title" }),
17116
- aiConfidenceSeoTitle !== void 0 && /* @__PURE__ */ jsxs121(Fragment23, { children: [
17187
+ aiConfidenceSeoTitle !== void 0 && /* @__PURE__ */ jsxs121(Fragment24, { children: [
17117
17188
  /* @__PURE__ */ jsxs121(Badge, { variant: "secondary", className: "flex items-center gap-1", children: [
17118
17189
  /* @__PURE__ */ jsx155(Sparkles2, { className: "h-3 w-3" }),
17119
17190
  "AI Generated"
@@ -17144,7 +17215,7 @@ function SEOEditorPreview({
17144
17215
  /* @__PURE__ */ jsxs121("div", { className: "space-y-2", children: [
17145
17216
  /* @__PURE__ */ jsxs121("div", { className: "flex items-center gap-2", children: [
17146
17217
  /* @__PURE__ */ jsx155(Label, { className: "font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary", children: "SEO Keywords" }),
17147
- aiConfidenceSeoKeywords !== void 0 && /* @__PURE__ */ jsxs121(Fragment23, { children: [
17218
+ aiConfidenceSeoKeywords !== void 0 && /* @__PURE__ */ jsxs121(Fragment24, { children: [
17148
17219
  /* @__PURE__ */ jsxs121(Badge, { variant: "secondary", className: "flex items-center gap-1", children: [
17149
17220
  /* @__PURE__ */ jsx155(Sparkles2, { className: "h-3 w-3" }),
17150
17221
  "AI Generated"
@@ -17176,7 +17247,7 @@ function SEOEditorPreview({
17176
17247
  /* @__PURE__ */ jsxs121("div", { className: "space-y-2 flex flex-col h-full", children: [
17177
17248
  /* @__PURE__ */ jsxs121("div", { className: "flex items-center gap-2", children: [
17178
17249
  /* @__PURE__ */ jsx155(Label, { className: "font-['DM_Sans'] text-[14px] font-medium text-ods-text-primary", children: "SEO Description" }),
17179
- aiConfidenceSeoDescription !== void 0 && /* @__PURE__ */ jsxs121(Fragment23, { children: [
17250
+ aiConfidenceSeoDescription !== void 0 && /* @__PURE__ */ jsxs121(Fragment24, { children: [
17180
17251
  /* @__PURE__ */ jsxs121(Badge, { variant: "secondary", className: "flex items-center gap-1", children: [
17181
17252
  /* @__PURE__ */ jsx155(Sparkles2, { className: "h-3 w-3" }),
17182
17253
  "AI Generated"
@@ -17250,7 +17321,7 @@ function SEOEditorPreview({
17250
17321
  {
17251
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",
17252
17323
  onClick: () => onOgImageUpload && fileInputRef?.click(),
17253
- 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: [
17254
17325
  /* @__PURE__ */ jsx155(Upload3, { className: "h-8 w-8 text-ods-text-secondary mb-2" }),
17255
17326
  /* @__PURE__ */ jsx155("span", { className: "text-sm text-ods-text-secondary font-['DM_Sans']", children: onOgImageUpload ? "Click to upload OG image" : "No image" })
17256
17327
  ] })
@@ -19406,7 +19477,7 @@ var DropdownMenuShortcut = ({
19406
19477
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
19407
19478
 
19408
19479
  // src/components/features/policy-configuration-panel.tsx
19409
- 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";
19410
19481
  var approvalLevelOptions = [
19411
19482
  { value: "ALLOW", label: "Allow" },
19412
19483
  { value: "ASK_USER", label: "Ask User" },
@@ -19468,7 +19539,7 @@ var CategorySection = ({
19468
19539
  onPolicyPermissionChange
19469
19540
  }) => {
19470
19541
  const { contentRef, height } = useAnimatedHeight(category.isExpanded);
19471
- return /* @__PURE__ */ jsxs140(Fragment24, { children: [
19542
+ return /* @__PURE__ */ jsxs140(Fragment25, { children: [
19472
19543
  /* @__PURE__ */ jsxs140(
19473
19544
  "div",
19474
19545
  {
@@ -19711,7 +19782,7 @@ function CountryOption({ country }) {
19711
19782
  init_cn();
19712
19783
  import { getCountries } from "libphonenumber-js";
19713
19784
  import { useEffect as useEffect35, useState as useState53 } from "react";
19714
- 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";
19715
19786
  function WaitlistForm({
19716
19787
  id = "waitlist-form",
19717
19788
  className,
@@ -19856,7 +19927,7 @@ function WaitlistForm({
19856
19927
  error: showConsentError ? "Please agree to SMS notifications to continue." : void 0,
19857
19928
  disabled: isSubmitting,
19858
19929
  label: smsCheckboxLabel,
19859
- description: /* @__PURE__ */ jsxs142(Fragment25, { children: [
19930
+ description: /* @__PURE__ */ jsxs142(Fragment26, { children: [
19860
19931
  consentText,
19861
19932
  " View our ",
19862
19933
  /* @__PURE__ */ jsx181(
@@ -20234,7 +20305,7 @@ function NotificationTile({
20234
20305
  }
20235
20306
 
20236
20307
  // src/components/features/notifications/notification-drawer.tsx
20237
- 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";
20238
20309
  function NotificationDrawer({
20239
20310
  className,
20240
20311
  liveDurationMs,
@@ -20362,7 +20433,7 @@ function DrawerScrollList({
20362
20433
  {
20363
20434
  ref: scrollRef,
20364
20435
  className: "flex flex-1 flex-col gap-[var(--spacing-system-xs)] overflow-y-auto px-[var(--spacing-system-m)]",
20365
- children: isEmpty && !isLoadingMore ? /* @__PURE__ */ jsx184(EmptyState, {}) : /* @__PURE__ */ jsxs144(Fragment26, { children: [
20436
+ children: isEmpty && !isLoadingMore ? /* @__PURE__ */ jsx184(EmptyState, {}) : /* @__PURE__ */ jsxs144(Fragment27, { children: [
20366
20437
  unreadNotifications.map((n) => {
20367
20438
  const custom = renderTile?.(n, { onComplete, onSettle, liveDurationMs });
20368
20439
  if (custom) return /* @__PURE__ */ jsx184("div", { children: custom }, n.id);
@@ -20384,7 +20455,7 @@ function DrawerScrollList({
20384
20455
  );
20385
20456
  }
20386
20457
  function DrawerLoadingTiles() {
20387
- return /* @__PURE__ */ jsxs144(Fragment26, { children: [
20458
+ return /* @__PURE__ */ jsxs144(Fragment27, { children: [
20388
20459
  /* @__PURE__ */ jsx184(
20389
20460
  "div",
20390
20461
  {
@@ -21136,7 +21207,7 @@ function HeaderButton({
21136
21207
  }
21137
21208
 
21138
21209
  // src/components/features/time-tracker/time-tracker-header-button.tsx
21139
- 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";
21140
21211
  function TimeTrackerHeaderButton({ className, disabled }) {
21141
21212
  const ctx = useOptionalTimeTracker();
21142
21213
  const elapsedLabel = useTrackerClock({
@@ -21159,7 +21230,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
21159
21230
  isActive && "w-auto gap-[var(--spacing-system-xsf)] px-[var(--spacing-system-sf)] md:w-auto",
21160
21231
  className
21161
21232
  ),
21162
- icon: /* @__PURE__ */ jsxs147(Fragment27, { children: [
21233
+ icon: /* @__PURE__ */ jsxs147(Fragment28, { children: [
21163
21234
  /* @__PURE__ */ jsx190(
21164
21235
  ClockHistoryIcon,
21165
21236
  {
@@ -21388,7 +21459,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
21388
21459
  }
21389
21460
 
21390
21461
  // src/components/features/board/ticket-card.tsx
21391
- 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";
21392
21463
  var PRIORITY_COLOR_CLASS = {
21393
21464
  low: "text-ods-text-secondary",
21394
21465
  medium: "text-ods-info",
@@ -21461,7 +21532,7 @@ function TicketCard({
21461
21532
  ] }) : null;
21462
21533
  const timestampLabel = ticket.createdAt ? formatTicketRelativeTime(ticket.createdAt) : null;
21463
21534
  const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
21464
- const body = /* @__PURE__ */ jsxs150(Fragment28, { children: [
21535
+ const body = /* @__PURE__ */ jsxs150(Fragment29, { children: [
21465
21536
  /* @__PURE__ */ jsxs150("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
21466
21537
  /* @__PURE__ */ jsxs150("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
21467
21538
  /* @__PURE__ */ jsx193("p", { className: "text-h3 truncate text-ods-text-primary", children: ticket.title }),
@@ -21589,7 +21660,7 @@ var TicketCardSkeleton = React78.forwardRef(
21589
21660
  TicketCardSkeleton.displayName = "TicketCardSkeleton";
21590
21661
 
21591
21662
  // src/components/features/board/board-column.tsx
21592
- 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";
21593
21664
  function BoardColumn({
21594
21665
  column,
21595
21666
  collapsed = false,
@@ -21628,7 +21699,7 @@ function BoardColumn({
21628
21699
  onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
21629
21700
  }
21630
21701
  ),
21631
- !collapsed && /* @__PURE__ */ jsxs152(Fragment29, { children: [
21702
+ !collapsed && /* @__PURE__ */ jsxs152(Fragment30, { children: [
21632
21703
  /* @__PURE__ */ jsx195("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
21633
21704
  /* @__PURE__ */ jsx195(
21634
21705
  ColumnBody,
@@ -21721,7 +21792,7 @@ function SkeletonStack({ count = 4 }) {
21721
21792
  () => Array.from({ length: count }, () => Math.random().toString(36).slice(2)),
21722
21793
  [count]
21723
21794
  );
21724
- 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)) });
21725
21796
  }
21726
21797
  function EmptyState2() {
21727
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: [
@@ -22133,7 +22204,7 @@ function SortableRow({
22133
22204
  init_next_link();
22134
22205
  import React82, { useEffect as useEffect43, useRef as useRef32, useState as useState62 } from "react";
22135
22206
  init_button2();
22136
- 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";
22137
22208
  function Header2({ config, platform }) {
22138
22209
  const [show, setShow] = useState62(true);
22139
22210
  const [lastScrollY, setLastScrollY] = useState62(0);
@@ -22278,7 +22349,7 @@ function Header2({ config, platform }) {
22278
22349
  },
22279
22350
  child.id
22280
22351
  )) }),
22281
- item.dropdownContent && /* @__PURE__ */ jsxs154(Fragment31, { children: [
22352
+ item.dropdownContent && /* @__PURE__ */ jsxs154(Fragment32, { children: [
22282
22353
  item.showDropdownDivider !== false && /* @__PURE__ */ jsx198("div", { className: "h-px my-2 mx-2 bg-ods-border" }),
22283
22354
  /* @__PURE__ */ jsx198("div", { className: "px-2 pb-2", children: item.dropdownContent })
22284
22355
  ] })
@@ -22461,7 +22532,7 @@ function ClientOnlyHeader({ config, skeleton }) {
22461
22532
  import { useEffect as useEffect45, useRef as useRef33 } from "react";
22462
22533
  init_button2();
22463
22534
  import { X as X10 } from "lucide-react";
22464
- 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";
22465
22536
  function MobileNavPanel({ isOpen, config }) {
22466
22537
  const panelRef = useRef33(null);
22467
22538
  useEffect45(() => {
@@ -22534,7 +22605,7 @@ function MobileNavPanel({ isOpen, config }) {
22534
22605
  item.id
22535
22606
  );
22536
22607
  };
22537
- return /* @__PURE__ */ jsxs156(Fragment32, { children: [
22608
+ return /* @__PURE__ */ jsxs156(Fragment33, { children: [
22538
22609
  /* @__PURE__ */ jsx201(
22539
22610
  "div",
22540
22611
  {
@@ -22585,7 +22656,7 @@ function MobileNavPanel({ isOpen, config }) {
22585
22656
  import { useState as useState64, useEffect as useEffect46 } from "react";
22586
22657
  import { motion as motion2, AnimatePresence } from "framer-motion";
22587
22658
  init_button2();
22588
- 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";
22589
22660
  function SlidingSidebar({ config }) {
22590
22661
  const [expandedItems, setExpandedItems] = useState64(/* @__PURE__ */ new Set());
22591
22662
  const [mounted, setMounted] = useState64(false);
@@ -22707,7 +22778,7 @@ function SlidingSidebar({ config }) {
22707
22778
  if (!mounted) {
22708
22779
  return null;
22709
22780
  }
22710
- return /* @__PURE__ */ jsxs157(Fragment33, { children: [
22781
+ return /* @__PURE__ */ jsxs157(Fragment34, { children: [
22711
22782
  /* @__PURE__ */ jsx202(AnimatePresence, { children: config.isOpen && /* @__PURE__ */ jsx202(
22712
22783
  motion2.div,
22713
22784
  {
@@ -22899,7 +22970,7 @@ function NavigationSidebarToggle({
22899
22970
  }
22900
22971
 
22901
22972
  // src/components/navigation/navigation-sidebar.tsx
22902
- 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";
22903
22974
  var MINIMIZED_WIDTH = 56;
22904
22975
  var EXPANDED_WIDTH = 224;
22905
22976
  var STORAGE_KEY = "of.navigationSidebar.minimized";
@@ -22964,7 +23035,7 @@ function NavigationSidebar({ config, disabled = false }) {
22964
23035
  return () => cancelAnimationFrame(id);
22965
23036
  }
22966
23037
  }, [isHydrated, transitionsEnabled]);
22967
- return /* @__PURE__ */ jsxs161(Fragment34, { children: [
23038
+ return /* @__PURE__ */ jsxs161(Fragment35, { children: [
22968
23039
  /* @__PURE__ */ jsx206(
22969
23040
  "div",
22970
23041
  {
@@ -22998,7 +23069,7 @@ function NavigationSidebar({ config, disabled = false }) {
22998
23069
  ),
22999
23070
  style: { width: sidebarWidth },
23000
23071
  "aria-label": "Main navigation sidebar",
23001
- children: isHydrated && /* @__PURE__ */ jsxs161(Fragment34, { children: [
23072
+ children: isHydrated && /* @__PURE__ */ jsxs161(Fragment35, { children: [
23002
23073
  /* @__PURE__ */ jsx206(NavigationSidebarHeader, { minimized }),
23003
23074
  /* @__PURE__ */ jsxs161("div", { className: "flex-1 flex flex-col justify-between py-4 overflow-y-auto", children: [
23004
23075
  /* @__PURE__ */ jsx206("nav", { className: "flex flex-col", "aria-label": "Primary navigation", children: primaryItems.map((item) => /* @__PURE__ */ jsx206(
@@ -23407,7 +23478,7 @@ import { createContext as createContext8, Suspense as Suspense2, useCallback as
23407
23478
 
23408
23479
  // src/components/navigation/mobile-burger-menu.tsx
23409
23480
  import React87, { useCallback as useCallback25, useEffect as useEffect48 } from "react";
23410
- 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";
23411
23482
  var HEADER_HEIGHT = 48;
23412
23483
  var MobileBurgerMenu = React87.memo(function MobileBurgerMenu2({
23413
23484
  isOpen,
@@ -23493,7 +23564,7 @@ var MobileBurgerMenu = React87.memo(function MobileBurgerMenu2({
23493
23564
  row.length === 1 && /* @__PURE__ */ jsx211("div", { className: "flex-1" })
23494
23565
  ] }, rowIndex)) });
23495
23566
  };
23496
- return /* @__PURE__ */ jsxs166(Fragment35, { children: [
23567
+ return /* @__PURE__ */ jsxs166(Fragment36, { children: [
23497
23568
  /* @__PURE__ */ jsx211(
23498
23569
  "div",
23499
23570
  {
@@ -24467,7 +24538,7 @@ import React90, { useRef as useRef35, useCallback as useCallback28 } from "react
24467
24538
  import React89 from "react";
24468
24539
  init_button2();
24469
24540
  init_cn();
24470
- 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";
24471
24542
  function OnboardingStepCard({
24472
24543
  step,
24473
24544
  isCompleted,
@@ -24509,10 +24580,10 @@ function OnboardingStepCard({
24509
24580
  /* @__PURE__ */ jsx221("h3", { className: "text-h4 text-ods-text-primary truncate", title: step.title, children: step.title }),
24510
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 })
24511
24582
  ] }),
24512
- /* @__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: [
24513
24584
  /* @__PURE__ */ jsx221("div", { className: "h-[32px] w-[100px] bg-ods-border rounded-[6px] animate-pulse" }),
24514
24585
  /* @__PURE__ */ jsx221("div", { className: "h-[32px] w-[120px] bg-ods-border rounded-[6px] animate-pulse" })
24515
- ] }) : isCompleted ? /* @__PURE__ */ jsxs176(Fragment36, { children: [
24586
+ ] }) : isCompleted ? /* @__PURE__ */ jsxs176(Fragment37, { children: [
24516
24587
  /* @__PURE__ */ jsx221(
24517
24588
  StatusBadge,
24518
24589
  {
@@ -24531,14 +24602,14 @@ function OnboardingStepCard({
24531
24602
  children: step.completedText
24532
24603
  }
24533
24604
  )
24534
- ] }) : isSkipped ? /* @__PURE__ */ jsx221(Fragment36, { children: /* @__PURE__ */ jsx221(
24605
+ ] }) : isSkipped ? /* @__PURE__ */ jsx221(Fragment37, { children: /* @__PURE__ */ jsx221(
24535
24606
  StatusBadge,
24536
24607
  {
24537
24608
  text: "SKIPPED",
24538
24609
  variant: "card",
24539
24610
  colorScheme: "default"
24540
24611
  }
24541
- ) }) : /* @__PURE__ */ jsxs176(Fragment36, { children: [
24612
+ ) }) : /* @__PURE__ */ jsxs176(Fragment37, { children: [
24542
24613
  /* @__PURE__ */ jsx221(
24543
24614
  Button,
24544
24615
  {
@@ -25423,7 +25494,7 @@ function getHideClasses(hideAt) {
25423
25494
  }
25424
25495
 
25425
25496
  // src/components/ui/table/table-header.tsx
25426
- 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";
25427
25498
  function TableHeader({
25428
25499
  columns,
25429
25500
  className,
@@ -25534,10 +25605,10 @@ function TableHeader({
25534
25605
  column.sortable && "cursor-pointer hover:text-ods-text-primary transition-colors"
25535
25606
  ),
25536
25607
  onClick: () => handleSort(column),
25537
- children: column.renderHeader ? /* @__PURE__ */ jsxs186(Fragment37, { children: [
25608
+ children: column.renderHeader ? /* @__PURE__ */ jsxs186(Fragment38, { children: [
25538
25609
  column.renderHeader(),
25539
25610
  getSortIcon(column)
25540
- ] }) : /* @__PURE__ */ jsxs186(Fragment37, { children: [
25611
+ ] }) : /* @__PURE__ */ jsxs186(Fragment38, { children: [
25541
25612
  /* @__PURE__ */ jsx234("span", { className: "text-h5 text-ods-text-secondary uppercase whitespace-nowrap", children: column.label }),
25542
25613
  getSortIcon(column)
25543
25614
  ] })
@@ -25592,7 +25663,7 @@ function TableCell({
25592
25663
 
25593
25664
  // src/components/ui/table/table-skeleton.tsx
25594
25665
  init_cn();
25595
- 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";
25596
25667
  var ROW_HEIGHT_DESKTOP = "h-[68px] md:h-[80px]";
25597
25668
  var ROW_HEIGHT_MOBILE = "h-[68px]";
25598
25669
  function TableCardSkeleton({
@@ -25603,7 +25674,7 @@ function TableCardSkeleton({
25603
25674
  className,
25604
25675
  rowClassName
25605
25676
  }) {
25606
- 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(
25607
25678
  "div",
25608
25679
  {
25609
25680
  className: cn(
@@ -25758,7 +25829,7 @@ function TableRow({
25758
25829
  }
25759
25830
 
25760
25831
  // src/components/ui/table/table.tsx
25761
- 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";
25762
25833
  function injectSyntheticColumns(columns, rowActions, renderRowActions, rowHref) {
25763
25834
  const hasActions = Boolean(rowActions?.length) || Boolean(renderRowActions);
25764
25835
  const result = [...columns];
@@ -25958,7 +26029,7 @@ function Table({
25958
26029
  hasActions: Boolean(rowActions) && rowActions.length > 0,
25959
26030
  hasChevron: Boolean(rowHref)
25960
26031
  }
25961
- ) : 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: [
25962
26033
  data.map((item, index) => /* @__PURE__ */ jsx238(
25963
26034
  TableRow,
25964
26035
  {
@@ -26579,7 +26650,7 @@ function DataTableColumnFilter({
26579
26650
  }
26580
26651
 
26581
26652
  // src/components/ui/data-table/data-table-header.tsx
26582
- 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";
26583
26654
  function DataTableHeader({
26584
26655
  className,
26585
26656
  stickyHeader,
@@ -26673,7 +26744,7 @@ function HeaderLabel({ header }) {
26673
26744
  if (typeof headerDef === "string") {
26674
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 });
26675
26746
  }
26676
- return /* @__PURE__ */ jsx247(Fragment40, { children: flexRender(headerDef, header.getContext()) });
26747
+ return /* @__PURE__ */ jsx247(Fragment41, { children: flexRender(headerDef, header.getContext()) });
26677
26748
  }
26678
26749
  function SortIcon({ sorted }) {
26679
26750
  if (sorted === "asc") return /* @__PURE__ */ jsx247(Arrow01UpIcon, { className: "w-4 h-4 text-ods-accent" });
@@ -26712,7 +26783,7 @@ import { flexRender as flexRender2 } from "@tanstack/react-table";
26712
26783
 
26713
26784
  // src/components/ui/data-table/data-table-skeleton.tsx
26714
26785
  init_cn();
26715
- 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";
26716
26787
  var ROW_HEIGHT_DESKTOP2 = "h-[68px] md:h-[80px]";
26717
26788
  var ROW_HEIGHT_MOBILE2 = "h-[68px]";
26718
26789
  function DataTableSkeleton({
@@ -26723,7 +26794,7 @@ function DataTableSkeleton({
26723
26794
  const table = useDataTableContext();
26724
26795
  const columns = table.getVisibleFlatColumns();
26725
26796
  const firstColumnId = columns[0]?.id;
26726
- 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(
26727
26798
  "div",
26728
26799
  {
26729
26800
  className: cn(
@@ -26779,7 +26850,7 @@ function DataTableSkeleton({
26779
26850
  }
26780
26851
 
26781
26852
  // src/components/ui/data-table/data-table-row.tsx
26782
- 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";
26783
26854
  function DataTableRowImpl({
26784
26855
  row,
26785
26856
  onClick,
@@ -26880,7 +26951,7 @@ function CellContent({ children }) {
26880
26951
  if (typeof children === "string" || typeof children === "number") {
26881
26952
  return /* @__PURE__ */ jsx250("span", { className: "text-h4 text-ods-text-primary truncate", title: String(children), children });
26882
26953
  }
26883
- return /* @__PURE__ */ jsx250(Fragment42, { children });
26954
+ return /* @__PURE__ */ jsx250(Fragment43, { children });
26884
26955
  }
26885
26956
 
26886
26957
  // src/components/ui/data-table/data-table-body.tsx
@@ -26958,7 +27029,7 @@ function DataTableBody({
26958
27029
 
26959
27030
  // src/components/ui/data-table/data-table-infinite-footer.tsx
26960
27031
  import { useEffect as useEffect51, useRef as useRef41 } from "react";
26961
- 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";
26962
27033
  function DataTableInfiniteFooter({
26963
27034
  hasNextPage,
26964
27035
  isFetchingNextPage,
@@ -26982,7 +27053,7 @@ function DataTableInfiniteFooter({
26982
27053
  observer.observe(sentinel);
26983
27054
  return () => observer.disconnect();
26984
27055
  }, [hasNextPage, isFetchingNextPage, rootMargin]);
26985
- return /* @__PURE__ */ jsxs200(Fragment43, { children: [
27056
+ return /* @__PURE__ */ jsxs200(Fragment44, { children: [
26986
27057
  isFetchingNextPage && /* @__PURE__ */ jsx252(DataTableSkeleton, { rows: skeletonRows }),
26987
27058
  hasNextPage && /* @__PURE__ */ jsx252("div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" })
26988
27059
  ] });
@@ -28007,7 +28078,7 @@ function FileUpload({
28007
28078
  import * as React100 from "react";
28008
28079
  import { Loader2 as Loader211 } from "lucide-react";
28009
28080
  init_cn();
28010
- 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";
28011
28082
  var DEFAULT_MAX_SIZE = 25 * 1024 * 1024;
28012
28083
  function formatSize(bytes) {
28013
28084
  const mb = bytes / (1024 * 1024);
@@ -28133,7 +28204,7 @@ function ImageUploader({
28133
28204
  !interactive && "opacity-60",
28134
28205
  !hasImage && !interactive && "cursor-not-allowed"
28135
28206
  ),
28136
- children: hasImage ? /* @__PURE__ */ jsxs206(Fragment45, { children: [
28207
+ children: hasImage ? /* @__PURE__ */ jsxs206(Fragment46, { children: [
28137
28208
  /* @__PURE__ */ jsx258("div", { className: "relative min-h-0 w-full flex-1 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx258(
28138
28209
  "img",
28139
28210
  {
@@ -28170,7 +28241,7 @@ function ImageUploader({
28170
28241
  )
28171
28242
  ] }),
28172
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" }) })
28173
- ] }) : 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: [
28174
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" }) }),
28175
28246
  /* @__PURE__ */ jsxs206("div", { className: "flex w-full flex-col items-center text-center", children: [
28176
28247
  /* @__PURE__ */ jsx258("p", { className: "text-h4 text-ods-text-primary", children: label }),
@@ -28240,7 +28311,7 @@ PopoverContent.displayName = PopoverPrimitive4.Content.displayName;
28240
28311
 
28241
28312
  // src/components/ui/color-preset-select.tsx
28242
28313
  init_cn();
28243
- 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";
28244
28315
  var TICKET_STATUS_COLOR_PRESETS = [
28245
28316
  { key: "green", label: "Green", color: "#5ea62e" },
28246
28317
  { key: "lime", label: "Lime", color: "#8bc34a" },
@@ -28391,7 +28462,7 @@ function RgbInputs({ value, onChange }) {
28391
28462
  const b = next.b ?? rgb.b;
28392
28463
  onChange(rgbToHex(r, g, b));
28393
28464
  };
28394
- return /* @__PURE__ */ jsxs207(Fragment46, { children: [
28465
+ return /* @__PURE__ */ jsxs207(Fragment47, { children: [
28395
28466
  /* @__PURE__ */ jsx260(ChannelInput, { value: rgb.r, min: 0, max: 255, ariaLabel: "Red", onCommit: (r) => update({ r }) }),
28396
28467
  /* @__PURE__ */ jsx260(ChannelInput, { value: rgb.g, min: 0, max: 255, ariaLabel: "Green", onCommit: (g) => update({ g }) }),
28397
28468
  /* @__PURE__ */ jsx260(ChannelInput, { value: rgb.b, min: 0, max: 255, ariaLabel: "Blue", onCommit: (b) => update({ b }) })
@@ -28407,7 +28478,7 @@ function HslInputs({ value, onChange }) {
28407
28478
  const out = hslToRgb(h, s, l);
28408
28479
  onChange(rgbToHex(out.r, out.g, out.b));
28409
28480
  };
28410
- return /* @__PURE__ */ jsxs207(Fragment46, { children: [
28481
+ return /* @__PURE__ */ jsxs207(Fragment47, { children: [
28411
28482
  /* @__PURE__ */ jsx260(ChannelInput, { value: hsl.h, min: 0, max: 360, ariaLabel: "Hue", onCommit: (h) => update({ h }) }),
28412
28483
  /* @__PURE__ */ jsx260(ChannelInput, { value: hsl.s, min: 0, max: 100, ariaLabel: "Saturation", onCommit: (s) => update({ s }) }),
28413
28484
  /* @__PURE__ */ jsx260(ChannelInput, { value: hsl.l, min: 0, max: 100, ariaLabel: "Lightness", onCommit: (l) => update({ l }) })
@@ -28937,7 +29008,7 @@ init_cn();
28937
29008
  // src/components/ui/ticket-note-card.tsx
28938
29009
  import * as React105 from "react";
28939
29010
  init_cn();
28940
- 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";
28941
29012
  function TicketNoteCard({ note, onEdit, onDelete, className }) {
28942
29013
  const [isEditing, setIsEditing] = React105.useState(false);
28943
29014
  const [editText, setEditText] = React105.useState(note.text);
@@ -29011,7 +29082,7 @@ function TicketNoteCard({ note, onEdit, onDelete, className }) {
29011
29082
  children: /* @__PURE__ */ jsx265(XmarkIcon, { className: "size-5" })
29012
29083
  }
29013
29084
  )
29014
- ] }) : /* @__PURE__ */ jsxs212(Fragment47, { children: [
29085
+ ] }) : /* @__PURE__ */ jsxs212(Fragment48, { children: [
29015
29086
  /* @__PURE__ */ jsx265("p", { className: "text-h4 text-ods-text-primary", children: note.text }),
29016
29087
  /* @__PURE__ */ jsxs212(
29017
29088
  "p",
@@ -29118,7 +29189,7 @@ function TicketNotesSection({
29118
29189
  }
29119
29190
 
29120
29191
  // src/components/ui/ticket-info-section.tsx
29121
- 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";
29122
29193
  function InfoCell2({ value, label, icon, onClick }) {
29123
29194
  return /* @__PURE__ */ jsx267("div", { className: "flex-1 min-w-0 overflow-hidden", children: /* @__PURE__ */ jsxs214("div", { className: "flex flex-col justify-center", children: [
29124
29195
  /* @__PURE__ */ jsxs214("div", { className: "flex items-center gap-1 w-full min-w-0", children: [
@@ -29243,7 +29314,7 @@ function TicketInfoSection({
29243
29314
  )
29244
29315
  ] })
29245
29316
  ] }),
29246
- expanded && /* @__PURE__ */ jsxs214(Fragment48, { children: [
29317
+ expanded && /* @__PURE__ */ jsxs214(Fragment49, { children: [
29247
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" }) }),
29248
29319
  /* @__PURE__ */ jsxs214("div", { className: "flex flex-col gap-4 p-4 bg-ods-bg border-b border-ods-border", children: [
29249
29320
  description && /* @__PURE__ */ jsx267(SimpleMarkdownRenderer, { content: description }),
@@ -29268,7 +29339,7 @@ function TicketInfoSection({
29268
29339
 
29269
29340
  // src/components/ui/image-gallery-modal.tsx
29270
29341
  import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight9 } from "lucide-react";
29271
- 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";
29272
29343
  function ImageGalleryModal({
29273
29344
  images,
29274
29345
  isOpen,
@@ -29324,7 +29395,7 @@ function ImageGalleryModal({
29324
29395
  onClose,
29325
29396
  className: "max-w-[95vw]",
29326
29397
  children: /* @__PURE__ */ jsxs215("div", { className: "relative flex items-center justify-center bg-black rounded-lg", children: [
29327
- images.length > 1 && /* @__PURE__ */ jsxs215(Fragment49, { children: [
29398
+ images.length > 1 && /* @__PURE__ */ jsxs215(Fragment50, { children: [
29328
29399
  selectedImageIndex > 0 && /* @__PURE__ */ jsx268("div", { className: "absolute left-4 top-1/2 -translate-y-1/2 z-[10000]", children: /* @__PURE__ */ jsx268(
29329
29400
  Button,
29330
29401
  {
@@ -29442,7 +29513,7 @@ function TaskTypeIcon({ customItemId, className = "h-5 w-5" }) {
29442
29513
  }
29443
29514
 
29444
29515
  // src/components/chat/entity-cards/roadmap-card.tsx
29445
- 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";
29446
29517
  function RoadmapCardSkeleton({ size = "default" }) {
29447
29518
  if (size === "sm") {
29448
29519
  return /* @__PURE__ */ jsxs216("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -29503,7 +29574,7 @@ function RoadmapCard({
29503
29574
  const hasScreenshots = (item.screenshots?.length ?? 0) > 0;
29504
29575
  const typeLabel = getTaskTypeLabel(item.customItemId);
29505
29576
  const useTypeIcon = cardType === "internal_task" || !iconSrc && item.customItemId != null;
29506
- const body = /* @__PURE__ */ jsxs216(Fragment50, { children: [
29577
+ const body = /* @__PURE__ */ jsxs216(Fragment51, { children: [
29507
29578
  /* @__PURE__ */ jsx270(
29508
29579
  "span",
29509
29580
  {
@@ -29695,7 +29766,7 @@ function RoadmapCard({
29695
29766
  // src/components/chat/entity-cards/github-activity-card.tsx
29696
29767
  import React108 from "react";
29697
29768
  import { GitPullRequest, Eye as Eye4, ExternalLink as ExternalLink5 } from "lucide-react";
29698
- 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";
29699
29770
  function parseRepoFromUrl(url) {
29700
29771
  if (!url) return null;
29701
29772
  try {
@@ -29827,7 +29898,7 @@ function GitHubActivityCard({ item, variant = "compact", className, anchorProps
29827
29898
  if (repo) metaParts.push(/* @__PURE__ */ jsx271("span", { className: "font-mono truncate", children: repo }, "repo"));
29828
29899
  if (dateText) metaParts.push(/* @__PURE__ */ jsx271("span", { className: "whitespace-nowrap", children: dateText }, "date"));
29829
29900
  const href = safeHref(item.url);
29830
- const body = /* @__PURE__ */ jsxs217(Fragment51, { children: [
29901
+ const body = /* @__PURE__ */ jsxs217(Fragment52, { children: [
29831
29902
  /* @__PURE__ */ jsx271("span", { className: COMPACT_CARD_ICON_SLOT, children: kindIcon(kind, "h-5 w-5") }),
29832
29903
  /* @__PURE__ */ jsxs217("span", { className: COMPACT_CARD_TEXT_COL, children: [
29833
29904
  /* @__PURE__ */ jsxs217("span", { className: `${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-1.5`, children: [
@@ -29882,7 +29953,7 @@ function GitHubActivityCardSkeleton({ variant = "compact", className }) {
29882
29953
  // src/components/chat/entity-cards/slack-message-card.tsx
29883
29954
  import React109 from "react";
29884
29955
  import { ExternalLink as ExternalLink6, Hash } from "lucide-react";
29885
- 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";
29886
29957
  function parseChannelFromUrl(url) {
29887
29958
  if (!url) return null;
29888
29959
  try {
@@ -29921,7 +29992,7 @@ function SlackMessageCard({ item, variant = "compact", className, anchorProps })
29921
29992
  }
29922
29993
  if (dateText) metaParts.push(/* @__PURE__ */ jsx272("span", { className: "whitespace-nowrap", children: dateText }, "date"));
29923
29994
  const href = safeHref(item.url);
29924
- const body = /* @__PURE__ */ jsxs218(Fragment52, { children: [
29995
+ const body = /* @__PURE__ */ jsxs218(Fragment53, { children: [
29925
29996
  /* @__PURE__ */ jsx272("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx272(SlackIcon, { className: "h-5 w-5" }) }),
29926
29997
  /* @__PURE__ */ jsxs218("span", { className: COMPACT_CARD_TEXT_COL, children: [
29927
29998
  /* @__PURE__ */ jsx272("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx272("span", { className: COMPACT_CARD_TITLE, children: item.title }) }),
@@ -29971,7 +30042,7 @@ function SlackMessageCardSkeleton({ variant = "compact", className }) {
29971
30042
  // src/components/chat/entity-cards/hubspot-ticket-card.tsx
29972
30043
  import React110 from "react";
29973
30044
  import { ExternalLink as ExternalLink7 } from "lucide-react";
29974
- 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";
29975
30046
  function formatToken(token) {
29976
30047
  if (!token) return null;
29977
30048
  const lower = token.toLowerCase().replace(/_/g, " ");
@@ -30010,7 +30081,7 @@ function HubspotTicketCard({ item, variant = "compact", className, anchorProps }
30010
30081
  }
30011
30082
  if (dateText) metaParts.push(/* @__PURE__ */ jsx273("span", { className: "whitespace-nowrap", children: dateText }, "date"));
30012
30083
  const href = safeHref(item.url);
30013
- const body = /* @__PURE__ */ jsxs219(Fragment53, { children: [
30084
+ const body = /* @__PURE__ */ jsxs219(Fragment54, { children: [
30014
30085
  /* @__PURE__ */ jsxs219("span", { className: COMPACT_CARD_TEXT_COL, children: [
30015
30086
  /* @__PURE__ */ jsxs219("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
30016
30087
  /* @__PURE__ */ jsx273("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -30090,9 +30161,9 @@ function HubspotTicketCardSkeleton({ variant = "compact", className }) {
30090
30161
 
30091
30162
  // src/components/chat/entity-cards/data-room-doc-card.tsx
30092
30163
  import { ExternalLink as ExternalLink8 } from "lucide-react";
30093
- 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";
30094
30165
  function DataRoomDocCard({ item, className, badgeText, anchorProps }) {
30095
- const body = /* @__PURE__ */ jsxs220(Fragment54, { children: [
30166
+ const body = /* @__PURE__ */ jsxs220(Fragment55, { children: [
30096
30167
  /* @__PURE__ */ jsxs220("span", { className: COMPACT_CARD_TEXT_COL, children: [
30097
30168
  /* @__PURE__ */ jsxs220("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
30098
30169
  /* @__PURE__ */ jsx274("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -31702,7 +31773,7 @@ function cleanEscapedString(input) {
31702
31773
  init_button();
31703
31774
  import { ExternalLink as ExternalLink9, Clock, Play as Play2, Video as Video6 } from "lucide-react";
31704
31775
  init_cn();
31705
- 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";
31706
31777
  function ProgramCardSkeleton({ size = "default" }) {
31707
31778
  if (size === "sm") {
31708
31779
  return /* @__PURE__ */ jsxs221("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
@@ -31774,7 +31845,7 @@ function MediaGallery({ images, title }) {
31774
31845
  setIsModalOpen(false);
31775
31846
  setSelectedImageIndex(null);
31776
31847
  };
31777
- return /* @__PURE__ */ jsxs221(Fragment55, { children: [
31848
+ return /* @__PURE__ */ jsxs221(Fragment56, { children: [
31778
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(
31779
31850
  "div",
31780
31851
  {
@@ -31891,7 +31962,7 @@ function ProgramCard({
31891
31962
  const dateFormat = format(itemDate, "EEEE d MMMM");
31892
31963
  const defaultRenderMeta = () => {
31893
31964
  if (config.type === "podcast" && "duration_seconds" in item && !isScheduled) {
31894
- return /* @__PURE__ */ jsxs221(Fragment55, { children: [
31965
+ return /* @__PURE__ */ jsxs221(Fragment56, { children: [
31895
31966
  /* @__PURE__ */ jsx275(Clock, { className: "w-4 h-4 text-ods-text-secondary" }),
31896
31967
  /* @__PURE__ */ jsx275("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: formatDurationCompact(item.duration_seconds) })
31897
31968
  ] });
@@ -31902,7 +31973,7 @@ function ProgramCard({
31902
31973
  if (config.type === "webinar" && "start_at" in item) {
31903
31974
  const webinarItem = item;
31904
31975
  const duration = formatDurationFromRange(webinarItem.start_at, webinarItem.end_at);
31905
- return /* @__PURE__ */ jsxs221(Fragment55, { children: [
31976
+ return /* @__PURE__ */ jsxs221(Fragment56, { children: [
31906
31977
  /* @__PURE__ */ jsx275(Video6, { className: "w-4 h-4 text-ods-text-secondary" }),
31907
31978
  /* @__PURE__ */ jsxs221("span", { className: "font-['DM_Sans'] text-ods-text-secondary", children: [
31908
31979
  formatTimeWithTimezone(webinarItem.start_at, null),
@@ -31936,10 +32007,10 @@ function ProgramCard({
31936
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 }),
31937
32008
  /* @__PURE__ */ jsxs221("div", { className: "flex flex-col md:flex-row md:items-center gap-2 md:gap-4 mb-4", children: [
31938
32009
  /* @__PURE__ */ jsx275("span", { className: "font-['DM_Sans'] font-medium", style: { color: accentColor }, children: dateFormat }),
31939
- renderMeta ? /* @__PURE__ */ jsxs221(Fragment55, { children: [
32010
+ renderMeta ? /* @__PURE__ */ jsxs221(Fragment56, { children: [
31940
32011
  /* @__PURE__ */ jsx275("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
31941
32012
  renderMeta(item)
31942
- ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs221(Fragment55, { children: [
32013
+ ] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs221(Fragment56, { children: [
31943
32014
  /* @__PURE__ */ jsx275("span", { className: "hidden md:inline text-ods-text-secondary", children: "\u2022" }),
31944
32015
  /* @__PURE__ */ jsx275("div", { className: "flex items-center gap-2", children: defaultRenderMeta() })
31945
32016
  ] })
@@ -32016,10 +32087,10 @@ function ProgramCard({
32016
32087
 
32017
32088
  // src/components/chat/entity-cards/campaign-card-admin.tsx
32018
32089
  import { Megaphone } from "lucide-react";
32019
- 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";
32020
32091
  function CampaignCardAdmin({ campaign, className, anchorProps }) {
32021
32092
  const goalsCount = campaign.goals?.length || 0;
32022
- const innerChildren = /* @__PURE__ */ jsxs222(Fragment56, { children: [
32093
+ const innerChildren = /* @__PURE__ */ jsxs222(Fragment57, { children: [
32023
32094
  /* @__PURE__ */ jsx276("span", { className: COMPACT_CARD_ICON_SLOT, children: /* @__PURE__ */ jsx276(Megaphone, { className: "h-5 w-5" }) }),
32024
32095
  /* @__PURE__ */ jsxs222("span", { className: COMPACT_CARD_TEXT_COL, children: [
32025
32096
  /* @__PURE__ */ jsx276("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx276("span", { className: COMPACT_CARD_TITLE, children: campaign.name }) }),
@@ -32049,11 +32120,11 @@ function CampaignCardAdminSkeleton({ className }) {
32049
32120
 
32050
32121
  // src/components/chat/entity-cards/generic-entity-card.tsx
32051
32122
  import { ExternalLink as ExternalLink10 } from "lucide-react";
32052
- 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";
32053
32124
  function GenericEntityCard({ item, className, anchorProps }) {
32054
32125
  const href = safeHref(item.url);
32055
32126
  const dateText = formatDateUTC(item.dateUpdated, { fallback: "", timezone: "local" });
32056
- const body = /* @__PURE__ */ jsxs223(Fragment57, { children: [
32127
+ const body = /* @__PURE__ */ jsxs223(Fragment58, { children: [
32057
32128
  /* @__PURE__ */ jsxs223("span", { className: COMPACT_CARD_TEXT_COL, children: [
32058
32129
  /* @__PURE__ */ jsxs223("span", { className: "flex flex-wrap items-center gap-1.5 min-w-0", children: [
32059
32130
  /* @__PURE__ */ jsx277("span", { className: `${COMPACT_CARD_TITLE} shrink min-w-0`, children: item.title }),
@@ -32148,7 +32219,7 @@ function useChatCardItem(type, id) {
32148
32219
 
32149
32220
  // src/components/chat/mingo-info-card.tsx
32150
32221
  init_cn();
32151
- 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";
32152
32223
  function CardMedia({
32153
32224
  imageSrc,
32154
32225
  imageAlt,
@@ -32192,7 +32263,7 @@ function MingoInfoCard({
32192
32263
  const hasMenu = !!menuGroups && menuGroups.length > 0;
32193
32264
  const isAnchor = !!anchorProps;
32194
32265
  const isInteractive = isAnchor || !!onClick;
32195
- const content = /* @__PURE__ */ jsxs224(Fragment58, { children: [
32266
+ const content = /* @__PURE__ */ jsxs224(Fragment59, { children: [
32196
32267
  hasMedia && /* @__PURE__ */ jsx278(CardMedia, { imageSrc, imageAlt, icon }),
32197
32268
  /* @__PURE__ */ jsxs224("span", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
32198
32269
  /* @__PURE__ */ jsx278("span", { className: "truncate text-h4 font-medium text-ods-text-primary", children: title }),
@@ -32241,7 +32312,7 @@ function MingoInfoCard({
32241
32312
  }
32242
32313
 
32243
32314
  // src/components/chat/entity-cards/dispatch.tsx
32244
- 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";
32245
32316
  function githubKindIcon(kind) {
32246
32317
  switch (kind) {
32247
32318
  case "pull_request":
@@ -33209,10 +33280,10 @@ function ChatCardLoader({
33209
33280
  }
33210
33281
  );
33211
33282
  }
33212
- if (isLoading) return /* @__PURE__ */ jsx279(Fragment59, { children: entry.skeleton() });
33283
+ if (isLoading) return /* @__PURE__ */ jsx279(Fragment60, { children: entry.skeleton() });
33213
33284
  if (!item) return null;
33214
33285
  if (entry.bareInline) {
33215
- return /* @__PURE__ */ jsx279(Fragment59, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
33286
+ return /* @__PURE__ */ jsx279(Fragment60, { children: navWrap(entry.render(item, finalChatRef, renderOpts)) });
33216
33287
  }
33217
33288
  return /* @__PURE__ */ jsx279(
33218
33289
  ChatCardWithDiscuss,
@@ -34096,7 +34167,14 @@ function parseChunkToAction(chunk) {
34096
34167
  text: String(data.text || ""),
34097
34168
  ownerType: typeof data.ownerType === "string" ? data.ownerType : void 0,
34098
34169
  displayName: typeof data.displayName === "string" ? data.displayName : void 0,
34099
- 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
34100
34178
  };
34101
34179
  case MESSAGE_TYPE.TOKEN_USAGE:
34102
34180
  return {
@@ -34851,7 +34929,8 @@ function useRealtimeChunkProcessor(options) {
34851
34929
  ownerType: action.ownerType,
34852
34930
  displayName: action.displayName,
34853
34931
  userId: action.userId,
34854
- streamSeq
34932
+ streamSeq,
34933
+ contextItems: action.contextItems
34855
34934
  });
34856
34935
  break;
34857
34936
  case "token_usage":
@@ -36430,6 +36509,8 @@ function processHistoricalMessages(messages, options = {}) {
36430
36509
  const userAuthorType = msg.owner?.type === OWNER_TYPE.ADMIN ? "admin" : "user";
36431
36510
  messageDataArray.forEach((data) => {
36432
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;
36433
36514
  processedMessages.push({
36434
36515
  id: msg.id,
36435
36516
  role: "user",
@@ -36437,7 +36518,8 @@ function processHistoricalMessages(messages, options = {}) {
36437
36518
  name: getOwnerDisplayName(msg.owner),
36438
36519
  avatar: getOwnerAvatar(msg.owner),
36439
36520
  authorType: userAuthorType,
36440
- timestamp: new Date(msg.createdAt)
36521
+ timestamp: new Date(msg.createdAt),
36522
+ ...contextItems && contextItems.length > 0 ? { contextItems } : {}
36441
36523
  });
36442
36524
  }
36443
36525
  });
@@ -36715,6 +36797,8 @@ function processHistoricalMessagesWithErrors(messages, options = {}) {
36715
36797
  const userAuthorType = msg.owner?.type === OWNER_TYPE.ADMIN ? "admin" : "user";
36716
36798
  messageDataArray.forEach((data) => {
36717
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;
36718
36802
  processedMessages.push({
36719
36803
  id: msg.id,
36720
36804
  role: "user",
@@ -36722,7 +36806,8 @@ function processHistoricalMessagesWithErrors(messages, options = {}) {
36722
36806
  name: getOwnerDisplayName(msg.owner),
36723
36807
  avatar: getOwnerAvatar(msg.owner),
36724
36808
  authorType: userAuthorType,
36725
- timestamp: new Date(msg.createdAt)
36809
+ timestamp: new Date(msg.createdAt),
36810
+ ...contextItems && contextItems.length > 0 ? { contextItems } : {}
36726
36811
  });
36727
36812
  }
36728
36813
  });
@@ -37875,8 +37960,14 @@ function useChatDialogManager({
37875
37960
 
37876
37961
  // src/components/chat/embeddable-chat.tsx
37877
37962
  init_next_navigation();
37878
- 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";
37879
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
+ };
37880
37971
  var FALLBACK_TOP_RETRIEVED = 3;
37881
37972
  var SKELETON_ROW_VARIANTS = [
37882
37973
  { titleWidth: "w-32", slashWidth: "w-20", descriptionLines: 2 },
@@ -37988,7 +38079,7 @@ function SourceChip({
37988
38079
  );
37989
38080
  }
37990
38081
  const displayName = src.name || formatRelativePath(src.path);
37991
- const chipBody = (label) => /* @__PURE__ */ jsxs226(Fragment60, { children: [
38082
+ const chipBody = (label) => /* @__PURE__ */ jsxs226(Fragment61, { children: [
37992
38083
  icon,
37993
38084
  /* @__PURE__ */ jsxs226("span", { className: "truncate max-w-[160px]", children: [
37994
38085
  "[",
@@ -38147,7 +38238,8 @@ function EmbeddableChatInner({
38147
38238
  shell = "drawer",
38148
38239
  mingoWelcome,
38149
38240
  guideWelcome,
38150
- contextPicker
38241
+ contextPicker,
38242
+ renderMention
38151
38243
  }) {
38152
38244
  const shellLess = shell === "none";
38153
38245
  const runtime = useRequiredChatRuntime();
@@ -38318,6 +38410,11 @@ function EmbeddableChatInner({
38318
38410
  setMentionQuery(null);
38319
38411
  mentionKeyRef.current = null;
38320
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]);
38321
38418
  const toggleContextItem = useCallback46(
38322
38419
  (item) => {
38323
38420
  const key = `${item.type}:${item.id}`;
@@ -38327,7 +38424,7 @@ function EmbeddableChatInner({
38327
38424
  );
38328
38425
  const grows = !alreadySelected && !mentionKeyRef.current;
38329
38426
  if (grows && contextItems.length >= contextMaxItems) return;
38330
- chatInputRef.current?.commitMention(key);
38427
+ chatInputRef.current?.commitMention(mentionTokenOf(key, mentionMarkerByType));
38331
38428
  setContextItems((prev) => {
38332
38429
  const withoutPrevMention = mentionKeyRef.current ? prev.filter((p) => `${p.type}:${p.id}` !== mentionKeyRef.current) : prev;
38333
38430
  const deduped = withoutPrevMention.filter(
@@ -38345,7 +38442,7 @@ function EmbeddableChatInner({
38345
38442
  return [...prev, item];
38346
38443
  });
38347
38444
  },
38348
- [contextMaxItems, contextItems]
38445
+ [contextMaxItems, contextItems, mentionMarkerByType]
38349
38446
  );
38350
38447
  const removeContextItem = useCallback46((item) => {
38351
38448
  const key = `${item.type}:${item.id}`;
@@ -38353,18 +38450,18 @@ function EmbeddableChatInner({
38353
38450
  if (mentionKeyRef.current === key) {
38354
38451
  mentionKeyRef.current = null;
38355
38452
  const cur = chatInputRef.current?.getValue() ?? "";
38356
- const next = cur.replace(`@${key}`, "").replace(/\s{2,}/g, " ").trimStart();
38453
+ const next = cur.replace(`@${mentionTokenOf(key, mentionMarkerByType)}`, "").replace(/\s{2,}/g, " ").trimStart();
38357
38454
  chatInputRef.current?.setValue(next);
38358
38455
  }
38359
- }, []);
38456
+ }, [mentionMarkerByType]);
38360
38457
  const handleContextValueChange = useCallback46((value) => {
38361
38458
  const key = mentionKeyRef.current;
38362
38459
  if (!key) return;
38363
- if (!value.includes(`@${key}`)) {
38460
+ if (!value.includes(`@${mentionTokenOf(key, mentionMarkerByType)}`)) {
38364
38461
  setContextItems((prev) => prev.filter((p) => `${p.type}:${p.id}` !== key));
38365
38462
  mentionKeyRef.current = null;
38366
38463
  }
38367
- }, []);
38464
+ }, [mentionMarkerByType]);
38368
38465
  const openContextPicker = useCallback46(() => {
38369
38466
  setMentionQuery(null);
38370
38467
  setContextPickerOpen(true);
@@ -38652,6 +38749,7 @@ function EmbeddableChatInner({
38652
38749
  assistantIcon: mingoAssistantIcon,
38653
38750
  renderEntityCard,
38654
38751
  resolveContextIcon,
38752
+ renderMention,
38655
38753
  NavLinkAnchor: NavLinkAnchorViaRuntime,
38656
38754
  className: "flex-1",
38657
38755
  contentClassName: "max-w-none pb-0",
@@ -38859,7 +38957,7 @@ function EmbeddableChatInner({
38859
38957
  ]
38860
38958
  }
38861
38959
  ) }) });
38862
- return /* @__PURE__ */ jsxs226(Fragment60, { children: [
38960
+ return /* @__PURE__ */ jsxs226(Fragment61, { children: [
38863
38961
  showInternalTrigger && !shellLess && /* @__PURE__ */ jsx283(
38864
38962
  "div",
38865
38963
  {
@@ -39057,6 +39155,7 @@ export {
39057
39155
  ChatInput,
39058
39156
  ToolExecutionDisplay,
39059
39157
  remarkCardLinks,
39158
+ remarkMentionChips,
39060
39159
  BlockCard,
39061
39160
  CONTEXT_ROW_CLASS,
39062
39161
  CONTEXT_ICON_CLASS,
@@ -39461,4 +39560,4 @@ export {
39461
39560
  LogsList,
39462
39561
  assets
39463
39562
  };
39464
- //# sourceMappingURL=chunk-Z2EOXZBW.js.map
39563
+ //# sourceMappingURL=chunk-5FK7X3EE.js.map