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