@inkeep/agents-ui 0.0.0-dev-20260317194422 → 0.0.0-dev-20260324034925
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/primitives/atoms/dialog.cjs +1 -1
- package/dist/primitives/atoms/dialog.js +36 -35
- package/dist/primitives/components/embedded-chat/use-inkeep-chat.cjs +2 -2
- package/dist/primitives/components/embedded-chat/use-inkeep-chat.js +156 -145
- package/dist/primitives/providers/base-events-provider.cjs +1 -1
- package/dist/primitives/providers/base-events-provider.js +1 -1
- package/dist/types/events.d.ts +8 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),P=require("react"),m=require("@radix-ui/primitive"),O=require("@radix-ui/react-compose-refs"),H=require("@radix-ui/react-context"),R=require("@radix-ui/react-id"),W=require("@radix-ui/react-use-controllable-state"),z=require("@radix-ui/react-dismissable-layer"),B=require("@zag-js/focus-trap"),K=require("@radix-ui/react-portal"),_=require("@radix-ui/react-presence"),g=require("@radix-ui/react-primitive"),U=require("@radix-ui/react-focus-guards"),V=require("aria-hidden"),Y=require("@zag-js/remove-scroll"),$=require("./shadow/context.cjs");function J(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const s=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(n,o,s.get?s:{enumerable:!0,get:()=>e[o]})}}return n.default=e,Object.freeze(n)}const c=J(P),x="Dialog",[w,Q]=H.createContextScope(x),[X,l]=w(x),y=e=>{const{__scopeDialog:n,children:o,open:s,defaultOpen:r,onOpenChange:t,modal:a=!0}=e,u=c.useRef(null),f=c.useRef(null),[D=!1,d]=W.useControllableState({prop:s,defaultProp:r??!1,onChange:t});return i.jsx(X,{scope:n,triggerRef:u,contentRef:f,contentId:R.useId(),titleId:R.useId(),descriptionId:R.useId(),open:D,onOpenChange:d,onOpenToggle:c.useCallback(()=>d(N=>!N),[d]),modal:a,children:o})};y.displayName=x;const M="DialogTrigger",q=c.forwardRef((e,n)=>{const{__scopeDialog:o,...s}=e,r=l(M,o),t=O.useComposedRefs(n,r.triggerRef);return i.jsx(g.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":T(r.open),...s,ref:t,onClick:m.composeEventHandlers(e.onClick,r.onOpenToggle)})});q.displayName=M;const v="DialogPortal",[Z,S]=w(v,{forceMount:void 0}),E=e=>{const{__scopeDialog:n,forceMount:o,children:s,container:r}=e,t=l(v,n);return i.jsx(Z,{scope:n,forceMount:o,children:c.Children.map(s,a=>i.jsx(_.Presence,{present:o||t.open,children:i.jsx(K.Portal,{asChild:!0,container:r,children:a})}))})};E.displayName=v;const C="DialogOverlay",I=c.forwardRef((e,n)=>{const o=S(C,e.__scopeDialog),{forceMount:s=o.forceMount,...r}=e,t=l(C,e.__scopeDialog);return t.modal?i.jsx(_.Presence,{present:s||t.open,children:i.jsx(ee,{...r,ref:n})}):null});I.displayName=C;const ee=c.forwardRef((e,n)=>{const{__scopeDialog:o,...s}=e,r=l(C,o),t=$.useShadow();return P.useEffect(()=>{t
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),P=require("react"),m=require("@radix-ui/primitive"),O=require("@radix-ui/react-compose-refs"),H=require("@radix-ui/react-context"),R=require("@radix-ui/react-id"),W=require("@radix-ui/react-use-controllable-state"),z=require("@radix-ui/react-dismissable-layer"),B=require("@zag-js/focus-trap"),K=require("@radix-ui/react-portal"),_=require("@radix-ui/react-presence"),g=require("@radix-ui/react-primitive"),U=require("@radix-ui/react-focus-guards"),V=require("aria-hidden"),Y=require("@zag-js/remove-scroll"),$=require("./shadow/context.cjs");function J(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const s=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(n,o,s.get?s:{enumerable:!0,get:()=>e[o]})}}return n.default=e,Object.freeze(n)}const c=J(P),x="Dialog",[w,Q]=H.createContextScope(x),[X,l]=w(x),y=e=>{const{__scopeDialog:n,children:o,open:s,defaultOpen:r,onOpenChange:t,modal:a=!0}=e,u=c.useRef(null),f=c.useRef(null),[D=!1,d]=W.useControllableState({prop:s,defaultProp:r??!1,onChange:t});return i.jsx(X,{scope:n,triggerRef:u,contentRef:f,contentId:R.useId(),titleId:R.useId(),descriptionId:R.useId(),open:D,onOpenChange:d,onOpenToggle:c.useCallback(()=>d(N=>!N),[d]),modal:a,children:o})};y.displayName=x;const M="DialogTrigger",q=c.forwardRef((e,n)=>{const{__scopeDialog:o,...s}=e,r=l(M,o),t=O.useComposedRefs(n,r.triggerRef);return i.jsx(g.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":T(r.open),...s,ref:t,onClick:m.composeEventHandlers(e.onClick,r.onOpenToggle)})});q.displayName=M;const v="DialogPortal",[Z,S]=w(v,{forceMount:void 0}),E=e=>{const{__scopeDialog:n,forceMount:o,children:s,container:r}=e,t=l(v,n);return i.jsx(Z,{scope:n,forceMount:o,children:c.Children.map(s,a=>i.jsx(_.Presence,{present:o||t.open,children:i.jsx(K.Portal,{asChild:!0,container:r,children:a})}))})};E.displayName=v;const C="DialogOverlay",I=c.forwardRef((e,n)=>{const o=S(C,e.__scopeDialog),{forceMount:s=o.forceMount,...r}=e,t=l(C,e.__scopeDialog);return t.modal?i.jsx(_.Presence,{present:s||t.open,children:i.jsx(ee,{...r,ref:n})}):null});I.displayName=C;const ee=c.forwardRef((e,n)=>{const{__scopeDialog:o,...s}=e,r=l(C,o),t=$.useShadow();return P.useEffect(()=>{const a=t?.rootElement?.ownerDocument??document;return Y.preventBodyScroll(a)},[t]),i.jsx(g.Primitive.div,{"data-state":T(r.open),...s,ref:n,style:{pointerEvents:"auto",...s.style}})}),p="DialogContent",h=c.forwardRef((e,n)=>{const o=S(p,e.__scopeDialog),{forceMount:s=o.forceMount,...r}=e,t=l(p,e.__scopeDialog);return i.jsx(_.Presence,{present:s||t.open,children:t.modal?i.jsx(te,{...r,ref:n}):i.jsx(oe,{...r,ref:n})})});h.displayName=p;const te=c.forwardRef((e,n)=>{const o=l(p,e.__scopeDialog),s=c.useRef(null),r=O.useComposedRefs(n,o.contentRef,s);return c.useEffect(()=>{const t=s.current;if(t){const a=document.querySelectorAll("[data-ikp-component]");return V.hideOthers([t,...Array.from(a)])}},[]),i.jsx(k,{...e,ref:r,trapFocus:o.open,disableOutsidePointerEvents:!0,onPointerDownOutside:m.composeEventHandlers(e.onPointerDownOutside,t=>{const a=t.detail.originalEvent,u=a.button===0&&a.ctrlKey===!0;(a.button===2||u)&&t.preventDefault(),t.target.closest("[data-ikp-component]")&&t.preventDefault()}),onFocusOutside:m.composeEventHandlers(e.onFocusOutside,t=>t.preventDefault())})}),oe=c.forwardRef((e,n)=>{const o=l(p,e.__scopeDialog),s=c.useRef(!1),r=c.useRef(!1);return i.jsx(k,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(s.current=!0,t.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const a=t.target;o.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type==="focusin"&&r.current&&t.preventDefault()}})}),k=c.forwardRef((e,n)=>{const{__scopeDialog:o,trapFocus:s,onOpenAutoFocus:r,onCloseAutoFocus:t,...a}=e,u=l(p,o),f=c.useRef(null),D=O.useComposedRefs(n,f);return U.useFocusGuards(),P.useEffect(()=>{if(s)return B.trapFocus(f.current,{preventScroll:!0,onActivate:r,onDeactivate:t,initialFocus:!1,allowOutsideClick:d=>!!d.target.closest("[data-ikp-component]")})},[]),i.jsx(z.DismissableLayer,{role:"dialog",id:u.contentId,"aria-describedby":u.descriptionId,"aria-labelledby":u.titleId,"data-state":T(u.open),...a,ref:D,onDismiss:()=>u.onOpenChange(!1)})}),A="DialogTitle",b=c.forwardRef((e,n)=>{const{__scopeDialog:o,...s}=e,r=l(A,o);return i.jsx(g.Primitive.h2,{id:r.titleId,...s,ref:n})});b.displayName=A;const F="DialogDescription",L=c.forwardRef((e,n)=>{const{__scopeDialog:o,...s}=e,r=l(F,o);return i.jsx(g.Primitive.p,{id:r.descriptionId,...s,ref:n})});L.displayName=F;const G="DialogClose",j=c.forwardRef((e,n)=>{const{__scopeDialog:o,...s}=e,r=l(G,o);return i.jsx(g.Primitive.button,{type:"button",...s,ref:n,onClick:m.composeEventHandlers(e.onClick,()=>r.onOpenChange(!1))})});j.displayName=G;function T(e){return e?"open":"closed"}const ne=y,re=E,se=I,ce=h,ie=b,ae=j;exports.Close=ae;exports.Content=ce;exports.Dialog=y;exports.DialogClose=j;exports.DialogContent=h;exports.DialogDescription=L;exports.DialogOverlay=I;exports.DialogPortal=E;exports.DialogTitle=b;exports.DialogTrigger=q;exports.Overlay=se;exports.Portal=re;exports.Root=ne;exports.Title=ie;exports.createDialogScope=Q;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as
|
|
3
|
-
import * as
|
|
2
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
3
|
+
import * as c from "react";
|
|
4
4
|
import { useEffect as I } from "react";
|
|
5
5
|
import { composeEventHandlers as D } from "@radix-ui/primitive";
|
|
6
6
|
import { useComposedRefs as _ } from "@radix-ui/react-compose-refs";
|
|
@@ -17,12 +17,12 @@ import { hideOthers as K } from "aria-hidden";
|
|
|
17
17
|
import { preventBodyScroll as V } from "@zag-js/remove-scroll";
|
|
18
18
|
import { useShadow as Y } from "./shadow/context.js";
|
|
19
19
|
const P = "Dialog", [v, Ct] = W(P), [z, l] = v(P), x = (t) => {
|
|
20
|
-
const { __scopeDialog: n, children: r, open: s, defaultOpen: e, onOpenChange: o, modal: a = !0 } = t, p =
|
|
20
|
+
const { __scopeDialog: n, children: r, open: s, defaultOpen: e, onOpenChange: o, modal: a = !0 } = t, p = c.useRef(null), d = c.useRef(null), [m = !1, u] = $({
|
|
21
21
|
prop: s,
|
|
22
22
|
defaultProp: e ?? !1,
|
|
23
23
|
onChange: o
|
|
24
24
|
});
|
|
25
|
-
return /* @__PURE__ */
|
|
25
|
+
return /* @__PURE__ */ i(
|
|
26
26
|
z,
|
|
27
27
|
{
|
|
28
28
|
scope: n,
|
|
@@ -32,18 +32,18 @@ const P = "Dialog", [v, Ct] = W(P), [z, l] = v(P), x = (t) => {
|
|
|
32
32
|
titleId: R(),
|
|
33
33
|
descriptionId: R(),
|
|
34
34
|
open: m,
|
|
35
|
-
onOpenChange:
|
|
36
|
-
onOpenToggle:
|
|
35
|
+
onOpenChange: u,
|
|
36
|
+
onOpenToggle: c.useCallback(() => u((E) => !E), [u]),
|
|
37
37
|
modal: a,
|
|
38
38
|
children: r
|
|
39
39
|
}
|
|
40
40
|
);
|
|
41
41
|
};
|
|
42
42
|
x.displayName = P;
|
|
43
|
-
const N = "DialogTrigger", J =
|
|
43
|
+
const N = "DialogTrigger", J = c.forwardRef(
|
|
44
44
|
(t, n) => {
|
|
45
45
|
const { __scopeDialog: r, ...s } = t, e = l(N, r), o = _(n, e.triggerRef);
|
|
46
|
-
return /* @__PURE__ */
|
|
46
|
+
return /* @__PURE__ */ i(
|
|
47
47
|
g.button,
|
|
48
48
|
{
|
|
49
49
|
type: "button",
|
|
@@ -63,21 +63,22 @@ const y = "DialogPortal", [Q, w] = v(y, {
|
|
|
63
63
|
forceMount: void 0
|
|
64
64
|
}), T = (t) => {
|
|
65
65
|
const { __scopeDialog: n, forceMount: r, children: s, container: e } = t, o = l(y, n);
|
|
66
|
-
return /* @__PURE__ */
|
|
66
|
+
return /* @__PURE__ */ i(Q, { scope: n, forceMount: r, children: c.Children.map(s, (a) => /* @__PURE__ */ i(O, { present: r || o.open, children: /* @__PURE__ */ i(B, { asChild: !0, container: e, children: a }) })) });
|
|
67
67
|
};
|
|
68
68
|
T.displayName = y;
|
|
69
|
-
const C = "DialogOverlay", A =
|
|
69
|
+
const C = "DialogOverlay", A = c.forwardRef(
|
|
70
70
|
(t, n) => {
|
|
71
71
|
const r = w(C, t.__scopeDialog), { forceMount: s = r.forceMount, ...e } = t, o = l(C, t.__scopeDialog);
|
|
72
|
-
return o.modal ? /* @__PURE__ */
|
|
72
|
+
return o.modal ? /* @__PURE__ */ i(O, { present: s || o.open, children: /* @__PURE__ */ i(U, { ...e, ref: n }) }) : null;
|
|
73
73
|
}
|
|
74
74
|
);
|
|
75
75
|
A.displayName = C;
|
|
76
|
-
const U =
|
|
76
|
+
const U = c.forwardRef(
|
|
77
77
|
(t, n) => {
|
|
78
78
|
const { __scopeDialog: r, ...s } = t, e = l(C, r), o = Y();
|
|
79
79
|
return I(() => {
|
|
80
|
-
|
|
80
|
+
const a = o?.rootElement?.ownerDocument ?? document;
|
|
81
|
+
return V(a);
|
|
81
82
|
}, [o]), // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`
|
|
82
83
|
// ie. when `Overlay` and `Content` are siblings
|
|
83
84
|
// <RemoveScroll
|
|
@@ -87,7 +88,7 @@ const U = i.forwardRef(
|
|
|
87
88
|
// gapMode="padding"
|
|
88
89
|
// removeScrollBar={true}
|
|
89
90
|
// >
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
+
/* @__PURE__ */ i(
|
|
91
92
|
g.div,
|
|
92
93
|
{
|
|
93
94
|
"data-state": h(e.open),
|
|
@@ -97,23 +98,23 @@ const U = i.forwardRef(
|
|
|
97
98
|
}
|
|
98
99
|
);
|
|
99
100
|
}
|
|
100
|
-
),
|
|
101
|
+
), f = "DialogContent", M = c.forwardRef(
|
|
101
102
|
(t, n) => {
|
|
102
|
-
const r = w(
|
|
103
|
-
return /* @__PURE__ */
|
|
103
|
+
const r = w(f, t.__scopeDialog), { forceMount: s = r.forceMount, ...e } = t, o = l(f, t.__scopeDialog);
|
|
104
|
+
return /* @__PURE__ */ i(O, { present: s || o.open, children: o.modal ? /* @__PURE__ */ i(X, { ...e, ref: n }) : /* @__PURE__ */ i(Z, { ...e, ref: n }) });
|
|
104
105
|
}
|
|
105
106
|
);
|
|
106
|
-
M.displayName =
|
|
107
|
-
const X =
|
|
107
|
+
M.displayName = f;
|
|
108
|
+
const X = c.forwardRef(
|
|
108
109
|
(t, n) => {
|
|
109
|
-
const r = l(
|
|
110
|
-
return
|
|
110
|
+
const r = l(f, t.__scopeDialog), s = c.useRef(null), e = _(n, r.contentRef, s);
|
|
111
|
+
return c.useEffect(() => {
|
|
111
112
|
const o = s.current;
|
|
112
113
|
if (o) {
|
|
113
114
|
const a = document.querySelectorAll("[data-ikp-component]");
|
|
114
115
|
return K([o, ...Array.from(a)]);
|
|
115
116
|
}
|
|
116
|
-
}, []), /* @__PURE__ */
|
|
117
|
+
}, []), /* @__PURE__ */ i(
|
|
117
118
|
b,
|
|
118
119
|
{
|
|
119
120
|
...t,
|
|
@@ -131,10 +132,10 @@ const X = i.forwardRef(
|
|
|
131
132
|
}
|
|
132
133
|
);
|
|
133
134
|
}
|
|
134
|
-
), Z =
|
|
135
|
+
), Z = c.forwardRef(
|
|
135
136
|
(t, n) => {
|
|
136
|
-
const r = l(
|
|
137
|
-
return /* @__PURE__ */
|
|
137
|
+
const r = l(f, t.__scopeDialog), s = c.useRef(!1), e = c.useRef(!1);
|
|
138
|
+
return /* @__PURE__ */ i(
|
|
138
139
|
b,
|
|
139
140
|
{
|
|
140
141
|
...t,
|
|
@@ -149,9 +150,9 @@ const X = i.forwardRef(
|
|
|
149
150
|
}
|
|
150
151
|
);
|
|
151
152
|
}
|
|
152
|
-
), b =
|
|
153
|
+
), b = c.forwardRef(
|
|
153
154
|
(t, n) => {
|
|
154
|
-
const { __scopeDialog: r, trapFocus: s, onOpenAutoFocus: e, onCloseAutoFocus: o, ...a } = t, p = l(
|
|
155
|
+
const { __scopeDialog: r, trapFocus: s, onOpenAutoFocus: e, onCloseAutoFocus: o, ...a } = t, p = l(f, r), d = c.useRef(null), m = _(n, d);
|
|
155
156
|
return H(), I(() => {
|
|
156
157
|
if (s)
|
|
157
158
|
return q(d.current, {
|
|
@@ -159,9 +160,9 @@ const X = i.forwardRef(
|
|
|
159
160
|
onActivate: e,
|
|
160
161
|
onDeactivate: o,
|
|
161
162
|
initialFocus: !1,
|
|
162
|
-
allowOutsideClick: (
|
|
163
|
+
allowOutsideClick: (u) => !!u.target.closest("[data-ikp-component]")
|
|
163
164
|
});
|
|
164
|
-
}, []), /* @__PURE__ */
|
|
165
|
+
}, []), /* @__PURE__ */ i(
|
|
165
166
|
j,
|
|
166
167
|
{
|
|
167
168
|
role: "dialog",
|
|
@@ -175,24 +176,24 @@ const X = i.forwardRef(
|
|
|
175
176
|
}
|
|
176
177
|
);
|
|
177
178
|
}
|
|
178
|
-
), k = "DialogTitle", F =
|
|
179
|
+
), k = "DialogTitle", F = c.forwardRef(
|
|
179
180
|
(t, n) => {
|
|
180
181
|
const { __scopeDialog: r, ...s } = t, e = l(k, r);
|
|
181
|
-
return /* @__PURE__ */
|
|
182
|
+
return /* @__PURE__ */ i(g.h2, { id: e.titleId, ...s, ref: n });
|
|
182
183
|
}
|
|
183
184
|
);
|
|
184
185
|
F.displayName = k;
|
|
185
|
-
const S = "DialogDescription", tt =
|
|
186
|
+
const S = "DialogDescription", tt = c.forwardRef(
|
|
186
187
|
(t, n) => {
|
|
187
188
|
const { __scopeDialog: r, ...s } = t, e = l(S, r);
|
|
188
|
-
return /* @__PURE__ */
|
|
189
|
+
return /* @__PURE__ */ i(g.p, { id: e.descriptionId, ...s, ref: n });
|
|
189
190
|
}
|
|
190
191
|
);
|
|
191
192
|
tt.displayName = S;
|
|
192
|
-
const L = "DialogClose", G =
|
|
193
|
+
const L = "DialogClose", G = c.forwardRef(
|
|
193
194
|
(t, n) => {
|
|
194
195
|
const { __scopeDialog: r, ...s } = t, e = l(L, r);
|
|
195
|
-
return /* @__PURE__ */
|
|
196
|
+
return /* @__PURE__ */ i(
|
|
196
197
|
g.button,
|
|
197
198
|
{
|
|
198
199
|
type: "button",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ne=require("@ai-sdk/react"),Pe=require("ai"),t=require("react"),Oe=require("../modal/modal-provider.cjs"),Fe=require("../../providers/chat-bubble-provider.cjs"),Ue=require("../../providers/sidebar-chat-provider.cjs"),Be=require("../../providers/config-provider.cjs"),De=require("./use-captcha.cjs"),Le=require("../../hooks/use-media-query.cjs"),He=require("../../hooks/use-anonymous-session.cjs"),$e=require("../../hooks/use-conversation-loader.cjs"),w=require("../../utils/generate-uid.cjs"),ze=require("../../providers/base-events-provider.cjs"),We=require("../../providers/chat-form-provider.cjs"),Ke=require("../../providers/widget-provider.cjs"),je=require("@radix-ui/react-use-controllable-state"),Ge=require("../../hooks/use-streaming-events.cjs"),Je=require("../../hooks/use-inkeep-api-client.cjs");function Qe(g){const l=g.message??"";let s=Number(g.code)||Number(g.statusCode);if(Number.isNaN(s))try{s=Number(JSON.parse(l).status)}catch{}const d=Je.parseAuthError(s,{detail:l});return d!==null?d:s===401?"session":null}const $=`Hmm..
|
|
2
2
|
|
|
3
|
-
It seems I might be having some issues right now. Please clear the chat and try again.`,
|
|
3
|
+
It seems I might be having some issues right now. Please clear the chat and try again.`,Ve=()=>{const{baseSettings:g,aiChatSettings:l}=Be.useInkeepConfig(),[s="",d]=je.useControllableState({prop:l.conversationId,defaultProp:l.conversationId??""}),ue=Oe.useModal(),le=Fe.useOptionalChatBubble(),de=Ue.useOptionalSidebarChat(),{logEvent:p}=ze.useBaseEvents(),{setConversationId:pe,emitToParent:C}=Ge.useStreamingEvents(),z=t.useRef(s);t.useEffect(()=>{const e=z.current;z.current=s,e!==s&&p({eventName:"chat_conversation_changed",properties:{conversationId:s,previousConversationId:e}})},[s,p]);const[v,k]=t.useState(""),fe=e=>k(e.target.value),{shouldBypassCaptcha:W,filters:K,privacyPreferences:ge}=g,{onInputMessageChange:he,filters:j,baseUrl:S,agentUrl:me,context:G,headers:J,appId:y,apiKey:f}=l,ve=ue?.isOpen??le?.isOpen??de?.isOpen??!0,{getCaptchaHeader:b,invalidate:u}=De.useCaptcha({baseUrl:S,shouldBypassCaptcha:W||!!f,shouldMakeInitialRequest:ve}),Q=t.useRef(b);Q.current=b;const V=me||`${S}/run/api/chat`,{sessionToken:q,refreshSession:x}=He.useAnonymousSession({baseUrl:S,appId:y,getCaptchaHeader:b,invalidateCaptcha:u,optOutAllAnalytics:ge?.optOutAllAnalytics}),{loadConversation:Z}=$e.useConversationLoader({baseUrl:S,appId:y,authToken:f??q,getCaptchaHeader:b,invalidateCaptcha:u,refreshSession:f?void 0:x}),[ye,X]=t.useState(!1),R=t.useRef(null);R.current=q;const h=t.useRef(0),Y=t.useRef(null),T=t.useRef(null),ee=t.useRef(J);ee.current=J;const _=t.useRef(void 0);_.current=K||j?JSON.stringify({...K,...j}):void 0;const be=e=>{switch(e.code){case 400:return e.message;case 403:return`There seems to be a configuration error. Please contact ${g.organizationDisplayName??"Administrator"}`;default:return $}},[Ce,I]=t.useState([]),[Se,N]=t.useState(null),Re=t.useMemo(()=>new Pe.DefaultChatTransport({api:V,headers:()=>({"x-inkeep-client-timezone":Intl.DateTimeFormat().resolvedOptions().timeZone,"x-inkeep-client-timestamp":new Date().toISOString(),...y?{"x-inkeep-app-id":y}:{},...R.current?{Authorization:`Bearer ${R.current}`}:{},...f?{Authorization:`Bearer ${f}`}:{},..._.current?{"inkeep-filters":_.current}:{},...ee.current}),prepareSendMessagesRequest:async e=>{const r=await Q.current();return{body:{...e.body,id:e.id,messages:e.messages,trigger:e.trigger,messageId:e.messageId},headers:{...e.headers,...r}}},body:{requestContext:G}}),[V,G,y,f]),{messages:A,sendMessage:P,addToolApprovalResponse:O,status:te,setMessages:m,stop:se,error:F}=Ne.useChat({transport:Re,onData(e){C(e.type,e.data)},async onFinish(){C("completion",{conversationId:s}),await p({eventName:"assistant_message_received",properties:{conversationId:s}}),p({eventName:"assistant_answer_displayed",properties:{conversationId:s}})},onError(e){console.error("onError",{code:e.code,message:e.message});const r=W||f?null:Qe(e);if(r!==null&&h.current<1){h.current++;const a=T.current,n=Y.current;(async()=>{if(r==="session"){const c=await x();c&&(R.current=c)}else u();if(a){O(a);return}n&&(m(c=>{let i=[...c];return i.at(-1)?.role==="assistant"&&(i=i.slice(0,-1)),i.at(-1)?.role==="user"&&(i=i.slice(0,-1)),i}),P({text:n.content},{body:n.body}))})().catch(()=>{h.current=0,u(),m(c=>{const i=[...c],H=i[i.length-1];if(!H)return i;const ce=$;return H.role==="user"?i.push({id:w.generateUid(16),role:"assistant",parts:[{type:"text",text:ce}]}):H.parts=[{type:"text",text:ce}],i})});return}h.current=0,r!==null&&u(),p({eventName:"chat_error",properties:{conversationId:s,error:e.message}}),m(a=>{const n=[...a],o=n[n.length-1];if(o){const c=be(e);o.role==="user"?n.push({id:w.generateUid(16),role:"assistant",parts:[{type:"text",text:c}]}):o.parts=[{type:"text",text:c}]}return n})}}),re=te==="submitted",U=te==="streaming",Ie=t.useMemo(()=>{const e=o=>{if(!o||typeof o!="object")return!1;const c=o;return typeof c.type=="string"&&c.type.startsWith("tool-")},a=[...A??[]].reverse().find(o=>o.role==="assistant");if(!a)return!1;const n=a.parts?.at(-1);return!(!e(n)||n.state!=="output-available"||!n.approval?.id||U)},[A,U]),ne=U||Ie,ae=re||ne,Ae=A.length===0,B=!v.trim()||ae,Ee=Le.useMediaQuery("(max-width: 768px)"),[Me,E]=t.useState(null);t.useEffect(()=>{F&&E(F)},[F]);const we=()=>E(null),oe=t.useRef(null);t.useEffect(()=>{he?.(v)},[v]);const ke=e=>{e.key==="Enter"&&!e.shiftKey&&!B&&!e.nativeEvent.isComposing&&(e.preventDefault(),D())},D=async(e=v)=>{if(B&&(!e||e.trim().length===0))return;I([]),k(""),h.current=0,T.current=null,await p({eventName:"user_message_submitted",properties:{conversationId:s}});let r=s;r||(r=`conv_${w.generateUid(16)}`,d(r)),pe(r),Y.current={content:e,body:{conversationId:r}},P({text:e},{body:{conversationId:r}})},qe=t.useCallback(e=>{h.current=0,T.current=e,O(e)},[O]),L=t.useCallback(()=>{se().then(()=>{C("aborted",{conversationId:s})})},[se,s,C]),ie=()=>{we(),m([]),d(""),I([]),N(null),u(),p({eventName:"chat_clear_button_clicked",properties:{conversationId:s}})},M=t.useCallback((e,r)=>{E(null),m(r),d(e),I([]),N(null),u()},[m,d,u]),xe=t.useCallback(async(e,r)=>{L(),M(e,[]),X(!0);try{const a=await Z(e,r),n=a?.[a.length-1],o=a!==null&&n?.role==="user"?[...a,{id:w.generateUid(16),role:"assistant",parts:[{type:"text",text:"This session was interrupted. Please check back in a few minutes or start a new conversation."}]}]:a;o!==null&&M(e,o)}finally{r?.aborted||X(!1)}},[M,Z,L]),{openForm:Te}=We.useChatForm(),_e=Ke.useWidget();return t.useImperativeHandle(l.chatFunctionsRef,()=>({submitMessage:D,updateInputMessage(e){k(e)},clearChat:ie,openForm:e=>{_e?.setView("chat"),Te(e,void 0)},focusInput:()=>{oe.current?.focus()}})),{messages:A,sendMessage:P,addToolApprovalResponse:qe,isLoading:re,isStreaming:ne,isBusy:ae,error:Me,setError:E,isSubmitDisabled:B,input:v,handleInputChange:fe,handleInputKeyDown:ke,handleSubmit:D,stop:L,clear:ie,inputRef:oe,isMobile:Ee,messageAttachments:Ce,setMessageAttachments:I,selectedWorkflow:Se,setSelectedWorkflow:N,isNewChat:Ae,conversationId:s,restoreSession:M,loadAndRestoreSession:xe,isSessionLoading:ye,sessionToken:q,refreshSession:x,getCaptchaHeader:b,invalidateCaptcha:u}};exports.DEFAULT_ERROR_MESSAGE=$;exports.useInkeepChat=Ve;
|
|
@@ -1,97 +1,108 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useChat as
|
|
3
|
-
import { DefaultChatTransport as
|
|
4
|
-
import {
|
|
5
|
-
import { useModal as
|
|
6
|
-
import { useOptionalChatBubble as
|
|
7
|
-
import { useOptionalSidebarChat as
|
|
8
|
-
import { useInkeepConfig as
|
|
9
|
-
import { useCaptcha as
|
|
10
|
-
import { useMediaQuery as
|
|
11
|
-
import { useAnonymousSession as
|
|
12
|
-
import { useConversationLoader as
|
|
2
|
+
import { useChat as Pe } from "@ai-sdk/react";
|
|
3
|
+
import { DefaultChatTransport as He } from "ai";
|
|
4
|
+
import { useRef as l, useEffect as q, useState as C, useMemo as pe, useCallback as E, useImperativeHandle as Le } from "react";
|
|
5
|
+
import { useModal as Ue } from "../modal/modal-provider.js";
|
|
6
|
+
import { useOptionalChatBubble as $e } from "../../providers/chat-bubble-provider.js";
|
|
7
|
+
import { useOptionalSidebarChat as ze } from "../../providers/sidebar-chat-provider.js";
|
|
8
|
+
import { useInkeepConfig as We } from "../../providers/config-provider.js";
|
|
9
|
+
import { useCaptcha as qe } from "./use-captcha.js";
|
|
10
|
+
import { useMediaQuery as Ke } from "../../hooks/use-media-query.js";
|
|
11
|
+
import { useAnonymousSession as Je } from "../../hooks/use-anonymous-session.js";
|
|
12
|
+
import { useConversationLoader as je } from "../../hooks/use-conversation-loader.js";
|
|
13
13
|
import { generateUid as k } from "../../utils/generate-uid.js";
|
|
14
|
-
import { useBaseEvents as
|
|
15
|
-
import { useChatForm as
|
|
16
|
-
import { useWidget as
|
|
17
|
-
import { useControllableState as
|
|
18
|
-
import { useStreamingEvents as
|
|
19
|
-
import { parseAuthError as
|
|
20
|
-
function
|
|
21
|
-
const u =
|
|
22
|
-
let
|
|
23
|
-
if (Number.isNaN(
|
|
14
|
+
import { useBaseEvents as Ge } from "../../providers/base-events-provider.js";
|
|
15
|
+
import { useChatForm as Qe } from "../../providers/chat-form-provider.js";
|
|
16
|
+
import { useWidget as Ve } from "../../providers/widget-provider.js";
|
|
17
|
+
import { useControllableState as Ze } from "@radix-ui/react-use-controllable-state";
|
|
18
|
+
import { useStreamingEvents as Xe } from "../../hooks/use-streaming-events.js";
|
|
19
|
+
import { parseAuthError as Ye } from "../../hooks/use-inkeep-api-client.js";
|
|
20
|
+
function et(f) {
|
|
21
|
+
const u = f.message ?? "";
|
|
22
|
+
let t = Number(f.code) || Number(f.statusCode);
|
|
23
|
+
if (Number.isNaN(t))
|
|
24
24
|
try {
|
|
25
|
-
|
|
25
|
+
t = Number(JSON.parse(u).status);
|
|
26
26
|
} catch {
|
|
27
27
|
}
|
|
28
|
-
const p =
|
|
29
|
-
return p !== null ? p :
|
|
28
|
+
const p = Ye(t, { detail: u });
|
|
29
|
+
return p !== null ? p : t === 401 ? "session" : null;
|
|
30
30
|
}
|
|
31
|
-
const
|
|
31
|
+
const me = `Hmm..
|
|
32
32
|
|
|
33
|
-
It seems I might be having some issues right now. Please clear the chat and try again.`,
|
|
34
|
-
const { baseSettings:
|
|
33
|
+
It seems I might be having some issues right now. Please clear the chat and try again.`, bt = () => {
|
|
34
|
+
const { baseSettings: f, aiChatSettings: u } = We(), [t = "", p] = Ze({
|
|
35
35
|
prop: u.conversationId,
|
|
36
36
|
defaultProp: u.conversationId ?? ""
|
|
37
|
-
}),
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
}), de = Ue(), fe = $e(), ge = ze(), { logEvent: m } = Ge(), { setConversationId: he, emitToParent: S } = Xe(), K = l(t);
|
|
38
|
+
q(() => {
|
|
39
|
+
const e = K.current;
|
|
40
|
+
K.current = t, e !== t && m({
|
|
41
|
+
eventName: "chat_conversation_changed",
|
|
42
|
+
properties: {
|
|
43
|
+
conversationId: t,
|
|
44
|
+
previousConversationId: e
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}, [t, m]);
|
|
48
|
+
const [v, N] = C(""), ve = (e) => N(e.target.value), { shouldBypassCaptcha: J, filters: j, privacyPreferences: ye } = f, {
|
|
49
|
+
onInputMessageChange: be,
|
|
50
|
+
filters: G,
|
|
40
51
|
baseUrl: I,
|
|
41
|
-
agentUrl:
|
|
42
|
-
context:
|
|
43
|
-
headers:
|
|
44
|
-
appId:
|
|
45
|
-
apiKey:
|
|
46
|
-
} = u,
|
|
52
|
+
agentUrl: Ce,
|
|
53
|
+
context: Q,
|
|
54
|
+
headers: V,
|
|
55
|
+
appId: y,
|
|
56
|
+
apiKey: d
|
|
57
|
+
} = u, Se = de?.isOpen ?? fe?.isOpen ?? ge?.isOpen ?? !0, { getCaptchaHeader: b, invalidate: c } = qe({
|
|
47
58
|
baseUrl: I,
|
|
48
|
-
shouldBypassCaptcha:
|
|
49
|
-
shouldMakeInitialRequest:
|
|
50
|
-
}),
|
|
51
|
-
|
|
52
|
-
const
|
|
59
|
+
shouldBypassCaptcha: J || !!d,
|
|
60
|
+
shouldMakeInitialRequest: Se
|
|
61
|
+
}), Z = l(b);
|
|
62
|
+
Z.current = b;
|
|
63
|
+
const X = Ce || `${I}/run/api/chat`, { sessionToken: T, refreshSession: _ } = Je({
|
|
53
64
|
baseUrl: I,
|
|
54
|
-
appId:
|
|
65
|
+
appId: y,
|
|
55
66
|
getCaptchaHeader: b,
|
|
56
67
|
invalidateCaptcha: c,
|
|
57
68
|
optOutAllAnalytics: ye?.optOutAllAnalytics
|
|
58
|
-
}), { loadConversation:
|
|
69
|
+
}), { loadConversation: Y } = je({
|
|
59
70
|
baseUrl: I,
|
|
60
|
-
appId:
|
|
61
|
-
authToken:
|
|
71
|
+
appId: y,
|
|
72
|
+
authToken: d ?? T,
|
|
62
73
|
getCaptchaHeader: b,
|
|
63
74
|
invalidateCaptcha: c,
|
|
64
75
|
// Only pass refreshSession for anonymous-session flows; API key auth has no token to refresh.
|
|
65
|
-
refreshSession:
|
|
66
|
-
}), [
|
|
76
|
+
refreshSession: d ? void 0 : _
|
|
77
|
+
}), [Ie, ee] = C(!1), w = l(null);
|
|
67
78
|
w.current = T;
|
|
68
|
-
const
|
|
69
|
-
|
|
79
|
+
const g = l(0), te = l(null), O = l(null), se = l(V);
|
|
80
|
+
se.current = V;
|
|
70
81
|
const F = l(void 0);
|
|
71
|
-
F.current =
|
|
72
|
-
const
|
|
82
|
+
F.current = j || G ? JSON.stringify({ ...j, ...G }) : void 0;
|
|
83
|
+
const we = (e) => {
|
|
73
84
|
switch (e.code) {
|
|
74
85
|
case 400:
|
|
75
86
|
return e.message;
|
|
76
87
|
case 403:
|
|
77
|
-
return `There seems to be a configuration error. Please contact ${
|
|
88
|
+
return `There seems to be a configuration error. Please contact ${f.organizationDisplayName ?? "Administrator"}`;
|
|
78
89
|
default:
|
|
79
|
-
return
|
|
90
|
+
return me;
|
|
80
91
|
}
|
|
81
|
-
}, [
|
|
82
|
-
() => new
|
|
83
|
-
api:
|
|
92
|
+
}, [Ae, A] = C([]), [Re, B] = C(null), Me = pe(
|
|
93
|
+
() => new He({
|
|
94
|
+
api: X,
|
|
84
95
|
headers: () => ({
|
|
85
96
|
"x-inkeep-client-timezone": Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
86
97
|
"x-inkeep-client-timestamp": (/* @__PURE__ */ new Date()).toISOString(),
|
|
87
|
-
...
|
|
98
|
+
...y ? { "x-inkeep-app-id": y } : {},
|
|
88
99
|
...w.current ? { Authorization: `Bearer ${w.current}` } : {},
|
|
89
|
-
...
|
|
100
|
+
...d ? { Authorization: `Bearer ${d}` } : {},
|
|
90
101
|
...F.current ? { "inkeep-filters": F.current } : {},
|
|
91
|
-
...
|
|
102
|
+
...se.current
|
|
92
103
|
}),
|
|
93
104
|
prepareSendMessagesRequest: async (e) => {
|
|
94
|
-
const
|
|
105
|
+
const s = await Z.current();
|
|
95
106
|
return {
|
|
96
107
|
body: {
|
|
97
108
|
...e.body,
|
|
@@ -102,50 +113,50 @@ It seems I might be having some issues right now. Please clear the chat and try
|
|
|
102
113
|
},
|
|
103
114
|
headers: {
|
|
104
115
|
...e.headers,
|
|
105
|
-
...
|
|
116
|
+
...s
|
|
106
117
|
}
|
|
107
118
|
};
|
|
108
119
|
},
|
|
109
120
|
body: {
|
|
110
|
-
requestContext:
|
|
121
|
+
requestContext: Q
|
|
111
122
|
}
|
|
112
123
|
}),
|
|
113
|
-
[
|
|
124
|
+
[X, Q, y, d]
|
|
114
125
|
), {
|
|
115
|
-
messages:
|
|
126
|
+
messages: R,
|
|
116
127
|
sendMessage: D,
|
|
117
128
|
addToolApprovalResponse: P,
|
|
118
|
-
status:
|
|
119
|
-
setMessages:
|
|
120
|
-
stop:
|
|
129
|
+
status: re,
|
|
130
|
+
setMessages: h,
|
|
131
|
+
stop: ne,
|
|
121
132
|
error: H
|
|
122
|
-
} =
|
|
133
|
+
} = Pe({
|
|
123
134
|
transport: Me,
|
|
124
135
|
onData(e) {
|
|
125
136
|
S(e.type, e.data);
|
|
126
137
|
},
|
|
127
138
|
async onFinish() {
|
|
128
|
-
S("completion", { conversationId:
|
|
139
|
+
S("completion", { conversationId: t }), await m({
|
|
129
140
|
eventName: "assistant_message_received",
|
|
130
141
|
properties: {
|
|
131
|
-
conversationId:
|
|
142
|
+
conversationId: t
|
|
132
143
|
}
|
|
133
|
-
}),
|
|
144
|
+
}), m({
|
|
134
145
|
eventName: "assistant_answer_displayed",
|
|
135
146
|
properties: {
|
|
136
|
-
conversationId:
|
|
147
|
+
conversationId: t
|
|
137
148
|
}
|
|
138
149
|
});
|
|
139
150
|
},
|
|
140
151
|
onError(e) {
|
|
141
152
|
console.error("onError", { code: e.code, message: e.message });
|
|
142
|
-
const
|
|
143
|
-
if (
|
|
144
|
-
|
|
145
|
-
const n =
|
|
153
|
+
const s = J || d ? null : et(e);
|
|
154
|
+
if (s !== null && g.current < 1) {
|
|
155
|
+
g.current++;
|
|
156
|
+
const n = O.current, r = te.current;
|
|
146
157
|
(async () => {
|
|
147
|
-
if (
|
|
148
|
-
const i = await
|
|
158
|
+
if (s === "session") {
|
|
159
|
+
const i = await _();
|
|
149
160
|
i && (w.current = i);
|
|
150
161
|
} else
|
|
151
162
|
c();
|
|
@@ -153,34 +164,34 @@ It seems I might be having some issues right now. Please clear the chat and try
|
|
|
153
164
|
P(n);
|
|
154
165
|
return;
|
|
155
166
|
}
|
|
156
|
-
r && (
|
|
167
|
+
r && (h((i) => {
|
|
157
168
|
let a = [...i];
|
|
158
169
|
return a.at(-1)?.role === "assistant" && (a = a.slice(0, -1)), a.at(-1)?.role === "user" && (a = a.slice(0, -1)), a;
|
|
159
170
|
}), D({ text: r.content }, { body: r.body }));
|
|
160
171
|
})().catch(() => {
|
|
161
|
-
|
|
172
|
+
g.current = 0, c(), h((i) => {
|
|
162
173
|
const a = [...i], W = a[a.length - 1];
|
|
163
174
|
if (!W) return a;
|
|
164
|
-
const
|
|
175
|
+
const ue = me;
|
|
165
176
|
return W.role === "user" ? a.push({
|
|
166
177
|
id: k(16),
|
|
167
178
|
role: "assistant",
|
|
168
|
-
parts: [{ type: "text", text:
|
|
169
|
-
}) : W.parts = [{ type: "text", text:
|
|
179
|
+
parts: [{ type: "text", text: ue }]
|
|
180
|
+
}) : W.parts = [{ type: "text", text: ue }], a;
|
|
170
181
|
});
|
|
171
182
|
});
|
|
172
183
|
return;
|
|
173
184
|
}
|
|
174
|
-
|
|
185
|
+
g.current = 0, s !== null && c(), m({
|
|
175
186
|
eventName: "chat_error",
|
|
176
187
|
properties: {
|
|
177
|
-
conversationId:
|
|
188
|
+
conversationId: t,
|
|
178
189
|
error: e.message
|
|
179
190
|
}
|
|
180
|
-
}),
|
|
191
|
+
}), h((n) => {
|
|
181
192
|
const r = [...n], o = r[r.length - 1];
|
|
182
193
|
if (o) {
|
|
183
|
-
const i =
|
|
194
|
+
const i = we(e);
|
|
184
195
|
o.role === "user" ? r.push({
|
|
185
196
|
id: k(16),
|
|
186
197
|
role: "assistant",
|
|
@@ -190,127 +201,127 @@ It seems I might be having some issues right now. Please clear the chat and try
|
|
|
190
201
|
return r;
|
|
191
202
|
});
|
|
192
203
|
}
|
|
193
|
-
}),
|
|
204
|
+
}), oe = re === "submitted", L = re === "streaming", xe = pe(() => {
|
|
194
205
|
const e = (o) => {
|
|
195
206
|
if (!o || typeof o != "object") return !1;
|
|
196
207
|
const i = o;
|
|
197
208
|
return typeof i.type == "string" && i.type.startsWith("tool-");
|
|
198
|
-
}, n = [...
|
|
209
|
+
}, n = [...R ?? []].reverse().find((o) => o.role === "assistant");
|
|
199
210
|
if (!n) return !1;
|
|
200
211
|
const r = n.parts?.at(-1);
|
|
201
212
|
return !(!e(r) || r.state !== "output-available" || !r.approval?.id || L);
|
|
202
|
-
}, [
|
|
203
|
-
|
|
204
|
-
H &&
|
|
213
|
+
}, [R, L]), ae = L || xe, ie = oe || ae, Ee = R.length === 0, U = !v.trim() || ie, ke = Ke("(max-width: 768px)"), [Ne, M] = C(null);
|
|
214
|
+
q(() => {
|
|
215
|
+
H && M(H);
|
|
205
216
|
}, [H]);
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}, [
|
|
210
|
-
const
|
|
217
|
+
const Te = () => M(null), ce = l(null);
|
|
218
|
+
q(() => {
|
|
219
|
+
be?.(v);
|
|
220
|
+
}, [v]);
|
|
221
|
+
const _e = (e) => {
|
|
211
222
|
e.key === "Enter" && !e.shiftKey && !U && !e.nativeEvent.isComposing && (e.preventDefault(), $());
|
|
212
|
-
}, $ = async (e =
|
|
223
|
+
}, $ = async (e = v) => {
|
|
213
224
|
if (U && (!e || e.trim().length === 0)) return;
|
|
214
|
-
A([]), N(""),
|
|
225
|
+
A([]), N(""), g.current = 0, O.current = null, await m({
|
|
215
226
|
eventName: "user_message_submitted",
|
|
216
227
|
properties: {
|
|
217
|
-
conversationId:
|
|
228
|
+
conversationId: t
|
|
218
229
|
}
|
|
219
230
|
});
|
|
220
|
-
let
|
|
221
|
-
|
|
231
|
+
let s = t;
|
|
232
|
+
s || (s = `conv_${k(16)}`, p(s)), he(s), te.current = {
|
|
222
233
|
content: e,
|
|
223
|
-
body: { conversationId:
|
|
234
|
+
body: { conversationId: s }
|
|
224
235
|
}, D(
|
|
225
236
|
{ text: e },
|
|
226
237
|
{
|
|
227
|
-
body: { conversationId:
|
|
238
|
+
body: { conversationId: s }
|
|
228
239
|
}
|
|
229
240
|
);
|
|
230
241
|
}, Oe = E(
|
|
231
242
|
(e) => {
|
|
232
|
-
|
|
243
|
+
g.current = 0, O.current = e, P(e);
|
|
233
244
|
},
|
|
234
245
|
[P]
|
|
235
246
|
), z = E(() => {
|
|
236
|
-
|
|
237
|
-
S("aborted", { conversationId:
|
|
247
|
+
ne().then(() => {
|
|
248
|
+
S("aborted", { conversationId: t });
|
|
238
249
|
});
|
|
239
|
-
}, [
|
|
240
|
-
|
|
250
|
+
}, [ne, t, S]), le = () => {
|
|
251
|
+
Te(), h([]), p(""), A([]), B(null), c(), m({
|
|
241
252
|
eventName: "chat_clear_button_clicked",
|
|
242
253
|
properties: {
|
|
243
|
-
conversationId:
|
|
254
|
+
conversationId: t
|
|
244
255
|
}
|
|
245
256
|
});
|
|
246
257
|
}, x = E(
|
|
247
|
-
(e,
|
|
248
|
-
|
|
258
|
+
(e, s) => {
|
|
259
|
+
M(null), h(s), p(e), A([]), B(null), c();
|
|
249
260
|
},
|
|
250
|
-
[
|
|
251
|
-
),
|
|
252
|
-
async (e,
|
|
253
|
-
z(), x(e, []),
|
|
261
|
+
[h, p, c]
|
|
262
|
+
), Fe = E(
|
|
263
|
+
async (e, s) => {
|
|
264
|
+
z(), x(e, []), ee(!0);
|
|
254
265
|
try {
|
|
255
|
-
const n = await
|
|
266
|
+
const n = await Y(e, s), r = n?.[n.length - 1], o = n !== null && r?.role === "user" ? [...n, {
|
|
256
267
|
id: k(16),
|
|
257
268
|
role: "assistant",
|
|
258
269
|
parts: [{ type: "text", text: "This session was interrupted. Please check back in a few minutes or start a new conversation." }]
|
|
259
270
|
}] : n;
|
|
260
271
|
o !== null && x(e, o);
|
|
261
272
|
} finally {
|
|
262
|
-
|
|
273
|
+
s?.aborted || ee(!1);
|
|
263
274
|
}
|
|
264
275
|
},
|
|
265
|
-
[x,
|
|
266
|
-
), { openForm:
|
|
267
|
-
return
|
|
276
|
+
[x, Y, z]
|
|
277
|
+
), { openForm: Be } = Qe(), De = Ve();
|
|
278
|
+
return Le(u.chatFunctionsRef, () => ({
|
|
268
279
|
submitMessage: $,
|
|
269
280
|
updateInputMessage(e) {
|
|
270
281
|
N(e);
|
|
271
282
|
},
|
|
272
|
-
clearChat:
|
|
283
|
+
clearChat: le,
|
|
273
284
|
openForm: (e) => {
|
|
274
|
-
|
|
285
|
+
De?.setView("chat"), Be(e, void 0);
|
|
275
286
|
},
|
|
276
287
|
focusInput: () => {
|
|
277
|
-
|
|
288
|
+
ce.current?.focus();
|
|
278
289
|
}
|
|
279
290
|
})), {
|
|
280
|
-
messages:
|
|
291
|
+
messages: R,
|
|
281
292
|
sendMessage: D,
|
|
282
293
|
addToolApprovalResponse: Oe,
|
|
283
|
-
isLoading:
|
|
284
|
-
isStreaming:
|
|
285
|
-
isBusy:
|
|
286
|
-
error:
|
|
287
|
-
setError:
|
|
294
|
+
isLoading: oe,
|
|
295
|
+
isStreaming: ae,
|
|
296
|
+
isBusy: ie,
|
|
297
|
+
error: Ne,
|
|
298
|
+
setError: M,
|
|
288
299
|
isSubmitDisabled: U,
|
|
289
|
-
input:
|
|
290
|
-
handleInputChange:
|
|
291
|
-
handleInputKeyDown:
|
|
300
|
+
input: v,
|
|
301
|
+
handleInputChange: ve,
|
|
302
|
+
handleInputKeyDown: _e,
|
|
292
303
|
handleSubmit: $,
|
|
293
304
|
stop: z,
|
|
294
|
-
clear:
|
|
295
|
-
inputRef:
|
|
296
|
-
isMobile:
|
|
305
|
+
clear: le,
|
|
306
|
+
inputRef: ce,
|
|
307
|
+
isMobile: ke,
|
|
297
308
|
// Additional state for attachments and workflow
|
|
298
|
-
messageAttachments:
|
|
309
|
+
messageAttachments: Ae,
|
|
299
310
|
setMessageAttachments: A,
|
|
300
|
-
selectedWorkflow:
|
|
311
|
+
selectedWorkflow: Re,
|
|
301
312
|
setSelectedWorkflow: B,
|
|
302
|
-
isNewChat:
|
|
303
|
-
conversationId:
|
|
313
|
+
isNewChat: Ee,
|
|
314
|
+
conversationId: t,
|
|
304
315
|
restoreSession: x,
|
|
305
|
-
loadAndRestoreSession:
|
|
306
|
-
isSessionLoading:
|
|
316
|
+
loadAndRestoreSession: Fe,
|
|
317
|
+
isSessionLoading: Ie,
|
|
307
318
|
sessionToken: T,
|
|
308
|
-
refreshSession:
|
|
319
|
+
refreshSession: _,
|
|
309
320
|
getCaptchaHeader: b,
|
|
310
321
|
invalidateCaptcha: c
|
|
311
322
|
};
|
|
312
323
|
};
|
|
313
324
|
export {
|
|
314
|
-
|
|
315
|
-
|
|
325
|
+
me as DEFAULT_ERROR_MESSAGE,
|
|
326
|
+
bt as useInkeepChat
|
|
316
327
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("react/jsx-runtime"),t=require("react"),l=require("./config-provider.cjs"),a=t.createContext(void 0),p=({children:e})=>{const{baseSettings:s,componentType:n}=l.useInkeepConfig(),{tags:o,analyticsProperties:r}=s,i=t.useMemo(()=>({widgetLibraryVersion:"0.15.
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("react/jsx-runtime"),t=require("react"),l=require("./config-provider.cjs"),a=t.createContext(void 0),p=({children:e})=>{const{baseSettings:s,componentType:n}=l.useInkeepConfig(),{tags:o,analyticsProperties:r}=s,i=t.useMemo(()=>({widgetLibraryVersion:"0.15.19",componentType:n,tags:o}),[n,o]),u={logEvent:t.useCallback(async c=>{const v={...i,...c.properties,...r},d={eventName:c.eventName,properties:v};return s.onEvent?.(d)},[s,i,r])};return E.jsx(a.Provider,{value:u,children:e})},g=()=>{const e=t.useContext(a);if(!e)throw new Error("useBaseEvents must be used within a BaseEventsProvider");return e};exports.BaseEventsProvider=p;exports.useBaseEvents=g;
|
|
@@ -5,7 +5,7 @@ import { useInkeepConfig as g } from "./config-provider.js";
|
|
|
5
5
|
const a = d(void 0), P = ({ children: e }) => {
|
|
6
6
|
const { baseSettings: t, componentType: o } = g(), { tags: s, analyticsProperties: n } = t, r = u(
|
|
7
7
|
() => ({
|
|
8
|
-
widgetLibraryVersion: "0.15.
|
|
8
|
+
widgetLibraryVersion: "0.15.19",
|
|
9
9
|
componentType: o,
|
|
10
10
|
tags: s
|
|
11
11
|
}),
|
package/dist/types/events.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ type ExtendPropertiesWithCommon<T> = T extends {
|
|
|
43
43
|
export type InkeepEventWithCommon = ExtendPropertiesWithCommon<InkeepEvent>;
|
|
44
44
|
export type InkeepCallbackEvent = InkeepEventWithCommon;
|
|
45
45
|
export type SearchEvent = SearchQueryResponseReceivedEvent | SearchQuerySubmittedEvent | SearchResultClickedEvent;
|
|
46
|
-
export type ChatEvent = AssistantMessageReceivedEvent | AssistantAnswerDisplayedEvent | UserMessageSubmittedEvent | UserEscalationIndicatedEvent | SharedChatLoadedEvent | AssistantPositiveFeedbackSubmittedEvent | AssistantNegativeFeedbackSubmittedEvent | ChatClearButtonClickedEvent | AssistantMessageCopiedEvent | GetHelpOptionClickedEvent | ChatShareButtonClickedEvent | AssistantSourceItemClickedEvent | AssistantMessageLinkOpenedEvent | AssistantCodeBlockCopiedEvent | ChatErrorEvent;
|
|
46
|
+
export type ChatEvent = AssistantMessageReceivedEvent | AssistantAnswerDisplayedEvent | UserMessageSubmittedEvent | UserEscalationIndicatedEvent | SharedChatLoadedEvent | AssistantPositiveFeedbackSubmittedEvent | AssistantNegativeFeedbackSubmittedEvent | ChatClearButtonClickedEvent | ChatConversationChangedEvent | AssistantMessageCopiedEvent | GetHelpOptionClickedEvent | ChatShareButtonClickedEvent | AssistantSourceItemClickedEvent | AssistantMessageLinkOpenedEvent | AssistantCodeBlockCopiedEvent | ChatErrorEvent;
|
|
47
47
|
export type WidgetEvent = ModalOpenedEvent | ModalClosedEvent | ChatBubbleOpenedEvent | ChatBubbleClosedEvent;
|
|
48
48
|
export type InkeepEvent = SearchEvent | ChatEvent | WidgetEvent;
|
|
49
49
|
export interface AssistantMessageReceivedEvent {
|
|
@@ -104,6 +104,13 @@ export interface ChatClearButtonClickedEvent {
|
|
|
104
104
|
conversationId: string;
|
|
105
105
|
};
|
|
106
106
|
}
|
|
107
|
+
export interface ChatConversationChangedEvent {
|
|
108
|
+
eventName: 'chat_conversation_changed';
|
|
109
|
+
properties: {
|
|
110
|
+
conversationId: string;
|
|
111
|
+
previousConversationId: string;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
107
114
|
export interface ChatShareButtonClickedEvent {
|
|
108
115
|
eventName: 'chat_share_button_clicked';
|
|
109
116
|
properties: {
|