@flamingo-stack/openframe-frontend-core 0.0.373 → 0.0.374-snapshot.20260706213442
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-DDI7FFA5.js → chunk-3FZIYSPL.js} +643 -597
- package/dist/{chunk-DDI7FFA5.js.map → chunk-3FZIYSPL.js.map} +1 -1
- package/dist/{chunk-4JIVPFPK.cjs → chunk-3JIT6THI.cjs} +25 -25
- package/dist/{chunk-4JIVPFPK.cjs.map → chunk-3JIT6THI.cjs.map} +1 -1
- package/dist/{chunk-TH2LDBFE.js → chunk-7QNRRRSM.js} +2 -2
- package/dist/{chunk-FCPUM5S2.cjs → chunk-BF3N6M25.cjs} +63 -63
- package/dist/chunk-BF3N6M25.cjs.map +1 -0
- package/dist/{chunk-4YQY3YBQ.js → chunk-CXIJ5GSA.js} +2 -2
- package/dist/{chunk-3QTBIUB7.cjs → chunk-D7COWKNF.cjs} +12 -12
- package/dist/{chunk-3QTBIUB7.cjs.map → chunk-D7COWKNF.cjs.map} +1 -1
- package/dist/{chunk-3N34BFBP.cjs → chunk-DGODYMGT.cjs} +15 -15
- package/dist/{chunk-3N34BFBP.cjs.map → chunk-DGODYMGT.cjs.map} +1 -1
- package/dist/{chunk-RHKIYRJJ.js → chunk-ELKKJLHS.js} +2 -2
- package/dist/{chunk-OTSWZF3C.js → chunk-FNYXXI7S.js} +4 -4
- package/dist/{chunk-X274IBXR.cjs → chunk-HBNDH3PK.cjs} +26 -26
- package/dist/{chunk-X274IBXR.cjs.map → chunk-HBNDH3PK.cjs.map} +1 -1
- package/dist/{chunk-MTT4SFN6.cjs → chunk-ICDR6TMV.cjs} +5 -5
- package/dist/{chunk-MTT4SFN6.cjs.map → chunk-ICDR6TMV.cjs.map} +1 -1
- package/dist/{chunk-IH4IPKF2.js → chunk-IPKLA4T7.js} +4 -4
- package/dist/{chunk-7YKIXCV3.cjs → chunk-JQ3PU7BN.cjs} +7 -7
- package/dist/{chunk-7YKIXCV3.cjs.map → chunk-JQ3PU7BN.cjs.map} +1 -1
- package/dist/{chunk-AFF6QBKL.cjs → chunk-KJKZXNJG.cjs} +37 -37
- package/dist/{chunk-AFF6QBKL.cjs.map → chunk-KJKZXNJG.cjs.map} +1 -1
- package/dist/{chunk-ANKXC5RY.cjs → chunk-QLXG7B35.cjs} +31 -31
- package/dist/{chunk-ANKXC5RY.cjs.map → chunk-QLXG7B35.cjs.map} +1 -1
- package/dist/{chunk-IDYD2EIV.js → chunk-QUNP6INX.js} +2 -2
- package/dist/{chunk-DUFK7RSU.js → chunk-QXCEAKVC.js} +2 -2
- package/dist/{chunk-CCBQGC44.js → chunk-SOXWEON4.js} +5 -5
- package/dist/chunk-SOXWEON4.js.map +1 -0
- package/dist/{chunk-XNP2LIYD.cjs → chunk-TKXTUA7E.cjs} +9 -9
- package/dist/{chunk-XNP2LIYD.cjs.map → chunk-TKXTUA7E.cjs.map} +1 -1
- package/dist/{chunk-JDYNGJSD.js → chunk-TVE5UZRB.js} +2 -2
- package/dist/{chunk-M4O75TCN.js → chunk-UHCRUHRY.js} +4 -4
- package/dist/{chunk-LD7WDZQC.js → chunk-XE3LR2T2.js} +2 -2
- package/dist/{chunk-4RUTFRJ6.cjs → chunk-YCQ5S353.cjs} +445 -399
- package/dist/chunk-YCQ5S353.cjs.map +1 -0
- package/dist/{chunk-6OJHTN7B.cjs → chunk-ZWBRUGKU.cjs} +57 -57
- package/dist/{chunk-6OJHTN7B.cjs.map → chunk-ZWBRUGKU.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/chat-container.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/chat/types/component.types.d.ts +14 -0
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +120 -120
- package/dist/components/index.js +9 -9
- package/dist/components/navigation/app-layout-drawer.d.ts.map +1 -1
- package/dist/components/navigation/app-layout.d.ts +20 -0
- package/dist/components/navigation/app-layout.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/error-state.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/tailwind.config.cjs +24 -0
- package/dist/tailwind.config.cjs.map +1 -1
- package/dist/tailwind.config.js +24 -0
- package/dist/tailwind.config.js.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/chat-container.tsx +20 -1
- package/src/components/chat/types/component.types.ts +14 -0
- package/src/components/features/array-entry-manager.tsx +1 -1
- package/src/components/features/push-button-selector.tsx +3 -3
- package/src/components/navigation/app-layout-drawer.tsx +23 -1
- package/src/components/navigation/app-layout.tsx +50 -2
- package/src/components/tickets/ticket-detail-drawer.tsx +1 -1
- package/src/components/ui/error-state.tsx +5 -2
- package/src/stories/ChatContainer.stories.tsx +36 -0
- package/tailwind.config.ts +25 -0
- package/dist/chunk-4RUTFRJ6.cjs.map +0 -1
- package/dist/chunk-CCBQGC44.js.map +0 -1
- package/dist/chunk-FCPUM5S2.cjs.map +0 -1
- /package/dist/{chunk-TH2LDBFE.js.map → chunk-7QNRRRSM.js.map} +0 -0
- /package/dist/{chunk-4YQY3YBQ.js.map → chunk-CXIJ5GSA.js.map} +0 -0
- /package/dist/{chunk-RHKIYRJJ.js.map → chunk-ELKKJLHS.js.map} +0 -0
- /package/dist/{chunk-OTSWZF3C.js.map → chunk-FNYXXI7S.js.map} +0 -0
- /package/dist/{chunk-IH4IPKF2.js.map → chunk-IPKLA4T7.js.map} +0 -0
- /package/dist/{chunk-IDYD2EIV.js.map → chunk-QUNP6INX.js.map} +0 -0
- /package/dist/{chunk-DUFK7RSU.js.map → chunk-QXCEAKVC.js.map} +0 -0
- /package/dist/{chunk-JDYNGJSD.js.map → chunk-TVE5UZRB.js.map} +0 -0
- /package/dist/{chunk-M4O75TCN.js.map → chunk-UHCRUHRY.js.map} +0 -0
- /package/dist/{chunk-LD7WDZQC.js.map → chunk-XE3LR2T2.js.map} +0 -0
|
@@ -2979,8 +2979,67 @@ function TicketStatusTag({
|
|
|
2979
2979
|
);
|
|
2980
2980
|
}
|
|
2981
2981
|
|
|
2982
|
+
// src/components/chat/msp-organization-card.tsx
|
|
2983
|
+
init_cn();
|
|
2984
|
+
init_button2();
|
|
2985
|
+
import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2986
|
+
function MspOrganizationCard({
|
|
2987
|
+
name,
|
|
2988
|
+
website,
|
|
2989
|
+
logoUrl,
|
|
2990
|
+
title,
|
|
2991
|
+
href,
|
|
2992
|
+
onOpenWebsite,
|
|
2993
|
+
className
|
|
2994
|
+
}) {
|
|
2995
|
+
const actionLabel = website ? `Open ${website}` : "Open organization website";
|
|
2996
|
+
return /* @__PURE__ */ jsxs13(
|
|
2997
|
+
"div",
|
|
2998
|
+
{
|
|
2999
|
+
className: cn(
|
|
3000
|
+
// Inset ring (box-shadow) instead of `border` so the 1px stroke does not
|
|
3001
|
+
// add to the box height — matches Figma's 80px frame (16 + 48 + 16) with
|
|
3002
|
+
// its inside-aligned stroke. A real border would render 82px.
|
|
3003
|
+
"flex items-start gap-[var(--spacing-system-m)] rounded-md bg-ods-bg p-[var(--spacing-system-m)] ring-1 ring-inset ring-ods-border",
|
|
3004
|
+
className
|
|
3005
|
+
),
|
|
3006
|
+
children: [
|
|
3007
|
+
/* @__PURE__ */ jsx15(SquareAvatar, { src: logoUrl, alt: name, fallback: name, size: "lg", variant: "square" }),
|
|
3008
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
3009
|
+
/* @__PURE__ */ jsx15("span", { className: "truncate text-h3 text-ods-text-primary", children: title ?? `Your IT is managed by ${name}` }),
|
|
3010
|
+
website ? /* @__PURE__ */ jsx15("span", { className: "truncate text-h4 text-ods-text-secondary", children: website }) : null
|
|
3011
|
+
] }),
|
|
3012
|
+
href ? /* @__PURE__ */ jsx15(Button, { asChild: true, variant: "outline", size: "icon", "aria-label": actionLabel, children: /* @__PURE__ */ jsx15("a", { href, target: "_blank", rel: "noreferrer noopener", children: /* @__PURE__ */ jsx15(ExternalLinkIcon, {}) }) }) : onOpenWebsite ? /* @__PURE__ */ jsx15(Button, { variant: "outline", size: "icon", "aria-label": actionLabel, onClick: onOpenWebsite, children: /* @__PURE__ */ jsx15(ExternalLinkIcon, {}) }) : null
|
|
3013
|
+
]
|
|
3014
|
+
}
|
|
3015
|
+
);
|
|
3016
|
+
}
|
|
3017
|
+
|
|
3018
|
+
// src/components/chat/msp-organization-card-skeleton.tsx
|
|
3019
|
+
init_cn();
|
|
3020
|
+
import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3021
|
+
function MspOrganizationCardSkeleton({ className }) {
|
|
3022
|
+
return /* @__PURE__ */ jsxs14(
|
|
3023
|
+
"div",
|
|
3024
|
+
{
|
|
3025
|
+
className: cn(
|
|
3026
|
+
"flex items-start gap-[var(--spacing-system-m)] rounded-md bg-ods-bg p-[var(--spacing-system-m)] ring-1 ring-inset ring-ods-border",
|
|
3027
|
+
className
|
|
3028
|
+
),
|
|
3029
|
+
children: [
|
|
3030
|
+
/* @__PURE__ */ jsx16(Skeleton, { className: "size-12 shrink-0 rounded-md" }),
|
|
3031
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex min-w-0 flex-1 flex-col justify-center gap-2 self-stretch", children: [
|
|
3032
|
+
/* @__PURE__ */ jsx16(Skeleton, { className: "h-5 w-3/5 rounded-md" }),
|
|
3033
|
+
/* @__PURE__ */ jsx16(Skeleton, { className: "h-4 w-2/5 rounded-md" })
|
|
3034
|
+
] }),
|
|
3035
|
+
/* @__PURE__ */ jsx16(Skeleton, { className: "size-12 shrink-0 rounded-md" })
|
|
3036
|
+
]
|
|
3037
|
+
}
|
|
3038
|
+
);
|
|
3039
|
+
}
|
|
3040
|
+
|
|
2982
3041
|
// src/components/chat/chat-container.tsx
|
|
2983
|
-
import { Fragment as Fragment2, jsx as
|
|
3042
|
+
import { Fragment as Fragment2, jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2984
3043
|
var ConnectionIndicator = ({ status }) => {
|
|
2985
3044
|
const getStatusStyles = () => {
|
|
2986
3045
|
switch (status) {
|
|
@@ -2996,7 +3055,7 @@ var ConnectionIndicator = ({ status }) => {
|
|
|
2996
3055
|
return "bg-ods-text-tertiary";
|
|
2997
3056
|
}
|
|
2998
3057
|
};
|
|
2999
|
-
return /* @__PURE__ */
|
|
3058
|
+
return /* @__PURE__ */ jsx17("div", { className: "flex items-center", children: /* @__PURE__ */ jsx17(
|
|
3000
3059
|
"output",
|
|
3001
3060
|
{
|
|
3002
3061
|
className: cn(
|
|
@@ -3010,7 +3069,7 @@ var ConnectionIndicator = ({ status }) => {
|
|
|
3010
3069
|
};
|
|
3011
3070
|
var ChatContainer = React6.forwardRef(
|
|
3012
3071
|
({ className, children, ...props }, ref) => {
|
|
3013
|
-
return /* @__PURE__ */
|
|
3072
|
+
return /* @__PURE__ */ jsx17(
|
|
3014
3073
|
"div",
|
|
3015
3074
|
{
|
|
3016
3075
|
ref,
|
|
@@ -3028,9 +3087,9 @@ var ChatContainer = React6.forwardRef(
|
|
|
3028
3087
|
);
|
|
3029
3088
|
ChatContainer.displayName = "ChatContainer";
|
|
3030
3089
|
var ChatHeader = React6.forwardRef(
|
|
3031
|
-
({ className, userName = 'Grace "Fae" Meadows', userTitle = "Your Personal Assistant", userAvatar, userIcon, onSettingsClick, onNewChat, onClose, onBack, showNewChat = false, connectionStatus = "disconnected", serverUrl = null, headerActions, ticketInfo, fullWidth = false, bare = false, isLoading = false, ...props }, ref) => {
|
|
3090
|
+
({ className, userName = 'Grace "Fae" Meadows', userTitle = "Your Personal Assistant", userAvatar, userIcon, onSettingsClick, onNewChat, onClose, onBack, showNewChat = false, connectionStatus = "disconnected", serverUrl = null, headerActions, ticketInfo, mspOrganization, isMspLoading = false, fullWidth = false, bare = false, isLoading = false, ...props }, ref) => {
|
|
3032
3091
|
const cardClasses = bare ? "" : "rounded-md bg-ods-card border border-ods-border";
|
|
3033
|
-
return /* @__PURE__ */
|
|
3092
|
+
return /* @__PURE__ */ jsxs15(
|
|
3034
3093
|
"div",
|
|
3035
3094
|
{
|
|
3036
3095
|
ref,
|
|
@@ -3043,30 +3102,30 @@ var ChatHeader = React6.forwardRef(
|
|
|
3043
3102
|
),
|
|
3044
3103
|
...props,
|
|
3045
3104
|
children: [
|
|
3046
|
-
onBack && /* @__PURE__ */
|
|
3105
|
+
onBack && /* @__PURE__ */ jsx17(
|
|
3047
3106
|
Button,
|
|
3048
3107
|
{
|
|
3049
3108
|
onClick: onBack,
|
|
3050
3109
|
variant: "transparent",
|
|
3051
3110
|
size: "icon",
|
|
3052
3111
|
"aria-label": "Back",
|
|
3053
|
-
leftIcon: /* @__PURE__ */
|
|
3112
|
+
leftIcon: /* @__PURE__ */ jsx17(Chevron02LeftIcon, { size: 24, className: "text-ods-text-primary" }),
|
|
3054
3113
|
className: cn(
|
|
3055
3114
|
cardClasses,
|
|
3056
3115
|
"absolute top-0 right-full mr-[var(--spacing-system-s)] hover:bg-ods-bg-hover"
|
|
3057
3116
|
)
|
|
3058
3117
|
}
|
|
3059
3118
|
),
|
|
3060
|
-
/* @__PURE__ */
|
|
3061
|
-
/* @__PURE__ */
|
|
3062
|
-
isLoading ? /* @__PURE__ */
|
|
3063
|
-
/* @__PURE__ */
|
|
3064
|
-
/* @__PURE__ */
|
|
3065
|
-
/* @__PURE__ */
|
|
3066
|
-
/* @__PURE__ */
|
|
3119
|
+
/* @__PURE__ */ jsxs15("div", { className: cardClasses, children: [
|
|
3120
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between gap-4 px-4 py-3", children: [
|
|
3121
|
+
isLoading ? /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-3", children: [
|
|
3122
|
+
/* @__PURE__ */ jsx17(Skeleton, { className: "w-16 h-16 rounded-full shrink-0" }),
|
|
3123
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex flex-col gap-1", children: [
|
|
3124
|
+
/* @__PURE__ */ jsx17(Skeleton, { className: "h-6 w-40" }),
|
|
3125
|
+
/* @__PURE__ */ jsx17(Skeleton, { className: "h-4 w-28" })
|
|
3067
3126
|
] })
|
|
3068
|
-
] }) : /* @__PURE__ */
|
|
3069
|
-
userIcon ? /* @__PURE__ */
|
|
3127
|
+
] }) : /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-3", children: [
|
|
3128
|
+
userIcon ? /* @__PURE__ */ jsx17("div", { className: "flex items-center justify-center w-16 h-16 rounded-full bg-ods-accent", children: userIcon }) : /* @__PURE__ */ jsx17(
|
|
3070
3129
|
SquareAvatar,
|
|
3071
3130
|
{
|
|
3072
3131
|
src: userAvatar,
|
|
@@ -3077,27 +3136,27 @@ var ChatHeader = React6.forwardRef(
|
|
|
3077
3136
|
className: "bg-ods-flamingo-pink"
|
|
3078
3137
|
}
|
|
3079
3138
|
),
|
|
3080
|
-
/* @__PURE__ */
|
|
3081
|
-
/* @__PURE__ */
|
|
3082
|
-
/* @__PURE__ */
|
|
3083
|
-
/* @__PURE__ */
|
|
3084
|
-
/* @__PURE__ */
|
|
3139
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex flex-col", children: [
|
|
3140
|
+
/* @__PURE__ */ jsx17("span", { className: "text-h3", children: userName }),
|
|
3141
|
+
/* @__PURE__ */ jsx17("div", { className: "flex items-center gap-2", children: serverUrl && /* @__PURE__ */ jsxs15(Fragment2, { children: [
|
|
3142
|
+
/* @__PURE__ */ jsx17("span", { className: "text-h4 text-ods-text-secondary", children: serverUrl }),
|
|
3143
|
+
/* @__PURE__ */ jsx17(ConnectionIndicator, { status: connectionStatus })
|
|
3085
3144
|
] }) })
|
|
3086
3145
|
] })
|
|
3087
3146
|
] }),
|
|
3088
|
-
/* @__PURE__ */
|
|
3089
|
-
showNewChat && onNewChat && /* @__PURE__ */
|
|
3147
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-1", children: [
|
|
3148
|
+
showNewChat && onNewChat && /* @__PURE__ */ jsx17(
|
|
3090
3149
|
Button,
|
|
3091
3150
|
{
|
|
3092
3151
|
onClick: onNewChat,
|
|
3093
3152
|
variant: "transparent",
|
|
3094
3153
|
size: "small-legacy",
|
|
3095
|
-
leftIcon: /* @__PURE__ */
|
|
3154
|
+
leftIcon: /* @__PURE__ */ jsx17(PlusCircleIcon2, { className: "w-5 h-5", whiteOverlay: true }),
|
|
3096
3155
|
className: "text-ods-text-primary hover:bg-ods-bg-hover",
|
|
3097
3156
|
children: "New Chat"
|
|
3098
3157
|
}
|
|
3099
3158
|
),
|
|
3100
|
-
onClose && /* @__PURE__ */
|
|
3159
|
+
onClose && /* @__PURE__ */ jsx17(
|
|
3101
3160
|
Button,
|
|
3102
3161
|
{
|
|
3103
3162
|
onClick: onClose,
|
|
@@ -3105,20 +3164,30 @@ var ChatHeader = React6.forwardRef(
|
|
|
3105
3164
|
size: "small-legacy",
|
|
3106
3165
|
"aria-label": "Close",
|
|
3107
3166
|
className: "text-ods-text-muted hover:text-ods-text-primary hover:bg-ods-bg-hover !p-1.5",
|
|
3108
|
-
children: /* @__PURE__ */
|
|
3167
|
+
children: /* @__PURE__ */ jsx17(XmarkIcon, { size: 16 })
|
|
3109
3168
|
}
|
|
3110
3169
|
),
|
|
3111
3170
|
headerActions
|
|
3112
3171
|
] })
|
|
3113
3172
|
] }),
|
|
3114
|
-
ticketInfo && /* @__PURE__ */
|
|
3115
|
-
/* @__PURE__ */
|
|
3116
|
-
/* @__PURE__ */
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3173
|
+
!ticketInfo && (isMspLoading || mspOrganization) && /* @__PURE__ */ jsxs15(Fragment2, { children: [
|
|
3174
|
+
/* @__PURE__ */ jsx17("div", { className: "h-px bg-ods-border" }),
|
|
3175
|
+
isMspLoading || !mspOrganization ? /* @__PURE__ */ jsx17(MspOrganizationCardSkeleton, { className: cn("ring-0 rounded-none", !bare && "rounded-b-md") }) : /* @__PURE__ */ jsx17(
|
|
3176
|
+
MspOrganizationCard,
|
|
3177
|
+
{
|
|
3178
|
+
...mspOrganization,
|
|
3179
|
+
className: cn("ring-0 rounded-none", !bare && "rounded-b-md", mspOrganization.className)
|
|
3180
|
+
}
|
|
3181
|
+
)
|
|
3182
|
+
] }),
|
|
3183
|
+
ticketInfo && /* @__PURE__ */ jsxs15(Fragment2, { children: [
|
|
3184
|
+
/* @__PURE__ */ jsx17("div", { className: "h-px bg-ods-border" }),
|
|
3185
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between gap-4 px-4 py-2", children: [
|
|
3186
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex flex-col min-w-0", children: [
|
|
3187
|
+
/* @__PURE__ */ jsx17("span", { className: "text-heading-3 truncate", title: typeof ticketInfo.title === "string" ? ticketInfo.title : void 0, children: ticketInfo.title }),
|
|
3188
|
+
ticketInfo.meta && /* @__PURE__ */ jsx17("div", { className: "text-h6 text-ods-text-secondary truncate", title: typeof ticketInfo.meta === "string" ? ticketInfo.meta : void 0, children: ticketInfo.meta })
|
|
3120
3189
|
] }),
|
|
3121
|
-
(ticketInfo.status || ticketInfo.statusName) && /* @__PURE__ */
|
|
3190
|
+
(ticketInfo.status || ticketInfo.statusName) && /* @__PURE__ */ jsx17(
|
|
3122
3191
|
TicketStatusTag,
|
|
3123
3192
|
{
|
|
3124
3193
|
...resolveStatusTagProps({
|
|
@@ -3140,7 +3209,7 @@ var ChatHeader = React6.forwardRef(
|
|
|
3140
3209
|
ChatHeader.displayName = "ChatHeader";
|
|
3141
3210
|
var ChatContent = React6.forwardRef(
|
|
3142
3211
|
({ className, children, ...props }, ref) => {
|
|
3143
|
-
return /* @__PURE__ */
|
|
3212
|
+
return /* @__PURE__ */ jsx17(
|
|
3144
3213
|
"div",
|
|
3145
3214
|
{
|
|
3146
3215
|
ref,
|
|
@@ -3157,7 +3226,7 @@ var ChatContent = React6.forwardRef(
|
|
|
3157
3226
|
ChatContent.displayName = "ChatContent";
|
|
3158
3227
|
var ChatFooter = React6.forwardRef(
|
|
3159
3228
|
({ className, contentClassName, fullWidth = false, children, ...props }, ref) => {
|
|
3160
|
-
return /* @__PURE__ */
|
|
3229
|
+
return /* @__PURE__ */ jsx17(
|
|
3161
3230
|
"div",
|
|
3162
3231
|
{
|
|
3163
3232
|
ref,
|
|
@@ -3166,7 +3235,7 @@ var ChatFooter = React6.forwardRef(
|
|
|
3166
3235
|
className
|
|
3167
3236
|
),
|
|
3168
3237
|
...props,
|
|
3169
|
-
children: /* @__PURE__ */
|
|
3238
|
+
children: /* @__PURE__ */ jsx17(
|
|
3170
3239
|
"div",
|
|
3171
3240
|
{
|
|
3172
3241
|
className: cn(
|
|
@@ -3195,7 +3264,7 @@ import { renderToStaticMarkup } from "react-dom/server";
|
|
|
3195
3264
|
// src/components/chat/chat-typing-indicator.tsx
|
|
3196
3265
|
init_cn();
|
|
3197
3266
|
import * as React7 from "react";
|
|
3198
|
-
import { jsx as
|
|
3267
|
+
import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3199
3268
|
var ChatTypingIndicator = React7.forwardRef(
|
|
3200
3269
|
({ className, size: size2 = "md", showText = false, dotClassName, ...props }, ref) => {
|
|
3201
3270
|
const dotSizeClasses = {
|
|
@@ -3220,20 +3289,20 @@ var ChatTypingIndicator = React7.forwardRef(
|
|
|
3220
3289
|
}
|
|
3221
3290
|
}
|
|
3222
3291
|
`;
|
|
3223
|
-
return /* @__PURE__ */
|
|
3292
|
+
return /* @__PURE__ */ jsxs16(
|
|
3224
3293
|
"div",
|
|
3225
3294
|
{
|
|
3226
3295
|
ref,
|
|
3227
3296
|
className: cn("flex items-center gap-2", className),
|
|
3228
3297
|
...props,
|
|
3229
3298
|
children: [
|
|
3230
|
-
/* @__PURE__ */
|
|
3231
|
-
showText && /* @__PURE__ */
|
|
3232
|
-
/* @__PURE__ */
|
|
3299
|
+
/* @__PURE__ */ jsx18("style", { dangerouslySetInnerHTML: { __html: dotAnimation } }),
|
|
3300
|
+
showText && /* @__PURE__ */ jsx18("span", { className: "text-ods-text-secondary text-sm", children: "Assistant is typing" }),
|
|
3301
|
+
/* @__PURE__ */ jsxs16("div", { className: cn(
|
|
3233
3302
|
"inline-flex items-center justify-center gap-1",
|
|
3234
3303
|
containerSizeClasses[size2]
|
|
3235
3304
|
), children: [
|
|
3236
|
-
/* @__PURE__ */
|
|
3305
|
+
/* @__PURE__ */ jsx18(
|
|
3237
3306
|
"div",
|
|
3238
3307
|
{
|
|
3239
3308
|
className: cn(
|
|
@@ -3247,7 +3316,7 @@ var ChatTypingIndicator = React7.forwardRef(
|
|
|
3247
3316
|
}
|
|
3248
3317
|
}
|
|
3249
3318
|
),
|
|
3250
|
-
/* @__PURE__ */
|
|
3319
|
+
/* @__PURE__ */ jsx18(
|
|
3251
3320
|
"div",
|
|
3252
3321
|
{
|
|
3253
3322
|
className: cn(
|
|
@@ -3261,7 +3330,7 @@ var ChatTypingIndicator = React7.forwardRef(
|
|
|
3261
3330
|
}
|
|
3262
3331
|
}
|
|
3263
3332
|
),
|
|
3264
|
-
/* @__PURE__ */
|
|
3333
|
+
/* @__PURE__ */ jsx18(
|
|
3265
3334
|
"div",
|
|
3266
3335
|
{
|
|
3267
3336
|
className: cn(
|
|
@@ -3289,7 +3358,7 @@ init_cn();
|
|
|
3289
3358
|
// src/components/chat/mingo-onboarding-card.tsx
|
|
3290
3359
|
init_cn();
|
|
3291
3360
|
init_button2();
|
|
3292
|
-
import { jsx as
|
|
3361
|
+
import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3293
3362
|
function MingoOnboardingCard({
|
|
3294
3363
|
icon,
|
|
3295
3364
|
title,
|
|
@@ -3301,20 +3370,20 @@ function MingoOnboardingCard({
|
|
|
3301
3370
|
}) {
|
|
3302
3371
|
const hasActions = !!actions && actions.length > 0;
|
|
3303
3372
|
const isInteractive = !hasActions && !!onClick;
|
|
3304
|
-
const body = /* @__PURE__ */
|
|
3305
|
-
/* @__PURE__ */
|
|
3373
|
+
const body = /* @__PURE__ */ jsxs17("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)] w-full", children: [
|
|
3374
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] w-full", children: [
|
|
3306
3375
|
icon ? (
|
|
3307
3376
|
// Icon slot — monochrome `ods-text-secondary` (≈ #888) so
|
|
3308
3377
|
// consumers can drop any `icons-v2-generated` glyph (they use
|
|
3309
3378
|
// `currentColor`) without per-card styling. Brand multi-color
|
|
3310
3379
|
// SVGs ignore this color.
|
|
3311
|
-
/* @__PURE__ */
|
|
3380
|
+
/* @__PURE__ */ jsx19("span", { className: "flex shrink-0 size-4 items-center justify-center text-ods-text-secondary", children: icon })
|
|
3312
3381
|
) : null,
|
|
3313
|
-
/* @__PURE__ */
|
|
3314
|
-
slashCommand ? /* @__PURE__ */
|
|
3382
|
+
/* @__PURE__ */ jsx19("span", { className: "flex-1 min-w-0 truncate text-h6 text-ods-text-primary", children: title }),
|
|
3383
|
+
slashCommand ? /* @__PURE__ */ jsx19("span", { className: "text-h6 text-ods-text-secondary whitespace-nowrap", children: slashCommand }) : null
|
|
3315
3384
|
] }),
|
|
3316
|
-
description ? /* @__PURE__ */
|
|
3317
|
-
hasActions ? /* @__PURE__ */
|
|
3385
|
+
description ? /* @__PURE__ */ jsx19("p", { className: "text-h6 text-ods-text-secondary w-full", children: description }) : null,
|
|
3386
|
+
hasActions ? /* @__PURE__ */ jsx19("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: actions.map((action) => /* @__PURE__ */ jsx19(
|
|
3318
3387
|
Button,
|
|
3319
3388
|
{
|
|
3320
3389
|
type: "button",
|
|
@@ -3335,9 +3404,9 @@ function MingoOnboardingCard({
|
|
|
3335
3404
|
className
|
|
3336
3405
|
);
|
|
3337
3406
|
if (isInteractive) {
|
|
3338
|
-
return /* @__PURE__ */
|
|
3407
|
+
return /* @__PURE__ */ jsx19("button", { type: "button", onClick, className: baseClass, children: body });
|
|
3339
3408
|
}
|
|
3340
|
-
return /* @__PURE__ */
|
|
3409
|
+
return /* @__PURE__ */ jsx19("div", { className: baseClass, children: body });
|
|
3341
3410
|
}
|
|
3342
3411
|
|
|
3343
3412
|
// src/components/chat/utils/icon-registry.ts
|
|
@@ -3536,10 +3605,10 @@ function getDynamicIcon(iconName, size2 = "md", className) {
|
|
|
3536
3605
|
|
|
3537
3606
|
// src/components/chat/utils/icon-library.tsx
|
|
3538
3607
|
import { Megaphone as Megaphone2, Bell as Bell2, Info as Info2, Star as Star2, Package as PackageGlyph } from "lucide-react";
|
|
3539
|
-
import { jsx as
|
|
3608
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
3540
3609
|
function sizedLogo(Logo) {
|
|
3541
3610
|
return function SizedLogo({ size: size2 = 16, className }) {
|
|
3542
|
-
return /* @__PURE__ */
|
|
3611
|
+
return /* @__PURE__ */ jsx20(Logo, { className, style: { width: size2, height: size2 } });
|
|
3543
3612
|
};
|
|
3544
3613
|
}
|
|
3545
3614
|
var OpenmspLogoIcon = sizedLogo(OpenmspLogo);
|
|
@@ -3550,7 +3619,7 @@ function LogoOpenframeIcon({
|
|
|
3550
3619
|
color
|
|
3551
3620
|
}) {
|
|
3552
3621
|
const tint = color ?? "currentColor";
|
|
3553
|
-
return /* @__PURE__ */
|
|
3622
|
+
return /* @__PURE__ */ jsx20(
|
|
3554
3623
|
OpenFrameLogo,
|
|
3555
3624
|
{
|
|
3556
3625
|
className,
|
|
@@ -3823,7 +3892,7 @@ var ICON_OPTIONS = [
|
|
|
3823
3892
|
];
|
|
3824
3893
|
|
|
3825
3894
|
// src/components/chat/slash-command-suggestions.tsx
|
|
3826
|
-
import { jsx as
|
|
3895
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
3827
3896
|
function SlashCommandSuggestions({
|
|
3828
3897
|
commands,
|
|
3829
3898
|
highlightedIdx,
|
|
@@ -3834,7 +3903,7 @@ function SlashCommandSuggestions({
|
|
|
3834
3903
|
className
|
|
3835
3904
|
}) {
|
|
3836
3905
|
if (commands.length === 0) return null;
|
|
3837
|
-
return /* @__PURE__ */
|
|
3906
|
+
return /* @__PURE__ */ jsx21(
|
|
3838
3907
|
"div",
|
|
3839
3908
|
{
|
|
3840
3909
|
role: "menu",
|
|
@@ -3859,7 +3928,7 @@ function SlashCommandSuggestions({
|
|
|
3859
3928
|
onAction(cmd, action.id);
|
|
3860
3929
|
}
|
|
3861
3930
|
})) : void 0;
|
|
3862
|
-
return /* @__PURE__ */
|
|
3931
|
+
return /* @__PURE__ */ jsx21(
|
|
3863
3932
|
"div",
|
|
3864
3933
|
{
|
|
3865
3934
|
role: "menuitem",
|
|
@@ -3874,10 +3943,10 @@ function SlashCommandSuggestions({
|
|
|
3874
3943
|
}
|
|
3875
3944
|
},
|
|
3876
3945
|
className: "cursor-pointer outline-none",
|
|
3877
|
-
children: /* @__PURE__ */
|
|
3946
|
+
children: /* @__PURE__ */ jsx21(
|
|
3878
3947
|
MingoOnboardingCard,
|
|
3879
3948
|
{
|
|
3880
|
-
icon: LegacyIcon ? /* @__PURE__ */
|
|
3949
|
+
icon: LegacyIcon ? /* @__PURE__ */ jsx21(LegacyIcon, { className: "size-4" }) : /* @__PURE__ */ jsx21(Icon2, { size: 16 }),
|
|
3881
3950
|
title,
|
|
3882
3951
|
slashCommand: slashLabel,
|
|
3883
3952
|
description: cmd.description,
|
|
@@ -3897,7 +3966,7 @@ function SlashCommandSuggestions({
|
|
|
3897
3966
|
}
|
|
3898
3967
|
|
|
3899
3968
|
// src/components/chat/chat-input.tsx
|
|
3900
|
-
import { jsx as
|
|
3969
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3901
3970
|
var SLASH_INPUT_TRIGGER = /^\/([a-z][a-z0-9-]*)?$/;
|
|
3902
3971
|
var MENTION_GLOBAL = /@[A-Za-z0-9_.+/=-]+:[A-Za-z0-9_.+/=-]+/g;
|
|
3903
3972
|
var MENTION_TRIGGER_AT_END = /(^|\s)@([\w.-]*)$/;
|
|
@@ -3933,7 +4002,7 @@ function buildChipEl(token, label, icon) {
|
|
|
3933
4002
|
span.setAttribute("contenteditable", "false");
|
|
3934
4003
|
span.className = "mx-0.5 inline-flex h-9 items-center select-none align-top";
|
|
3935
4004
|
span.innerHTML = renderToStaticMarkup(
|
|
3936
|
-
/* @__PURE__ */
|
|
4005
|
+
/* @__PURE__ */ jsx22(
|
|
3937
4006
|
Tag,
|
|
3938
4007
|
{
|
|
3939
4008
|
as: "span",
|
|
@@ -4264,18 +4333,18 @@ var ChatInput = forwardRef9((allProps, ref) => {
|
|
|
4264
4333
|
const isEmpty = value.length === 0;
|
|
4265
4334
|
const isDisabled = sending || disabled;
|
|
4266
4335
|
const showPreview = !isDisabled && !!previewText && !previewDismissed;
|
|
4267
|
-
return /* @__PURE__ */
|
|
4336
|
+
return /* @__PURE__ */ jsx22(
|
|
4268
4337
|
"div",
|
|
4269
4338
|
{
|
|
4270
4339
|
className: cn(
|
|
4271
4340
|
fullWidth ? "w-full flex-shrink-0" : "mx-auto w-full max-w-ods-content-narrow flex-shrink-0",
|
|
4272
4341
|
className
|
|
4273
4342
|
),
|
|
4274
|
-
children: awaitingResponse ? /* @__PURE__ */
|
|
4275
|
-
/* @__PURE__ */
|
|
4276
|
-
/* @__PURE__ */
|
|
4277
|
-
] }) : /* @__PURE__ */
|
|
4278
|
-
/* @__PURE__ */
|
|
4343
|
+
children: awaitingResponse ? /* @__PURE__ */ jsxs18("div", { className: "relative flex items-center justify-center gap-[var(--spacing-system-xs)] rounded-md bg-ods-card border border-ods-border px-[var(--spacing-system-s)] py-[var(--spacing-system-s)] transition-colors", children: [
|
|
4344
|
+
/* @__PURE__ */ jsx22(ChatTypingIndicator, { size: "sm", dotClassName: "bg-ods-text-primary" }),
|
|
4345
|
+
/* @__PURE__ */ jsx22("p", { className: "text-h4 text-ods-text-secondary", children: "Waiting for Technician Response" })
|
|
4346
|
+
] }) : /* @__PURE__ */ jsxs18("div", { className: "relative", children: [
|
|
4347
|
+
/* @__PURE__ */ jsx22(
|
|
4279
4348
|
SlashCommandSuggestions,
|
|
4280
4349
|
{
|
|
4281
4350
|
commands: slashPrefix !== null ? slashSuggestions : [],
|
|
@@ -4286,7 +4355,7 @@ var ChatInput = forwardRef9((allProps, ref) => {
|
|
|
4286
4355
|
onAction: slashCommands?.onAction
|
|
4287
4356
|
}
|
|
4288
4357
|
),
|
|
4289
|
-
/* @__PURE__ */
|
|
4358
|
+
/* @__PURE__ */ jsxs18(
|
|
4290
4359
|
"div",
|
|
4291
4360
|
{
|
|
4292
4361
|
onMouseDown: (e) => {
|
|
@@ -4310,11 +4379,11 @@ var ChatInput = forwardRef9((allProps, ref) => {
|
|
|
4310
4379
|
hideBorder && "bg-transparent"
|
|
4311
4380
|
),
|
|
4312
4381
|
children: [
|
|
4313
|
-
startIcon && /* @__PURE__ */
|
|
4314
|
-
/* @__PURE__ */
|
|
4315
|
-
isEmpty && !showPreview && /* @__PURE__ */
|
|
4316
|
-
showPreview && /* @__PURE__ */
|
|
4317
|
-
/* @__PURE__ */
|
|
4382
|
+
startIcon && /* @__PURE__ */ jsx22("span", { className: "flex h-6 shrink-0 items-center", children: startIcon }),
|
|
4383
|
+
/* @__PURE__ */ jsxs18("div", { className: "relative flex-1 min-w-0", children: [
|
|
4384
|
+
isEmpty && !showPreview && /* @__PURE__ */ jsx22("span", { className: "pointer-events-none absolute left-0 top-0 select-none text-h4 !leading-9 text-ods-text-secondary", children: disabled ? "Connection lost. Waiting to reconnect..." : placeholder }),
|
|
4385
|
+
showPreview && /* @__PURE__ */ jsx22("p", { className: "pointer-events-none absolute inset-x-0 top-0 m-0 select-none truncate text-h4 !leading-9 text-ods-text-secondary", children: previewText }),
|
|
4386
|
+
/* @__PURE__ */ jsx22(
|
|
4318
4387
|
"div",
|
|
4319
4388
|
{
|
|
4320
4389
|
ref: editorRef,
|
|
@@ -4360,7 +4429,7 @@ var ChatInput = forwardRef9((allProps, ref) => {
|
|
|
4360
4429
|
}
|
|
4361
4430
|
)
|
|
4362
4431
|
] }),
|
|
4363
|
-
/* @__PURE__ */
|
|
4432
|
+
/* @__PURE__ */ jsx22(
|
|
4364
4433
|
"button",
|
|
4365
4434
|
{
|
|
4366
4435
|
type: "button",
|
|
@@ -4375,7 +4444,7 @@ var ChatInput = forwardRef9((allProps, ref) => {
|
|
|
4375
4444
|
"focus-visible:outline-none focus-visible:text-ods-accent",
|
|
4376
4445
|
"disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:text-ods-text-secondary"
|
|
4377
4446
|
),
|
|
4378
|
-
children: isStopMode ? /* @__PURE__ */
|
|
4447
|
+
children: isStopMode ? /* @__PURE__ */ jsx22(StopCircleIcon, { size: 20 }) : /* @__PURE__ */ jsx22(Send01Icon, { size: 20 })
|
|
4379
4448
|
}
|
|
4380
4449
|
)
|
|
4381
4450
|
]
|
|
@@ -4394,7 +4463,7 @@ import React9, { forwardRef as forwardRef11, memo as memo3, useMemo as useMemo6,
|
|
|
4394
4463
|
// src/components/chat/tool-execution-display.tsx
|
|
4395
4464
|
init_cn();
|
|
4396
4465
|
import { forwardRef as forwardRef10, useMemo as useMemo4, useState as useState9 } from "react";
|
|
4397
|
-
import { jsx as
|
|
4466
|
+
import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
4398
4467
|
var COMMAND_BODY_KEYS2 = new Set(COMMAND_BODY_ARG_KEYS);
|
|
4399
4468
|
var ToolExecutionDisplay = forwardRef10(
|
|
4400
4469
|
({ className, message: message2, assistantType, ...props }, ref) => {
|
|
@@ -4421,12 +4490,12 @@ var ToolExecutionDisplay = forwardRef10(
|
|
|
4421
4490
|
const hasResult = isExecuted && typeof message2.result === "string" && message2.result.length > 0;
|
|
4422
4491
|
const hasBody = argEntries.length > 0 || hasResult || isExecuting;
|
|
4423
4492
|
const renderStatusIcon = () => {
|
|
4424
|
-
if (isExecuting) return /* @__PURE__ */
|
|
4425
|
-
if (isExecuted && message2.success === true) return /* @__PURE__ */
|
|
4426
|
-
if (isExecuted && message2.success === false) return /* @__PURE__ */
|
|
4493
|
+
if (isExecuting) return /* @__PURE__ */ jsx23(DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" });
|
|
4494
|
+
if (isExecuted && message2.success === true) return /* @__PURE__ */ jsx23(CheckCircleIcon, { className: "w-4 h-4 text-ods-success" });
|
|
4495
|
+
if (isExecuted && message2.success === false) return /* @__PURE__ */ jsx23(XmarkCircleIcon, { className: "w-4 h-4 text-ods-error" });
|
|
4427
4496
|
return null;
|
|
4428
4497
|
};
|
|
4429
|
-
return /* @__PURE__ */
|
|
4498
|
+
return /* @__PURE__ */ jsxs19(
|
|
4430
4499
|
"div",
|
|
4431
4500
|
{
|
|
4432
4501
|
ref,
|
|
@@ -4438,15 +4507,15 @@ var ToolExecutionDisplay = forwardRef10(
|
|
|
4438
4507
|
),
|
|
4439
4508
|
...props,
|
|
4440
4509
|
children: [
|
|
4441
|
-
/* @__PURE__ */
|
|
4510
|
+
/* @__PURE__ */ jsxs19(
|
|
4442
4511
|
"button",
|
|
4443
4512
|
{
|
|
4444
4513
|
type: "button",
|
|
4445
4514
|
className: "flex gap-[var(--spacing-system-xs)] items-start p-[var(--spacing-system-s)] cursor-pointer text-left w-full",
|
|
4446
4515
|
onClick: () => setExpanded((prev) => !prev),
|
|
4447
4516
|
children: [
|
|
4448
|
-
!isClient && /* @__PURE__ */
|
|
4449
|
-
/* @__PURE__ */
|
|
4517
|
+
!isClient && /* @__PURE__ */ jsx23("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ jsx23(ToolIcon, { toolType: integratedToolType, size: 16 }) }),
|
|
4518
|
+
/* @__PURE__ */ jsx23(
|
|
4450
4519
|
"div",
|
|
4451
4520
|
{
|
|
4452
4521
|
className: cn(
|
|
@@ -4456,21 +4525,21 @@ var ToolExecutionDisplay = forwardRef10(
|
|
|
4456
4525
|
children: previewText
|
|
4457
4526
|
}
|
|
4458
4527
|
),
|
|
4459
|
-
/* @__PURE__ */
|
|
4460
|
-
/* @__PURE__ */
|
|
4528
|
+
/* @__PURE__ */ jsx23("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: renderStatusIcon() }),
|
|
4529
|
+
/* @__PURE__ */ jsx23("div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ jsx23(ExpandChevron, { expanded }) })
|
|
4461
4530
|
]
|
|
4462
4531
|
}
|
|
4463
4532
|
),
|
|
4464
|
-
/* @__PURE__ */
|
|
4465
|
-
argEntries.map(([key, value]) => /* @__PURE__ */
|
|
4466
|
-
hasResult && /* @__PURE__ */
|
|
4533
|
+
/* @__PURE__ */ jsx23("div", { className: "w-full", style: containerStyle, children: /* @__PURE__ */ jsx23("div", { ref: innerRef, children: hasBody && /* @__PURE__ */ jsxs19("div", { className: "flex flex-col gap-0 items-start w-full text-h6 p-[var(--spacing-system-sf)] bg-ods-card", children: [
|
|
4534
|
+
argEntries.map(([key, value]) => /* @__PURE__ */ jsx23(ArgRow, { argKey: key, value }, key)),
|
|
4535
|
+
hasResult && /* @__PURE__ */ jsx23(
|
|
4467
4536
|
ResultBlock,
|
|
4468
4537
|
{
|
|
4469
4538
|
result: message2.result,
|
|
4470
4539
|
className: argEntries.length > 0 ? "mt-[var(--spacing-system-xsf)]" : void 0
|
|
4471
4540
|
}
|
|
4472
4541
|
),
|
|
4473
|
-
isExecuting && /* @__PURE__ */
|
|
4542
|
+
isExecuting && /* @__PURE__ */ jsxs19(
|
|
4474
4543
|
"div",
|
|
4475
4544
|
{
|
|
4476
4545
|
className: cn(
|
|
@@ -4478,8 +4547,8 @@ var ToolExecutionDisplay = forwardRef10(
|
|
|
4478
4547
|
argEntries.length > 0 && "mt-[var(--spacing-system-xsf)]"
|
|
4479
4548
|
),
|
|
4480
4549
|
children: [
|
|
4481
|
-
/* @__PURE__ */
|
|
4482
|
-
/* @__PURE__ */
|
|
4550
|
+
/* @__PURE__ */ jsx23("span", { className: "text-ods-text-secondary", children: "Result:" }),
|
|
4551
|
+
/* @__PURE__ */ jsx23(DotsLoaderIcon, { size: 16, className: "text-ods-text-secondary" })
|
|
4483
4552
|
]
|
|
4484
4553
|
}
|
|
4485
4554
|
)
|
|
@@ -4584,7 +4653,7 @@ init_cn();
|
|
|
4584
4653
|
// src/components/chat/context-items-list.tsx
|
|
4585
4654
|
import * as React8 from "react";
|
|
4586
4655
|
init_cn();
|
|
4587
|
-
import { Fragment as Fragment3, jsx as
|
|
4656
|
+
import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4588
4657
|
var itemKey = (i) => `${i.type}:${i.id}`;
|
|
4589
4658
|
var CONTEXT_ROW_CLASS = "flex w-full items-center gap-2 border-b border-ods-border bg-ods-bg py-3 pl-4 pr-2 text-left outline-none transition-colors last:border-b-0 hover:bg-ods-bg-hover focus-visible:bg-ods-bg-hover [&_svg]:size-4 md:[&_svg]:size-6";
|
|
4590
4659
|
var CONTEXT_ICON_CLASS = "flex size-4 shrink-0 items-center justify-center text-ods-text-secondary md:size-6";
|
|
@@ -4601,7 +4670,7 @@ function ContextMenuRow({
|
|
|
4601
4670
|
role = "menuitem",
|
|
4602
4671
|
title
|
|
4603
4672
|
}) {
|
|
4604
|
-
return /* @__PURE__ */
|
|
4673
|
+
return /* @__PURE__ */ jsxs20(
|
|
4605
4674
|
"button",
|
|
4606
4675
|
{
|
|
4607
4676
|
type: "button",
|
|
@@ -4612,19 +4681,19 @@ function ContextMenuRow({
|
|
|
4612
4681
|
title,
|
|
4613
4682
|
className: cn(CONTEXT_ROW_CLASS, disabled && "cursor-not-allowed opacity-40 hover:bg-ods-bg"),
|
|
4614
4683
|
children: [
|
|
4615
|
-
icon != null && /* @__PURE__ */
|
|
4616
|
-
/* @__PURE__ */
|
|
4684
|
+
icon != null && /* @__PURE__ */ jsx24("span", { className: CONTEXT_ICON_CLASS, children: icon }),
|
|
4685
|
+
/* @__PURE__ */ jsx24("span", { className: CONTEXT_LABEL_CLASS, children: label }),
|
|
4617
4686
|
trailing
|
|
4618
4687
|
]
|
|
4619
4688
|
}
|
|
4620
4689
|
);
|
|
4621
4690
|
}
|
|
4622
4691
|
function ContextItemsSkeleton({ count }) {
|
|
4623
|
-
return /* @__PURE__ */
|
|
4692
|
+
return /* @__PURE__ */ jsx24(Fragment3, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx24(
|
|
4624
4693
|
"div",
|
|
4625
4694
|
{
|
|
4626
4695
|
className: "flex items-center border-b border-ods-border bg-ods-bg py-3 pl-4 pr-2 last:border-b-0",
|
|
4627
|
-
children: /* @__PURE__ */
|
|
4696
|
+
children: /* @__PURE__ */ jsx24(Skeleton, { className: "h-5 w-1/2" })
|
|
4628
4697
|
},
|
|
4629
4698
|
`ctx-skeleton-${i}`
|
|
4630
4699
|
)) });
|
|
@@ -4649,9 +4718,9 @@ function ContextItemsList({
|
|
|
4649
4718
|
[hasMore, loadingMore, onLoadMore]
|
|
4650
4719
|
);
|
|
4651
4720
|
if (items.length === 0 && !loadingMore) {
|
|
4652
|
-
return /* @__PURE__ */
|
|
4721
|
+
return /* @__PURE__ */ jsx24("div", { className: CONTEXT_STATE_CLASS, children: emptyLabel });
|
|
4653
4722
|
}
|
|
4654
|
-
return /* @__PURE__ */
|
|
4723
|
+
return /* @__PURE__ */ jsxs20(
|
|
4655
4724
|
"div",
|
|
4656
4725
|
{
|
|
4657
4726
|
role: "listbox",
|
|
@@ -4661,7 +4730,7 @@ function ContextItemsList({
|
|
|
4661
4730
|
children: [
|
|
4662
4731
|
items.map((item) => {
|
|
4663
4732
|
const selected = selectedKeys.has(itemKey(item));
|
|
4664
|
-
return /* @__PURE__ */
|
|
4733
|
+
return /* @__PURE__ */ jsx24(
|
|
4665
4734
|
ContextMenuRow,
|
|
4666
4735
|
{
|
|
4667
4736
|
role: "option",
|
|
@@ -4670,12 +4739,12 @@ function ContextItemsList({
|
|
|
4670
4739
|
onClick: () => onToggle(item),
|
|
4671
4740
|
label: item.label,
|
|
4672
4741
|
title: !selected && atLimit ? "Selection limit reached" : void 0,
|
|
4673
|
-
trailing: selected ? /* @__PURE__ */
|
|
4742
|
+
trailing: selected ? /* @__PURE__ */ jsx24(CheckFillIcon, { className: "size-4 shrink-0 text-ods-accent md:size-6" }) : void 0
|
|
4674
4743
|
},
|
|
4675
4744
|
itemKey(item)
|
|
4676
4745
|
);
|
|
4677
4746
|
}),
|
|
4678
|
-
loadingMore && /* @__PURE__ */
|
|
4747
|
+
loadingMore && /* @__PURE__ */ jsx24(ContextItemsSkeleton, { count: 3 })
|
|
4679
4748
|
]
|
|
4680
4749
|
}
|
|
4681
4750
|
);
|
|
@@ -4703,7 +4772,7 @@ var ContextErrorBoundary = class extends React8.Component {
|
|
|
4703
4772
|
};
|
|
4704
4773
|
|
|
4705
4774
|
// src/components/chat/chat-context-picker.tsx
|
|
4706
|
-
import { Fragment as Fragment5, jsx as
|
|
4775
|
+
import { Fragment as Fragment5, jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4707
4776
|
var CHAT_CONTEXT_ITEMS_DEFAULT_MAX = 10;
|
|
4708
4777
|
var ITEMS_SKELETON_ROWS = 10;
|
|
4709
4778
|
var SEARCH_DEBOUNCE_MS = 300;
|
|
@@ -4717,8 +4786,8 @@ function ChatComposerPlusMenu({
|
|
|
4717
4786
|
return (
|
|
4718
4787
|
// `relative` so the dropdown anchors to the button itself (bottom-full),
|
|
4719
4788
|
// aligning the popover to the `+` rather than the input row.
|
|
4720
|
-
/* @__PURE__ */
|
|
4721
|
-
/* @__PURE__ */
|
|
4789
|
+
/* @__PURE__ */ jsxs21("span", { className: "relative inline-flex", children: [
|
|
4790
|
+
/* @__PURE__ */ jsx25(
|
|
4722
4791
|
"button",
|
|
4723
4792
|
{
|
|
4724
4793
|
type: "button",
|
|
@@ -4733,7 +4802,7 @@ function ChatComposerPlusMenu({
|
|
|
4733
4802
|
open ? "text-ods-accent" : "text-ods-text-secondary hover:text-ods-text-primary active:text-ods-accent",
|
|
4734
4803
|
"focus-visible:text-ods-text-primary disabled:cursor-not-allowed disabled:opacity-40"
|
|
4735
4804
|
),
|
|
4736
|
-
children: /* @__PURE__ */
|
|
4805
|
+
children: /* @__PURE__ */ jsx25(PlusIcon, { className: "h-6 w-6" })
|
|
4737
4806
|
}
|
|
4738
4807
|
),
|
|
4739
4808
|
dropdown
|
|
@@ -4835,7 +4904,7 @@ function ChatContextPicker({
|
|
|
4835
4904
|
[config.entityTypes, typeFilter]
|
|
4836
4905
|
);
|
|
4837
4906
|
if (!open) return null;
|
|
4838
|
-
return /* @__PURE__ */
|
|
4907
|
+
return /* @__PURE__ */ jsx25(
|
|
4839
4908
|
"div",
|
|
4840
4909
|
{
|
|
4841
4910
|
ref: rootRef,
|
|
@@ -4858,45 +4927,45 @@ function ChatContextPicker({
|
|
|
4858
4927
|
},
|
|
4859
4928
|
children: view === "root" ? (
|
|
4860
4929
|
/* Level 0 — Upload File / Assign Item (Figma 31:28312). */
|
|
4861
|
-
/* @__PURE__ */
|
|
4862
|
-
config.onUploadFile && /* @__PURE__ */
|
|
4930
|
+
/* @__PURE__ */ jsxs21("div", { role: "menu", "aria-label": "Add context", children: [
|
|
4931
|
+
config.onUploadFile && /* @__PURE__ */ jsx25(
|
|
4863
4932
|
ContextMenuRow,
|
|
4864
4933
|
{
|
|
4865
|
-
icon: /* @__PURE__ */
|
|
4934
|
+
icon: /* @__PURE__ */ jsx25(Upload02Icon, { size: 24 }),
|
|
4866
4935
|
label: "Upload File",
|
|
4867
4936
|
onClick: () => config.onUploadFile?.()
|
|
4868
4937
|
}
|
|
4869
4938
|
),
|
|
4870
|
-
/* @__PURE__ */
|
|
4939
|
+
/* @__PURE__ */ jsx25(ContextMenuRow, { icon: /* @__PURE__ */ jsx25(PackagePlusIcon, { size: 24 }), label: "Assign Item", onClick: () => setView("types") })
|
|
4871
4940
|
] })
|
|
4872
4941
|
) : view === "types" ? (
|
|
4873
4942
|
/* Level 1 — Back + entity-type list (Figma 31:28708). Back stays pinned;
|
|
4874
4943
|
the type list scrolls if it can't fit the capped popover height. */
|
|
4875
|
-
/* @__PURE__ */
|
|
4876
|
-
/* @__PURE__ */
|
|
4944
|
+
/* @__PURE__ */ jsxs21("div", { role: "menu", "aria-label": "Context types", className: "flex flex-col", children: [
|
|
4945
|
+
/* @__PURE__ */ jsxs21(
|
|
4877
4946
|
"button",
|
|
4878
4947
|
{
|
|
4879
4948
|
type: "button",
|
|
4880
4949
|
onClick: () => setView("root"),
|
|
4881
4950
|
className: cn(CONTEXT_BACK_CLASS, "sticky top-0 z-10"),
|
|
4882
4951
|
children: [
|
|
4883
|
-
/* @__PURE__ */
|
|
4884
|
-
/* @__PURE__ */
|
|
4952
|
+
/* @__PURE__ */ jsx25(Chevron02LeftIcon, { size: 24, className: "shrink-0" }),
|
|
4953
|
+
/* @__PURE__ */ jsx25("span", { className: "truncate", children: "Back" })
|
|
4885
4954
|
]
|
|
4886
4955
|
}
|
|
4887
4956
|
),
|
|
4888
|
-
visibleTypes.length === 0 ? /* @__PURE__ */
|
|
4957
|
+
visibleTypes.length === 0 ? /* @__PURE__ */ jsx25("div", { className: CONTEXT_STATE_CLASS, children: "No matching types" }) : visibleTypes.map((type) => /* @__PURE__ */ jsx25(ContextMenuRow, { icon: type.icon, label: type.label, onClick: () => openType(type) }, type.type))
|
|
4889
4958
|
] })
|
|
4890
4959
|
) : activeType ? (
|
|
4891
4960
|
/* Level 2 — Back + search + HOST-rendered items (Figma 31:29102). */
|
|
4892
|
-
/* @__PURE__ */
|
|
4893
|
-
/* @__PURE__ */
|
|
4894
|
-
/* @__PURE__ */
|
|
4895
|
-
/* @__PURE__ */
|
|
4961
|
+
/* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
4962
|
+
/* @__PURE__ */ jsxs21("button", { type: "button", onClick: backToTypes, className: cn(CONTEXT_BACK_CLASS, "sticky top-0 z-10"), children: [
|
|
4963
|
+
/* @__PURE__ */ jsx25(Chevron02LeftIcon, { size: 24, className: "shrink-0" }),
|
|
4964
|
+
/* @__PURE__ */ jsx25("span", { className: "truncate", children: "Back" })
|
|
4896
4965
|
] }),
|
|
4897
|
-
/* @__PURE__ */
|
|
4898
|
-
/* @__PURE__ */
|
|
4899
|
-
/* @__PURE__ */
|
|
4966
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex shrink-0 items-center gap-2 border-b border-ods-border bg-ods-card p-3", children: [
|
|
4967
|
+
/* @__PURE__ */ jsx25(SearchIcon, { className: "size-4 shrink-0 text-ods-text-secondary md:size-6" }),
|
|
4968
|
+
/* @__PURE__ */ jsx25(
|
|
4900
4969
|
"input",
|
|
4901
4970
|
{
|
|
4902
4971
|
ref: searchRef,
|
|
@@ -4907,13 +4976,13 @@ function ChatContextPicker({
|
|
|
4907
4976
|
}
|
|
4908
4977
|
)
|
|
4909
4978
|
] }),
|
|
4910
|
-
/* @__PURE__ */
|
|
4979
|
+
/* @__PURE__ */ jsx25(QueryErrorResetBoundary, { children: ({ reset }) => /* @__PURE__ */ jsx25(
|
|
4911
4980
|
ContextErrorBoundary,
|
|
4912
4981
|
{
|
|
4913
4982
|
resetKey: `${activeType.type}:${debouncedQuery}`,
|
|
4914
|
-
fallback: (retry) => /* @__PURE__ */
|
|
4915
|
-
/* @__PURE__ */
|
|
4916
|
-
/* @__PURE__ */
|
|
4983
|
+
fallback: (retry) => /* @__PURE__ */ jsxs21("div", { className: "flex items-center justify-between gap-2 bg-ods-bg px-4 py-3 text-h4 text-ods-attention-red-error", children: [
|
|
4984
|
+
/* @__PURE__ */ jsx25("span", { children: "Failed to load" }),
|
|
4985
|
+
/* @__PURE__ */ jsx25(
|
|
4917
4986
|
"button",
|
|
4918
4987
|
{
|
|
4919
4988
|
type: "button",
|
|
@@ -4926,10 +4995,10 @@ function ChatContextPicker({
|
|
|
4926
4995
|
}
|
|
4927
4996
|
)
|
|
4928
4997
|
] }),
|
|
4929
|
-
children: /* @__PURE__ */
|
|
4998
|
+
children: /* @__PURE__ */ jsx25(
|
|
4930
4999
|
Suspense,
|
|
4931
5000
|
{
|
|
4932
|
-
fallback: /* @__PURE__ */
|
|
5001
|
+
fallback: /* @__PURE__ */ jsx25("div", { className: "max-h-[340px] overflow-hidden", children: /* @__PURE__ */ jsx25(ContextItemsSkeleton, { count: ITEMS_SKELETON_ROWS }) }),
|
|
4933
5002
|
children: config.renderItems({
|
|
4934
5003
|
type: activeType.type,
|
|
4935
5004
|
query: debouncedQuery,
|
|
@@ -4958,18 +5027,18 @@ function ChatContextChipStrip({
|
|
|
4958
5027
|
return (
|
|
4959
5028
|
// `tag` pills (Figma 1:6073): 32px tall, card surface, bordered, mono-
|
|
4960
5029
|
// uppercase label, 16px lead icon + xmark-circle remove. Wraps to new rows.
|
|
4961
|
-
/* @__PURE__ */
|
|
5030
|
+
/* @__PURE__ */ jsx25("div", { className: cn("flex flex-wrap content-center items-center gap-2", className), children: items.map((item) => {
|
|
4962
5031
|
const hostNode = renderItem?.(item);
|
|
4963
|
-
if (hostNode != null) return /* @__PURE__ */
|
|
4964
|
-
return /* @__PURE__ */
|
|
5032
|
+
if (hostNode != null) return /* @__PURE__ */ jsx25(Fragment4, { children: hostNode }, itemKey2(item));
|
|
5033
|
+
return /* @__PURE__ */ jsxs21(
|
|
4965
5034
|
"div",
|
|
4966
5035
|
{
|
|
4967
5036
|
className: "flex h-8 shrink-0 items-center gap-2 rounded-md border border-ods-border bg-ods-card px-2",
|
|
4968
5037
|
role: "group",
|
|
4969
5038
|
"aria-label": `Context ${item.label}`,
|
|
4970
5039
|
children: [
|
|
4971
|
-
resolveIcon2 && /* @__PURE__ */
|
|
4972
|
-
/* @__PURE__ */
|
|
5040
|
+
resolveIcon2 && /* @__PURE__ */ jsx25("span", { className: "flex size-4 shrink-0 items-center justify-center text-ods-text-secondary [&_svg]:size-4", children: resolveIcon2(item) }),
|
|
5041
|
+
/* @__PURE__ */ jsx25(
|
|
4973
5042
|
"span",
|
|
4974
5043
|
{
|
|
4975
5044
|
className: "max-w-[220px] truncate font-mono text-h5 font-medium uppercase tracking-[-0.28px] text-ods-text-primary",
|
|
@@ -4977,7 +5046,7 @@ function ChatContextChipStrip({
|
|
|
4977
5046
|
children: item.label
|
|
4978
5047
|
}
|
|
4979
5048
|
),
|
|
4980
|
-
onRemove && /* @__PURE__ */
|
|
5049
|
+
onRemove && /* @__PURE__ */ jsx25(
|
|
4981
5050
|
"button",
|
|
4982
5051
|
{
|
|
4983
5052
|
type: "button",
|
|
@@ -4985,7 +5054,7 @@ function ChatContextChipStrip({
|
|
|
4985
5054
|
disabled,
|
|
4986
5055
|
"aria-label": `Remove ${item.label}`,
|
|
4987
5056
|
className: "flex size-4 shrink-0 items-center justify-center text-ods-text-secondary outline-none transition-colors hover:text-ods-text-primary focus-visible:text-ods-text-primary disabled:cursor-not-allowed disabled:opacity-40 [&_svg]:size-4",
|
|
4988
|
-
children: /* @__PURE__ */
|
|
5057
|
+
children: /* @__PURE__ */ jsx25(XmarkCircleIcon, { size: 16 })
|
|
4989
5058
|
}
|
|
4990
5059
|
)
|
|
4991
5060
|
]
|
|
@@ -4997,7 +5066,7 @@ function ChatContextChipStrip({
|
|
|
4997
5066
|
}
|
|
4998
5067
|
|
|
4999
5068
|
// src/components/chat/chat-message-enhanced.tsx
|
|
5000
|
-
import { Fragment as Fragment6, jsx as
|
|
5069
|
+
import { Fragment as Fragment6, jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
5001
5070
|
var MENTION_MARKER_REGEX = /(^|[^\w@])@[a-z]+:([A-Za-z0-9_.+/=-]*[A-Za-z0-9_+/=])/g;
|
|
5002
5071
|
var CARD_MARKER_REGEX = /\[card:\/\/([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)[\])]/g;
|
|
5003
5072
|
function normalizeContent(content) {
|
|
@@ -5083,7 +5152,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5083
5152
|
cursor = markerEnd;
|
|
5084
5153
|
inlineByKey.set(
|
|
5085
5154
|
key,
|
|
5086
|
-
props2.inline != null ? props2.inline : /* @__PURE__ */
|
|
5155
|
+
props2.inline != null ? props2.inline : /* @__PURE__ */ jsx26("span", { className: "text-ods-text-primary font-medium", children: refMatch?.title ?? cardId })
|
|
5087
5156
|
);
|
|
5088
5157
|
} else if (rendered != null) {
|
|
5089
5158
|
parts.push({ kind: "text", text: text.slice(cursor, match2.index) });
|
|
@@ -5125,8 +5194,8 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5125
5194
|
const marker = sepIdx === -1 ? stripped : stripped.slice(0, sepIdx);
|
|
5126
5195
|
const id = sepIdx === -1 ? "" : stripped.slice(sepIdx + 1);
|
|
5127
5196
|
const node = renderMention?.({ marker, id });
|
|
5128
|
-
if (node != null) return /* @__PURE__ */
|
|
5129
|
-
return /* @__PURE__ */
|
|
5197
|
+
if (node != null) return /* @__PURE__ */ jsx26(Fragment6, { children: node });
|
|
5198
|
+
return /* @__PURE__ */ jsx26("span", { className: "text-ods-text-secondary opacity-60", children });
|
|
5130
5199
|
}
|
|
5131
5200
|
if (typeof href === "string" && href.startsWith("card://")) {
|
|
5132
5201
|
const stripped = href.slice("card://".length);
|
|
@@ -5139,15 +5208,15 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5139
5208
|
if (inline != null) return inline;
|
|
5140
5209
|
const refMatch = refs[key];
|
|
5141
5210
|
if (refMatch) {
|
|
5142
|
-
return /* @__PURE__ */
|
|
5211
|
+
return /* @__PURE__ */ jsx26("span", { className: "text-ods-text-primary", children: refMatch.title });
|
|
5143
5212
|
}
|
|
5144
|
-
return /* @__PURE__ */
|
|
5213
|
+
return /* @__PURE__ */ jsx26("span", { className: "text-ods-text-secondary opacity-60", children: cardId });
|
|
5145
5214
|
}
|
|
5146
5215
|
}
|
|
5147
5216
|
if (typeof href === "string" && NavLinkAnchor && !href.startsWith("#")) {
|
|
5148
|
-
return /* @__PURE__ */
|
|
5217
|
+
return /* @__PURE__ */ jsx26(NavLinkAnchor, { href, className: linkClassName, ...rest, children });
|
|
5149
5218
|
}
|
|
5150
|
-
return /* @__PURE__ */
|
|
5219
|
+
return /* @__PURE__ */ jsx26("a", { href, className: linkClassName, ...rest, children });
|
|
5151
5220
|
}
|
|
5152
5221
|
};
|
|
5153
5222
|
}, [hasMarkerSupport, hasMentionSupport, renderMention, chatRefs, renderingPlan, NavLinkAnchor]);
|
|
@@ -5176,7 +5245,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5176
5245
|
};
|
|
5177
5246
|
const avatarProps = getAvatarProps();
|
|
5178
5247
|
const isSystem = authorType === "system";
|
|
5179
|
-
return /* @__PURE__ */
|
|
5248
|
+
return /* @__PURE__ */ jsx26(
|
|
5180
5249
|
"div",
|
|
5181
5250
|
{
|
|
5182
5251
|
ref,
|
|
@@ -5185,23 +5254,23 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5185
5254
|
className
|
|
5186
5255
|
),
|
|
5187
5256
|
...props,
|
|
5188
|
-
children: /* @__PURE__ */
|
|
5189
|
-
/* @__PURE__ */
|
|
5257
|
+
children: /* @__PURE__ */ jsxs22("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)] min-w-0", children: [
|
|
5258
|
+
/* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
|
|
5190
5259
|
showAvatar && !isSystem && !(isUser && !avatar) && (!isUser && assistantIcon && !avatar ? (
|
|
5191
5260
|
// Host-supplied brand icon (e.g. Mingo): render it directly,
|
|
5192
5261
|
// no filled pill — the icon carries its own brand accent.
|
|
5193
|
-
/* @__PURE__ */
|
|
5194
|
-
) : /* @__PURE__ */
|
|
5195
|
-
/* @__PURE__ */
|
|
5262
|
+
/* @__PURE__ */ jsx26("div", { className: "flex items-center justify-center flex-shrink-0", children: assistantIcon })
|
|
5263
|
+
) : /* @__PURE__ */ jsx26(SquareAvatar, { ...avatarProps })),
|
|
5264
|
+
/* @__PURE__ */ jsxs22("span", { className: cn(
|
|
5196
5265
|
"text-h3 !font-mono !font-medium flex-1",
|
|
5197
5266
|
authorType === "system" ? "text-ods-open-yellow" : authorType === "admin" ? "text-ods-open-yellow" : authorType === "mingo" ? "text-ods-flamingo-cyan" : authorType === "fae" ? "text-ods-flamingo-pink" : "text-ods-text-secondary"
|
|
5198
5267
|
), children: [
|
|
5199
5268
|
name || (isUser ? "User" : assistantType === "mingo" ? "Mingo" : "Fae"),
|
|
5200
5269
|
!isSystem && ":"
|
|
5201
5270
|
] }),
|
|
5202
|
-
timestamp && /* @__PURE__ */
|
|
5271
|
+
timestamp && /* @__PURE__ */ jsx26("span", { className: "font-sans text-heading-5 font-medium text-ods-text-secondary shrink-0 whitespace-nowrap", children: timestamp.toLocaleTimeString([], { hour: "numeric", minute: "2-digit" }) })
|
|
5203
5272
|
] }),
|
|
5204
|
-
(!isSystem || segments.length > 0) && /* @__PURE__ */
|
|
5273
|
+
(!isSystem || segments.length > 0) && /* @__PURE__ */ jsx26("div", { className: "flex flex-col gap-2", children: segments.map((segment, index) => {
|
|
5205
5274
|
if (segment.type === "text") {
|
|
5206
5275
|
const parts = renderingPlan?.partsBySegment.get(index);
|
|
5207
5276
|
const wrapperClass = cn(
|
|
@@ -5209,7 +5278,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5209
5278
|
isError ? "text-ods-error" : "text-ods-text-primary"
|
|
5210
5279
|
);
|
|
5211
5280
|
if (!parts || parts.length === 0) {
|
|
5212
|
-
return /* @__PURE__ */
|
|
5281
|
+
return /* @__PURE__ */ jsx26("div", { className: wrapperClass, children: /* @__PURE__ */ jsx26(
|
|
5213
5282
|
SimpleMarkdownRenderer,
|
|
5214
5283
|
{
|
|
5215
5284
|
content: segment.text,
|
|
@@ -5219,9 +5288,9 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5219
5288
|
}
|
|
5220
5289
|
) }, index);
|
|
5221
5290
|
}
|
|
5222
|
-
return /* @__PURE__ */
|
|
5291
|
+
return /* @__PURE__ */ jsx26("div", { className: wrapperClass, children: parts.map((part, pIdx) => {
|
|
5223
5292
|
if (part.kind === "text") {
|
|
5224
|
-
return /* @__PURE__ */
|
|
5293
|
+
return /* @__PURE__ */ jsx26(
|
|
5225
5294
|
SimpleMarkdownRenderer,
|
|
5226
5295
|
{
|
|
5227
5296
|
content: part.text,
|
|
@@ -5232,10 +5301,10 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5232
5301
|
`t-${pIdx}`
|
|
5233
5302
|
);
|
|
5234
5303
|
}
|
|
5235
|
-
return /* @__PURE__ */
|
|
5304
|
+
return /* @__PURE__ */ jsx26("div", { className: "my-3", children: part.node }, `b-${part.key}`);
|
|
5236
5305
|
}) }, index);
|
|
5237
5306
|
} else if (segment.type === "tool_execution") {
|
|
5238
|
-
return /* @__PURE__ */
|
|
5307
|
+
return /* @__PURE__ */ jsx26(
|
|
5239
5308
|
ToolExecutionDisplay,
|
|
5240
5309
|
{
|
|
5241
5310
|
message: segment.data,
|
|
@@ -5244,7 +5313,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5244
5313
|
index
|
|
5245
5314
|
);
|
|
5246
5315
|
} else if (segment.type === "approval_request") {
|
|
5247
|
-
return /* @__PURE__ */
|
|
5316
|
+
return /* @__PURE__ */ jsx26(
|
|
5248
5317
|
ApprovalRequestMessage,
|
|
5249
5318
|
{
|
|
5250
5319
|
data: segment.data,
|
|
@@ -5256,7 +5325,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5256
5325
|
index
|
|
5257
5326
|
);
|
|
5258
5327
|
} else if (segment.type === "approval_batch") {
|
|
5259
|
-
return /* @__PURE__ */
|
|
5328
|
+
return /* @__PURE__ */ jsx26(
|
|
5260
5329
|
ApprovalBatchMessage,
|
|
5261
5330
|
{
|
|
5262
5331
|
data: segment.data,
|
|
@@ -5269,7 +5338,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5269
5338
|
index
|
|
5270
5339
|
);
|
|
5271
5340
|
} else if (segment.type === "error") {
|
|
5272
|
-
return /* @__PURE__ */
|
|
5341
|
+
return /* @__PURE__ */ jsx26(
|
|
5273
5342
|
ErrorMessageDisplay,
|
|
5274
5343
|
{
|
|
5275
5344
|
title: segment.title,
|
|
@@ -5278,7 +5347,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5278
5347
|
index
|
|
5279
5348
|
);
|
|
5280
5349
|
} else if (segment.type === "context_compaction") {
|
|
5281
|
-
return /* @__PURE__ */
|
|
5350
|
+
return /* @__PURE__ */ jsx26(
|
|
5282
5351
|
ContextCompactionDisplay,
|
|
5283
5352
|
{
|
|
5284
5353
|
status: segment.status
|
|
@@ -5287,7 +5356,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5287
5356
|
);
|
|
5288
5357
|
} else if (segment.type === "thinking") {
|
|
5289
5358
|
const isStreaming = index === segments.length - 1 && isTyping;
|
|
5290
|
-
return /* @__PURE__ */
|
|
5359
|
+
return /* @__PURE__ */ jsx26(
|
|
5291
5360
|
ThinkingDisplay,
|
|
5292
5361
|
{
|
|
5293
5362
|
text: segment.text,
|
|
@@ -5298,7 +5367,7 @@ var ChatMessageEnhanced = forwardRef11(
|
|
|
5298
5367
|
}
|
|
5299
5368
|
return null;
|
|
5300
5369
|
}) }),
|
|
5301
|
-
stripContextItems && stripContextItems.length > 0 && /* @__PURE__ */
|
|
5370
|
+
stripContextItems && stripContextItems.length > 0 && /* @__PURE__ */ jsx26(
|
|
5302
5371
|
ChatContextChipStrip,
|
|
5303
5372
|
{
|
|
5304
5373
|
items: stripContextItems,
|
|
@@ -5333,22 +5402,22 @@ import { useStickToBottom } from "use-stick-to-bottom";
|
|
|
5333
5402
|
|
|
5334
5403
|
// src/components/chat/chat-message-skeleton.tsx
|
|
5335
5404
|
init_cn();
|
|
5336
|
-
import { jsx as
|
|
5405
|
+
import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
5337
5406
|
function ChatMessageSkeleton({
|
|
5338
5407
|
className,
|
|
5339
5408
|
showAvatar = true,
|
|
5340
5409
|
isUser = false
|
|
5341
5410
|
}) {
|
|
5342
|
-
return /* @__PURE__ */
|
|
5343
|
-
/* @__PURE__ */
|
|
5344
|
-
showAvatar && !isUser && /* @__PURE__ */
|
|
5345
|
-
/* @__PURE__ */
|
|
5346
|
-
/* @__PURE__ */
|
|
5411
|
+
return /* @__PURE__ */ jsx27("div", { className: cn("relative py-[var(--spacing-system-s)]", className), children: /* @__PURE__ */ jsxs23("div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
5412
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-[var(--spacing-system-xs)]", children: [
|
|
5413
|
+
showAvatar && !isUser && /* @__PURE__ */ jsx27("div", { className: "h-8 w-8 flex-shrink-0 rounded-full bg-ods-border animate-pulse" }),
|
|
5414
|
+
/* @__PURE__ */ jsx27("div", { className: "h-5 w-32 rounded bg-ods-border animate-pulse" }),
|
|
5415
|
+
/* @__PURE__ */ jsx27("div", { className: "ml-auto h-4 w-14 rounded bg-ods-border animate-pulse" })
|
|
5347
5416
|
] }),
|
|
5348
|
-
/* @__PURE__ */
|
|
5349
|
-
/* @__PURE__ */
|
|
5350
|
-
/* @__PURE__ */
|
|
5351
|
-
/* @__PURE__ */
|
|
5417
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-2 pt-[var(--spacing-system-xxs)]", children: [
|
|
5418
|
+
/* @__PURE__ */ jsx27("div", { className: "h-4 w-full rounded bg-ods-border animate-pulse" }),
|
|
5419
|
+
/* @__PURE__ */ jsx27("div", { className: "h-4 w-11/12 rounded bg-ods-border animate-pulse" }),
|
|
5420
|
+
/* @__PURE__ */ jsx27("div", { className: "h-4 w-3/5 rounded bg-ods-border animate-pulse" })
|
|
5352
5421
|
] })
|
|
5353
5422
|
] }) });
|
|
5354
5423
|
}
|
|
@@ -5363,7 +5432,7 @@ function ChatMessageListSkeleton({
|
|
|
5363
5432
|
id: index,
|
|
5364
5433
|
isUser: index % 3 === 0
|
|
5365
5434
|
}));
|
|
5366
|
-
return /* @__PURE__ */
|
|
5435
|
+
return /* @__PURE__ */ jsx27("div", { className: "relative flex-1 min-h-0 flex flex-col", children: /* @__PURE__ */ jsx27(
|
|
5367
5436
|
"div",
|
|
5368
5437
|
{
|
|
5369
5438
|
className: cn(
|
|
@@ -5372,7 +5441,7 @@ function ChatMessageListSkeleton({
|
|
|
5372
5441
|
"scrollbar-thin scrollbar-track-transparent scrollbar-thumb-ods-border/30 hover:scrollbar-thumb-ods-text-secondary/30",
|
|
5373
5442
|
className
|
|
5374
5443
|
),
|
|
5375
|
-
children: /* @__PURE__ */
|
|
5444
|
+
children: /* @__PURE__ */ jsxs23(
|
|
5376
5445
|
"div",
|
|
5377
5446
|
{
|
|
5378
5447
|
className: cn(
|
|
@@ -5381,8 +5450,8 @@ function ChatMessageListSkeleton({
|
|
|
5381
5450
|
),
|
|
5382
5451
|
style: { minHeight: "100%" },
|
|
5383
5452
|
children: [
|
|
5384
|
-
/* @__PURE__ */
|
|
5385
|
-
messages.map((message2) => /* @__PURE__ */
|
|
5453
|
+
/* @__PURE__ */ jsx27("div", { className: "flex-1" }),
|
|
5454
|
+
messages.map((message2) => /* @__PURE__ */ jsx27(
|
|
5386
5455
|
ChatMessageSkeleton,
|
|
5387
5456
|
{
|
|
5388
5457
|
showAvatar: showAvatars,
|
|
@@ -5400,7 +5469,7 @@ function ChatMessageListSkeleton({
|
|
|
5400
5469
|
// src/components/chat/cycling-phrase.tsx
|
|
5401
5470
|
init_cn();
|
|
5402
5471
|
import { useEffect as useEffect6, useMemo as useMemo7, useState as useState11 } from "react";
|
|
5403
|
-
import { jsx as
|
|
5472
|
+
import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5404
5473
|
var BLINK_KEYFRAMES = `
|
|
5405
5474
|
@keyframes cyclingCursorBlink {
|
|
5406
5475
|
50% { opacity: 0; }
|
|
@@ -5452,7 +5521,7 @@ function CyclingPhrase({
|
|
|
5452
5521
|
if (words.length === 0) return null;
|
|
5453
5522
|
const before = text.slice(0, cursor);
|
|
5454
5523
|
const after = text.slice(cursor);
|
|
5455
|
-
const cursorBlock = /* @__PURE__ */
|
|
5524
|
+
const cursorBlock = /* @__PURE__ */ jsx28(
|
|
5456
5525
|
"span",
|
|
5457
5526
|
{
|
|
5458
5527
|
"aria-hidden": true,
|
|
@@ -5467,17 +5536,17 @@ function CyclingPhrase({
|
|
|
5467
5536
|
}
|
|
5468
5537
|
}
|
|
5469
5538
|
);
|
|
5470
|
-
return /* @__PURE__ */
|
|
5471
|
-
/* @__PURE__ */
|
|
5472
|
-
/* @__PURE__ */
|
|
5539
|
+
return /* @__PURE__ */ jsxs24("span", { className: cn("relative inline-block whitespace-nowrap", className), children: [
|
|
5540
|
+
/* @__PURE__ */ jsx28("style", { dangerouslySetInnerHTML: { __html: BLINK_KEYFRAMES } }),
|
|
5541
|
+
/* @__PURE__ */ jsxs24("span", { "aria-hidden": true, className: "invisible", children: [
|
|
5473
5542
|
placeholder,
|
|
5474
5543
|
"..."
|
|
5475
5544
|
] }),
|
|
5476
|
-
/* @__PURE__ */
|
|
5477
|
-
/* @__PURE__ */
|
|
5545
|
+
/* @__PURE__ */ jsxs24("span", { className: "absolute inset-0 inline-flex items-baseline", "aria-live": "polite", children: [
|
|
5546
|
+
/* @__PURE__ */ jsx28("span", { children: before }),
|
|
5478
5547
|
!holding && cursorBlock,
|
|
5479
|
-
/* @__PURE__ */
|
|
5480
|
-
/* @__PURE__ */
|
|
5548
|
+
/* @__PURE__ */ jsx28("span", { children: after }),
|
|
5549
|
+
/* @__PURE__ */ jsx28("span", { children: "..." })
|
|
5481
5550
|
] })
|
|
5482
5551
|
] });
|
|
5483
5552
|
}
|
|
@@ -5505,7 +5574,7 @@ var MESSAGE_TYPE = {
|
|
|
5505
5574
|
var SCROLL_ANCHOR = { TOP: "top", BOTTOM: "bottom" };
|
|
5506
5575
|
|
|
5507
5576
|
// src/components/chat/chat-message-list.tsx
|
|
5508
|
-
import { jsx as
|
|
5577
|
+
import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
5509
5578
|
var STREAMING_WORDS = [
|
|
5510
5579
|
"Thinking",
|
|
5511
5580
|
"Vibing",
|
|
@@ -5707,7 +5776,7 @@ var ChatMessageList = forwardRef12(
|
|
|
5707
5776
|
}, [hasNextPage, isFetchingNextPage, scrollRef]);
|
|
5708
5777
|
useImperativeHandle2(ref, () => scrollRef.current, [scrollRef]);
|
|
5709
5778
|
if (isLoading) {
|
|
5710
|
-
return /* @__PURE__ */
|
|
5779
|
+
return /* @__PURE__ */ jsx29(
|
|
5711
5780
|
ChatMessageListSkeleton,
|
|
5712
5781
|
{
|
|
5713
5782
|
className,
|
|
@@ -5729,8 +5798,8 @@ var ChatMessageList = forwardRef12(
|
|
|
5729
5798
|
const lastSegment = lastSegments?.[lastSegments.length - 1];
|
|
5730
5799
|
const isPausedOnApproval = !!lastSegment && (lastSegment.type === "approval_request" || lastSegment.type === "approval_batch") && (lastSegment.status === void 0 || lastSegment.status === "pending");
|
|
5731
5800
|
const showStreamingLoader = isTyping && !isPausedOnApproval && !(pendingApprovals && pendingApprovals.length > 0);
|
|
5732
|
-
return /* @__PURE__ */
|
|
5733
|
-
/* @__PURE__ */
|
|
5801
|
+
return /* @__PURE__ */ jsxs25("div", { className: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
5802
|
+
/* @__PURE__ */ jsx29(
|
|
5734
5803
|
"div",
|
|
5735
5804
|
{
|
|
5736
5805
|
ref: setScrollRef,
|
|
@@ -5740,7 +5809,7 @@ var ChatMessageList = forwardRef12(
|
|
|
5740
5809
|
className
|
|
5741
5810
|
),
|
|
5742
5811
|
...props,
|
|
5743
|
-
children: /* @__PURE__ */
|
|
5812
|
+
children: /* @__PURE__ */ jsxs25(
|
|
5744
5813
|
"div",
|
|
5745
5814
|
{
|
|
5746
5815
|
ref: setContentRef,
|
|
@@ -5753,11 +5822,11 @@ var ChatMessageList = forwardRef12(
|
|
|
5753
5822
|
),
|
|
5754
5823
|
style: { minHeight: "100%" },
|
|
5755
5824
|
children: [
|
|
5756
|
-
hasNextPage && /* @__PURE__ */
|
|
5757
|
-
/* @__PURE__ */
|
|
5825
|
+
hasNextPage && /* @__PURE__ */ jsx29("div", { ref: sentinelRef, className: "h-px" }),
|
|
5826
|
+
/* @__PURE__ */ jsx29("div", { className: "flex-1" }),
|
|
5758
5827
|
messages.map((message2, index) => {
|
|
5759
5828
|
if (message2.hidden) return null;
|
|
5760
|
-
return /* @__PURE__ */
|
|
5829
|
+
return /* @__PURE__ */ jsx29(
|
|
5761
5830
|
MemoizedChatMessageEnhanced,
|
|
5762
5831
|
{
|
|
5763
5832
|
ref: getRegisterMessageEl(message2.id),
|
|
@@ -5787,7 +5856,7 @@ var ChatMessageList = forwardRef12(
|
|
|
5787
5856
|
)
|
|
5788
5857
|
}
|
|
5789
5858
|
),
|
|
5790
|
-
showStreamingLoader && /* @__PURE__ */
|
|
5859
|
+
showStreamingLoader && /* @__PURE__ */ jsxs25(
|
|
5791
5860
|
"div",
|
|
5792
5861
|
{
|
|
5793
5862
|
className: cn(
|
|
@@ -5798,16 +5867,16 @@ var ChatMessageList = forwardRef12(
|
|
|
5798
5867
|
role: "status",
|
|
5799
5868
|
"aria-live": "polite",
|
|
5800
5869
|
children: [
|
|
5801
|
-
/* @__PURE__ */
|
|
5802
|
-
/* @__PURE__ */
|
|
5870
|
+
/* @__PURE__ */ jsx29(DotsLoaderIcon, { className: "w-6 h-6" }),
|
|
5871
|
+
/* @__PURE__ */ jsx29(CyclingPhrase, { words: STREAMING_WORDS, className: "text-sm" })
|
|
5803
5872
|
]
|
|
5804
5873
|
}
|
|
5805
5874
|
),
|
|
5806
|
-
pendingApprovals && pendingApprovals.length > 0 && /* @__PURE__ */
|
|
5875
|
+
pendingApprovals && pendingApprovals.length > 0 && /* @__PURE__ */ jsx29("div", { className: cn(
|
|
5807
5876
|
"border-t border-ods-border bg-ods-bg/95 backdrop-blur-sm",
|
|
5808
5877
|
fullWidth ? "w-full" : "mx-auto w-full max-w-ods-content-narrow",
|
|
5809
5878
|
contentClassName ?? "px-[var(--spacing-system-m)]"
|
|
5810
|
-
), children: /* @__PURE__ */
|
|
5879
|
+
), children: /* @__PURE__ */ jsx29(
|
|
5811
5880
|
MemoizedChatMessageEnhanced,
|
|
5812
5881
|
{
|
|
5813
5882
|
role: "assistant",
|
|
@@ -5880,7 +5949,7 @@ function useProxiedImageUrl(url) {
|
|
|
5880
5949
|
|
|
5881
5950
|
// src/components/chat/chat-message-row.tsx
|
|
5882
5951
|
import { useState as useState12 } from "react";
|
|
5883
|
-
import { jsx as
|
|
5952
|
+
import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
5884
5953
|
function ChatMessageRow({
|
|
5885
5954
|
displayName,
|
|
5886
5955
|
avatarUrl,
|
|
@@ -5893,8 +5962,8 @@ function ChatMessageRow({
|
|
|
5893
5962
|
const [failedSrc, setFailedSrc] = useState12(null);
|
|
5894
5963
|
const src = resolvedAvatar && resolvedAvatar !== failedSrc ? resolvedAvatar : void 0;
|
|
5895
5964
|
const hasBody = body.trim().length > 0;
|
|
5896
|
-
return /* @__PURE__ */
|
|
5897
|
-
src ? /* @__PURE__ */
|
|
5965
|
+
return /* @__PURE__ */ jsxs26("div", { className: "flex gap-2 md:gap-3 w-full min-w-0", children: [
|
|
5966
|
+
src ? /* @__PURE__ */ jsx30(
|
|
5898
5967
|
next_image_default,
|
|
5899
5968
|
{
|
|
5900
5969
|
src,
|
|
@@ -5904,27 +5973,27 @@ function ChatMessageRow({
|
|
|
5904
5973
|
height: 40,
|
|
5905
5974
|
onError: () => setFailedSrc(resolvedAvatar ?? null)
|
|
5906
5975
|
}
|
|
5907
|
-
) : /* @__PURE__ */
|
|
5908
|
-
/* @__PURE__ */
|
|
5909
|
-
/* @__PURE__ */
|
|
5910
|
-
/* @__PURE__ */
|
|
5911
|
-
timeLabel && /* @__PURE__ */
|
|
5976
|
+
) : /* @__PURE__ */ jsx30("div", { className: "w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 flex items-center justify-center bg-ods-bg border border-ods-border text-[12px] font-medium text-ods-text-primary font-body", children: getFirstLastInitials(displayName) || "?" }),
|
|
5977
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex-1 min-w-0 max-w-full", children: [
|
|
5978
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2 max-w-full mb-1 min-w-0", children: [
|
|
5979
|
+
/* @__PURE__ */ jsx30("span", { className: "text-[14px] md:text-[15px] font-bold leading-[1.33] text-ods-text-primary font-body tracking-[-0.02em] truncate", children: displayName }),
|
|
5980
|
+
timeLabel && /* @__PURE__ */ jsx30("span", { className: "text-[11px] md:text-[12px] font-medium leading-[1.43] text-ods-text-secondary font-body flex-shrink-0", children: timeLabel })
|
|
5912
5981
|
] }),
|
|
5913
|
-
hasBody && /* @__PURE__ */
|
|
5982
|
+
hasBody && /* @__PURE__ */ jsx30("div", { className: "text-[12px] md:text-[14px] font-medium leading-[1.43] text-ods-text-primary font-body whitespace-pre-wrap break-words min-w-0 max-w-full", children: body }),
|
|
5914
5983
|
footer
|
|
5915
5984
|
] })
|
|
5916
5985
|
] });
|
|
5917
5986
|
}
|
|
5918
5987
|
function ChatMessageRowSkeleton() {
|
|
5919
|
-
return /* @__PURE__ */
|
|
5920
|
-
/* @__PURE__ */
|
|
5921
|
-
/* @__PURE__ */
|
|
5922
|
-
/* @__PURE__ */
|
|
5923
|
-
/* @__PURE__ */
|
|
5924
|
-
/* @__PURE__ */
|
|
5988
|
+
return /* @__PURE__ */ jsxs26("div", { className: "flex gap-2 md:gap-3 w-full min-w-0", children: [
|
|
5989
|
+
/* @__PURE__ */ jsx30("div", { className: "w-8 h-8 md:w-10 md:h-10 rounded-lg flex-shrink-0 bg-ods-border animate-pulse" }),
|
|
5990
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex-1 min-w-0", children: [
|
|
5991
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2 mb-1", children: [
|
|
5992
|
+
/* @__PURE__ */ jsx30("div", { className: "h-[15px] md:h-[20px] w-24 md:w-32 bg-ods-border rounded animate-pulse" }),
|
|
5993
|
+
/* @__PURE__ */ jsx30("div", { className: "h-[12px] md:h-[16px] w-12 md:w-16 bg-ods-border rounded animate-pulse" })
|
|
5925
5994
|
] }),
|
|
5926
|
-
/* @__PURE__ */
|
|
5927
|
-
/* @__PURE__ */
|
|
5995
|
+
/* @__PURE__ */ jsx30("div", { className: "h-[14px] md:h-[18px] w-full bg-ods-border rounded animate-pulse" }),
|
|
5996
|
+
/* @__PURE__ */ jsx30("div", { className: "h-[14px] md:h-[18px] w-3/4 bg-ods-border rounded animate-pulse mt-1" })
|
|
5928
5997
|
] })
|
|
5929
5998
|
] });
|
|
5930
5999
|
}
|
|
@@ -5933,7 +6002,7 @@ function ChatMessageRowSkeleton() {
|
|
|
5933
6002
|
init_cn();
|
|
5934
6003
|
import * as React10 from "react";
|
|
5935
6004
|
import { ChevronRight } from "lucide-react";
|
|
5936
|
-
import { jsx as
|
|
6005
|
+
import { jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
5937
6006
|
var ChatQuickAction = React10.forwardRef(
|
|
5938
6007
|
({ className, text, onAction, onClick, isHintActive, onHintInteraction, disabled = false, ...props }, ref) => {
|
|
5939
6008
|
const handleClick = React10.useCallback((e) => {
|
|
@@ -5947,7 +6016,7 @@ var ChatQuickAction = React10.forwardRef(
|
|
|
5947
6016
|
onClick(e);
|
|
5948
6017
|
}
|
|
5949
6018
|
}, [text, onAction, onClick, onHintInteraction]);
|
|
5950
|
-
return /* @__PURE__ */
|
|
6019
|
+
return /* @__PURE__ */ jsxs27(
|
|
5951
6020
|
"button",
|
|
5952
6021
|
{
|
|
5953
6022
|
ref,
|
|
@@ -5968,8 +6037,8 @@ var ChatQuickAction = React10.forwardRef(
|
|
|
5968
6037
|
),
|
|
5969
6038
|
...props,
|
|
5970
6039
|
children: [
|
|
5971
|
-
/* @__PURE__ */
|
|
5972
|
-
/* @__PURE__ */
|
|
6040
|
+
/* @__PURE__ */ jsx31("span", { className: "text-sm font-medium", children: text }),
|
|
6041
|
+
/* @__PURE__ */ jsx31(ChevronRight, { className: "h-4 w-4 text-ods-text-secondary flex-shrink-0" })
|
|
5973
6042
|
]
|
|
5974
6043
|
}
|
|
5975
6044
|
);
|
|
@@ -5988,13 +6057,13 @@ import * as React11 from "react";
|
|
|
5988
6057
|
var FAE_AVATAR_DATA_URI = "data:image/png;base64,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";
|
|
5989
6058
|
|
|
5990
6059
|
// src/components/agent-mark.tsx
|
|
5991
|
-
import { jsx as
|
|
6060
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
5992
6061
|
function AgentMark({ agent, className = "", faeAvatarSrc = FAE_AVATAR_DATA_URI }) {
|
|
5993
|
-
return agent === "mingo" ? /* @__PURE__ */
|
|
6062
|
+
return agent === "mingo" ? /* @__PURE__ */ jsx32(MingoIcon, { className, "aria-hidden": "true", focusable: "false" }) : /* @__PURE__ */ jsx32("img", { src: faeAvatarSrc, alt: "", className });
|
|
5994
6063
|
}
|
|
5995
6064
|
|
|
5996
6065
|
// src/components/icon-display.tsx
|
|
5997
|
-
import { jsx as
|
|
6066
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
5998
6067
|
var BRAND_MARK_NAMES = /* @__PURE__ */ new Set(["fae", "mingo"]);
|
|
5999
6068
|
function EntityIcon({
|
|
6000
6069
|
icon,
|
|
@@ -6002,7 +6071,7 @@ function EntityIcon({
|
|
|
6002
6071
|
className
|
|
6003
6072
|
}) {
|
|
6004
6073
|
if (icon?.url) {
|
|
6005
|
-
return /* @__PURE__ */
|
|
6074
|
+
return /* @__PURE__ */ jsx33(
|
|
6006
6075
|
"img",
|
|
6007
6076
|
{
|
|
6008
6077
|
src: icon.url,
|
|
@@ -6015,21 +6084,21 @@ function EntityIcon({
|
|
|
6015
6084
|
);
|
|
6016
6085
|
}
|
|
6017
6086
|
if (icon?.name && BRAND_MARK_NAMES.has(icon.name)) {
|
|
6018
|
-
return /* @__PURE__ */
|
|
6087
|
+
return /* @__PURE__ */ jsx33(
|
|
6019
6088
|
"span",
|
|
6020
6089
|
{
|
|
6021
6090
|
className: `inline-flex${className ? ` ${className}` : ""}`,
|
|
6022
6091
|
style: className ? void 0 : { width: size2, height: size2 },
|
|
6023
|
-
children: /* @__PURE__ */
|
|
6092
|
+
children: /* @__PURE__ */ jsx33(AgentMark, { agent: icon.name, className: "w-full h-full" })
|
|
6024
6093
|
}
|
|
6025
6094
|
);
|
|
6026
6095
|
}
|
|
6027
6096
|
const Glyph = resolveIcon(icon?.name ?? void 0);
|
|
6028
|
-
return /* @__PURE__ */
|
|
6097
|
+
return /* @__PURE__ */ jsx33(Glyph, { size: size2, className, ...icon?.props ?? {} });
|
|
6029
6098
|
}
|
|
6030
6099
|
|
|
6031
6100
|
// src/components/chat/quick-action-chip.tsx
|
|
6032
|
-
import { Fragment as Fragment7, jsx as
|
|
6101
|
+
import { Fragment as Fragment7, jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
6033
6102
|
function getAgentAccent(slug) {
|
|
6034
6103
|
if (slug === "fae") return "pink";
|
|
6035
6104
|
if (slug === "mingo") return "cyan";
|
|
@@ -6051,7 +6120,7 @@ function renderQuickActionIcon(icon) {
|
|
|
6051
6120
|
if (!spec.name && !spec.url) return void 0;
|
|
6052
6121
|
const accentClass = spec.accent ? ACCENT_CLASS[spec.accent] : void 0;
|
|
6053
6122
|
const props = spec.accent && !accentClass ? { color: spec.accent, ...spec.props ?? {} } : spec.props;
|
|
6054
|
-
return /* @__PURE__ */
|
|
6123
|
+
return /* @__PURE__ */ jsx34(
|
|
6055
6124
|
EntityIcon,
|
|
6056
6125
|
{
|
|
6057
6126
|
icon: { name: spec.name, url: spec.url, props },
|
|
@@ -6062,8 +6131,8 @@ function renderQuickActionIcon(icon) {
|
|
|
6062
6131
|
}
|
|
6063
6132
|
function composeChipLabel(label, lozenge) {
|
|
6064
6133
|
if (!lozenge) return label;
|
|
6065
|
-
return /* @__PURE__ */
|
|
6066
|
-
/* @__PURE__ */
|
|
6134
|
+
return /* @__PURE__ */ jsxs28(Fragment7, { children: [
|
|
6135
|
+
/* @__PURE__ */ jsx34(
|
|
6067
6136
|
"span",
|
|
6068
6137
|
{
|
|
6069
6138
|
className: cn(
|
|
@@ -6083,18 +6152,18 @@ function composeChipLabel(label, lozenge) {
|
|
|
6083
6152
|
] });
|
|
6084
6153
|
}
|
|
6085
6154
|
function ChipSkelBar({ className, style }) {
|
|
6086
|
-
return /* @__PURE__ */
|
|
6155
|
+
return /* @__PURE__ */ jsx34("span", { "aria-hidden": true, className: cn("animate-pulse rounded-md bg-ods-border", className), style });
|
|
6087
6156
|
}
|
|
6088
6157
|
function QuickActionChipSkeleton({ labelCh = 16, icon = true, lozenge = false, className }) {
|
|
6089
|
-
return /* @__PURE__ */
|
|
6158
|
+
return /* @__PURE__ */ jsx34(
|
|
6090
6159
|
Tag,
|
|
6091
6160
|
{
|
|
6092
6161
|
variant: "outline",
|
|
6093
6162
|
className,
|
|
6094
|
-
icon: icon ? /* @__PURE__ */
|
|
6095
|
-
label: /* @__PURE__ */
|
|
6096
|
-
lozenge && /* @__PURE__ */
|
|
6097
|
-
/* @__PURE__ */
|
|
6163
|
+
icon: icon ? /* @__PURE__ */ jsx34(ChipSkelBar, { className: "block size-4" }) : void 0,
|
|
6164
|
+
label: /* @__PURE__ */ jsxs28(Fragment7, { children: [
|
|
6165
|
+
lozenge && /* @__PURE__ */ jsx34(ChipSkelBar, { className: "mr-2 inline-block h-[16px] w-[26px] translate-y-[2px]" }),
|
|
6166
|
+
/* @__PURE__ */ jsx34(ChipSkelBar, { className: "inline-block h-[0.9em] translate-y-[0.08em]", style: { width: `${labelCh}ch` } })
|
|
6098
6167
|
] })
|
|
6099
6168
|
}
|
|
6100
6169
|
);
|
|
@@ -6113,9 +6182,9 @@ function QuickActionChipButton({
|
|
|
6113
6182
|
const resolvedIcon = renderQuickActionIcon(icon);
|
|
6114
6183
|
const resolvedLabel = composeChipLabel(label, lozenge);
|
|
6115
6184
|
if (!interactive) {
|
|
6116
|
-
return /* @__PURE__ */
|
|
6185
|
+
return /* @__PURE__ */ jsx34(Tag, { variant, icon: resolvedIcon, label: resolvedLabel, className });
|
|
6117
6186
|
}
|
|
6118
|
-
return /* @__PURE__ */
|
|
6187
|
+
return /* @__PURE__ */ jsx34(
|
|
6119
6188
|
"button",
|
|
6120
6189
|
{
|
|
6121
6190
|
type: "button",
|
|
@@ -6128,15 +6197,15 @@ function QuickActionChipButton({
|
|
|
6128
6197
|
"shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
|
|
6129
6198
|
className
|
|
6130
6199
|
),
|
|
6131
|
-
children: /* @__PURE__ */
|
|
6200
|
+
children: /* @__PURE__ */ jsx34(Tag, { variant, icon: resolvedIcon, label: resolvedLabel })
|
|
6132
6201
|
}
|
|
6133
6202
|
);
|
|
6134
6203
|
}
|
|
6135
6204
|
|
|
6136
6205
|
// src/components/chat/chat-quick-action-row.tsx
|
|
6137
|
-
import { jsx as
|
|
6206
|
+
import { jsx as jsx35, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
6138
6207
|
function ChipButton({ chip }) {
|
|
6139
|
-
return /* @__PURE__ */
|
|
6208
|
+
return /* @__PURE__ */ jsx35(
|
|
6140
6209
|
QuickActionChipButton,
|
|
6141
6210
|
{
|
|
6142
6211
|
label: chip.label,
|
|
@@ -6162,12 +6231,12 @@ function ChatQuickActionRow({
|
|
|
6162
6231
|
const hiddenChips = chips.slice(auto.visibleCount);
|
|
6163
6232
|
if (!leading && chips.length === 0) return null;
|
|
6164
6233
|
if (wrap) {
|
|
6165
|
-
return /* @__PURE__ */
|
|
6234
|
+
return /* @__PURE__ */ jsxs29("div", { className: cn("flex shrink-0 flex-wrap items-center gap-1", className), children: [
|
|
6166
6235
|
leading,
|
|
6167
|
-
chips.map((chip) => /* @__PURE__ */
|
|
6236
|
+
chips.map((chip) => /* @__PURE__ */ jsx35(ChipButton, { chip }, chip.id))
|
|
6168
6237
|
] });
|
|
6169
6238
|
}
|
|
6170
|
-
return /* @__PURE__ */
|
|
6239
|
+
return /* @__PURE__ */ jsxs29(
|
|
6171
6240
|
"div",
|
|
6172
6241
|
{
|
|
6173
6242
|
className: cn("relative flex shrink-0 items-center gap-1", className),
|
|
@@ -6175,14 +6244,14 @@ function ChatQuickActionRow({
|
|
|
6175
6244
|
leading,
|
|
6176
6245
|
chips.length > 0 && // Measured zone: `flex-1 min-w-0 overflow-hidden` so it claims the width
|
|
6177
6246
|
// left by the pinned `leading` slot and clips anything past the fit.
|
|
6178
|
-
/* @__PURE__ */
|
|
6247
|
+
/* @__PURE__ */ jsxs29(
|
|
6179
6248
|
"div",
|
|
6180
6249
|
{
|
|
6181
6250
|
ref: auto.middleRef,
|
|
6182
6251
|
className: "flex flex-1 min-w-0 items-center gap-1 overflow-hidden",
|
|
6183
6252
|
children: [
|
|
6184
|
-
visibleChips.map((chip) => /* @__PURE__ */
|
|
6185
|
-
hiddenChips.length > 0 && /* @__PURE__ */
|
|
6253
|
+
visibleChips.map((chip) => /* @__PURE__ */ jsx35(ChipButton, { chip }, chip.id)),
|
|
6254
|
+
hiddenChips.length > 0 && /* @__PURE__ */ jsx35(
|
|
6186
6255
|
ActionsMenuDropdown,
|
|
6187
6256
|
{
|
|
6188
6257
|
triggerAriaLabel: "More quick actions",
|
|
@@ -6197,14 +6266,14 @@ function ChatQuickActionRow({
|
|
|
6197
6266
|
}))
|
|
6198
6267
|
}
|
|
6199
6268
|
],
|
|
6200
|
-
customTrigger: /* @__PURE__ */
|
|
6269
|
+
customTrigger: /* @__PURE__ */ jsx35(
|
|
6201
6270
|
"button",
|
|
6202
6271
|
{
|
|
6203
6272
|
ref: auto.badgeRef,
|
|
6204
6273
|
type: "button",
|
|
6205
6274
|
"aria-label": "More quick actions",
|
|
6206
6275
|
className: "shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
|
|
6207
|
-
children: /* @__PURE__ */
|
|
6276
|
+
children: /* @__PURE__ */ jsx35(Tag, { variant: "outline", label: /* @__PURE__ */ jsx35(Ellipsis01Icon, { size: 16 }) })
|
|
6208
6277
|
}
|
|
6209
6278
|
)
|
|
6210
6279
|
}
|
|
@@ -6212,13 +6281,13 @@ function ChatQuickActionRow({
|
|
|
6212
6281
|
]
|
|
6213
6282
|
}
|
|
6214
6283
|
),
|
|
6215
|
-
/* @__PURE__ */
|
|
6284
|
+
/* @__PURE__ */ jsx35(
|
|
6216
6285
|
"div",
|
|
6217
6286
|
{
|
|
6218
6287
|
ref: auto.measureRef,
|
|
6219
6288
|
"aria-hidden": true,
|
|
6220
6289
|
className: "pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-1",
|
|
6221
|
-
children: chips.map((chip) => /* @__PURE__ */
|
|
6290
|
+
children: chips.map((chip) => /* @__PURE__ */ jsx35(
|
|
6222
6291
|
Tag,
|
|
6223
6292
|
{
|
|
6224
6293
|
variant: chip.variant ?? "outline",
|
|
@@ -6235,7 +6304,7 @@ function ChatQuickActionRow({
|
|
|
6235
6304
|
}
|
|
6236
6305
|
var SKELETON_CHIP_WIDTHS = ["w-28", "w-32", "w-24", "w-36", "w-20"];
|
|
6237
6306
|
function ChatQuickActionRowSkeleton({ className, count = 3, ...props }) {
|
|
6238
|
-
return /* @__PURE__ */
|
|
6307
|
+
return /* @__PURE__ */ jsx35("div", { "aria-hidden": true, className: cn("flex shrink-0 items-center gap-1", className), ...props, children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx35(
|
|
6239
6308
|
Skeleton,
|
|
6240
6309
|
{
|
|
6241
6310
|
className: cn("h-8 shrink-0 rounded-md", SKELETON_CHIP_WIDTHS[i % SKELETON_CHIP_WIDTHS.length])
|
|
@@ -6247,7 +6316,7 @@ function ChatQuickActionRowSkeleton({ className, count = 3, ...props }) {
|
|
|
6247
6316
|
// src/components/chat/quick-action-marquee.tsx
|
|
6248
6317
|
init_cn();
|
|
6249
6318
|
import * as React12 from "react";
|
|
6250
|
-
import { jsx as
|
|
6319
|
+
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
6251
6320
|
var MIN_TRACK_ITEMS = 6;
|
|
6252
6321
|
function QuickActionMarquee({
|
|
6253
6322
|
items,
|
|
@@ -6263,7 +6332,7 @@ function QuickActionMarquee({
|
|
|
6263
6332
|
return { track: [...padded, ...padded], half: padded.length };
|
|
6264
6333
|
}, [items]);
|
|
6265
6334
|
if (items.length === 0) return null;
|
|
6266
|
-
return /* @__PURE__ */
|
|
6335
|
+
return /* @__PURE__ */ jsx36("div", { className: cn("group overflow-hidden", className), children: /* @__PURE__ */ jsx36(
|
|
6267
6336
|
"div",
|
|
6268
6337
|
{
|
|
6269
6338
|
className: cn(
|
|
@@ -6274,7 +6343,7 @@ function QuickActionMarquee({
|
|
|
6274
6343
|
style: { "--qa-marquee-duration": `${duration}s` },
|
|
6275
6344
|
children: track.map((item, index) => {
|
|
6276
6345
|
const isHiddenCopy = index >= half;
|
|
6277
|
-
return /* @__PURE__ */
|
|
6346
|
+
return /* @__PURE__ */ jsx36("span", { "aria-hidden": isHiddenCopy || void 0, children: /* @__PURE__ */ jsx36(
|
|
6278
6347
|
QuickActionChipButton,
|
|
6279
6348
|
{
|
|
6280
6349
|
label: item.label,
|
|
@@ -6296,11 +6365,11 @@ import * as React14 from "react";
|
|
|
6296
6365
|
init_cn();
|
|
6297
6366
|
import * as React13 from "react";
|
|
6298
6367
|
import { ChevronRight as ChevronRight2 } from "lucide-react";
|
|
6299
|
-
import { jsx as
|
|
6368
|
+
import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
6300
6369
|
var ChatTicketItem = React13.forwardRef(
|
|
6301
6370
|
({ className, ticket, onClick, isLoading = false, ...props }, ref) => {
|
|
6302
6371
|
if (isLoading) {
|
|
6303
|
-
return /* @__PURE__ */
|
|
6372
|
+
return /* @__PURE__ */ jsxs30(
|
|
6304
6373
|
"div",
|
|
6305
6374
|
{
|
|
6306
6375
|
"aria-hidden": true,
|
|
@@ -6310,12 +6379,12 @@ var ChatTicketItem = React13.forwardRef(
|
|
|
6310
6379
|
className
|
|
6311
6380
|
),
|
|
6312
6381
|
children: [
|
|
6313
|
-
/* @__PURE__ */
|
|
6314
|
-
/* @__PURE__ */
|
|
6315
|
-
/* @__PURE__ */
|
|
6382
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex flex-col justify-center flex-1 min-w-0 gap-1", children: [
|
|
6383
|
+
/* @__PURE__ */ jsx37(Skeleton, { className: "h-5 w-1/2" }),
|
|
6384
|
+
/* @__PURE__ */ jsx37(Skeleton, { className: "h-4 w-1/3" })
|
|
6316
6385
|
] }),
|
|
6317
|
-
/* @__PURE__ */
|
|
6318
|
-
/* @__PURE__ */
|
|
6386
|
+
/* @__PURE__ */ jsx37(Skeleton, { className: "h-8 w-20 rounded-r-md shrink-0" }),
|
|
6387
|
+
/* @__PURE__ */ jsx37(Skeleton, { className: "size-12 rounded-md shrink-0" })
|
|
6319
6388
|
]
|
|
6320
6389
|
}
|
|
6321
6390
|
);
|
|
@@ -6329,7 +6398,7 @@ var ChatTicketItem = React13.forwardRef(
|
|
|
6329
6398
|
});
|
|
6330
6399
|
const isResolved = ticket.statusKind === "RESOLVED" || resolveTicketStatus(ticket.status) === "RESOLVED";
|
|
6331
6400
|
const subtitle = [ticket.ticketNumber, ticket.category, ticket.timeAgo].filter(Boolean).join(" \u2022 ");
|
|
6332
|
-
return /* @__PURE__ */
|
|
6401
|
+
return /* @__PURE__ */ jsxs30(
|
|
6333
6402
|
"button",
|
|
6334
6403
|
{
|
|
6335
6404
|
ref,
|
|
@@ -6350,8 +6419,8 @@ var ChatTicketItem = React13.forwardRef(
|
|
|
6350
6419
|
),
|
|
6351
6420
|
...props,
|
|
6352
6421
|
children: [
|
|
6353
|
-
/* @__PURE__ */
|
|
6354
|
-
/* @__PURE__ */
|
|
6422
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex flex-col justify-center flex-1 min-w-0 text-left", children: [
|
|
6423
|
+
/* @__PURE__ */ jsx37(
|
|
6355
6424
|
"p",
|
|
6356
6425
|
{
|
|
6357
6426
|
className: cn(
|
|
@@ -6362,19 +6431,19 @@ var ChatTicketItem = React13.forwardRef(
|
|
|
6362
6431
|
children: ticket.title
|
|
6363
6432
|
}
|
|
6364
6433
|
),
|
|
6365
|
-
subtitle && /* @__PURE__ */
|
|
6434
|
+
subtitle && /* @__PURE__ */ jsx37("p", { className: "text-h6 text-ods-text-secondary truncate", title: subtitle, children: subtitle })
|
|
6366
6435
|
] }),
|
|
6367
|
-
ticket.linkedTaskLabel && /* @__PURE__ */
|
|
6436
|
+
ticket.linkedTaskLabel && /* @__PURE__ */ jsx37(
|
|
6368
6437
|
Tag,
|
|
6369
6438
|
{
|
|
6370
6439
|
label: ticket.linkedTaskLabel,
|
|
6371
6440
|
variant: "outline",
|
|
6372
|
-
icon: /* @__PURE__ */
|
|
6441
|
+
icon: /* @__PURE__ */ jsx37(WrenchIcon, { size: 14, color: "var(--ods-text-secondary)" }),
|
|
6373
6442
|
className: "shrink-0 hidden sm:inline-flex"
|
|
6374
6443
|
}
|
|
6375
6444
|
),
|
|
6376
|
-
(statusTagProps.status || statusTagProps.label) && /* @__PURE__ */
|
|
6377
|
-
/* @__PURE__ */
|
|
6445
|
+
(statusTagProps.status || statusTagProps.label) && /* @__PURE__ */ jsx37(TicketStatusTag, { ...statusTagProps }),
|
|
6446
|
+
/* @__PURE__ */ jsx37("div", { className: "flex items-center justify-center shrink-0 size-12 rounded-md bg-ods-card border border-ods-border", children: /* @__PURE__ */ jsx37(ChevronRight2, { className: "size-6 text-ods-text-secondary" }) })
|
|
6378
6447
|
]
|
|
6379
6448
|
}
|
|
6380
6449
|
);
|
|
@@ -6383,7 +6452,7 @@ var ChatTicketItem = React13.forwardRef(
|
|
|
6383
6452
|
ChatTicketItem.displayName = "ChatTicketItem";
|
|
6384
6453
|
|
|
6385
6454
|
// src/components/chat/chat-ticket-list.tsx
|
|
6386
|
-
import { jsx as
|
|
6455
|
+
import { jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
6387
6456
|
var ChatTicketList = React14.forwardRef(
|
|
6388
6457
|
({ className, tickets, onTicketClick, isLoading = false, skeletonCount = 5, ...props }, ref) => {
|
|
6389
6458
|
const scrollRef = React14.useRef(null);
|
|
@@ -6400,18 +6469,18 @@ var ChatTicketList = React14.forwardRef(
|
|
|
6400
6469
|
updateFade();
|
|
6401
6470
|
}, [ticketCount, updateFade]);
|
|
6402
6471
|
if (isLoading) {
|
|
6403
|
-
return /* @__PURE__ */
|
|
6404
|
-
/* @__PURE__ */
|
|
6405
|
-
/* @__PURE__ */
|
|
6472
|
+
return /* @__PURE__ */ jsxs31("div", { ref, className: cn("flex flex-col gap-2 min-h-0", className), ...props, children: [
|
|
6473
|
+
/* @__PURE__ */ jsx38("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
|
|
6474
|
+
/* @__PURE__ */ jsx38("div", { className: "border border-ods-border rounded-md flex-1 min-h-0 overflow-hidden", children: Array.from({ length: skeletonCount }).map((_, i) => (
|
|
6406
6475
|
// eslint-disable-next-line react/no-array-index-key
|
|
6407
|
-
/* @__PURE__ */
|
|
6476
|
+
/* @__PURE__ */ jsx38(ChatTicketItem, { isLoading: true }, i)
|
|
6408
6477
|
)) })
|
|
6409
6478
|
] });
|
|
6410
6479
|
}
|
|
6411
6480
|
if (tickets.length === 0) return null;
|
|
6412
|
-
return /* @__PURE__ */
|
|
6413
|
-
/* @__PURE__ */
|
|
6414
|
-
/* @__PURE__ */
|
|
6481
|
+
return /* @__PURE__ */ jsxs31("div", { ref, className: cn("flex flex-col gap-2 min-h-0", className), ...props, children: [
|
|
6482
|
+
/* @__PURE__ */ jsx38("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
|
|
6483
|
+
/* @__PURE__ */ jsxs31(
|
|
6415
6484
|
"div",
|
|
6416
6485
|
{
|
|
6417
6486
|
className: cn(
|
|
@@ -6420,7 +6489,7 @@ var ChatTicketList = React14.forwardRef(
|
|
|
6420
6489
|
!fadeBottom && "border-b rounded-b-md"
|
|
6421
6490
|
),
|
|
6422
6491
|
children: [
|
|
6423
|
-
/* @__PURE__ */
|
|
6492
|
+
/* @__PURE__ */ jsx38("div", { ref: scrollRef, className: "overflow-y-auto h-full", onScroll: updateFade, children: tickets.map((ticket) => /* @__PURE__ */ jsx38(
|
|
6424
6493
|
ChatTicketItem,
|
|
6425
6494
|
{
|
|
6426
6495
|
ticket,
|
|
@@ -6428,7 +6497,7 @@ var ChatTicketList = React14.forwardRef(
|
|
|
6428
6497
|
},
|
|
6429
6498
|
ticket.id
|
|
6430
6499
|
)) }),
|
|
6431
|
-
/* @__PURE__ */
|
|
6500
|
+
/* @__PURE__ */ jsx38(
|
|
6432
6501
|
"div",
|
|
6433
6502
|
{
|
|
6434
6503
|
"aria-hidden": true,
|
|
@@ -6439,7 +6508,7 @@ var ChatTicketList = React14.forwardRef(
|
|
|
6439
6508
|
style: { background: "linear-gradient(0deg, transparent 0%, var(--color-bg) 100%)" }
|
|
6440
6509
|
}
|
|
6441
6510
|
),
|
|
6442
|
-
/* @__PURE__ */
|
|
6511
|
+
/* @__PURE__ */ jsx38(
|
|
6443
6512
|
"div",
|
|
6444
6513
|
{
|
|
6445
6514
|
"aria-hidden": true,
|
|
@@ -6460,7 +6529,7 @@ ChatTicketList.displayName = "ChatTicketList";
|
|
|
6460
6529
|
|
|
6461
6530
|
// src/components/chat/mingo-onboarding-card-skeleton.tsx
|
|
6462
6531
|
init_cn();
|
|
6463
|
-
import { jsx as
|
|
6532
|
+
import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
6464
6533
|
function MingoOnboardingCardSkeleton({
|
|
6465
6534
|
titleWidth = "w-32",
|
|
6466
6535
|
slashWidth = "w-20",
|
|
@@ -6469,25 +6538,25 @@ function MingoOnboardingCardSkeleton({
|
|
|
6469
6538
|
className
|
|
6470
6539
|
}) {
|
|
6471
6540
|
const hasChips = chipWidths.length > 0;
|
|
6472
|
-
return /* @__PURE__ */
|
|
6541
|
+
return /* @__PURE__ */ jsx39(
|
|
6473
6542
|
"div",
|
|
6474
6543
|
{
|
|
6475
6544
|
className: cn(
|
|
6476
6545
|
"flex w-full items-start p-[var(--spacing-system-s)] bg-ods-card border-b border-ods-border last:border-b-0",
|
|
6477
6546
|
className
|
|
6478
6547
|
),
|
|
6479
|
-
children: /* @__PURE__ */
|
|
6480
|
-
/* @__PURE__ */
|
|
6481
|
-
/* @__PURE__ */
|
|
6482
|
-
/* @__PURE__ */
|
|
6483
|
-
/* @__PURE__ */
|
|
6484
|
-
/* @__PURE__ */
|
|
6548
|
+
children: /* @__PURE__ */ jsxs32("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)] w-full", children: [
|
|
6549
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] w-full", children: [
|
|
6550
|
+
/* @__PURE__ */ jsx39(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
|
|
6551
|
+
/* @__PURE__ */ jsx39(Skeleton, { className: cn("h-3.5 rounded-sm", titleWidth) }),
|
|
6552
|
+
/* @__PURE__ */ jsx39("span", { className: "flex-1" }),
|
|
6553
|
+
/* @__PURE__ */ jsx39(Skeleton, { className: cn("h-3.5 rounded-sm shrink-0", slashWidth) })
|
|
6485
6554
|
] }),
|
|
6486
|
-
/* @__PURE__ */
|
|
6487
|
-
/* @__PURE__ */
|
|
6488
|
-
descriptionLines === 2 ? /* @__PURE__ */
|
|
6555
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
6556
|
+
/* @__PURE__ */ jsx39(Skeleton, { className: "h-3.5 w-full rounded-sm" }),
|
|
6557
|
+
descriptionLines === 2 ? /* @__PURE__ */ jsx39(Skeleton, { className: "h-3.5 w-[70%] rounded-sm" }) : null
|
|
6489
6558
|
] }),
|
|
6490
|
-
hasChips ? /* @__PURE__ */
|
|
6559
|
+
hasChips ? /* @__PURE__ */ jsx39("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: chipWidths.map((w, i) => /* @__PURE__ */ jsx39(Skeleton, { className: cn("h-7 rounded-md", w) }, i)) }) : null
|
|
6491
6560
|
] })
|
|
6492
6561
|
}
|
|
6493
6562
|
);
|
|
@@ -6496,7 +6565,7 @@ function MingoOnboardingListSkeleton({
|
|
|
6496
6565
|
rows = 6,
|
|
6497
6566
|
className
|
|
6498
6567
|
}) {
|
|
6499
|
-
return /* @__PURE__ */
|
|
6568
|
+
return /* @__PURE__ */ jsx39(
|
|
6500
6569
|
"div",
|
|
6501
6570
|
{
|
|
6502
6571
|
role: "status",
|
|
@@ -6508,7 +6577,7 @@ function MingoOnboardingListSkeleton({
|
|
|
6508
6577
|
),
|
|
6509
6578
|
children: Array.from({ length: rows }).map((_, i) => {
|
|
6510
6579
|
const variant = ROW_VARIANTS[i % ROW_VARIANTS.length];
|
|
6511
|
-
return /* @__PURE__ */
|
|
6580
|
+
return /* @__PURE__ */ jsx39(
|
|
6512
6581
|
MingoOnboardingCardSkeleton,
|
|
6513
6582
|
{
|
|
6514
6583
|
titleWidth: variant.titleWidth,
|
|
@@ -6538,7 +6607,7 @@ import * as React16 from "react";
|
|
|
6538
6607
|
init_cn();
|
|
6539
6608
|
import * as React15 from "react";
|
|
6540
6609
|
init_button2();
|
|
6541
|
-
import { jsx as
|
|
6610
|
+
import { jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
6542
6611
|
function dialogTime(d) {
|
|
6543
6612
|
if (!d.timestamp) return null;
|
|
6544
6613
|
const t = typeof d.timestamp === "string" ? Date.parse(d.timestamp) : d.timestamp.getTime();
|
|
@@ -6590,7 +6659,7 @@ function MingoChatHistoryRow({
|
|
|
6590
6659
|
onClick: () => onRequestArchive(dialog)
|
|
6591
6660
|
}
|
|
6592
6661
|
].filter(Boolean);
|
|
6593
|
-
return /* @__PURE__ */
|
|
6662
|
+
return /* @__PURE__ */ jsxs33(
|
|
6594
6663
|
"div",
|
|
6595
6664
|
{
|
|
6596
6665
|
className: cn(
|
|
@@ -6599,7 +6668,7 @@ function MingoChatHistoryRow({
|
|
|
6599
6668
|
isActive && "bg-ods-bg-hover"
|
|
6600
6669
|
),
|
|
6601
6670
|
children: [
|
|
6602
|
-
/* @__PURE__ */
|
|
6671
|
+
/* @__PURE__ */ jsxs33(
|
|
6603
6672
|
"div",
|
|
6604
6673
|
{
|
|
6605
6674
|
role: "button",
|
|
@@ -6613,8 +6682,8 @@ function MingoChatHistoryRow({
|
|
|
6613
6682
|
},
|
|
6614
6683
|
className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)] p-[var(--spacing-system-s)] cursor-pointer focus:outline-none focus-visible:bg-ods-bg-hover",
|
|
6615
6684
|
children: [
|
|
6616
|
-
unread > 0 ? /* @__PURE__ */
|
|
6617
|
-
/* @__PURE__ */
|
|
6685
|
+
unread > 0 ? /* @__PURE__ */ jsx40("span", { className: "flex h-8 min-w-8 shrink-0 items-center justify-center rounded-md bg-ods-accent px-[var(--spacing-system-xsf)] text-h5 text-ods-text-on-accent", children: unread > 99 ? "99+" : unread }) : null,
|
|
6686
|
+
/* @__PURE__ */ jsx40(
|
|
6618
6687
|
"span",
|
|
6619
6688
|
{
|
|
6620
6689
|
className: "min-w-0 flex-1 truncate text-h4 text-ods-text-primary",
|
|
@@ -6630,7 +6699,7 @@ function MingoChatHistoryRow({
|
|
|
6630
6699
|
// right edge, free of the content's left padding. Revealed on row
|
|
6631
6700
|
// hover/focus; kept visible while its menu is open. Hidden on mobile —
|
|
6632
6701
|
// it's a hover affordance (no hover on touch).
|
|
6633
|
-
/* @__PURE__ */
|
|
6702
|
+
/* @__PURE__ */ jsx40(
|
|
6634
6703
|
"span",
|
|
6635
6704
|
{
|
|
6636
6705
|
onClick: (e) => e.stopPropagation(),
|
|
@@ -6642,7 +6711,7 @@ function MingoChatHistoryRow({
|
|
|
6642
6711
|
"self-stretch shrink-0 transition-opacity max-md:hidden",
|
|
6643
6712
|
menuOpen ? "opacity-100" : "opacity-0 group-hover/row:opacity-100 focus-within:opacity-100"
|
|
6644
6713
|
),
|
|
6645
|
-
children: /* @__PURE__ */
|
|
6714
|
+
children: /* @__PURE__ */ jsx40(
|
|
6646
6715
|
ActionsMenuDropdown,
|
|
6647
6716
|
{
|
|
6648
6717
|
triggerAriaLabel: "Chat actions",
|
|
@@ -6650,14 +6719,14 @@ function MingoChatHistoryRow({
|
|
|
6650
6719
|
open: menuOpen,
|
|
6651
6720
|
onOpenChange: setMenuOpen,
|
|
6652
6721
|
onCloseAutoFocus: (e) => e.preventDefault(),
|
|
6653
|
-
customTrigger: /* @__PURE__ */
|
|
6722
|
+
customTrigger: /* @__PURE__ */ jsx40(
|
|
6654
6723
|
Button,
|
|
6655
6724
|
{
|
|
6656
6725
|
variant: "transparent",
|
|
6657
6726
|
size: "icon",
|
|
6658
6727
|
"aria-label": "Chat actions",
|
|
6659
6728
|
className: "h-full md:h-full rounded-none p-0 text-ods-text-secondary hover:text-ods-text-primary",
|
|
6660
|
-
children: /* @__PURE__ */
|
|
6729
|
+
children: /* @__PURE__ */ jsx40(Ellipsis01Icon, {})
|
|
6661
6730
|
}
|
|
6662
6731
|
)
|
|
6663
6732
|
}
|
|
@@ -6677,7 +6746,7 @@ function MingoChatHistorySkeleton({
|
|
|
6677
6746
|
{ withBadge: 2, widths: ["w-3/5", "w-4/5", "w-2/5", "w-3/4"] },
|
|
6678
6747
|
{ withBadge: 0, widths: ["w-1/2", "w-3/5", "w-2/3"] }
|
|
6679
6748
|
];
|
|
6680
|
-
return /* @__PURE__ */
|
|
6749
|
+
return /* @__PURE__ */ jsxs33(
|
|
6681
6750
|
"div",
|
|
6682
6751
|
{
|
|
6683
6752
|
"aria-hidden": true,
|
|
@@ -6686,19 +6755,19 @@ function MingoChatHistorySkeleton({
|
|
|
6686
6755
|
className
|
|
6687
6756
|
),
|
|
6688
6757
|
children: [
|
|
6689
|
-
searchable && /* @__PURE__ */
|
|
6690
|
-
/* @__PURE__ */
|
|
6691
|
-
/* @__PURE__ */
|
|
6758
|
+
searchable && /* @__PURE__ */ jsxs33("div", { className: "flex h-11 md:h-12 shrink-0 items-center gap-2 rounded-[6px] border border-ods-border bg-ods-card px-3", children: [
|
|
6759
|
+
/* @__PURE__ */ jsx40("div", { className: "size-4 md:size-6 shrink-0 animate-pulse rounded bg-ods-border" }),
|
|
6760
|
+
/* @__PURE__ */ jsx40("div", { className: "h-4 w-32 animate-pulse rounded bg-ods-border" })
|
|
6692
6761
|
] }),
|
|
6693
|
-
groups.map((group, g) => /* @__PURE__ */
|
|
6694
|
-
/* @__PURE__ */
|
|
6695
|
-
/* @__PURE__ */
|
|
6762
|
+
groups.map((group, g) => /* @__PURE__ */ jsxs33("div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
6763
|
+
/* @__PURE__ */ jsx40("div", { className: "h-3 w-16 animate-pulse rounded bg-ods-border" }),
|
|
6764
|
+
/* @__PURE__ */ jsx40("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.widths.map((w, i) => /* @__PURE__ */ jsxs33(
|
|
6696
6765
|
"div",
|
|
6697
6766
|
{
|
|
6698
6767
|
className: "flex h-12 items-center gap-[var(--spacing-system-xsf)] bg-ods-bg border-b border-ods-border px-[var(--spacing-system-s)] last:border-b-0",
|
|
6699
6768
|
children: [
|
|
6700
|
-
i < group.withBadge && /* @__PURE__ */
|
|
6701
|
-
/* @__PURE__ */
|
|
6769
|
+
i < group.withBadge && /* @__PURE__ */ jsx40("div", { className: "h-8 w-8 shrink-0 animate-pulse rounded-md bg-ods-border" }),
|
|
6770
|
+
/* @__PURE__ */ jsx40("div", { className: cn("h-4 animate-pulse rounded bg-ods-border", w) })
|
|
6702
6771
|
]
|
|
6703
6772
|
},
|
|
6704
6773
|
i
|
|
@@ -6720,7 +6789,7 @@ function DialogSearchBar({
|
|
|
6720
6789
|
lastEmitted.current = debounced;
|
|
6721
6790
|
onSearchChange(debounced);
|
|
6722
6791
|
}, [debounced, onSearchChange]);
|
|
6723
|
-
return /* @__PURE__ */
|
|
6792
|
+
return /* @__PURE__ */ jsx40(
|
|
6724
6793
|
Input,
|
|
6725
6794
|
{
|
|
6726
6795
|
type: "text",
|
|
@@ -6728,7 +6797,7 @@ function DialogSearchBar({
|
|
|
6728
6797
|
onChange: (e) => setValue(e.target.value),
|
|
6729
6798
|
placeholder: "Search for Chats",
|
|
6730
6799
|
"aria-label": "Search chats",
|
|
6731
|
-
startAdornment: /* @__PURE__ */
|
|
6800
|
+
startAdornment: /* @__PURE__ */ jsx40(SearchIcon, {}),
|
|
6732
6801
|
className: "shrink-0"
|
|
6733
6802
|
}
|
|
6734
6803
|
);
|
|
@@ -6786,23 +6855,23 @@ function MingoChatHistory({
|
|
|
6786
6855
|
io.observe(sentinel);
|
|
6787
6856
|
return () => io.disconnect();
|
|
6788
6857
|
}, [hasMore]);
|
|
6789
|
-
return /* @__PURE__ */
|
|
6790
|
-
onSearchChange ? /* @__PURE__ */
|
|
6791
|
-
/* @__PURE__ */
|
|
6792
|
-
/* @__PURE__ */
|
|
6858
|
+
return /* @__PURE__ */ jsxs33("div", { className: cn("relative flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)]", className), children: [
|
|
6859
|
+
onSearchChange ? /* @__PURE__ */ jsx40(DialogSearchBar, { initialValue: searchQuery, onSearchChange }) : null,
|
|
6860
|
+
/* @__PURE__ */ jsxs33("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
|
|
6861
|
+
/* @__PURE__ */ jsxs33(
|
|
6793
6862
|
"div",
|
|
6794
6863
|
{
|
|
6795
6864
|
ref: scrollRef,
|
|
6796
6865
|
onScroll: updateFade,
|
|
6797
6866
|
className: "flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)] overflow-y-auto",
|
|
6798
6867
|
children: [
|
|
6799
|
-
noSearchResults ? /* @__PURE__ */
|
|
6868
|
+
noSearchResults ? /* @__PURE__ */ jsx40("p", { className: "py-[var(--spacing-system-m)] text-center text-h5 text-ods-text-secondary", children: "No chats found" }) : groups.map((group) => /* @__PURE__ */ jsxs33(
|
|
6800
6869
|
"div",
|
|
6801
6870
|
{
|
|
6802
6871
|
className: "flex flex-col gap-[var(--spacing-system-xxs)]",
|
|
6803
6872
|
children: [
|
|
6804
|
-
/* @__PURE__ */
|
|
6805
|
-
/* @__PURE__ */
|
|
6873
|
+
/* @__PURE__ */ jsx40("p", { className: "text-h5 text-ods-text-secondary", children: group.label }),
|
|
6874
|
+
/* @__PURE__ */ jsx40("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.items.map((dialog) => /* @__PURE__ */ jsx40(
|
|
6806
6875
|
MingoChatHistoryRow,
|
|
6807
6876
|
{
|
|
6808
6877
|
dialog,
|
|
@@ -6817,11 +6886,11 @@ function MingoChatHistory({
|
|
|
6817
6886
|
},
|
|
6818
6887
|
group.key
|
|
6819
6888
|
)),
|
|
6820
|
-
hasMore ? /* @__PURE__ */
|
|
6889
|
+
hasMore ? /* @__PURE__ */ jsx40("div", { ref: sentinelRef, className: "h-px shrink-0" }) : null
|
|
6821
6890
|
]
|
|
6822
6891
|
}
|
|
6823
6892
|
),
|
|
6824
|
-
/* @__PURE__ */
|
|
6893
|
+
/* @__PURE__ */ jsx40(
|
|
6825
6894
|
"div",
|
|
6826
6895
|
{
|
|
6827
6896
|
"aria-hidden": true,
|
|
@@ -6834,7 +6903,7 @@ function MingoChatHistory({
|
|
|
6834
6903
|
}
|
|
6835
6904
|
}
|
|
6836
6905
|
),
|
|
6837
|
-
/* @__PURE__ */
|
|
6906
|
+
/* @__PURE__ */ jsx40(
|
|
6838
6907
|
"div",
|
|
6839
6908
|
{
|
|
6840
6909
|
"aria-hidden": true,
|
|
@@ -6853,27 +6922,27 @@ function MingoChatHistory({
|
|
|
6853
6922
|
|
|
6854
6923
|
// src/components/chat/mingo-welcome.tsx
|
|
6855
6924
|
init_button2();
|
|
6856
|
-
import { Fragment as Fragment8, jsx as
|
|
6925
|
+
import { Fragment as Fragment8, jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
6857
6926
|
var DEFAULT_SUBTITLE = "Ready to help with your technical tasks. What can I do for you?";
|
|
6858
6927
|
var DEFAULT_FEATURE_CARDS = [
|
|
6859
6928
|
{
|
|
6860
6929
|
id: "answers",
|
|
6861
|
-
icon: /* @__PURE__ */
|
|
6930
|
+
icon: /* @__PURE__ */ jsx41(Rocket01Icon, { size: 16 }),
|
|
6862
6931
|
text: "Get instant answers about\ndevices, tickets, and clients"
|
|
6863
6932
|
},
|
|
6864
6933
|
{
|
|
6865
6934
|
id: "scripts",
|
|
6866
|
-
icon: /* @__PURE__ */
|
|
6935
|
+
icon: /* @__PURE__ */ jsx41(BracketCurlyIcon, { size: 16 }),
|
|
6867
6936
|
text: "Run scripts and queries\nthrough natural language"
|
|
6868
6937
|
},
|
|
6869
6938
|
{
|
|
6870
6939
|
id: "summarize",
|
|
6871
|
-
icon: /* @__PURE__ */
|
|
6940
|
+
icon: /* @__PURE__ */ jsx41(SearchIcon, { size: 16 }),
|
|
6872
6941
|
text: "Summarize long ticket\nthreads or activity history"
|
|
6873
6942
|
},
|
|
6874
6943
|
{
|
|
6875
6944
|
id: "delegate",
|
|
6876
|
-
icon: /* @__PURE__ */
|
|
6945
|
+
icon: /* @__PURE__ */ jsx41(LayersIcon, { size: 16 }),
|
|
6877
6946
|
text: "Delegate tasks, let Mingo\nwork in the background"
|
|
6878
6947
|
}
|
|
6879
6948
|
];
|
|
@@ -6943,7 +7012,7 @@ function MingoWelcome({
|
|
|
6943
7012
|
const cellCount = featureCards.length;
|
|
6944
7013
|
const lastRowStart = cellCount - (cellCount % 2 || 2);
|
|
6945
7014
|
const showPinnedRegion = !!dialogHistory || !isLoadingHistory && !loadError;
|
|
6946
|
-
return /* @__PURE__ */
|
|
7015
|
+
return /* @__PURE__ */ jsxs34(
|
|
6947
7016
|
"div",
|
|
6948
7017
|
{
|
|
6949
7018
|
className: cn(
|
|
@@ -6954,32 +7023,32 @@ function MingoWelcome({
|
|
|
6954
7023
|
className
|
|
6955
7024
|
),
|
|
6956
7025
|
children: [
|
|
6957
|
-
dialogHistory ?? (loadError ? /* @__PURE__ */
|
|
6958
|
-
/* @__PURE__ */
|
|
6959
|
-
/* @__PURE__ */
|
|
6960
|
-
/* @__PURE__ */
|
|
6961
|
-
/* @__PURE__ */
|
|
7026
|
+
dialogHistory ?? (loadError ? /* @__PURE__ */ jsxs34("div", { className: "flex flex-1 min-h-0 flex-col items-center justify-center gap-[var(--spacing-system-m)] text-center", children: [
|
|
7027
|
+
/* @__PURE__ */ jsx41(AlertCircleIcon, { className: "h-8 w-8 text-ods-text-secondary shrink-0" }),
|
|
7028
|
+
/* @__PURE__ */ jsxs34("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
7029
|
+
/* @__PURE__ */ jsx41("p", { className: "text-h4 text-ods-text-primary", children: "Couldn\u2019t load your chats" }),
|
|
7030
|
+
/* @__PURE__ */ jsx41("p", { className: "text-body-sm text-ods-text-secondary", children: "Something went wrong reaching the server. Check your connection and try again." })
|
|
6962
7031
|
] }),
|
|
6963
|
-
onRetry && /* @__PURE__ */
|
|
7032
|
+
onRetry && /* @__PURE__ */ jsx41(
|
|
6964
7033
|
Button,
|
|
6965
7034
|
{
|
|
6966
7035
|
variant: "outline",
|
|
6967
7036
|
size: "small",
|
|
6968
|
-
leftIcon: /* @__PURE__ */
|
|
7037
|
+
leftIcon: /* @__PURE__ */ jsx41(Refresh01RightIcon, {}),
|
|
6969
7038
|
onClick: onRetry,
|
|
6970
7039
|
children: "Try again"
|
|
6971
7040
|
}
|
|
6972
7041
|
)
|
|
6973
|
-
] }) : isLoadingHistory ? /* @__PURE__ */
|
|
6974
|
-
/* @__PURE__ */
|
|
7042
|
+
] }) : isLoadingHistory ? /* @__PURE__ */ jsx41(MingoChatHistorySkeleton, { searchable: historySearchable }) : /* @__PURE__ */ jsx41(Fragment8, { children: /* @__PURE__ */ jsxs34("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
|
|
7043
|
+
/* @__PURE__ */ jsxs34(
|
|
6975
7044
|
"div",
|
|
6976
7045
|
{
|
|
6977
7046
|
ref: scrollRef,
|
|
6978
7047
|
onScroll: updateScrollFade,
|
|
6979
7048
|
className: "flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)] overflow-y-auto",
|
|
6980
7049
|
children: [
|
|
6981
|
-
/* @__PURE__ */
|
|
6982
|
-
/* @__PURE__ */
|
|
7050
|
+
/* @__PURE__ */ jsxs34("div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-l)] px-[var(--spacing-system-l)] py-[var(--spacing-system-xxl)] text-center", children: [
|
|
7051
|
+
/* @__PURE__ */ jsx41(
|
|
6983
7052
|
MingoIcon,
|
|
6984
7053
|
{
|
|
6985
7054
|
className: "h-12 w-12",
|
|
@@ -6988,12 +7057,12 @@ function MingoWelcome({
|
|
|
6988
7057
|
cornerColor: "var(--ods-flamingo-cyan-base)"
|
|
6989
7058
|
}
|
|
6990
7059
|
),
|
|
6991
|
-
/* @__PURE__ */
|
|
6992
|
-
/* @__PURE__ */
|
|
6993
|
-
/* @__PURE__ */
|
|
7060
|
+
/* @__PURE__ */ jsxs34("div", { className: "flex w-full flex-col gap-1", children: [
|
|
7061
|
+
/* @__PURE__ */ jsx41("p", { className: "text-h4 text-ods-text-primary", children: heading }),
|
|
7062
|
+
/* @__PURE__ */ jsx41("p", { className: "text-h6 text-ods-text-secondary", children: subtitle })
|
|
6994
7063
|
] })
|
|
6995
7064
|
] }),
|
|
6996
|
-
cellCount > 0 && /* @__PURE__ */
|
|
7065
|
+
cellCount > 0 && /* @__PURE__ */ jsx41("div", { className: "grid shrink-0 grid-cols-2 overflow-hidden rounded-md border border-ods-border bg-ods-card", children: featureCards.map((card, i) => /* @__PURE__ */ jsxs34(
|
|
6997
7066
|
"div",
|
|
6998
7067
|
{
|
|
6999
7068
|
className: cn(
|
|
@@ -7002,8 +7071,8 @@ function MingoWelcome({
|
|
|
7002
7071
|
i < lastRowStart && "border-b border-ods-border"
|
|
7003
7072
|
),
|
|
7004
7073
|
children: [
|
|
7005
|
-
card.icon ? /* @__PURE__ */
|
|
7006
|
-
/* @__PURE__ */
|
|
7074
|
+
card.icon ? /* @__PURE__ */ jsx41("span", { className: "flex size-4 shrink-0 items-center justify-center text-ods-text-primary", children: card.icon }) : null,
|
|
7075
|
+
/* @__PURE__ */ jsx41("p", { className: "text-h4 text-ods-text-secondary whitespace-pre-line", children: card.text })
|
|
7007
7076
|
]
|
|
7008
7077
|
},
|
|
7009
7078
|
card.id
|
|
@@ -7011,7 +7080,7 @@ function MingoWelcome({
|
|
|
7011
7080
|
]
|
|
7012
7081
|
}
|
|
7013
7082
|
),
|
|
7014
|
-
/* @__PURE__ */
|
|
7083
|
+
/* @__PURE__ */ jsx41(
|
|
7015
7084
|
"div",
|
|
7016
7085
|
{
|
|
7017
7086
|
"aria-hidden": true,
|
|
@@ -7024,7 +7093,7 @@ function MingoWelcome({
|
|
|
7024
7093
|
}
|
|
7025
7094
|
}
|
|
7026
7095
|
),
|
|
7027
|
-
/* @__PURE__ */
|
|
7096
|
+
/* @__PURE__ */ jsx41(
|
|
7028
7097
|
"div",
|
|
7029
7098
|
{
|
|
7030
7099
|
"aria-hidden": true,
|
|
@@ -7038,32 +7107,32 @@ function MingoWelcome({
|
|
|
7038
7107
|
}
|
|
7039
7108
|
)
|
|
7040
7109
|
] }) })),
|
|
7041
|
-
showPinnedRegion && /* @__PURE__ */
|
|
7042
|
-
resolvedPromo && !promoDismissed && /* @__PURE__ */
|
|
7043
|
-
/* @__PURE__ */
|
|
7044
|
-
/* @__PURE__ */
|
|
7045
|
-
/* @__PURE__ */
|
|
7046
|
-
/* @__PURE__ */
|
|
7110
|
+
showPinnedRegion && /* @__PURE__ */ jsxs34("div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-m)]", children: [
|
|
7111
|
+
resolvedPromo && !promoDismissed && /* @__PURE__ */ jsxs34("div", { className: "relative shrink-0 flex items-center gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-m)] pr-[var(--spacing-system-xl)]", children: [
|
|
7112
|
+
/* @__PURE__ */ jsx41("span", { className: "hidden @2xl:flex size-4 shrink-0 items-center justify-center text-ods-text-primary", children: /* @__PURE__ */ jsx41(Arrow01DownIcon, { size: 16 }) }),
|
|
7113
|
+
/* @__PURE__ */ jsxs34("div", { className: "flex min-w-0 flex-col items-start gap-1", children: [
|
|
7114
|
+
/* @__PURE__ */ jsx41("span", { className: "text-h3 text-ods-text-primary", children: resolvedPromo.title }),
|
|
7115
|
+
/* @__PURE__ */ jsx41("span", { className: "text-h6 text-ods-text-secondary", children: resolvedPromo.description })
|
|
7047
7116
|
] }),
|
|
7048
|
-
/* @__PURE__ */
|
|
7117
|
+
/* @__PURE__ */ jsx41(
|
|
7049
7118
|
"button",
|
|
7050
7119
|
{
|
|
7051
7120
|
type: "button",
|
|
7052
7121
|
onClick: dismissPromo,
|
|
7053
7122
|
"aria-label": "Dismiss",
|
|
7054
7123
|
className: "absolute right-2 top-2 text-ods-text-secondary transition-colors hover:text-ods-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent rounded-sm",
|
|
7055
|
-
children: /* @__PURE__ */
|
|
7124
|
+
children: /* @__PURE__ */ jsx41(XmarkIcon, { size: 16 })
|
|
7056
7125
|
}
|
|
7057
7126
|
)
|
|
7058
7127
|
] }),
|
|
7059
|
-
(onStartGuideChat || quickActions && quickActions.length > 0) && /* @__PURE__ */
|
|
7128
|
+
(onStartGuideChat || quickActions && quickActions.length > 0) && /* @__PURE__ */ jsx41(
|
|
7060
7129
|
ChatQuickActionRow,
|
|
7061
7130
|
{
|
|
7062
|
-
leading: onStartGuideChat && /* @__PURE__ */
|
|
7131
|
+
leading: onStartGuideChat && /* @__PURE__ */ jsx41(
|
|
7063
7132
|
QuickActionChipButton,
|
|
7064
7133
|
{
|
|
7065
7134
|
label: "Start Guide Chat",
|
|
7066
|
-
icon: /* @__PURE__ */
|
|
7135
|
+
icon: /* @__PURE__ */ jsx41(CompassIcon, { size: 16 }),
|
|
7067
7136
|
variant: hasExistingChats ? "outline" : "primary",
|
|
7068
7137
|
onSelect: onStartGuideChat
|
|
7069
7138
|
}
|
|
@@ -7088,7 +7157,7 @@ function MingoWelcome({
|
|
|
7088
7157
|
// src/components/chat/guide-welcome.tsx
|
|
7089
7158
|
init_cn();
|
|
7090
7159
|
import * as React17 from "react";
|
|
7091
|
-
import { jsx as
|
|
7160
|
+
import { jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
7092
7161
|
var DEFAULT_TITLE = "Guide Mode Chat";
|
|
7093
7162
|
function GuideWelcome({
|
|
7094
7163
|
title = DEFAULT_TITLE,
|
|
@@ -7142,7 +7211,7 @@ function GuideWelcome({
|
|
|
7142
7211
|
})),
|
|
7143
7212
|
[quickActions, icon, onQuickAction, onQuickActionHover, onQuickActionHoverEnd]
|
|
7144
7213
|
);
|
|
7145
|
-
return /* @__PURE__ */
|
|
7214
|
+
return /* @__PURE__ */ jsxs35(
|
|
7146
7215
|
"div",
|
|
7147
7216
|
{
|
|
7148
7217
|
className: cn(
|
|
@@ -7150,20 +7219,20 @@ function GuideWelcome({
|
|
|
7150
7219
|
className
|
|
7151
7220
|
),
|
|
7152
7221
|
children: [
|
|
7153
|
-
/* @__PURE__ */
|
|
7154
|
-
/* @__PURE__ */
|
|
7222
|
+
/* @__PURE__ */ jsxs35("div", { className: "relative flex flex-1 min-h-0 flex-col", children: [
|
|
7223
|
+
/* @__PURE__ */ jsxs35(
|
|
7155
7224
|
"div",
|
|
7156
7225
|
{
|
|
7157
7226
|
ref: scrollRef,
|
|
7158
7227
|
onScroll: updateScrollFade,
|
|
7159
7228
|
className: "flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)] overflow-y-auto",
|
|
7160
7229
|
children: [
|
|
7161
|
-
/* @__PURE__ */
|
|
7230
|
+
/* @__PURE__ */ jsxs35("div", { className: "flex flex-1 flex-col items-center gap-[var(--spacing-system-l)] px-[var(--spacing-system-l)] py-[var(--spacing-system-xxl)] text-center", children: [
|
|
7162
7231
|
icon && (icon.name || icon.url) ? (
|
|
7163
7232
|
// Agent-mode identity glyph (chat-config Identity tab). Sized to
|
|
7164
7233
|
// match the default Mingo mark (48px).
|
|
7165
|
-
/* @__PURE__ */
|
|
7166
|
-
) : /* @__PURE__ */
|
|
7234
|
+
/* @__PURE__ */ jsx42(EntityIcon, { icon: { name: icon.name, url: icon.url, props: icon.props }, size: 48 })
|
|
7235
|
+
) : /* @__PURE__ */ jsx42(
|
|
7167
7236
|
MingoIcon,
|
|
7168
7237
|
{
|
|
7169
7238
|
className: "h-12 w-12",
|
|
@@ -7172,16 +7241,16 @@ function GuideWelcome({
|
|
|
7172
7241
|
cornerColor: "var(--ods-flamingo-cyan-base)"
|
|
7173
7242
|
}
|
|
7174
7243
|
),
|
|
7175
|
-
/* @__PURE__ */
|
|
7176
|
-
/* @__PURE__ */
|
|
7177
|
-
subtitle ? /* @__PURE__ */
|
|
7244
|
+
/* @__PURE__ */ jsxs35("div", { className: "flex w-full flex-col gap-1", children: [
|
|
7245
|
+
/* @__PURE__ */ jsx42("p", { className: "text-h4 text-ods-text-primary", children: title }),
|
|
7246
|
+
subtitle ? /* @__PURE__ */ jsx42("p", { className: "text-h6 text-ods-text-secondary", children: subtitle }) : subtitleLoading ? /* @__PURE__ */ jsx42("div", { className: "flex w-full justify-center", children: /* @__PURE__ */ jsx42(Skeleton, { className: "h-4 w-3/4 max-w-80 rounded-sm" }) }) : null
|
|
7178
7247
|
] })
|
|
7179
7248
|
] }),
|
|
7180
7249
|
children
|
|
7181
7250
|
]
|
|
7182
7251
|
}
|
|
7183
7252
|
),
|
|
7184
|
-
/* @__PURE__ */
|
|
7253
|
+
/* @__PURE__ */ jsx42(
|
|
7185
7254
|
"div",
|
|
7186
7255
|
{
|
|
7187
7256
|
"aria-hidden": true,
|
|
@@ -7194,7 +7263,7 @@ function GuideWelcome({
|
|
|
7194
7263
|
}
|
|
7195
7264
|
}
|
|
7196
7265
|
),
|
|
7197
|
-
/* @__PURE__ */
|
|
7266
|
+
/* @__PURE__ */ jsx42(
|
|
7198
7267
|
"div",
|
|
7199
7268
|
{
|
|
7200
7269
|
"aria-hidden": true,
|
|
@@ -7208,7 +7277,7 @@ function GuideWelcome({
|
|
|
7208
7277
|
}
|
|
7209
7278
|
)
|
|
7210
7279
|
] }),
|
|
7211
|
-
quickActions.length > 0 && /* @__PURE__ */
|
|
7280
|
+
quickActions.length > 0 && /* @__PURE__ */ jsx42(
|
|
7212
7281
|
ChatQuickActionRow,
|
|
7213
7282
|
{
|
|
7214
7283
|
wrap: true,
|
|
@@ -7221,65 +7290,6 @@ function GuideWelcome({
|
|
|
7221
7290
|
);
|
|
7222
7291
|
}
|
|
7223
7292
|
|
|
7224
|
-
// src/components/chat/msp-organization-card.tsx
|
|
7225
|
-
init_cn();
|
|
7226
|
-
init_button2();
|
|
7227
|
-
import { jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
7228
|
-
function MspOrganizationCard({
|
|
7229
|
-
name,
|
|
7230
|
-
website,
|
|
7231
|
-
logoUrl,
|
|
7232
|
-
title,
|
|
7233
|
-
href,
|
|
7234
|
-
onOpenWebsite,
|
|
7235
|
-
className
|
|
7236
|
-
}) {
|
|
7237
|
-
const actionLabel = website ? `Open ${website}` : "Open organization website";
|
|
7238
|
-
return /* @__PURE__ */ jsxs34(
|
|
7239
|
-
"div",
|
|
7240
|
-
{
|
|
7241
|
-
className: cn(
|
|
7242
|
-
// Inset ring (box-shadow) instead of `border` so the 1px stroke does not
|
|
7243
|
-
// add to the box height — matches Figma's 80px frame (16 + 48 + 16) with
|
|
7244
|
-
// its inside-aligned stroke. A real border would render 82px.
|
|
7245
|
-
"flex items-start gap-[var(--spacing-system-m)] rounded-md bg-ods-bg p-[var(--spacing-system-m)] ring-1 ring-inset ring-ods-border",
|
|
7246
|
-
className
|
|
7247
|
-
),
|
|
7248
|
-
children: [
|
|
7249
|
-
/* @__PURE__ */ jsx41(SquareAvatar, { src: logoUrl, alt: name, fallback: name, size: "lg", variant: "square" }),
|
|
7250
|
-
/* @__PURE__ */ jsxs34("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
7251
|
-
/* @__PURE__ */ jsx41("span", { className: "truncate text-h3 text-ods-text-primary", children: title ?? `Your IT is managed by ${name}` }),
|
|
7252
|
-
website ? /* @__PURE__ */ jsx41("span", { className: "truncate text-h4 text-ods-text-secondary", children: website }) : null
|
|
7253
|
-
] }),
|
|
7254
|
-
href ? /* @__PURE__ */ jsx41(Button, { asChild: true, variant: "outline", size: "icon", "aria-label": actionLabel, children: /* @__PURE__ */ jsx41("a", { href, target: "_blank", rel: "noreferrer noopener", children: /* @__PURE__ */ jsx41(ExternalLinkIcon, {}) }) }) : onOpenWebsite ? /* @__PURE__ */ jsx41(Button, { variant: "outline", size: "icon", "aria-label": actionLabel, onClick: onOpenWebsite, children: /* @__PURE__ */ jsx41(ExternalLinkIcon, {}) }) : null
|
|
7255
|
-
]
|
|
7256
|
-
}
|
|
7257
|
-
);
|
|
7258
|
-
}
|
|
7259
|
-
|
|
7260
|
-
// src/components/chat/msp-organization-card-skeleton.tsx
|
|
7261
|
-
init_cn();
|
|
7262
|
-
import { jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
7263
|
-
function MspOrganizationCardSkeleton({ className }) {
|
|
7264
|
-
return /* @__PURE__ */ jsxs35(
|
|
7265
|
-
"div",
|
|
7266
|
-
{
|
|
7267
|
-
className: cn(
|
|
7268
|
-
"flex items-start gap-[var(--spacing-system-m)] rounded-md bg-ods-bg p-[var(--spacing-system-m)] ring-1 ring-inset ring-ods-border",
|
|
7269
|
-
className
|
|
7270
|
-
),
|
|
7271
|
-
children: [
|
|
7272
|
-
/* @__PURE__ */ jsx42(Skeleton, { className: "size-12 shrink-0 rounded-md" }),
|
|
7273
|
-
/* @__PURE__ */ jsxs35("div", { className: "flex min-w-0 flex-1 flex-col justify-center gap-2 self-stretch", children: [
|
|
7274
|
-
/* @__PURE__ */ jsx42(Skeleton, { className: "h-5 w-3/5 rounded-md" }),
|
|
7275
|
-
/* @__PURE__ */ jsx42(Skeleton, { className: "h-4 w-2/5 rounded-md" })
|
|
7276
|
-
] }),
|
|
7277
|
-
/* @__PURE__ */ jsx42(Skeleton, { className: "size-12 shrink-0 rounded-md" })
|
|
7278
|
-
]
|
|
7279
|
-
}
|
|
7280
|
-
);
|
|
7281
|
-
}
|
|
7282
|
-
|
|
7283
7293
|
// src/components/chat/guide-mode-banner.tsx
|
|
7284
7294
|
init_cn();
|
|
7285
7295
|
|
|
@@ -24089,7 +24099,7 @@ function OrganizationCard({
|
|
|
24089
24099
|
|
|
24090
24100
|
// src/components/ui/service-card.tsx
|
|
24091
24101
|
init_cn();
|
|
24092
|
-
import { useMemo as
|
|
24102
|
+
import { useMemo as useMemo35, useState as useState85 } from "react";
|
|
24093
24103
|
import { ExternalLink as ExternalLink7 } from "lucide-react";
|
|
24094
24104
|
|
|
24095
24105
|
// src/components/providers/dynamic-theme-provider.tsx
|
|
@@ -24320,7 +24330,7 @@ function ArrayEntryManager({
|
|
|
24320
24330
|
variant: "transparent",
|
|
24321
24331
|
size: "icon",
|
|
24322
24332
|
onClick: () => removeItem(index),
|
|
24323
|
-
className: "text-ods-attention-red-error hover:bg-ods-attention-red-error
|
|
24333
|
+
className: "text-ods-attention-red-error hover:bg-ods-attention-red-error-secondary",
|
|
24324
24334
|
children: /* @__PURE__ */ jsx180(Trash2, { className: "h-4 w-4" })
|
|
24325
24335
|
}
|
|
24326
24336
|
)
|
|
@@ -26553,7 +26563,7 @@ function PushButtonSelectorSkeleton({ count = 3, hasTitle }) {
|
|
|
26553
26563
|
function PushButtonSelectorError({ message: message2, title }) {
|
|
26554
26564
|
return /* @__PURE__ */ jsxs156("div", { className: "space-y-3", children: [
|
|
26555
26565
|
title && /* @__PURE__ */ jsx200("h3", { className: "text-h5 text-ods-text-primary", children: title }),
|
|
26556
|
-
/* @__PURE__ */ jsx200("div", { className: "p-4 bg-ods-attention-red-error-secondary border border-ods-attention-red-error
|
|
26566
|
+
/* @__PURE__ */ jsx200("div", { className: "p-4 bg-ods-attention-red-error-secondary border border-ods-attention-red-error rounded-lg", children: /* @__PURE__ */ jsxs156("div", { className: "font-['DM_Sans'] text-[14px] text-ods-attention-red-error", children: [
|
|
26557
26567
|
"\u26A0\uFE0F ",
|
|
26558
26568
|
message2
|
|
26559
26569
|
] }) })
|
|
@@ -26667,7 +26677,7 @@ function PushButtonSelector({
|
|
|
26667
26677
|
return /* @__PURE__ */ jsx200(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ jsxs156("div", { className: `space-y-4 ${className}`, children: [
|
|
26668
26678
|
title && /* @__PURE__ */ jsx200("h3", { className: "text-h5 text-ods-text-primary", children: title }),
|
|
26669
26679
|
renderOptionsContent(),
|
|
26670
|
-
selectionSummary && validSelectedIds.length > 0 && /* @__PURE__ */ jsxs156("div", { className: "p-4 bg-ods-attention-green-success-secondary border border-ods-attention-green-success
|
|
26680
|
+
selectionSummary && validSelectedIds.length > 0 && /* @__PURE__ */ jsxs156("div", { className: "p-4 bg-ods-attention-green-success-secondary border border-ods-attention-green-success rounded-lg", children: [
|
|
26671
26681
|
/* @__PURE__ */ jsxs156("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
26672
26682
|
/* @__PURE__ */ jsx200("div", { className: "w-2 h-2 bg-ods-attention-green-success rounded-full" }),
|
|
26673
26683
|
/* @__PURE__ */ jsxs156("span", { className: "font-['DM_Sans'] text-[14px] text-ods-attention-green-success font-medium", children: [
|
|
@@ -26687,7 +26697,7 @@ function PushButtonSelector({
|
|
|
26687
26697
|
)) })
|
|
26688
26698
|
] }),
|
|
26689
26699
|
helpText && /* @__PURE__ */ jsx200("div", { className: "text-[12px] text-ods-text-secondary font-['DM_Sans']", children: helpText }),
|
|
26690
|
-
validSelectedIds.length === 0 && title && !optional && /* @__PURE__ */ jsx200("div", { className: "p-3 bg-ods-attention-red-error-secondary border border-ods-attention-red-error
|
|
26700
|
+
validSelectedIds.length === 0 && title && !optional && /* @__PURE__ */ jsx200("div", { className: "p-3 bg-ods-attention-red-error-secondary border border-ods-attention-red-error rounded-lg", children: /* @__PURE__ */ jsx200("div", { className: "font-['DM_Sans'] text-[12px] text-ods-attention-red-error", children: "\u26A0\uFE0F Please select at least one option" }) })
|
|
26691
26701
|
] }) });
|
|
26692
26702
|
}
|
|
26693
26703
|
|
|
@@ -33623,7 +33633,7 @@ function NotificationsHeaderButton({
|
|
|
33623
33633
|
}
|
|
33624
33634
|
|
|
33625
33635
|
// src/components/navigation/app-layout.tsx
|
|
33626
|
-
import { createContext as createContext9, Suspense as Suspense2, useCallback as useCallback35, useContext as useContext9, useState as useState83 } from "react";
|
|
33636
|
+
import { createContext as createContext9, Suspense as Suspense2, useCallback as useCallback35, useContext as useContext9, useMemo as useMemo34, useRef as useRef45, useState as useState83 } from "react";
|
|
33627
33637
|
|
|
33628
33638
|
// src/components/navigation/mobile-burger-menu.tsx
|
|
33629
33639
|
import React109, { useCallback as useCallback34, useEffect as useEffect64 } from "react";
|
|
@@ -33829,6 +33839,10 @@ var AppLayoutDrawerContainerContext = createContext9(null);
|
|
|
33829
33839
|
function useAppLayoutDrawerContainer() {
|
|
33830
33840
|
return useContext9(AppLayoutDrawerContainerContext);
|
|
33831
33841
|
}
|
|
33842
|
+
var AppLayoutDrawerCoordinationContext = createContext9(null);
|
|
33843
|
+
function useAppLayoutDrawerCoordination() {
|
|
33844
|
+
return useContext9(AppLayoutDrawerCoordinationContext);
|
|
33845
|
+
}
|
|
33832
33846
|
function AppLayout({
|
|
33833
33847
|
children,
|
|
33834
33848
|
sidebarConfig,
|
|
@@ -33842,13 +33856,27 @@ function AppLayout({
|
|
|
33842
33856
|
}) {
|
|
33843
33857
|
const [mobileMenuOpen, setMobileMenuOpen] = useState83(false);
|
|
33844
33858
|
const [drawerContainer, setDrawerContainer] = useState83(null);
|
|
33859
|
+
const mobileMenuOpenRef = useRef45(mobileMenuOpen);
|
|
33860
|
+
mobileMenuOpenRef.current = mobileMenuOpen;
|
|
33861
|
+
const drawerHandlesRef = useRef45(/* @__PURE__ */ new Set());
|
|
33845
33862
|
const handleToggleMobileMenu = useCallback35(() => {
|
|
33846
|
-
|
|
33863
|
+
const opening = !mobileMenuOpenRef.current;
|
|
33864
|
+
if (opening) {
|
|
33865
|
+
for (const handle of drawerHandlesRef.current) handle.close();
|
|
33866
|
+
}
|
|
33867
|
+
setMobileMenuOpen(opening);
|
|
33847
33868
|
}, []);
|
|
33848
33869
|
const handleCloseMobileMenu = useCallback35(() => {
|
|
33849
33870
|
setMobileMenuOpen(false);
|
|
33850
33871
|
}, []);
|
|
33851
|
-
|
|
33872
|
+
const drawerCoordination = useMemo34(() => ({
|
|
33873
|
+
notifyDrawerDidOpen: () => setMobileMenuOpen(false),
|
|
33874
|
+
registerDrawer: (handle) => {
|
|
33875
|
+
drawerHandlesRef.current.add(handle);
|
|
33876
|
+
return () => drawerHandlesRef.current.delete(handle);
|
|
33877
|
+
}
|
|
33878
|
+
}), []);
|
|
33879
|
+
return /* @__PURE__ */ jsx262(AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ jsx262(AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ jsxs207("div", { className: cn("flex h-screen bg-ods-bg", className), children: [
|
|
33852
33880
|
/* @__PURE__ */ jsx262(NavigationSidebar, { config: sidebarConfig, disabled }),
|
|
33853
33881
|
/* @__PURE__ */ jsx262(
|
|
33854
33882
|
MobileBurgerMenu,
|
|
@@ -33883,7 +33911,7 @@ function AppLayout({
|
|
|
33883
33911
|
}
|
|
33884
33912
|
)
|
|
33885
33913
|
] })
|
|
33886
|
-
] }) });
|
|
33914
|
+
] }) }) });
|
|
33887
33915
|
}
|
|
33888
33916
|
|
|
33889
33917
|
// src/components/navigation/app-layout-drawer.tsx
|
|
@@ -33911,6 +33939,21 @@ var AppLayoutDrawerRoot = ({
|
|
|
33911
33939
|
},
|
|
33912
33940
|
[isControlled, onOpenChange]
|
|
33913
33941
|
);
|
|
33942
|
+
const coordination = useAppLayoutDrawerCoordination();
|
|
33943
|
+
const openRef = React110.useRef(open);
|
|
33944
|
+
openRef.current = open;
|
|
33945
|
+
const handleOpenChangeRef = React110.useRef(handleOpenChange);
|
|
33946
|
+
handleOpenChangeRef.current = handleOpenChange;
|
|
33947
|
+
React110.useEffect(() => {
|
|
33948
|
+
if (open) coordination?.notifyDrawerDidOpen();
|
|
33949
|
+
}, [open, coordination]);
|
|
33950
|
+
React110.useEffect(() => {
|
|
33951
|
+
return coordination?.registerDrawer({
|
|
33952
|
+
close: () => {
|
|
33953
|
+
if (openRef.current) handleOpenChangeRef.current(false);
|
|
33954
|
+
}
|
|
33955
|
+
});
|
|
33956
|
+
}, [coordination]);
|
|
33914
33957
|
return /* @__PURE__ */ jsx263(DrawerOpenContext.Provider, { value: open, children: /* @__PURE__ */ jsx263(
|
|
33915
33958
|
DialogPrimitive3.Root,
|
|
33916
33959
|
{
|
|
@@ -34906,7 +34949,7 @@ ScriptArguments.displayName = "ScriptArguments";
|
|
|
34906
34949
|
|
|
34907
34950
|
// src/components/shared/onboarding/onboarding-walkthrough.tsx
|
|
34908
34951
|
init_button2();
|
|
34909
|
-
import React112, { useRef as
|
|
34952
|
+
import React112, { useRef as useRef47, useCallback as useCallback37 } from "react";
|
|
34910
34953
|
|
|
34911
34954
|
// src/components/shared/onboarding/onboarding-step-card.tsx
|
|
34912
34955
|
import React111 from "react";
|
|
@@ -35030,10 +35073,10 @@ function OnboardingWalkthrough({
|
|
|
35030
35073
|
allStepsComplete,
|
|
35031
35074
|
markMultipleComplete
|
|
35032
35075
|
} = useOnboardingState(storageKey);
|
|
35033
|
-
const hasAutoMarkedRef =
|
|
35034
|
-
const autoMarkingInProgressRef =
|
|
35035
|
-
const lastCompletionStatusRef =
|
|
35036
|
-
const actionInProgressRef =
|
|
35076
|
+
const hasAutoMarkedRef = useRef47(false);
|
|
35077
|
+
const autoMarkingInProgressRef = useRef47(false);
|
|
35078
|
+
const lastCompletionStatusRef = useRef47(null);
|
|
35079
|
+
const actionInProgressRef = useRef47(/* @__PURE__ */ new Set());
|
|
35037
35080
|
React112.useEffect(() => {
|
|
35038
35081
|
if (isLoadingCompletion) {
|
|
35039
35082
|
hasAutoMarkedRef.current = false;
|
|
@@ -35374,7 +35417,7 @@ function ServiceCard({ title, subtitle, icon, tag, rows, className }) {
|
|
|
35374
35417
|
function ServiceCardRowItem({ row }) {
|
|
35375
35418
|
const [revealed, setRevealed] = useState85(false);
|
|
35376
35419
|
const { copy, copied } = useCopyToClipboard();
|
|
35377
|
-
const actions =
|
|
35420
|
+
const actions = useMemo35(() => ({ copy: true, open: !!row.href, reveal: !!row.isSecret, ...row.actions }), [row]);
|
|
35378
35421
|
const displayValue = row.isSecret ? /* @__PURE__ */ jsx276(MaskedValue, { value: row.value, isRevealed: revealed }) : /* @__PURE__ */ jsx276("span", { children: row.value });
|
|
35379
35422
|
const handleCopy = () => copy(row.copyValue ?? row.value);
|
|
35380
35423
|
const openInNewTab = () => {
|
|
@@ -35547,14 +35590,17 @@ function ErrorState({
|
|
|
35547
35590
|
switch (variant) {
|
|
35548
35591
|
case "error":
|
|
35549
35592
|
return {
|
|
35550
|
-
|
|
35593
|
+
// -secondary tokens, NOT `/20` alpha modifiers: the ods colors are
|
|
35594
|
+
// hex CSS vars, and Tailwind 3.x can't inject alpha into those —
|
|
35595
|
+
// the modifier silently produced no background at all.
|
|
35596
|
+
bg: "bg-ods-attention-red-error-secondary",
|
|
35551
35597
|
border: "border-ods-attention-red-error",
|
|
35552
35598
|
text: "text-ods-attention-red-error",
|
|
35553
35599
|
icon: "text-ods-attention-red-error"
|
|
35554
35600
|
};
|
|
35555
35601
|
case "warning":
|
|
35556
35602
|
return {
|
|
35557
|
-
bg: "bg-ods-attention-yellow-warning
|
|
35603
|
+
bg: "bg-ods-attention-yellow-warning-secondary",
|
|
35558
35604
|
border: "border-ods-attention-yellow-warning",
|
|
35559
35605
|
text: "text-ods-attention-yellow-warning",
|
|
35560
35606
|
icon: "text-ods-attention-yellow-warning"
|
|
@@ -35718,7 +35764,7 @@ var ListLoader = (props) => /* @__PURE__ */ jsx281(ContentLoader, { ...props, va
|
|
|
35718
35764
|
|
|
35719
35765
|
// src/components/ui/table/table.tsx
|
|
35720
35766
|
init_cn();
|
|
35721
|
-
import { useEffect as useEffect67, useRef as
|
|
35767
|
+
import { useEffect as useEffect67, useRef as useRef49 } from "react";
|
|
35722
35768
|
init_pagination();
|
|
35723
35769
|
init_button2();
|
|
35724
35770
|
|
|
@@ -36478,8 +36524,8 @@ function Table({
|
|
|
36478
36524
|
};
|
|
36479
36525
|
const allSelected = selectedRows.length > 0 && selectedRows.length === data.length;
|
|
36480
36526
|
const someSelected = selectedRows.length > 0 && selectedRows.length < data.length;
|
|
36481
|
-
const sentinelRef =
|
|
36482
|
-
const onLoadMoreRef =
|
|
36527
|
+
const sentinelRef = useRef49(null);
|
|
36528
|
+
const onLoadMoreRef = useRef49(infiniteScroll?.onLoadMore);
|
|
36483
36529
|
onLoadMoreRef.current = infiniteScroll?.onLoadMore;
|
|
36484
36530
|
useEffect67(() => {
|
|
36485
36531
|
if (!infiniteScroll?.hasNextPage || infiniteScroll.isFetchingNextPage) return;
|
|
@@ -36695,11 +36741,11 @@ function TableTimestampCell({
|
|
|
36695
36741
|
// src/components/ui/query-report-table/query-report-table.tsx
|
|
36696
36742
|
init_cn();
|
|
36697
36743
|
init_button2();
|
|
36698
|
-
import { useMemo as
|
|
36744
|
+
import { useMemo as useMemo36 } from "react";
|
|
36699
36745
|
|
|
36700
36746
|
// src/components/ui/query-report-table/query-report-table-header.tsx
|
|
36701
36747
|
init_cn();
|
|
36702
|
-
import { useRef as
|
|
36748
|
+
import { useRef as useRef50, useState as useState87, useCallback as useCallback38 } from "react";
|
|
36703
36749
|
import { jsx as jsx293, jsxs as jsxs233 } from "react/jsx-runtime";
|
|
36704
36750
|
function QueryReportTableHeader({
|
|
36705
36751
|
columns,
|
|
@@ -36728,7 +36774,7 @@ function QueryReportTableHeader({
|
|
|
36728
36774
|
);
|
|
36729
36775
|
}
|
|
36730
36776
|
function TruncatedHeaderCell({ value, width }) {
|
|
36731
|
-
const textRef =
|
|
36777
|
+
const textRef = useRef50(null);
|
|
36732
36778
|
const [isTruncated, setIsTruncated] = useState87(false);
|
|
36733
36779
|
const checkTruncation = useCallback38(() => {
|
|
36734
36780
|
const el = textRef.current;
|
|
@@ -36758,7 +36804,7 @@ function TruncatedHeaderCell({ value, width }) {
|
|
|
36758
36804
|
|
|
36759
36805
|
// src/components/ui/query-report-table/query-report-table-row.tsx
|
|
36760
36806
|
init_cn();
|
|
36761
|
-
import { useRef as
|
|
36807
|
+
import { useRef as useRef51, useState as useState88, useCallback as useCallback39 } from "react";
|
|
36762
36808
|
import { jsx as jsx294, jsxs as jsxs234 } from "react/jsx-runtime";
|
|
36763
36809
|
function QueryReportTableRow({
|
|
36764
36810
|
row,
|
|
@@ -36804,7 +36850,7 @@ function QueryReportTableRow({
|
|
|
36804
36850
|
);
|
|
36805
36851
|
}
|
|
36806
36852
|
function TruncatedCell({ value, className }) {
|
|
36807
|
-
const textRef =
|
|
36853
|
+
const textRef = useRef51(null);
|
|
36808
36854
|
const [isTruncated, setIsTruncated] = useState88(false);
|
|
36809
36855
|
const checkTruncation = useCallback39(() => {
|
|
36810
36856
|
const el = textRef.current;
|
|
@@ -36933,7 +36979,7 @@ function QueryReportTable({
|
|
|
36933
36979
|
tableClassName
|
|
36934
36980
|
}) {
|
|
36935
36981
|
const isCompact = variant === "compact";
|
|
36936
|
-
const columns =
|
|
36982
|
+
const columns = useMemo36(
|
|
36937
36983
|
() => deriveColumns(data, columnOrder),
|
|
36938
36984
|
[data, columnOrder]
|
|
36939
36985
|
);
|
|
@@ -37069,7 +37115,7 @@ init_cn();
|
|
|
37069
37115
|
|
|
37070
37116
|
// src/components/ui/data-table/data-table-column-filter.tsx
|
|
37071
37117
|
init_cn();
|
|
37072
|
-
import { useCallback as useCallback40, useMemo as
|
|
37118
|
+
import { useCallback as useCallback40, useMemo as useMemo37 } from "react";
|
|
37073
37119
|
|
|
37074
37120
|
// src/components/ui/data-table/utils.ts
|
|
37075
37121
|
function getHideClasses2(hideAt) {
|
|
@@ -37113,7 +37159,7 @@ function DataTableColumnFilter({
|
|
|
37113
37159
|
}) {
|
|
37114
37160
|
const currentValue = column.getFilterValue();
|
|
37115
37161
|
const activeCount = currentValue?.length ?? 0;
|
|
37116
|
-
const sections =
|
|
37162
|
+
const sections = useMemo37(
|
|
37117
37163
|
() => [
|
|
37118
37164
|
{
|
|
37119
37165
|
id: column.id,
|
|
@@ -37125,7 +37171,7 @@ function DataTableColumnFilter({
|
|
|
37125
37171
|
],
|
|
37126
37172
|
[column.id, label, options]
|
|
37127
37173
|
);
|
|
37128
|
-
const currentFilters =
|
|
37174
|
+
const currentFilters = useMemo37(
|
|
37129
37175
|
() => ({ [column.id]: currentValue ?? EMPTY_ARRAY }),
|
|
37130
37176
|
[column.id, currentValue]
|
|
37131
37177
|
);
|
|
@@ -37304,7 +37350,7 @@ function DataTableEmpty({ className, ...props }) {
|
|
|
37304
37350
|
// src/components/ui/data-table/data-table-row.tsx
|
|
37305
37351
|
init_next_link();
|
|
37306
37352
|
init_cn();
|
|
37307
|
-
import { memo as memo5, useCallback as useCallback41, useRef as
|
|
37353
|
+
import { memo as memo5, useCallback as useCallback41, useRef as useRef52 } from "react";
|
|
37308
37354
|
import { flexRender as flexRender2 } from "@tanstack/react-table";
|
|
37309
37355
|
|
|
37310
37356
|
// src/components/ui/data-table/data-table-skeleton.tsx
|
|
@@ -37388,7 +37434,7 @@ function DataTableRowImpl({
|
|
|
37388
37434
|
const hasSubRow = subRow != null && subRow !== false;
|
|
37389
37435
|
const isLinkMode = Boolean(href) && !onClick;
|
|
37390
37436
|
const isWholeCardLink = isLinkMode && !hasSubRow;
|
|
37391
|
-
const containerRef =
|
|
37437
|
+
const containerRef = useRef52(null);
|
|
37392
37438
|
const handleClick = useCallback41(
|
|
37393
37439
|
(e) => {
|
|
37394
37440
|
const target = e.target;
|
|
@@ -37554,7 +37600,7 @@ function DataTableBody({
|
|
|
37554
37600
|
}
|
|
37555
37601
|
|
|
37556
37602
|
// src/components/ui/data-table/data-table-infinite-footer.tsx
|
|
37557
|
-
import { useEffect as useEffect68, useRef as
|
|
37603
|
+
import { useEffect as useEffect68, useRef as useRef53 } from "react";
|
|
37558
37604
|
import { Fragment as Fragment57, jsx as jsx304, jsxs as jsxs242 } from "react/jsx-runtime";
|
|
37559
37605
|
function DataTableInfiniteFooter({
|
|
37560
37606
|
hasNextPage,
|
|
@@ -37563,8 +37609,8 @@ function DataTableInfiniteFooter({
|
|
|
37563
37609
|
skeletonRows = 3,
|
|
37564
37610
|
rootMargin = "200px"
|
|
37565
37611
|
}) {
|
|
37566
|
-
const sentinelRef =
|
|
37567
|
-
const onLoadMoreRef =
|
|
37612
|
+
const sentinelRef = useRef53(null);
|
|
37613
|
+
const onLoadMoreRef = useRef53(onLoadMore);
|
|
37568
37614
|
onLoadMoreRef.current = onLoadMore;
|
|
37569
37615
|
useEffect68(() => {
|
|
37570
37616
|
if (!hasNextPage || isFetchingNextPage) return;
|
|
@@ -38201,7 +38247,7 @@ function FilterList({
|
|
|
38201
38247
|
// src/components/ui/tag-search-input.tsx
|
|
38202
38248
|
import {
|
|
38203
38249
|
useEffect as useEffect70,
|
|
38204
|
-
useRef as
|
|
38250
|
+
useRef as useRef55,
|
|
38205
38251
|
useState as useState90
|
|
38206
38252
|
} from "react";
|
|
38207
38253
|
init_cn();
|
|
@@ -38236,9 +38282,9 @@ function TagSearchInput({
|
|
|
38236
38282
|
limitTags,
|
|
38237
38283
|
placeholder: currentPlaceholder
|
|
38238
38284
|
});
|
|
38239
|
-
const wrapperRef =
|
|
38240
|
-
const hiddenTagsRef =
|
|
38241
|
-
const hiddenTagsPopupRef =
|
|
38285
|
+
const wrapperRef = useRef55(null);
|
|
38286
|
+
const hiddenTagsRef = useRef55(null);
|
|
38287
|
+
const hiddenTagsPopupRef = useRef55(null);
|
|
38242
38288
|
const [showHiddenTags, setShowHiddenTags] = useState90(false);
|
|
38243
38289
|
useEffect70(() => {
|
|
38244
38290
|
if (!showHiddenTags) return;
|
|
@@ -38395,7 +38441,7 @@ function TagSearchInput({
|
|
|
38395
38441
|
}
|
|
38396
38442
|
|
|
38397
38443
|
// src/components/ui/markdown-editor.tsx
|
|
38398
|
-
import { useRef as
|
|
38444
|
+
import { useRef as useRef56, useCallback as useCallback42, useState as useState91, useEffect as useEffect71 } from "react";
|
|
38399
38445
|
init_cn();
|
|
38400
38446
|
import { Loader2 as Loader29, Upload as Upload8 } from "lucide-react";
|
|
38401
38447
|
import { jsx as jsx309, jsxs as jsxs247 } from "react/jsx-runtime";
|
|
@@ -38450,7 +38496,7 @@ function MarkdownEditor({
|
|
|
38450
38496
|
onFileUploaded,
|
|
38451
38497
|
renderPreview
|
|
38452
38498
|
}) {
|
|
38453
|
-
const fileInputRef =
|
|
38499
|
+
const fileInputRef = useRef56(null);
|
|
38454
38500
|
const [isUploading, setIsUploading] = useState91(false);
|
|
38455
38501
|
const [uploadProgress, setUploadProgress] = useState91("");
|
|
38456
38502
|
const [defaultExtraCommands, setDefaultExtraCommands] = useState91([]);
|
|
@@ -38543,11 +38589,11 @@ function MarkdownEditor({
|
|
|
38543
38589
|
}
|
|
38544
38590
|
} : null;
|
|
38545
38591
|
const extraCommands = uploadCommand ? [...defaultExtraCommands, uploadCommand] : defaultExtraCommands;
|
|
38546
|
-
const wrapperRef =
|
|
38547
|
-
const isDraggingRef =
|
|
38548
|
-
const mouseYRef =
|
|
38549
|
-
const rafRef =
|
|
38550
|
-
const scrollParentRef =
|
|
38592
|
+
const wrapperRef = useRef56(null);
|
|
38593
|
+
const isDraggingRef = useRef56(false);
|
|
38594
|
+
const mouseYRef = useRef56(0);
|
|
38595
|
+
const rafRef = useRef56(0);
|
|
38596
|
+
const scrollParentRef = useRef56(window);
|
|
38551
38597
|
const EDGE_ZONE = 60;
|
|
38552
38598
|
const MAX_SCROLL_SPEED = 15;
|
|
38553
38599
|
const findScrollParent = useCallback42((el) => {
|
|
@@ -44125,7 +44171,7 @@ function renderChatInlineEntityCard(chatRef, options = {}) {
|
|
|
44125
44171
|
}
|
|
44126
44172
|
|
|
44127
44173
|
// src/components/chat/hooks/use-chunk-catchup.ts
|
|
44128
|
-
import { useCallback as useCallback44, useRef as
|
|
44174
|
+
import { useCallback as useCallback44, useRef as useRef60 } from "react";
|
|
44129
44175
|
function makeSeqKey(messageType, chunkType, sequenceId) {
|
|
44130
44176
|
return `${messageType}:${chunkType}:${sequenceId}`;
|
|
44131
44177
|
}
|
|
@@ -44147,20 +44193,20 @@ function useChunkCatchup({
|
|
|
44147
44193
|
chatTypes = [CHAT_TYPE.CLIENT],
|
|
44148
44194
|
fetchChunks
|
|
44149
44195
|
}) {
|
|
44150
|
-
const processedSequenceKeys =
|
|
44151
|
-
const lastSequenceId =
|
|
44152
|
-
const fetchingInProgress =
|
|
44153
|
-
const lastFetchParams =
|
|
44154
|
-
const chunkBuffer =
|
|
44155
|
-
const bufferUntilInitialCatchupComplete =
|
|
44156
|
-
const hasCompletedInitialCatchup =
|
|
44157
|
-
const dialogIdRef =
|
|
44196
|
+
const processedSequenceKeys = useRef60(/* @__PURE__ */ new Set());
|
|
44197
|
+
const lastSequenceId = useRef60(null);
|
|
44198
|
+
const fetchingInProgress = useRef60(false);
|
|
44199
|
+
const lastFetchParams = useRef60(null);
|
|
44200
|
+
const chunkBuffer = useRef60([]);
|
|
44201
|
+
const bufferUntilInitialCatchupComplete = useRef60(false);
|
|
44202
|
+
const hasCompletedInitialCatchup = useRef60(false);
|
|
44203
|
+
const dialogIdRef = useRef60(dialogId);
|
|
44158
44204
|
dialogIdRef.current = dialogId;
|
|
44159
|
-
const chatTypesRef =
|
|
44205
|
+
const chatTypesRef = useRef60(chatTypes);
|
|
44160
44206
|
chatTypesRef.current = chatTypes;
|
|
44161
|
-
const fetchChunksRef =
|
|
44207
|
+
const fetchChunksRef = useRef60(fetchChunks);
|
|
44162
44208
|
fetchChunksRef.current = fetchChunks;
|
|
44163
|
-
const onChunkReceivedRef =
|
|
44209
|
+
const onChunkReceivedRef = useRef60(onChunkReceived);
|
|
44164
44210
|
onChunkReceivedRef.current = onChunkReceived;
|
|
44165
44211
|
const processChunk = useCallback44((chunk, messageType, forceProcess = false) => {
|
|
44166
44212
|
if (bufferUntilInitialCatchupComplete.current && !forceProcess) {
|
|
@@ -44337,7 +44383,7 @@ function useChunkCatchup({
|
|
|
44337
44383
|
}
|
|
44338
44384
|
|
|
44339
44385
|
// src/components/chat/hooks/use-jetstream-dialog-subscription.ts
|
|
44340
|
-
import { useEffect as useEffect75, useRef as
|
|
44386
|
+
import { useEffect as useEffect75, useRef as useRef61, useState as useState101 } from "react";
|
|
44341
44387
|
var DEFAULT_INACTIVE_THRESHOLD_MS = 5 * 6e4;
|
|
44342
44388
|
var DEFAULT_STREAM_NAME = "CHAT_CHUNKS";
|
|
44343
44389
|
function useJetStreamDialogSubscription({
|
|
@@ -44360,51 +44406,51 @@ function useJetStreamDialogSubscription({
|
|
|
44360
44406
|
const [isSubscribed, setIsSubscribed] = useState101(false);
|
|
44361
44407
|
const [reconnectionCount, setReconnectionCount] = useState101(0);
|
|
44362
44408
|
const [currentStreamSeq, setCurrentStreamSeq] = useState101(null);
|
|
44363
|
-
const clientRef =
|
|
44364
|
-
const subscriptionRef =
|
|
44365
|
-
const highestStreamSeqRef =
|
|
44366
|
-
const onEventRef =
|
|
44409
|
+
const clientRef = useRef61(null);
|
|
44410
|
+
const subscriptionRef = useRef61(null);
|
|
44411
|
+
const highestStreamSeqRef = useRef61(null);
|
|
44412
|
+
const onEventRef = useRef61(onEvent);
|
|
44367
44413
|
useEffect75(() => {
|
|
44368
44414
|
onEventRef.current = onEvent;
|
|
44369
44415
|
}, [onEvent]);
|
|
44370
|
-
const onConnectRef =
|
|
44416
|
+
const onConnectRef = useRef61(onConnect);
|
|
44371
44417
|
useEffect75(() => {
|
|
44372
44418
|
onConnectRef.current = onConnect;
|
|
44373
44419
|
}, [onConnect]);
|
|
44374
|
-
const onDisconnectRef =
|
|
44420
|
+
const onDisconnectRef = useRef61(onDisconnect);
|
|
44375
44421
|
useEffect75(() => {
|
|
44376
44422
|
onDisconnectRef.current = onDisconnect;
|
|
44377
44423
|
}, [onDisconnect]);
|
|
44378
|
-
const onSubscribedRef =
|
|
44424
|
+
const onSubscribedRef = useRef61(onSubscribed);
|
|
44379
44425
|
useEffect75(() => {
|
|
44380
44426
|
onSubscribedRef.current = onSubscribed;
|
|
44381
44427
|
}, [onSubscribed]);
|
|
44382
|
-
const onBeforeReconnectRef =
|
|
44428
|
+
const onBeforeReconnectRef = useRef61(onBeforeReconnect);
|
|
44383
44429
|
useEffect75(() => {
|
|
44384
44430
|
onBeforeReconnectRef.current = onBeforeReconnect;
|
|
44385
44431
|
}, [onBeforeReconnect]);
|
|
44386
|
-
const getNatsWsUrlRef =
|
|
44432
|
+
const getNatsWsUrlRef = useRef61(getNatsWsUrl);
|
|
44387
44433
|
useEffect75(() => {
|
|
44388
44434
|
getNatsWsUrlRef.current = getNatsWsUrl;
|
|
44389
44435
|
}, [getNatsWsUrl]);
|
|
44390
|
-
const reconnectionBackoffRef =
|
|
44436
|
+
const reconnectionBackoffRef = useRef61(reconnectionBackoff);
|
|
44391
44437
|
useEffect75(() => {
|
|
44392
44438
|
reconnectionBackoffRef.current = reconnectionBackoff;
|
|
44393
44439
|
}, [reconnectionBackoff]);
|
|
44394
|
-
const optStartSeqRef =
|
|
44440
|
+
const optStartSeqRef = useRef61(optStartSeq);
|
|
44395
44441
|
useEffect75(() => {
|
|
44396
44442
|
optStartSeqRef.current = optStartSeq;
|
|
44397
44443
|
}, [optStartSeq]);
|
|
44398
|
-
const inactiveThresholdRef =
|
|
44444
|
+
const inactiveThresholdRef = useRef61(inactiveThresholdMs);
|
|
44399
44445
|
useEffect75(() => {
|
|
44400
44446
|
inactiveThresholdRef.current = inactiveThresholdMs;
|
|
44401
44447
|
}, [inactiveThresholdMs]);
|
|
44402
|
-
const hadConnectionBeforeRef =
|
|
44403
|
-
const clientConfigRef =
|
|
44448
|
+
const hadConnectionBeforeRef = useRef61(false);
|
|
44449
|
+
const clientConfigRef = useRef61(clientConfig);
|
|
44404
44450
|
useEffect75(() => {
|
|
44405
44451
|
clientConfigRef.current = clientConfig;
|
|
44406
44452
|
}, [clientConfig]);
|
|
44407
|
-
const currentWsUrlRef =
|
|
44453
|
+
const currentWsUrlRef = useRef61("");
|
|
44408
44454
|
const wsUrl = getNatsWsUrl();
|
|
44409
44455
|
useEffect75(() => {
|
|
44410
44456
|
if (!enabled || !wsUrl) {
|
|
@@ -44578,7 +44624,7 @@ function useJetStreamDialogSubscription({
|
|
|
44578
44624
|
}
|
|
44579
44625
|
|
|
44580
44626
|
// src/components/chat/hooks/use-nats-dialog-subscription.ts
|
|
44581
|
-
import { useEffect as useEffect76, useRef as
|
|
44627
|
+
import { useEffect as useEffect76, useRef as useRef62, useState as useState102 } from "react";
|
|
44582
44628
|
function useNatsDialogSubscription({
|
|
44583
44629
|
enabled,
|
|
44584
44630
|
dialogId,
|
|
@@ -44595,42 +44641,42 @@ function useNatsDialogSubscription({
|
|
|
44595
44641
|
const [isConnected, setIsConnected] = useState102(false);
|
|
44596
44642
|
const [isSubscribed, setIsSubscribed] = useState102(false);
|
|
44597
44643
|
const [reconnectionCount, setReconnectionCount] = useState102(0);
|
|
44598
|
-
const clientRef =
|
|
44599
|
-
const subscriptionRefs =
|
|
44600
|
-
const onEventRef =
|
|
44644
|
+
const clientRef = useRef62(null);
|
|
44645
|
+
const subscriptionRefs = useRef62(/* @__PURE__ */ new Map());
|
|
44646
|
+
const onEventRef = useRef62(onEvent);
|
|
44601
44647
|
useEffect76(() => {
|
|
44602
44648
|
onEventRef.current = onEvent;
|
|
44603
44649
|
}, [onEvent]);
|
|
44604
|
-
const onConnectRef =
|
|
44650
|
+
const onConnectRef = useRef62(onConnect);
|
|
44605
44651
|
useEffect76(() => {
|
|
44606
44652
|
onConnectRef.current = onConnect;
|
|
44607
44653
|
}, [onConnect]);
|
|
44608
|
-
const onDisconnectRef =
|
|
44654
|
+
const onDisconnectRef = useRef62(onDisconnect);
|
|
44609
44655
|
useEffect76(() => {
|
|
44610
44656
|
onDisconnectRef.current = onDisconnect;
|
|
44611
44657
|
}, [onDisconnect]);
|
|
44612
|
-
const onSubscribedRef =
|
|
44658
|
+
const onSubscribedRef = useRef62(onSubscribed);
|
|
44613
44659
|
useEffect76(() => {
|
|
44614
44660
|
onSubscribedRef.current = onSubscribed;
|
|
44615
44661
|
}, [onSubscribed]);
|
|
44616
|
-
const onBeforeReconnectRef =
|
|
44662
|
+
const onBeforeReconnectRef = useRef62(onBeforeReconnect);
|
|
44617
44663
|
useEffect76(() => {
|
|
44618
44664
|
onBeforeReconnectRef.current = onBeforeReconnect;
|
|
44619
44665
|
}, [onBeforeReconnect]);
|
|
44620
|
-
const hadConnectionBeforeRef =
|
|
44621
|
-
const getNatsWsUrlRef =
|
|
44666
|
+
const hadConnectionBeforeRef = useRef62(false);
|
|
44667
|
+
const getNatsWsUrlRef = useRef62(getNatsWsUrl);
|
|
44622
44668
|
useEffect76(() => {
|
|
44623
44669
|
getNatsWsUrlRef.current = getNatsWsUrl;
|
|
44624
44670
|
}, [getNatsWsUrl]);
|
|
44625
|
-
const reconnectionBackoffRef =
|
|
44671
|
+
const reconnectionBackoffRef = useRef62(reconnectionBackoff);
|
|
44626
44672
|
useEffect76(() => {
|
|
44627
44673
|
reconnectionBackoffRef.current = reconnectionBackoff;
|
|
44628
44674
|
}, [reconnectionBackoff]);
|
|
44629
|
-
const clientConfigRef =
|
|
44675
|
+
const clientConfigRef = useRef62(clientConfig);
|
|
44630
44676
|
useEffect76(() => {
|
|
44631
44677
|
clientConfigRef.current = clientConfig;
|
|
44632
44678
|
}, [clientConfig]);
|
|
44633
|
-
const currentWsUrlRef =
|
|
44679
|
+
const currentWsUrlRef = useRef62("");
|
|
44634
44680
|
const wsUrl = getNatsWsUrl();
|
|
44635
44681
|
useEffect76(() => {
|
|
44636
44682
|
if (!enabled || !wsUrl) {
|
|
@@ -44714,13 +44760,13 @@ function useNatsDialogSubscription({
|
|
|
44714
44760
|
};
|
|
44715
44761
|
}, [enabled, wsUrl]);
|
|
44716
44762
|
const topicsKey = topics.join(",");
|
|
44717
|
-
const lastSubscribedDialogIdRef =
|
|
44718
|
-
const isConnectedRef =
|
|
44763
|
+
const lastSubscribedDialogIdRef = useRef62(null);
|
|
44764
|
+
const isConnectedRef = useRef62(isConnected);
|
|
44719
44765
|
useEffect76(() => {
|
|
44720
44766
|
isConnectedRef.current = isConnected;
|
|
44721
44767
|
}, [isConnected]);
|
|
44722
|
-
const currentDialogIdRef =
|
|
44723
|
-
const abortControllerRef =
|
|
44768
|
+
const currentDialogIdRef = useRef62(null);
|
|
44769
|
+
const abortControllerRef = useRef62(null);
|
|
44724
44770
|
useEffect76(() => {
|
|
44725
44771
|
currentDialogIdRef.current = dialogId;
|
|
44726
44772
|
if (!enabled || !dialogId) {
|
|
@@ -44852,7 +44898,7 @@ function buildNatsWsUrl(apiBaseUrl, options) {
|
|
|
44852
44898
|
}
|
|
44853
44899
|
|
|
44854
44900
|
// src/components/chat/hooks/use-realtime-chunk-processor.ts
|
|
44855
|
-
import { useCallback as useCallback45, useRef as
|
|
44901
|
+
import { useCallback as useCallback45, useRef as useRef63, useEffect as useEffect77 } from "react";
|
|
44856
44902
|
|
|
44857
44903
|
// src/components/chat/utils/chunk-parser.ts
|
|
44858
44904
|
function normalizeToolCalls(raw) {
|
|
@@ -45503,13 +45549,13 @@ function useRealtimeChunkProcessor(options) {
|
|
|
45503
45549
|
batchApprovalsEnabled = true,
|
|
45504
45550
|
isDirectMode = false
|
|
45505
45551
|
} = options;
|
|
45506
|
-
const accumulatorRef =
|
|
45552
|
+
const accumulatorRef = useRef63(
|
|
45507
45553
|
createMessageSegmentAccumulator({
|
|
45508
45554
|
onApprove: callbacks.onApprove,
|
|
45509
45555
|
onReject: callbacks.onReject
|
|
45510
45556
|
})
|
|
45511
45557
|
);
|
|
45512
|
-
const hasInitializedWithData =
|
|
45558
|
+
const hasInitializedWithData = useRef63(false);
|
|
45513
45559
|
useEffect77(() => {
|
|
45514
45560
|
if (initialState && !hasInitializedWithData.current) {
|
|
45515
45561
|
accumulatorRef.current.initializeWithState(initialState);
|
|
@@ -45523,14 +45569,14 @@ function useRealtimeChunkProcessor(options) {
|
|
|
45523
45569
|
hasInitializedWithData.current = true;
|
|
45524
45570
|
}
|
|
45525
45571
|
}, [initialState, callbacks]);
|
|
45526
|
-
const isInStreamRef =
|
|
45527
|
-
const hasEverStreamedRef =
|
|
45528
|
-
const directModeFlagRef =
|
|
45529
|
-
const sawDirectMessageRef =
|
|
45572
|
+
const isInStreamRef = useRef63(false);
|
|
45573
|
+
const hasEverStreamedRef = useRef63(false);
|
|
45574
|
+
const directModeFlagRef = useRef63(isDirectMode);
|
|
45575
|
+
const sawDirectMessageRef = useRef63(false);
|
|
45530
45576
|
useEffect77(() => {
|
|
45531
45577
|
directModeFlagRef.current = isDirectMode;
|
|
45532
45578
|
}, [isDirectMode]);
|
|
45533
|
-
const pendingEscalatedRef =
|
|
45579
|
+
const pendingEscalatedRef = useRef63(/* @__PURE__ */ new Map());
|
|
45534
45580
|
const processChunk = useCallback45(
|
|
45535
45581
|
(chunk) => {
|
|
45536
45582
|
const action = parseChunkToAction(chunk);
|
|
@@ -45913,7 +45959,7 @@ function useEmptyStateConfig(emptyStateUrl, options) {
|
|
|
45913
45959
|
}
|
|
45914
45960
|
|
|
45915
45961
|
// src/components/chat/hooks/use-chat-attachments.ts
|
|
45916
|
-
import { useCallback as useCallback46, useMemo as
|
|
45962
|
+
import { useCallback as useCallback46, useMemo as useMemo40, useRef as useRef64, useState as useState104 } from "react";
|
|
45917
45963
|
import { fileTypeFromBlob } from "file-type";
|
|
45918
45964
|
var CHAT_ATTACHMENTS_BUCKET = "chat-attachments";
|
|
45919
45965
|
var CHAT_ATTACHMENTS_FOLDER = "chat";
|
|
@@ -45990,7 +46036,7 @@ function useChatAttachments() {
|
|
|
45990
46036
|
const runtime = useRequiredChatRuntime();
|
|
45991
46037
|
const uploadUrlEndpoint = runtime.endpoints.attachmentUploadUrl;
|
|
45992
46038
|
const [attachments, setAttachments] = useState104([]);
|
|
45993
|
-
const controllersRef =
|
|
46039
|
+
const controllersRef = useRef64(/* @__PURE__ */ new Map());
|
|
45994
46040
|
const updateOne = useCallback46((id, patch) => {
|
|
45995
46041
|
setAttachments((prev) => prev.map((a) => a.id === id ? { ...a, ...patch } : a));
|
|
45996
46042
|
}, []);
|
|
@@ -46079,7 +46125,7 @@ function useChatAttachments() {
|
|
|
46079
46125
|
},
|
|
46080
46126
|
[uploadUrlEndpoint, updateOne]
|
|
46081
46127
|
);
|
|
46082
|
-
const attachmentsRef =
|
|
46128
|
+
const attachmentsRef = useRef64([]);
|
|
46083
46129
|
attachmentsRef.current = attachments;
|
|
46084
46130
|
const addFiles = useCallback46(
|
|
46085
46131
|
(files) => {
|
|
@@ -46130,7 +46176,7 @@ function useChatAttachments() {
|
|
|
46130
46176
|
},
|
|
46131
46177
|
[uploadOne]
|
|
46132
46178
|
);
|
|
46133
|
-
const readyAttachments =
|
|
46179
|
+
const readyAttachments = useMemo40(
|
|
46134
46180
|
() => attachments.filter(
|
|
46135
46181
|
(a) => a.status === "ready" && !!a.storagePath && !!a.viewToken
|
|
46136
46182
|
).map((a) => ({
|
|
@@ -46156,13 +46202,13 @@ function useChatAttachments() {
|
|
|
46156
46202
|
}
|
|
46157
46203
|
|
|
46158
46204
|
// src/components/chat/hooks/use-chat-attachment-image-gallery.tsx
|
|
46159
|
-
import { useCallback as useCallback47, useEffect as useEffect79, useRef as
|
|
46205
|
+
import { useCallback as useCallback47, useEffect as useEffect79, useRef as useRef65, useState as useState105 } from "react";
|
|
46160
46206
|
import { jsx as jsx333 } from "react/jsx-runtime";
|
|
46161
46207
|
var CLOSED = { isOpen: false, images: [], initialIndex: 0 };
|
|
46162
46208
|
function useChatAttachmentImageGallery() {
|
|
46163
46209
|
const runtime = useRequiredChatRuntime();
|
|
46164
46210
|
const viewUrlPrefix = runtime.endpoints.attachmentViewUrlPrefix;
|
|
46165
|
-
const panelRef =
|
|
46211
|
+
const panelRef = useRef65(null);
|
|
46166
46212
|
const [state, setState] = useState105(CLOSED);
|
|
46167
46213
|
const handleClose = useCallback47(() => setState(CLOSED), []);
|
|
46168
46214
|
useEffect79(() => {
|
|
@@ -46266,10 +46312,10 @@ function useChatIdentity() {
|
|
|
46266
46312
|
}
|
|
46267
46313
|
|
|
46268
46314
|
// src/components/chat/hooks/use-close-on-navigation.ts
|
|
46269
|
-
import { useEffect as useEffect81, useRef as
|
|
46315
|
+
import { useEffect as useEffect81, useRef as useRef66 } from "react";
|
|
46270
46316
|
function useCloseOnNavigation(close, pathname) {
|
|
46271
|
-
const prevPathnameRef =
|
|
46272
|
-
const initializedRef =
|
|
46317
|
+
const prevPathnameRef = useRef66(null);
|
|
46318
|
+
const initializedRef = useRef66(false);
|
|
46273
46319
|
useEffect81(() => {
|
|
46274
46320
|
if (!initializedRef.current) {
|
|
46275
46321
|
initializedRef.current = true;
|
|
@@ -46284,14 +46330,14 @@ function useCloseOnNavigation(close, pathname) {
|
|
|
46284
46330
|
}
|
|
46285
46331
|
|
|
46286
46332
|
// src/components/chat/hooks/use-chat.ts
|
|
46287
|
-
import { useState as useState108, useCallback as useCallback49, useEffect as useEffect82, useRef as
|
|
46333
|
+
import { useState as useState108, useCallback as useCallback49, useEffect as useEffect82, useRef as useRef68 } from "react";
|
|
46288
46334
|
|
|
46289
46335
|
// src/components/chat/hooks/use-sse.ts
|
|
46290
|
-
import { useState as useState107, useCallback as useCallback48, useRef as
|
|
46336
|
+
import { useState as useState107, useCallback as useCallback48, useRef as useRef67 } from "react";
|
|
46291
46337
|
function useSSE({ useMock = true, debugMode = false, streamFn } = {}) {
|
|
46292
46338
|
const [isStreaming, setIsStreaming] = useState107(false);
|
|
46293
46339
|
const [error, setError] = useState107(null);
|
|
46294
|
-
const abortControllerRef =
|
|
46340
|
+
const abortControllerRef = useRef67(null);
|
|
46295
46341
|
const fallbackStream = useCallback48(async function* () {
|
|
46296
46342
|
throw new Error(
|
|
46297
46343
|
"[useSSE] No streamFn provided and `useMock: true` is no longer wired into the lib. Supply a `streamFn` (see `createDocStreamFn` in use-embedded-chat) or migrate the mock to your host code."
|
|
@@ -46359,8 +46405,8 @@ function useChat({
|
|
|
46359
46405
|
} = {}) {
|
|
46360
46406
|
const [messages, setMessages] = useState108(() => initialMessages ?? []);
|
|
46361
46407
|
const [isTyping, setIsTyping] = useState108(false);
|
|
46362
|
-
const currentAssistantSegmentsRef =
|
|
46363
|
-
const onMessagesChangeRef =
|
|
46408
|
+
const currentAssistantSegmentsRef = useRef68([]);
|
|
46409
|
+
const onMessagesChangeRef = useRef68(onMessagesChange);
|
|
46364
46410
|
onMessagesChangeRef.current = onMessagesChange;
|
|
46365
46411
|
useEffect82(() => {
|
|
46366
46412
|
onMessagesChangeRef.current?.(messages);
|
|
@@ -46651,7 +46697,7 @@ function useChat({
|
|
|
46651
46697
|
}
|
|
46652
46698
|
|
|
46653
46699
|
// src/components/chat/hooks/use-sse-chat-adapter.ts
|
|
46654
|
-
import { useState as useState109, useEffect as useEffect83, useCallback as useCallback50, useMemo as
|
|
46700
|
+
import { useState as useState109, useEffect as useEffect83, useCallback as useCallback50, useMemo as useMemo41, useRef as useRef69 } from "react";
|
|
46655
46701
|
function createEmptyTurnMeta() {
|
|
46656
46702
|
return {
|
|
46657
46703
|
provider: null,
|
|
@@ -46972,24 +47018,24 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
46972
47018
|
const runtime = useRequiredChatRuntime();
|
|
46973
47019
|
const source = runtime.source || DEFAULT_CHAT_SOURCE;
|
|
46974
47020
|
const tableIdForDocumentType = options?.tableIdForDocumentType ?? defaultTableIdForDocumentType;
|
|
46975
|
-
const persistedRef =
|
|
47021
|
+
const persistedRef = useRef69(null);
|
|
46976
47022
|
if (persistedRef.current === null) {
|
|
46977
47023
|
pruneStaleChatStorage(source);
|
|
46978
47024
|
persistedRef.current = loadPersistedChat(source) || { messages: [], sources: [], sendCount: 0 };
|
|
46979
47025
|
}
|
|
46980
|
-
const sourcesMapRef =
|
|
47026
|
+
const sourcesMapRef = useRef69(
|
|
46981
47027
|
new Map(persistedRef.current.sources)
|
|
46982
47028
|
);
|
|
46983
|
-
const refsMapRef =
|
|
47029
|
+
const refsMapRef = useRef69(
|
|
46984
47030
|
new Map(persistedRef.current.refs ?? [])
|
|
46985
47031
|
);
|
|
46986
|
-
const metaMapRef =
|
|
46987
|
-
const messagesRef =
|
|
46988
|
-
const sendCountRef =
|
|
47032
|
+
const metaMapRef = useRef69(/* @__PURE__ */ new Map());
|
|
47033
|
+
const messagesRef = useRef69(persistedRef.current.messages);
|
|
47034
|
+
const sendCountRef = useRef69(persistedRef.current.sendCount);
|
|
46989
47035
|
const [streamingPhase, setStreamingPhase] = useState109("idle");
|
|
46990
47036
|
const [metaTick, setMetaTick] = useState109(0);
|
|
46991
47037
|
const bumpMetaTick = useCallback50(() => setMetaTick((t) => t + 1), []);
|
|
46992
|
-
const streamFn =
|
|
47038
|
+
const streamFn = useMemo41(
|
|
46993
47039
|
() => createDocStreamFn(
|
|
46994
47040
|
source,
|
|
46995
47041
|
{
|
|
@@ -47015,7 +47061,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
47015
47061
|
const { commands: slashCommands } = useSlashCommandRegistry(commandsUrl, {
|
|
47016
47062
|
enabled: active
|
|
47017
47063
|
});
|
|
47018
|
-
const cmdIdByTableId =
|
|
47064
|
+
const cmdIdByTableId = useMemo41(() => {
|
|
47019
47065
|
const buckets = /* @__PURE__ */ new Map();
|
|
47020
47066
|
for (const cmd of slashCommands) {
|
|
47021
47067
|
if (!cmd.primarySourceId) continue;
|
|
@@ -47180,7 +47226,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
|
|
|
47180
47226
|
setStreamingPhase("idle");
|
|
47181
47227
|
}
|
|
47182
47228
|
}, [isTyping, isStreaming, streamingPhase]);
|
|
47183
|
-
const latestMeta =
|
|
47229
|
+
const latestMeta = useMemo41(
|
|
47184
47230
|
() => metaMapRef.current.get(sendCountRef.current - 1) ?? metaMapRef.current.get(sendCountRef.current - 2) ?? null,
|
|
47185
47231
|
[metaTick, streamingPhase]
|
|
47186
47232
|
);
|
|
@@ -47258,8 +47304,8 @@ var noopRejectRequest = async (_id, _reason) => {
|
|
|
47258
47304
|
import {
|
|
47259
47305
|
useCallback as useCallback51,
|
|
47260
47306
|
useEffect as useEffect84,
|
|
47261
|
-
useMemo as
|
|
47262
|
-
useRef as
|
|
47307
|
+
useMemo as useMemo42,
|
|
47308
|
+
useRef as useRef70,
|
|
47263
47309
|
useState as useState110
|
|
47264
47310
|
} from "react";
|
|
47265
47311
|
|
|
@@ -47801,9 +47847,9 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
47801
47847
|
},
|
|
47802
47848
|
[rejectRequestCallback]
|
|
47803
47849
|
);
|
|
47804
|
-
const handleApproveRef =
|
|
47850
|
+
const handleApproveRef = useRef70(handleApprove);
|
|
47805
47851
|
handleApproveRef.current = handleApprove;
|
|
47806
|
-
const handleRejectRef =
|
|
47852
|
+
const handleRejectRef = useRef70(handleReject);
|
|
47807
47853
|
handleRejectRef.current = handleReject;
|
|
47808
47854
|
const accumApprove = useCallback51((requestId) => {
|
|
47809
47855
|
if (!requestId) return;
|
|
@@ -47813,7 +47859,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
47813
47859
|
if (!requestId) return;
|
|
47814
47860
|
return handleRejectRef.current(requestId);
|
|
47815
47861
|
}, []);
|
|
47816
|
-
const callbacksRef =
|
|
47862
|
+
const callbacksRef = useRef70({
|
|
47817
47863
|
onSegmentsUpdate: (segments) => {
|
|
47818
47864
|
setMessages((prev) => updateTrailingAssistant(prev, segments));
|
|
47819
47865
|
},
|
|
@@ -47851,7 +47897,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
47851
47897
|
onChunkReceived: (chunk) => processChunk(chunk),
|
|
47852
47898
|
fetchChunks
|
|
47853
47899
|
});
|
|
47854
|
-
const historyLoadSeqRef =
|
|
47900
|
+
const historyLoadSeqRef = useRef70(0);
|
|
47855
47901
|
const loadDialogHistory = useCallback51(
|
|
47856
47902
|
async (id, cursor) => {
|
|
47857
47903
|
if (!fetchDialogMessages) return;
|
|
@@ -47906,7 +47952,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
47906
47952
|
accumReject
|
|
47907
47953
|
]
|
|
47908
47954
|
);
|
|
47909
|
-
const prevDialogIdRef =
|
|
47955
|
+
const prevDialogIdRef = useRef70(void 0);
|
|
47910
47956
|
useEffect84(() => {
|
|
47911
47957
|
if (prevDialogIdRef.current === dialogId) return;
|
|
47912
47958
|
prevDialogIdRef.current = dialogId;
|
|
@@ -47950,7 +47996,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
47950
47996
|
}
|
|
47951
47997
|
setConnectionState("connecting");
|
|
47952
47998
|
}, [active, dialogId]);
|
|
47953
|
-
const initialDialogsLoadedRef =
|
|
47999
|
+
const initialDialogsLoadedRef = useRef70(false);
|
|
47954
48000
|
const loadDialogsPage = useCallback51(
|
|
47955
48001
|
async (cursor) => {
|
|
47956
48002
|
if (!fetchDialogs) return;
|
|
@@ -48140,7 +48186,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
48140
48186
|
const isLoading = streamingPhase !== "idle";
|
|
48141
48187
|
const hasMoreDialogs = dialogsNextCursor != null;
|
|
48142
48188
|
const hasMoreMessages = messagesNextCursor != null;
|
|
48143
|
-
return
|
|
48189
|
+
return useMemo42(
|
|
48144
48190
|
() => ({
|
|
48145
48191
|
messages,
|
|
48146
48192
|
isLoading,
|
|
@@ -48223,7 +48269,7 @@ function useNatsChatAdapter(config, options = {}) {
|
|
|
48223
48269
|
}
|
|
48224
48270
|
|
|
48225
48271
|
// src/components/chat/hooks/use-unified-chat.ts
|
|
48226
|
-
import { useCallback as useCallback52, useMemo as
|
|
48272
|
+
import { useCallback as useCallback52, useMemo as useMemo43, useRef as useRef71 } from "react";
|
|
48227
48273
|
var EMPTY_SSE_OPTIONS = {};
|
|
48228
48274
|
function createDisabledNatsConfig() {
|
|
48229
48275
|
return {
|
|
@@ -48238,7 +48284,7 @@ function createDisabledNatsConfig() {
|
|
|
48238
48284
|
}
|
|
48239
48285
|
function useUnifiedChat(options) {
|
|
48240
48286
|
const { modes, activeMode, mingoStateOverride } = options;
|
|
48241
|
-
const disabledNatsRef =
|
|
48287
|
+
const disabledNatsRef = useRef71(null);
|
|
48242
48288
|
if (disabledNatsRef.current === null) {
|
|
48243
48289
|
disabledNatsRef.current = createDisabledNatsConfig();
|
|
48244
48290
|
}
|
|
@@ -48252,7 +48298,7 @@ function useUnifiedChat(options) {
|
|
|
48252
48298
|
{ active: natsActive }
|
|
48253
48299
|
);
|
|
48254
48300
|
const activeState = activeMode === "guide" ? sseState : mingoStateOverride ?? natsState;
|
|
48255
|
-
const activeStateRef =
|
|
48301
|
+
const activeStateRef = useRef71(activeState);
|
|
48256
48302
|
activeStateRef.current = activeState;
|
|
48257
48303
|
const stopMessage = useCallback52(() => activeStateRef.current.stopMessage(), []);
|
|
48258
48304
|
const clearMessages = useCallback52(
|
|
@@ -48311,7 +48357,7 @@ function useUnifiedChat(options) {
|
|
|
48311
48357
|
(requestId, reason) => activeStateRef.current.rejectRequest(requestId, reason),
|
|
48312
48358
|
[]
|
|
48313
48359
|
);
|
|
48314
|
-
return
|
|
48360
|
+
return useMemo43(
|
|
48315
48361
|
() => ({
|
|
48316
48362
|
messages: activeState.messages,
|
|
48317
48363
|
isLoading: activeState.isLoading,
|
|
@@ -48562,7 +48608,7 @@ function chatChipClass({ tone, density = "chip", extra }) {
|
|
|
48562
48608
|
}
|
|
48563
48609
|
|
|
48564
48610
|
// src/components/chat/embeddable-chat.tsx
|
|
48565
|
-
import { useCallback as useCallback54, useEffect as useEffect85, useMemo as
|
|
48611
|
+
import { useCallback as useCallback54, useEffect as useEffect85, useMemo as useMemo45, useRef as useRef72, useState as useState112 } from "react";
|
|
48566
48612
|
import * as DialogPrimitive4 from "@radix-ui/react-dialog";
|
|
48567
48613
|
import { usePreventScroll } from "@react-aria/overlays";
|
|
48568
48614
|
import { isIOS } from "@react-aria/utils";
|
|
@@ -48643,7 +48689,7 @@ init_button2();
|
|
|
48643
48689
|
import { FileText as FileText8, MessageSquare as MessageSquare3 } from "lucide-react";
|
|
48644
48690
|
|
|
48645
48691
|
// src/components/chat/hooks/use-chat-dialog-manager.ts
|
|
48646
|
-
import { useCallback as useCallback53, useMemo as
|
|
48692
|
+
import { useCallback as useCallback53, useMemo as useMemo44, useState as useState111 } from "react";
|
|
48647
48693
|
function useChatDialogManager({
|
|
48648
48694
|
dialogs,
|
|
48649
48695
|
activeDialogId,
|
|
@@ -48752,7 +48798,7 @@ function useChatDialogManager({
|
|
|
48752
48798
|
clearMessages();
|
|
48753
48799
|
if (wasArchived) setArchiveOpen(true);
|
|
48754
48800
|
}, [isViewingArchived, selectDialog, clearMessages]);
|
|
48755
|
-
const activeDialog =
|
|
48801
|
+
const activeDialog = useMemo44(
|
|
48756
48802
|
() => dialogs.find((d) => d.id === activeDialogId) ?? archivedDialogs.find((d) => d.id === activeDialogId),
|
|
48757
48803
|
[dialogs, archivedDialogs, activeDialogId]
|
|
48758
48804
|
);
|
|
@@ -49107,7 +49153,7 @@ function EmbeddableChatInner({
|
|
|
49107
49153
|
return !window.matchMedia("(pointer: coarse)").matches;
|
|
49108
49154
|
});
|
|
49109
49155
|
usePreventScroll({ isDisabled: !isOpen || shellLess });
|
|
49110
|
-
const navigatingAwayRef =
|
|
49156
|
+
const navigatingAwayRef = useRef72(false);
|
|
49111
49157
|
useEffect85(() => {
|
|
49112
49158
|
if (!isOpen) return;
|
|
49113
49159
|
if (shellLess) return;
|
|
@@ -49134,9 +49180,9 @@ function EmbeddableChatInner({
|
|
|
49134
49180
|
window.scrollTo(0, scrollY);
|
|
49135
49181
|
};
|
|
49136
49182
|
}, [isOpen, shellLess]);
|
|
49137
|
-
const chatInputRef =
|
|
49183
|
+
const chatInputRef = useRef72(null);
|
|
49138
49184
|
const [quickActionPreview, setQuickActionPreview] = useState112(null);
|
|
49139
|
-
const slashCommandsProp =
|
|
49185
|
+
const slashCommandsProp = useMemo45(
|
|
49140
49186
|
() => ({
|
|
49141
49187
|
fetchCommands: (prefix, signal) => fetchSlashCommands(prefix, signal, commandsUrl),
|
|
49142
49188
|
resolveSourceIcon: (sourceId) => {
|
|
@@ -49151,12 +49197,12 @@ function EmbeddableChatInner({
|
|
|
49151
49197
|
[commandsUrl]
|
|
49152
49198
|
);
|
|
49153
49199
|
const userName = identityUser?.firstName?.trim() || identityUser?.name?.split(" ")[0]?.trim() || void 0;
|
|
49154
|
-
const effectiveModes =
|
|
49200
|
+
const effectiveModes = useMemo45(() => {
|
|
49155
49201
|
if (modes) return modes;
|
|
49156
49202
|
const guideOptions = tableIdForDocumentType ? { tableIdForDocumentType } : {};
|
|
49157
49203
|
return { guide: guideOptions };
|
|
49158
49204
|
}, [modes, tableIdForDocumentType]);
|
|
49159
|
-
const mingoCaps =
|
|
49205
|
+
const mingoCaps = useMemo45(() => {
|
|
49160
49206
|
if (mingoState) {
|
|
49161
49207
|
return {
|
|
49162
49208
|
canRename: mingoDialogCapabilities?.canRename ?? false,
|
|
@@ -49190,7 +49236,7 @@ function EmbeddableChatInner({
|
|
|
49190
49236
|
[controlledActiveMode, onActiveModeChange]
|
|
49191
49237
|
);
|
|
49192
49238
|
const { commands: commandsList, loaded: commandsLoaded } = useSlashCommandRegistry(commandsUrl, { enabled: activeMode === "guide" });
|
|
49193
|
-
const commandsById =
|
|
49239
|
+
const commandsById = useMemo45(() => {
|
|
49194
49240
|
const map = /* @__PURE__ */ new Map();
|
|
49195
49241
|
for (const cmd of commandsList) map.set(cmd.id, cmd);
|
|
49196
49242
|
return map;
|
|
@@ -49238,7 +49284,7 @@ function EmbeddableChatInner({
|
|
|
49238
49284
|
hasMoreMessages,
|
|
49239
49285
|
loadMoreMessages
|
|
49240
49286
|
} = useUnifiedChat({ modes: effectiveModes, activeMode, mingoStateOverride: mingoState });
|
|
49241
|
-
const guidePromptSentRef =
|
|
49287
|
+
const guidePromptSentRef = useRef72(false);
|
|
49242
49288
|
useEffect85(() => {
|
|
49243
49289
|
if (!guidePendingPrompt) {
|
|
49244
49290
|
guidePromptSentRef.current = false;
|
|
@@ -49263,23 +49309,23 @@ function EmbeddableChatInner({
|
|
|
49263
49309
|
const [contextItems, setContextItems] = useState112([]);
|
|
49264
49310
|
const [contextPickerOpen, setContextPickerOpen] = useState112(false);
|
|
49265
49311
|
const [mentionQuery, setMentionQuery] = useState112(null);
|
|
49266
|
-
const mentionActiveRef =
|
|
49312
|
+
const mentionActiveRef = useRef72(false);
|
|
49267
49313
|
useEffect85(() => {
|
|
49268
49314
|
mentionActiveRef.current = mentionQuery !== null;
|
|
49269
49315
|
}, [mentionQuery]);
|
|
49270
|
-
const mentionKeysRef =
|
|
49316
|
+
const mentionKeysRef = useRef72(/* @__PURE__ */ new Set());
|
|
49271
49317
|
useEffect85(() => {
|
|
49272
49318
|
setContextItems([]);
|
|
49273
49319
|
setMentionQuery(null);
|
|
49274
49320
|
mentionKeysRef.current.clear();
|
|
49275
49321
|
}, [activeDialogId, activeMode]);
|
|
49276
|
-
const mentionMarkerByType =
|
|
49322
|
+
const mentionMarkerByType = useMemo45(() => {
|
|
49277
49323
|
const m = /* @__PURE__ */ new Map();
|
|
49278
49324
|
for (const t of contextPicker?.entityTypes ?? []) if (t.marker) m.set(t.type, t.marker);
|
|
49279
49325
|
return m;
|
|
49280
49326
|
}, [contextPicker?.entityTypes]);
|
|
49281
49327
|
const contextEntityTypes = contextPicker?.entityTypes;
|
|
49282
|
-
const resolveContextIcon =
|
|
49328
|
+
const resolveContextIcon = useMemo45(() => {
|
|
49283
49329
|
const byType = /* @__PURE__ */ new Map();
|
|
49284
49330
|
for (const t of contextEntityTypes ?? []) byType.set(t.type, t.icon);
|
|
49285
49331
|
return (item) => byType.get(item.type);
|
|
@@ -49346,7 +49392,7 @@ function EmbeddableChatInner({
|
|
|
49346
49392
|
navigatingAwayRef.current = true;
|
|
49347
49393
|
setIsOpen(false);
|
|
49348
49394
|
}, [setIsOpen]);
|
|
49349
|
-
const chatPanelHandle =
|
|
49395
|
+
const chatPanelHandle = useMemo45(
|
|
49350
49396
|
() => ({ closeChat: handleNavigationClose }),
|
|
49351
49397
|
[handleNavigationClose]
|
|
49352
49398
|
);
|
|
@@ -49360,14 +49406,14 @@ function EmbeddableChatInner({
|
|
|
49360
49406
|
}),
|
|
49361
49407
|
[discussRef, displayRef, resolvedBaseRoute, chipBasePlatform, extras]
|
|
49362
49408
|
);
|
|
49363
|
-
const mingoAssistantIcon =
|
|
49409
|
+
const mingoAssistantIcon = useMemo45(
|
|
49364
49410
|
() => /* @__PURE__ */ jsx336(MingoIcon, { className: "h-6 w-6", cornerColor: "var(--ods-flamingo-cyan-base)" }),
|
|
49365
49411
|
[]
|
|
49366
49412
|
);
|
|
49367
|
-
const timestampCacheRef =
|
|
49413
|
+
const timestampCacheRef = useRef72(/* @__PURE__ */ new Map());
|
|
49368
49414
|
const guideUserName = activeMode === "guide" ? [identityUser?.firstName, identityUser?.lastName].filter(Boolean).join(" ").trim() || identityUser?.name?.trim() || void 0 : void 0;
|
|
49369
49415
|
const guideUserAvatar = activeMode === "guide" ? identityUser?.avatarUrl?.trim() || void 0 : void 0;
|
|
49370
|
-
const messages =
|
|
49416
|
+
const messages = useMemo45(() => {
|
|
49371
49417
|
const cache = timestampCacheRef.current;
|
|
49372
49418
|
const seenIds = /* @__PURE__ */ new Set();
|
|
49373
49419
|
const mapped = rawMessages.map((m) => {
|
|
@@ -49427,7 +49473,7 @@ function EmbeddableChatInner({
|
|
|
49427
49473
|
},
|
|
49428
49474
|
[sendMessage, readyAttachments, viewUrlPrefix, clearAttachments, contextItems]
|
|
49429
49475
|
);
|
|
49430
|
-
const guideSuggestedActions =
|
|
49476
|
+
const guideSuggestedActions = useMemo45(
|
|
49431
49477
|
() => {
|
|
49432
49478
|
if (effectiveQuickActions.length > 0) {
|
|
49433
49479
|
return effectiveQuickActions.map((qa) => ({
|
|
@@ -49512,11 +49558,11 @@ function EmbeddableChatInner({
|
|
|
49512
49558
|
}, [isQuickActionEmpty]);
|
|
49513
49559
|
const guideCanReturnToMingo = isGuideEmpty && hasMingoMode;
|
|
49514
49560
|
const sourceLabel = source === "flamingo" ? "Knowledge Base" : "Data Room";
|
|
49515
|
-
const enabledSet =
|
|
49561
|
+
const enabledSet = useMemo45(
|
|
49516
49562
|
() => effectiveEnabledRagTableIds ? new Set(effectiveEnabledRagTableIds) : null,
|
|
49517
49563
|
[effectiveEnabledRagTableIds]
|
|
49518
49564
|
);
|
|
49519
|
-
const chipCommands =
|
|
49565
|
+
const chipCommands = useMemo45(() => {
|
|
49520
49566
|
const out = [];
|
|
49521
49567
|
for (const cmd of commandsById.values()) {
|
|
49522
49568
|
if (cmd.displayOrder === void 0) continue;
|
|
@@ -49533,7 +49579,7 @@ function EmbeddableChatInner({
|
|
|
49533
49579
|
return out;
|
|
49534
49580
|
}, [commandsById, enabledSet]);
|
|
49535
49581
|
const lastAssistantMsg = [...rawMessages].reverse().find((m) => m.role === "assistant");
|
|
49536
|
-
const lastSources =
|
|
49582
|
+
const lastSources = useMemo45(() => {
|
|
49537
49583
|
if (chatLoading) return void 0;
|
|
49538
49584
|
const sources = lastAssistantMsg?.sources;
|
|
49539
49585
|
if (!sources || sources.length === 0) return void 0;
|
|
@@ -50139,6 +50185,8 @@ export {
|
|
|
50139
50185
|
SimpleMarkdownRenderer,
|
|
50140
50186
|
ThinkingDisplay,
|
|
50141
50187
|
ErrorMessageDisplay,
|
|
50188
|
+
MspOrganizationCard,
|
|
50189
|
+
MspOrganizationCardSkeleton,
|
|
50142
50190
|
ChatContainer,
|
|
50143
50191
|
ChatHeader,
|
|
50144
50192
|
ChatContent,
|
|
@@ -50204,8 +50252,6 @@ export {
|
|
|
50204
50252
|
MingoChatHistory,
|
|
50205
50253
|
MingoWelcome,
|
|
50206
50254
|
GuideWelcome,
|
|
50207
|
-
MspOrganizationCard,
|
|
50208
|
-
MspOrganizationCardSkeleton,
|
|
50209
50255
|
TooltipProvider,
|
|
50210
50256
|
Tooltip,
|
|
50211
50257
|
TooltipTrigger,
|
|
@@ -50800,4 +50846,4 @@ export {
|
|
|
50800
50846
|
LogsList,
|
|
50801
50847
|
assets
|
|
50802
50848
|
};
|
|
50803
|
-
//# sourceMappingURL=chunk-
|
|
50849
|
+
//# sourceMappingURL=chunk-3FZIYSPL.js.map
|