@asgard-js/react 0.0.32-canary.0 → 0.0.32-canary.1
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/components/chatbot/chatbot-body/conversation-message-renderer.d.ts +1 -1
- package/dist/components/chatbot/chatbot.d.ts +1 -1
- package/dist/components/templates/button-template/button-template.d.ts +1 -1
- package/dist/components/templates/button-template/card.d.ts +1 -1
- package/dist/components/templates/carousel-template/carousel-template.d.ts +1 -1
- package/dist/components/templates/carousel-template/carousel-template.d.ts.map +1 -1
- package/dist/components/templates/chart-template/chart-template.d.ts +1 -1
- package/dist/components/templates/chart-template/chart-template.d.ts.map +1 -1
- package/dist/components/templates/hint-template/hint-template.d.ts +1 -1
- package/dist/components/templates/image-template/image-template.d.ts +1 -1
- package/dist/components/templates/image-template/image-template.d.ts.map +1 -1
- package/dist/components/templates/text-template/text-template.d.ts +1 -1
- package/dist/components/templates/text-template/use-react-markdown-renderer.d.ts.map +1 -1
- package/dist/context/asgard-app-initialization-context.d.ts +1 -1
- package/dist/context/asgard-service-context.d.ts +1 -1
- package/dist/context/asgard-template-context.d.ts +3 -3
- package/dist/context/asgard-template-context.d.ts.map +1 -1
- package/dist/hooks/use-asgard-service-client.d.ts +1 -1
- package/dist/hooks/use-channel.d.ts +4 -4
- package/dist/hooks/use-channel.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/models/bot-provider.d.ts +1 -1
- package/dist/utils/deep-merge.d.ts +1 -1
- package/dist/utils/deep-merge.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/components/templates/button-template/card.tsx +1 -1
- package/src/components/templates/carousel-template/carousel-template.tsx +2 -1
- package/src/components/templates/chart-template/chart-template.tsx +4 -5
- package/src/components/templates/image-template/image-template.tsx +3 -3
- package/src/components/templates/text-template/use-react-markdown-renderer.spec.tsx +7 -7
- package/src/components/templates/text-template/use-react-markdown-renderer.tsx +9 -7
- package/src/context/asgard-template-context.tsx +2 -2
- package/src/context/asgard-theme-context.tsx +1 -1
- package/src/hooks/use-channel.ts +8 -8
- package/src/utils/deep-merge.ts +7 -4
- package/tsconfig.lib.json +2 -1
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AsgardServiceContextValue, AsgardTemplateContextValue, AsgardServiceContextProviderProps } from '../../context';
|
|
2
2
|
import { AsgardThemeContextValue } from '../../context/asgard-theme-context';
|
|
3
|
-
import { ClientConfig, ConversationMessage } from '
|
|
3
|
+
import { ClientConfig, ConversationMessage } from '../../../../core/src/index.ts';
|
|
4
4
|
import { ReactNode, CSSProperties } from 'react';
|
|
5
5
|
|
|
6
6
|
interface ChatbotProps extends AsgardTemplateContextValue {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel-template.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/carousel-template/carousel-template.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlC,OAAO,EAEL,sBAAsB,
|
|
1
|
+
{"version":3,"file":"carousel-template.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/carousel-template/carousel-template.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlC,OAAO,EAEL,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAKzB,UAAU,qBAAqB;IAC7B,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,CA8BxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-template.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/chart-template/chart-template.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoC,MAAM,OAAO,CAAC;AAGpE,OAAO,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"chart-template.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/chart-template/chart-template.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoC,MAAM,OAAO,CAAC;AAGpE,OAAO,EAAE,sBAAsB,EAAwB,MAAM,iBAAiB,CAAC;AAQ/E,UAAU,kBAAkB;IAC1B,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CA2DlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-template.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/image-template/image-template.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAI5C,OAAO,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"image-template.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/image-template/image-template.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAI5C,OAAO,EAAE,sBAAsB,EAAwB,MAAM,iBAAiB,CAAC;AAK/E,UAAU,kBAAkB;IAC1B,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CA4ClE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-react-markdown-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/text-template/use-react-markdown-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAMf,OAAO,0BAA0B,CAAC;AAKlC,UAAU,oBAAoB;IAC5B,UAAU,EAAE,SAAS,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAQD,eAAO,MAAM,cAAc,MAAM,CAAC;AAGlC,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAQnE;
|
|
1
|
+
{"version":3,"file":"use-react-markdown-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/text-template/use-react-markdown-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAMf,OAAO,0BAA0B,CAAC;AAKlC,UAAU,oBAAoB;IAC5B,UAAU,EAAE,SAAS,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAQD,eAAO,MAAM,cAAc,MAAM,CAAC;AAGlC,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAQnE;AAyHD,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,KAAK,SAAM,GACV,oBAAoB,CAqGtB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UseChannelProps, UseChannelReturn } from '../hooks';
|
|
2
2
|
import { ForwardedRef, ReactNode, RefObject } from 'react';
|
|
3
|
-
import { AsgardServiceClient, ClientConfig, ConversationMessage } from '
|
|
3
|
+
import { AsgardServiceClient, ClientConfig, ConversationMessage } from '../../../core/src/index.ts';
|
|
4
4
|
|
|
5
5
|
export interface AsgardServiceContextValue {
|
|
6
6
|
avatar?: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConversationErrorMessage, FetchSsePayload } from '
|
|
1
|
+
import { ConversationErrorMessage, FetchSsePayload } from '../../../core/src/index.ts';
|
|
2
2
|
import { PropsWithChildren, ReactNode } from 'react';
|
|
3
3
|
|
|
4
4
|
export interface AsgardTemplateContextValue {
|
|
@@ -6,7 +6,7 @@ export interface AsgardTemplateContextValue {
|
|
|
6
6
|
errorMessageRenderer?: (message: ConversationErrorMessage) => ReactNode;
|
|
7
7
|
onTemplateBtnClick?: (payload: Record<string, unknown>, { sse, }: {
|
|
8
8
|
sse: {
|
|
9
|
-
sendMessage: (payload: Pick<FetchSsePayload, 'text'
|
|
9
|
+
sendMessage: (payload: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) => void;
|
|
10
10
|
};
|
|
11
11
|
}) => void;
|
|
12
12
|
defaultLinkTarget?: '_blank' | '_self' | '_parent' | '_top';
|
|
@@ -17,7 +17,7 @@ interface AsgardTemplateContextProviderProps extends PropsWithChildren {
|
|
|
17
17
|
errorMessageRenderer?: (message: ConversationErrorMessage) => ReactNode;
|
|
18
18
|
onTemplateBtnClick?: (payload: Record<string, unknown>, { sse, }: {
|
|
19
19
|
sse: {
|
|
20
|
-
sendMessage: (payload: Pick<FetchSsePayload, 'text'
|
|
20
|
+
sendMessage: (payload: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) => void;
|
|
21
21
|
};
|
|
22
22
|
}) => void;
|
|
23
23
|
defaultLinkTarget?: '_blank' | '_self' | '_parent' | '_top';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asgard-template-context.d.ts","sourceRoot":"","sources":["../../src/context/asgard-template-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,SAAS,EAGV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE5E,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC3D,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,SAAS,CAAC;IACxE,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,EACE,GAAG,GACJ,EAAE;QACD,GAAG,EAAE;YACH,WAAW,EAAE,CACX,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC,KAC/
|
|
1
|
+
{"version":3,"file":"asgard-template-context.d.ts","sourceRoot":"","sources":["../../src/context/asgard-template-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,SAAS,EAGV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE5E,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC3D,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,SAAS,CAAC;IACxE,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,EACE,GAAG,GACJ,EAAE;QACD,GAAG,EAAE;YACH,WAAW,EAAE,CACX,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,KAC/E,IAAI,CAAC;SACX,CAAC;KACH,KACE,IAAI,CAAC;IACV,iBAAiB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CAC7D;AAED,eAAO,MAAM,qBAAqB,qDAKhC,CAAC;AAEH,UAAU,kCAAmC,SAAQ,iBAAiB;IACpE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC3D,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,SAAS,CAAC;IACxE,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,EACE,GAAG,GACJ,EAAE;QACD,GAAG,EAAE;YACH,WAAW,EAAE,CACX,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,KAC/E,IAAI,CAAC;SACX,CAAC;KACH,KACE,IAAI,CAAC;IACV,iBAAiB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CAC7D;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kCAAkC,GACxC,SAAS,CAwBX;AAED,wBAAgB,wBAAwB,IAAI,0BAA0B,CAErE"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AsgardServiceClient, Conversation, ConversationMessage, EventType, FetchSsePayload, SseResponse } from '
|
|
1
|
+
import { AsgardServiceClient, Conversation, ConversationMessage, EventType, FetchSsePayload, SseResponse } from '../../../core/src/index.ts';
|
|
2
2
|
|
|
3
3
|
export interface UseChannelProps {
|
|
4
4
|
defaultIsOpen?: boolean;
|
|
5
|
-
resetPayload?: Pick<FetchSsePayload, 'text'
|
|
5
|
+
resetPayload?: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>;
|
|
6
6
|
client: AsgardServiceClient | null;
|
|
7
7
|
customChannelId: string;
|
|
8
8
|
customMessageId?: string;
|
|
@@ -16,8 +16,8 @@ export interface UseChannelReturn {
|
|
|
16
16
|
isResetting: boolean;
|
|
17
17
|
isConnecting: boolean;
|
|
18
18
|
conversation: Conversation | null;
|
|
19
|
-
sendMessage?: (payload: Pick<FetchSsePayload, 'text'
|
|
20
|
-
resetChannel?: (payload?: Pick<FetchSsePayload, 'text'
|
|
19
|
+
sendMessage?: (payload: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) => void;
|
|
20
|
+
resetChannel?: (payload?: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) => void;
|
|
21
21
|
closeChannel?: () => void;
|
|
22
22
|
}
|
|
23
23
|
export declare function useChannel(props: UseChannelProps): UseChannelReturn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-channel.d.ts","sourceRoot":"","sources":["../../src/hooks/use-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAGnB,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-channel.d.ts","sourceRoot":"","sources":["../../src/hooks/use-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAGnB,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;IACzF,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,EAChC,OAAO,EAAE;QACP,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;KACnC,KACE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3G,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7G,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAoHnE"}
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,10 @@ function lg(e, t) {
|
|
|
20
20
|
n[r] = i;
|
|
21
21
|
continue;
|
|
22
22
|
}
|
|
23
|
-
n[r] = lg(
|
|
23
|
+
n[r] = lg(
|
|
24
|
+
m9(n[r]) ? n[r] : {},
|
|
25
|
+
i
|
|
26
|
+
);
|
|
24
27
|
}
|
|
25
28
|
return n;
|
|
26
29
|
}
|
|
@@ -149,8 +152,8 @@ function RG(e) {
|
|
|
149
152
|
), v = Pt(() => {
|
|
150
153
|
u((w) => (w == null || w.close(), null)), f(!1), h(!1), m(!1), y(null);
|
|
151
154
|
}, []), E = Pt(
|
|
152
|
-
(w) => l == null ? void 0 : l.sendMessage(w),
|
|
153
|
-
[l]
|
|
155
|
+
(w) => l == null ? void 0 : l.sendMessage({ ...w, customMessageId: a }),
|
|
156
|
+
[l, a]
|
|
154
157
|
);
|
|
155
158
|
return rn(() => {
|
|
156
159
|
!l && c && b(r);
|
|
@@ -35569,7 +35572,8 @@ const Yie = ({ children: e, ...t }) => /* @__PURE__ */ ne("div", { className: yi
|
|
|
35569
35572
|
Qie,
|
|
35570
35573
|
{
|
|
35571
35574
|
className: `math math-display ${e || ""}`,
|
|
35572
|
-
...t
|
|
35575
|
+
...t,
|
|
35576
|
+
children: t.children
|
|
35573
35577
|
}
|
|
35574
35578
|
) : /* @__PURE__ */ ne("div", { className: e, ...t })
|
|
35575
35579
|
};
|
|
@@ -76788,7 +76792,7 @@ function HMe(e) {
|
|
|
76788
76792
|
var p, m;
|
|
76789
76793
|
return ((m = (p = n == null ? void 0 : n.chartOptions) == null ? void 0 : p.find((g) => g.type === o)) == null ? void 0 : m.spec) ?? l[0].spec;
|
|
76790
76794
|
},
|
|
76791
|
-
[o, n.chartOptions]
|
|
76795
|
+
[o, n.chartOptions, l]
|
|
76792
76796
|
), c = on(
|
|
76793
76797
|
() => ({
|
|
76794
76798
|
color: i == null ? void 0 : i.color,
|
|
@@ -76866,7 +76870,7 @@ function ZMe(e) {
|
|
|
76866
76870
|
{
|
|
76867
76871
|
quickReplies: n.quickReplies,
|
|
76868
76872
|
time: t.time,
|
|
76869
|
-
children: /* @__PURE__ */ ne("div", { className: Rm.image_box, onClick: () => l(!0), children: /* @__PURE__ */ ne("img", { src: r, alt: "
|
|
76873
|
+
children: /* @__PURE__ */ ne("div", { className: Rm.image_box, onClick: () => l(!0), children: /* @__PURE__ */ ne("img", { src: r, alt: "Conversation content" }) })
|
|
76870
76874
|
}
|
|
76871
76875
|
)
|
|
76872
76876
|
]
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare function isObject(item: unknown): item is Record<string, unknown>;
|
|
2
|
-
export declare function deepMerge<T extends
|
|
2
|
+
export declare function deepMerge<T extends Record<string, unknown>, U extends Record<string, unknown>>(target: T, source: U): T & U;
|
|
3
3
|
//# sourceMappingURL=deep-merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-merge.d.ts","sourceRoot":"","sources":["../../src/utils/deep-merge.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEvE;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"deep-merge.d.ts","sourceRoot":"","sources":["../../src/utils/deep-merge.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEvE;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5F,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,CAAC,GACR,CAAC,GAAG,CAAC,CAkBP"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asgard-js/react",
|
|
3
|
-
"version": "0.0.32-canary.
|
|
3
|
+
"version": "0.0.32-canary.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"vitest": "^1.6.0"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
|
-
"@asgard-js/core": "^0.0.32-canary.
|
|
57
|
+
"@asgard-js/core": "^0.0.32-canary.1",
|
|
58
58
|
"react": "^18.0.0",
|
|
59
59
|
"react-dom": "^18.0.0"
|
|
60
60
|
},
|
|
@@ -107,7 +107,7 @@ export function Card(props: CardProps): ReactNode {
|
|
|
107
107
|
<h5 className={styles.card_title}>{template?.title}</h5>
|
|
108
108
|
<div className={styles.card_description}>{template?.text}</div>
|
|
109
109
|
<div className={styles.card_actions}>
|
|
110
|
-
{template?.buttons?.map((btn, index) => (
|
|
110
|
+
{template?.buttons?.map((btn: { label: string; action: ButtonAction }, index: number) => (
|
|
111
111
|
<button
|
|
112
112
|
key={index}
|
|
113
113
|
onClick={handleClick(btn.action)}
|
|
@@ -6,6 +6,7 @@ import { Card } from '../button-template/card';
|
|
|
6
6
|
import {
|
|
7
7
|
CarouselMessageTemplate,
|
|
8
8
|
ConversationBotMessage,
|
|
9
|
+
ButtonMessageTemplate,
|
|
9
10
|
} from '@asgard-js/core';
|
|
10
11
|
import { Time } from '../time';
|
|
11
12
|
import { useAsgardContext } from 'src/context/asgard-service-context';
|
|
@@ -33,7 +34,7 @@ export function CarouselTemplate(props: CarouselTemplateProps): ReactNode {
|
|
|
33
34
|
<Avatar avatar={avatar} />
|
|
34
35
|
<TemplateBoxContent quickReplies={template.quickReplies}>
|
|
35
36
|
<div className={styles.carousel_root}>
|
|
36
|
-
{template.columns?.map((column, index) => (
|
|
37
|
+
{template.columns?.map((column: Omit<ButtonMessageTemplate, 'type' | 'quickReplies'>, index: number) => (
|
|
37
38
|
<Card
|
|
38
39
|
key={index}
|
|
39
40
|
template={column}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { ReactNode, useMemo, useState, CSSProperties } from 'react';
|
|
2
2
|
import { TemplateBox, TemplateBoxContent } from '../template-box';
|
|
3
3
|
import { Avatar } from '../avatar';
|
|
4
|
-
import { ConversationBotMessage } from '@asgard-js/core';
|
|
4
|
+
import { ConversationBotMessage, ChartMessageTemplate } from '@asgard-js/core';
|
|
5
5
|
import { Time } from '../time';
|
|
6
6
|
import { useAsgardContext } from 'src/context/asgard-service-context';
|
|
7
|
-
import { ChartMessageTemplate } from '../../../../../core/src';
|
|
8
7
|
import { VegaLite, VisualizationSpec } from 'react-vega';
|
|
9
8
|
import clsx from 'clsx';
|
|
10
9
|
import classes from './chart-template.module.scss';
|
|
@@ -29,9 +28,9 @@ export function ChartTemplate(props: ChartTemplateProps): ReactNode {
|
|
|
29
28
|
|
|
30
29
|
const spec = useMemo(
|
|
31
30
|
() =>
|
|
32
|
-
(template?.chartOptions?.find((item) => item.type === option)?.spec ??
|
|
31
|
+
(template?.chartOptions?.find((item: { type: string; title: string; spec: Record<string, unknown> }) => item.type === option)?.spec ??
|
|
33
32
|
options[0].spec) as VisualizationSpec,
|
|
34
|
-
[option, template.chartOptions]
|
|
33
|
+
[option, template.chartOptions, options]
|
|
35
34
|
);
|
|
36
35
|
|
|
37
36
|
const styles = useMemo<CSSProperties>(
|
|
@@ -56,7 +55,7 @@ export function ChartTemplate(props: ChartTemplateProps): ReactNode {
|
|
|
56
55
|
</div>
|
|
57
56
|
{options.length > 1 && (
|
|
58
57
|
<div className={classes.quick_replies_box}>
|
|
59
|
-
{options.map((option) => (
|
|
58
|
+
{options.map((option: { type: string; title: string; spec: Record<string, unknown> }) => (
|
|
60
59
|
<button
|
|
61
60
|
key={option.type}
|
|
62
61
|
className={classes.quick_reply}
|
|
@@ -2,10 +2,9 @@ import { ReactNode, useState } from 'react';
|
|
|
2
2
|
import { TemplateBox, TemplateBoxContent } from '../template-box';
|
|
3
3
|
import { Avatar } from '../avatar';
|
|
4
4
|
import styles from './image-template.module.scss';
|
|
5
|
-
import { ConversationBotMessage } from '@asgard-js/core';
|
|
5
|
+
import { ConversationBotMessage, ImageMessageTemplate } from '@asgard-js/core';
|
|
6
6
|
import { useAsgardContext } from 'src/context/asgard-service-context';
|
|
7
7
|
import { useAsgardThemeContext } from 'src/context/asgard-theme-context';
|
|
8
|
-
import { ImageMessageTemplate } from '../../../../../core/src';
|
|
9
8
|
import CloseSvg from 'src/icons/close.svg?react';
|
|
10
9
|
|
|
11
10
|
interface ImageTemplateProps {
|
|
@@ -37,6 +36,7 @@ export function ImageTemplate(props: ImageTemplateProps): ReactNode {
|
|
|
37
36
|
</div>
|
|
38
37
|
);
|
|
39
38
|
}
|
|
39
|
+
|
|
40
40
|
return (
|
|
41
41
|
<TemplateBox
|
|
42
42
|
className="asgard-image-template"
|
|
@@ -50,7 +50,7 @@ export function ImageTemplate(props: ImageTemplateProps): ReactNode {
|
|
|
50
50
|
time={message.time}
|
|
51
51
|
>
|
|
52
52
|
<div className={styles.image_box} onClick={() => setIsFullScreen(true)}>
|
|
53
|
-
<img src={previewImageUrl} alt="
|
|
53
|
+
<img src={previewImageUrl} alt="Conversation content" />
|
|
54
54
|
</div>
|
|
55
55
|
</TemplateBoxContent>
|
|
56
56
|
</TemplateBox>
|
|
@@ -23,7 +23,7 @@ describe('useMarkdownRenderer - Simple Tests', () => {
|
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
it('should handle null input safely', () => {
|
|
26
|
-
const { result } = renderHook(() => useMarkdownRenderer(null
|
|
26
|
+
const { result } = renderHook(() => useMarkdownRenderer(null));
|
|
27
27
|
|
|
28
28
|
expect(result.current.htmlBlocks).toBeDefined();
|
|
29
29
|
expect(result.current.lastTypingText).toBe('');
|
|
@@ -658,7 +658,7 @@ a_{m1} & a_{m2} & \\cdots & a_{mn}
|
|
|
658
658
|
const mathText = 'Cached math: $E = mc^2$';
|
|
659
659
|
|
|
660
660
|
// First render
|
|
661
|
-
|
|
661
|
+
renderHook(() => useMarkdownRenderer(mathText, 0));
|
|
662
662
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
663
663
|
|
|
664
664
|
// Second render should be faster (cached)
|
|
@@ -679,7 +679,7 @@ a_{m1} & a_{m2} & \\cdots & a_{mn}
|
|
|
679
679
|
});
|
|
680
680
|
|
|
681
681
|
it('should not evict entries when cache is below limit', () => {
|
|
682
|
-
const cache = new Map<string,
|
|
682
|
+
const cache = new Map<string, string>();
|
|
683
683
|
cache.set('key1', 'value1');
|
|
684
684
|
cache.set('key2', 'value2');
|
|
685
685
|
|
|
@@ -691,7 +691,7 @@ a_{m1} & a_{m2} & \\cdots & a_{mn}
|
|
|
691
691
|
});
|
|
692
692
|
|
|
693
693
|
it('should evict oldest entry when cache reaches MAX_CACHE_SIZE', () => {
|
|
694
|
-
const cache = new Map<string,
|
|
694
|
+
const cache = new Map<string, string>();
|
|
695
695
|
|
|
696
696
|
// Fill cache to exactly MAX_CACHE_SIZE
|
|
697
697
|
for (let i = 0; i < MAX_CACHE_SIZE; i++) {
|
|
@@ -710,7 +710,7 @@ a_{m1} & a_{m2} & \\cdots & a_{mn}
|
|
|
710
710
|
});
|
|
711
711
|
|
|
712
712
|
it('should implement LRU eviction strategy correctly', () => {
|
|
713
|
-
const cache = new Map<string,
|
|
713
|
+
const cache = new Map<string, string>();
|
|
714
714
|
|
|
715
715
|
// Fill cache to MAX_CACHE_SIZE
|
|
716
716
|
for (let i = 0; i < MAX_CACHE_SIZE; i++) {
|
|
@@ -732,7 +732,7 @@ a_{m1} & a_{m2} & \\cdots & a_{mn}
|
|
|
732
732
|
});
|
|
733
733
|
|
|
734
734
|
it('should handle empty cache gracefully', () => {
|
|
735
|
-
const cache = new Map<string,
|
|
735
|
+
const cache = new Map<string, string>();
|
|
736
736
|
|
|
737
737
|
manageCacheSize(cache);
|
|
738
738
|
|
|
@@ -740,7 +740,7 @@ a_{m1} & a_{m2} & \\cdots & a_{mn}
|
|
|
740
740
|
});
|
|
741
741
|
|
|
742
742
|
it('should handle cache with exactly MAX_CACHE_SIZE entries', () => {
|
|
743
|
-
const cache = new Map<string,
|
|
743
|
+
const cache = new Map<string, string>();
|
|
744
744
|
|
|
745
745
|
// Fill cache to exactly MAX_CACHE_SIZE
|
|
746
746
|
for (let i = 0; i < MAX_CACHE_SIZE; i++) {
|
|
@@ -83,14 +83,14 @@ function isCompleteParagraph(raw: string): boolean {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
// Custom table renderer to maintain current styling
|
|
86
|
-
const TableRenderer = ({ children, ...props }:
|
|
86
|
+
const TableRenderer = ({ children, ...props }: React.ComponentProps<'table'>): ReactNode => (
|
|
87
87
|
<div className={classes.table_container}>
|
|
88
88
|
<table {...props}>{children}</table>
|
|
89
89
|
</div>
|
|
90
90
|
);
|
|
91
91
|
|
|
92
92
|
// Custom code renderer to maintain highlight.js classes exactly
|
|
93
|
-
const CodeRenderer = ({ children, className, ...props }:
|
|
93
|
+
const CodeRenderer = ({ children, className, ...props }: React.ComponentProps<'code'>): ReactNode => {
|
|
94
94
|
return (
|
|
95
95
|
<code className={`hljs ${className || ''}`} {...props}>
|
|
96
96
|
{children}
|
|
@@ -99,7 +99,7 @@ const CodeRenderer = ({ children, className, ...props }: any): ReactNode => {
|
|
|
99
99
|
};
|
|
100
100
|
|
|
101
101
|
// Custom link renderer to integrate defaultLinkTarget prop
|
|
102
|
-
const LinkRenderer = ({ children, href, ...props }:
|
|
102
|
+
const LinkRenderer = ({ children, href, ...props }: React.ComponentProps<'a'>): ReactNode => {
|
|
103
103
|
const { defaultLinkTarget } = useAsgardTemplateContext();
|
|
104
104
|
|
|
105
105
|
const handleClick = useCallback(
|
|
@@ -120,13 +120,13 @@ const LinkRenderer = ({ children, href, ...props }: any): ReactNode => {
|
|
|
120
120
|
};
|
|
121
121
|
|
|
122
122
|
// Custom math renderers for inline and block math expressions
|
|
123
|
-
const InlineMathRenderer = ({ children, ...props }:
|
|
123
|
+
const InlineMathRenderer = ({ children, ...props }: React.ComponentProps<'span'>): ReactNode => (
|
|
124
124
|
<span className="math math-inline" {...props}>
|
|
125
125
|
{children}
|
|
126
126
|
</span>
|
|
127
127
|
);
|
|
128
128
|
|
|
129
|
-
const BlockMathRenderer = ({ children, ...props }:
|
|
129
|
+
const BlockMathRenderer = ({ children, ...props }: React.ComponentProps<'div'>): ReactNode => (
|
|
130
130
|
<div className="math math-display" {...props}>
|
|
131
131
|
{children}
|
|
132
132
|
</div>
|
|
@@ -138,7 +138,7 @@ const components = {
|
|
|
138
138
|
code: CodeRenderer,
|
|
139
139
|
a: LinkRenderer,
|
|
140
140
|
math: InlineMathRenderer, // Inline math: $expression$
|
|
141
|
-
div: ({ className, ...props }:
|
|
141
|
+
div: ({ className, ...props }: React.ComponentProps<'div'>): ReactNode => {
|
|
142
142
|
// Block math: $$expression$$
|
|
143
143
|
// Check for KaTeX display math classes
|
|
144
144
|
if (
|
|
@@ -149,7 +149,9 @@ const components = {
|
|
|
149
149
|
<BlockMathRenderer
|
|
150
150
|
className={`math math-display ${className || ''}`}
|
|
151
151
|
{...props}
|
|
152
|
-
|
|
152
|
+
>
|
|
153
|
+
{props.children}
|
|
154
|
+
</BlockMathRenderer>
|
|
153
155
|
);
|
|
154
156
|
}
|
|
155
157
|
|
|
@@ -17,7 +17,7 @@ export interface AsgardTemplateContextValue {
|
|
|
17
17
|
}: {
|
|
18
18
|
sse: {
|
|
19
19
|
sendMessage: (
|
|
20
|
-
payload: Pick<FetchSsePayload, 'text'
|
|
20
|
+
payload: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>
|
|
21
21
|
) => void;
|
|
22
22
|
};
|
|
23
23
|
}
|
|
@@ -42,7 +42,7 @@ interface AsgardTemplateContextProviderProps extends PropsWithChildren {
|
|
|
42
42
|
}: {
|
|
43
43
|
sse: {
|
|
44
44
|
sendMessage: (
|
|
45
|
-
payload: Pick<FetchSsePayload, 'text'
|
|
45
|
+
payload: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>
|
|
46
46
|
) => void;
|
|
47
47
|
};
|
|
48
48
|
}
|
|
@@ -257,7 +257,7 @@ export function AsgardThemeContextProvider(
|
|
|
257
257
|
userMessage: {},
|
|
258
258
|
};
|
|
259
259
|
|
|
260
|
-
const tempTheme = deepMerge(defaultAsgardThemeContextValue, {
|
|
260
|
+
const tempTheme = deepMerge(defaultAsgardThemeContextValue as unknown as Record<string, unknown>, {
|
|
261
261
|
chatbot: {
|
|
262
262
|
backgroundColor: themeFromAnnotations.chatbot?.backgroundColor,
|
|
263
263
|
borderColor: themeFromAnnotations.chatbot?.borderColor,
|
package/src/hooks/use-channel.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
|
12
12
|
|
|
13
13
|
export interface UseChannelProps {
|
|
14
14
|
defaultIsOpen?: boolean;
|
|
15
|
-
resetPayload?: Pick<FetchSsePayload, 'text'
|
|
15
|
+
resetPayload?: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>;
|
|
16
16
|
client: AsgardServiceClient | null;
|
|
17
17
|
customChannelId: string;
|
|
18
18
|
customMessageId?: string;
|
|
@@ -30,8 +30,8 @@ export interface UseChannelReturn {
|
|
|
30
30
|
isResetting: boolean;
|
|
31
31
|
isConnecting: boolean;
|
|
32
32
|
conversation: Conversation | null;
|
|
33
|
-
sendMessage?: (payload: Pick<FetchSsePayload, 'text'
|
|
34
|
-
resetChannel?: (payload?: Pick<FetchSsePayload, 'text'
|
|
33
|
+
sendMessage?: (payload: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) => void;
|
|
34
|
+
resetChannel?: (payload?: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) => void;
|
|
35
35
|
closeChannel?: () => void;
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -61,7 +61,7 @@ export function useChannel(props: UseChannelProps): UseChannelReturn {
|
|
|
61
61
|
const [conversation, setConversation] = useState<Conversation | null>(null);
|
|
62
62
|
|
|
63
63
|
const resetChannel = useCallback(
|
|
64
|
-
async (payload?: Pick<FetchSsePayload, 'text'
|
|
64
|
+
async (payload?: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) => {
|
|
65
65
|
const conversation = new Conversation({
|
|
66
66
|
messages: new Map(
|
|
67
67
|
initMessages?.map((message) => [message.messageId, message])
|
|
@@ -106,7 +106,7 @@ export function useChannel(props: UseChannelProps): UseChannelReturn {
|
|
|
106
106
|
);
|
|
107
107
|
|
|
108
108
|
const closeChannel = useCallback(() => {
|
|
109
|
-
setChannel((prevChannel) => {
|
|
109
|
+
setChannel((prevChannel: Channel | null) => {
|
|
110
110
|
prevChannel?.close();
|
|
111
111
|
|
|
112
112
|
return null;
|
|
@@ -118,9 +118,9 @@ export function useChannel(props: UseChannelProps): UseChannelReturn {
|
|
|
118
118
|
}, []);
|
|
119
119
|
|
|
120
120
|
const sendMessage = useCallback(
|
|
121
|
-
(payload: Pick<FetchSsePayload, 'text'
|
|
122
|
-
channel?.sendMessage(payload),
|
|
123
|
-
[channel]
|
|
121
|
+
(payload: Pick<FetchSsePayload, 'text'> & Partial<Pick<FetchSsePayload, 'payload'>>) =>
|
|
122
|
+
channel?.sendMessage({ ...payload, customMessageId }),
|
|
123
|
+
[channel, customMessageId]
|
|
124
124
|
);
|
|
125
125
|
|
|
126
126
|
useEffect(() => {
|
package/src/utils/deep-merge.ts
CHANGED
|
@@ -2,21 +2,24 @@ export function isObject(item: unknown): item is Record<string, unknown> {
|
|
|
2
2
|
return item !== null && typeof item === 'object' && !Array.isArray(item);
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
export function deepMerge<T extends
|
|
5
|
+
export function deepMerge<T extends Record<string, unknown>, U extends Record<string, unknown>>(
|
|
6
6
|
target: T,
|
|
7
7
|
source: U
|
|
8
8
|
): T & U {
|
|
9
|
-
const output = { ...target } as
|
|
9
|
+
const output = { ...target } as T & U;
|
|
10
10
|
|
|
11
11
|
if (!source) return output;
|
|
12
12
|
|
|
13
13
|
for (const [key, value] of Object.entries(source)) {
|
|
14
14
|
if (!isObject(value)) {
|
|
15
|
-
output[key] = value;
|
|
15
|
+
(output as Record<string, unknown>)[key] = value;
|
|
16
16
|
continue;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
output[key] = deepMerge(
|
|
19
|
+
(output as Record<string, unknown>)[key] = deepMerge(
|
|
20
|
+
isObject((output as Record<string, unknown>)[key]) ? (output as Record<string, unknown>)[key] as Record<string, unknown> : {},
|
|
21
|
+
value as Record<string, unknown>
|
|
22
|
+
);
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
return output;
|
package/tsconfig.lib.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":[],"fileInfos":[],"root":[],"options":{"allowJs":false,"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"emitDecoratorMetadata":false,"esModuleInterop":true,"experimentalDecorators":false,"importHelpers":true,"module":99,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"removeComments":false,"rootDir":"../..","skipDefaultLibCheck":false,"skipLibCheck":true,"sourceMap":false,"strict":true,"target":99,"verbatimModuleSyntax":false},"version":"5.6.3"}
|