@servicetitan/titan-chatbot-ui-anvil2 3.2.1 → 4.0.0
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/CHANGELOG.md +17 -0
- package/dist/components/chatbot/chatbot.d.ts +3 -0
- package/dist/components/chatbot/chatbot.d.ts.map +1 -1
- package/dist/components/chatbot/chatbot.js +5 -3
- package/dist/components/chatbot/chatbot.js.map +1 -1
- package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.d.ts.map +1 -1
- package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.js +3 -2
- package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.js.map +1 -1
- package/dist/components/chatbot/feedback/chatbot-message-feedback.d.ts.map +1 -1
- package/dist/components/chatbot/feedback/chatbot-message-feedback.js +4 -5
- package/dist/components/chatbot/feedback/chatbot-message-feedback.js.map +1 -1
- package/dist/components/chatbot/messages/chatbot-message-welcome.d.ts.map +1 -1
- package/dist/components/chatbot/messages/chatbot-message-welcome.js +6 -1
- package/dist/components/chatbot/messages/chatbot-message-welcome.js.map +1 -1
- package/package.json +7 -7
- package/src/components/chatbot/chatbot.tsx +7 -3
- package/src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx +3 -1
- package/src/components/chatbot/feedback/chatbot-message-feedback.tsx +3 -6
- package/src/components/chatbot/messages/chatbot-message-welcome.tsx +18 -13
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
# v4.0.0 (Fri Sep 19 2025)
|
|
2
|
+
|
|
3
|
+
#### 💥 Breaking Change
|
|
4
|
+
|
|
5
|
+
- Bump cypress from 14.3.3 to 15.2.0 [#55](https://github.com/servicetitan/titan-chatbot-client/pull/55) ([@dependabot[bot]](https://github.com/dependabot[bot]))
|
|
6
|
+
|
|
7
|
+
#### 🚀 Enhancement
|
|
8
|
+
|
|
9
|
+
- SPA-7400: Rebrand Support Chatbot to Atlas [#56](https://github.com/servicetitan/titan-chatbot-client/pull/56) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
|
|
10
|
+
|
|
11
|
+
#### Authors: 2
|
|
12
|
+
|
|
13
|
+
- [@dependabot[bot]](https://github.com/dependabot[bot])
|
|
14
|
+
- Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
1
18
|
# v3.2.0 (Tue Sep 09 2025)
|
|
2
19
|
|
|
3
20
|
#### 🚀 Enhancement
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { ChatParticipantIcon } from '@servicetitan/titan-chat-ui-common';
|
|
1
2
|
import { ChatbotCustomizations } from '@servicetitan/titan-chatbot-api';
|
|
2
3
|
import { CSSProperties, FC } from 'react';
|
|
3
4
|
export interface IChatbotProps {
|
|
4
5
|
className?: string;
|
|
5
6
|
style?: CSSProperties;
|
|
6
7
|
customizations?: ChatbotCustomizations;
|
|
8
|
+
botIcon?: ChatParticipantIcon;
|
|
9
|
+
botName?: string;
|
|
7
10
|
onReady?: () => void;
|
|
8
11
|
}
|
|
9
12
|
export declare const Chatbot: FC<IChatbotProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot.d.ts","sourceRoot":"","sources":["../../../src/components/chatbot/chatbot.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chatbot.d.ts","sourceRoot":"","sources":["../../../src/components/chatbot/chatbot.tsx"],"names":[],"mappings":"AAGA,OAAO,EAIH,mBAAmB,EACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGH,qBAAqB,EACxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAsB,MAAM,OAAO,CAAC;AAU9D,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,aAAa,CAoErC,CAAC"}
|
|
@@ -14,15 +14,15 @@ import { ChatbotMessageTimeout } from './messages/chatbot-message-timeout';
|
|
|
14
14
|
import { ChatbotMessageTyping } from './messages/chatbot-message-typing';
|
|
15
15
|
import { ChatbotMessageWelcome } from './messages/chatbot-message-welcome';
|
|
16
16
|
import { ChatbotMessageTemplateAgent } from './templates/chatbot-message-template-agent';
|
|
17
|
-
export const Chatbot = observer(({ className, customizations, onReady, style }) => {
|
|
17
|
+
export const Chatbot = observer(({ botIcon, botName, className, customizations, onReady, style }) => {
|
|
18
18
|
var _a;
|
|
19
19
|
const [chatUiStore, chatUiBackendStore] = useDependencies(CHATBOT_UI_STORE_TOKEN, CHATBOT_UI_BACKEND_STORE_TOKEN);
|
|
20
20
|
useEffect(() => {
|
|
21
21
|
const init = async () => {
|
|
22
22
|
chatUiBackendStore.subscribe();
|
|
23
23
|
await chatUiStore.run({
|
|
24
|
-
agentName: 'Titan',
|
|
25
|
-
agentIcon: ChatParticipantIcon.Bot,
|
|
24
|
+
agentName: botName !== null && botName !== void 0 ? botName : 'Titan',
|
|
25
|
+
agentIcon: botIcon !== null && botIcon !== void 0 ? botIcon : ChatParticipantIcon.Bot,
|
|
26
26
|
});
|
|
27
27
|
onReady === null || onReady === void 0 ? void 0 : onReady();
|
|
28
28
|
};
|
|
@@ -38,6 +38,8 @@ export const Chatbot = observer(({ className, customizations, onReady, style })
|
|
|
38
38
|
component: ChatbotMessageTemplateAgent,
|
|
39
39
|
};
|
|
40
40
|
return {
|
|
41
|
+
loadingComponent: customizations === null || customizations === void 0 ? void 0 : customizations.loadingComponent,
|
|
42
|
+
input: customizations === null || customizations === void 0 ? void 0 : customizations.input,
|
|
41
43
|
error: customizations === null || customizations === void 0 ? void 0 : customizations.error,
|
|
42
44
|
filters: customizations === null || customizations === void 0 ? void 0 : customizations.filters,
|
|
43
45
|
feedback: customizations === null || customizations === void 0 ? void 0 : customizations.feedback,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot.js","sourceRoot":"","sources":["../../../src/components/chatbot/chatbot.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAIH,mBAAmB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,8BAA8B,EAC9B,sBAAsB,GAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAqB,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"chatbot.js","sourceRoot":"","sources":["../../../src/components/chatbot/chatbot.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-message-feedback-popover.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx"],"names":[],"mappings":"AAMA,OAAO,EAKH,MAAM,
|
|
1
|
+
{"version":3,"file":"chatbot-message-feedback-popover.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx"],"names":[],"mappings":"AAMA,OAAO,EAKH,MAAM,EAET,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,EAAE,EAAmD,MAAM,OAAO,CAAC;AAK5E,UAAU,4BAA4B;IAClC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,6BAA6B,EAAE,EAAE,CAAC,4BAA4B,CAsL1E,CAAC"}
|
|
@@ -5,7 +5,7 @@ import IconError from '@servicetitan/anvil2/assets/icons/material/round/error.sv
|
|
|
5
5
|
import IconThumbDown from '@servicetitan/anvil2/assets/icons/material/round/thumb_down.svg';
|
|
6
6
|
import IconThumbUp from '@servicetitan/anvil2/assets/icons/material/round/thumb_up.svg';
|
|
7
7
|
import { provide, useDependencies } from '@servicetitan/react-ioc';
|
|
8
|
-
import { CHATBOT_UI_STORE_TOKEN, MessageFeedbackGuardrailStore, MessageFeedbackStore, Models, } from '@servicetitan/titan-chatbot-api';
|
|
8
|
+
import { CHATBOT_UI_STORE_TOKEN, MessageFeedbackGuardrailStore, MessageFeedbackStore, Models, useCustomizationChatbot, } from '@servicetitan/titan-chatbot-api';
|
|
9
9
|
import classNames from 'classnames';
|
|
10
10
|
import { observer } from 'mobx-react';
|
|
11
11
|
import { Fragment, useCallback, useState } from 'react';
|
|
@@ -16,10 +16,11 @@ export const ChatbotMessageFeedbackPopover = provide({
|
|
|
16
16
|
singletons: [MessageFeedbackStore, MessageFeedbackGuardrailStore],
|
|
17
17
|
})(observer(({ botMessage, className }) => {
|
|
18
18
|
var _a;
|
|
19
|
+
const customization = useCustomizationChatbot();
|
|
19
20
|
const [chatbotUiStore, messageFeedbackStore, messageFeedbackGuardrailStore] = useDependencies(CHATBOT_UI_STORE_TOKEN, MessageFeedbackStore, MessageFeedbackGuardrailStore);
|
|
20
21
|
const [feedbackState, setFeedbackState] = useState(Models.ChatbotFeedbackState.None);
|
|
21
22
|
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
|
|
22
|
-
const title = (_a =
|
|
23
|
+
const title = (_a = customization.feedback) === null || _a === void 0 ? void 0 : _a.title;
|
|
23
24
|
const isGuardrail = botMessage.isGuardrailed;
|
|
24
25
|
const feedbackStore = isGuardrail
|
|
25
26
|
? messageFeedbackGuardrailStore
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-message-feedback-popover.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,SAAS,MAAM,4DAA4D,CAAC;AACnF,OAAO,SAAS,MAAM,4DAA4D,CAAC;AACnF,OAAO,aAAa,MAAM,iEAAiE,CAAC;AAC5F,OAAO,WAAW,MAAM,+DAA+D,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACH,sBAAsB,EAEtB,6BAA6B,EAC7B,oBAAoB,EACpB,MAAM,
|
|
1
|
+
{"version":3,"file":"chatbot-message-feedback-popover.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-message-feedback.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chatbot-message-feedback.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA2B,MAAM,iCAAiC,CAAC;AAElF,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,UAAU,qBAAqB;IAC3B,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,qBAAqB,CAa5D,CAAC"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
|
|
2
|
+
import { useCustomizationChatbot } from '@servicetitan/titan-chatbot-api';
|
|
4
3
|
import { observer } from 'mobx-react';
|
|
5
4
|
import { ChatbotMessageFeedbackPopover } from './chatbot-message-feedback-popover';
|
|
6
5
|
export const ChatbotMessageFeedback = observer(({ botMessage, className }) => {
|
|
7
|
-
var _a
|
|
8
|
-
const
|
|
6
|
+
var _a;
|
|
7
|
+
const customization = useCustomizationChatbot();
|
|
9
8
|
// We show feedback for all messages with normal answer and for guardrailed messages if internal chatbot setting is enabled
|
|
10
|
-
const showGuardrailFeedback = Boolean((
|
|
9
|
+
const showGuardrailFeedback = Boolean((_a = customization === null || customization === void 0 ? void 0 : customization.feedback) === null || _a === void 0 ? void 0 : _a.showGuardrailFeedback);
|
|
11
10
|
const isFeedbackVisible = showGuardrailFeedback || !botMessage.isGuardrailed;
|
|
12
11
|
if (!isFeedbackVisible) {
|
|
13
12
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-message-feedback.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback.tsx"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"chatbot-message-feedback.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAOnF,MAAM,CAAC,MAAM,sBAAsB,GAA8B,QAAQ,CACrE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;;IAC1B,MAAM,aAAa,GAAG,uBAAuB,EAAE,CAAC;IAEhD,2HAA2H;IAC3H,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,0CAAE,qBAAqB,CAAC,CAAC;IACtF,MAAM,iBAAiB,GAAG,qBAAqB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IAE7E,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAC,6BAA6B,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAI,CAAC;AAC3F,CAAC,CACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-message-welcome.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/messages/chatbot-message-welcome.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chatbot-message-welcome.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/messages/chatbot-message-welcome.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,eAAO,MAAM,qBAAqB,EAAE,EAenC,CAAC"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Text } from '@servicetitan/anvil2';
|
|
3
|
-
|
|
3
|
+
import { useDependencies } from '@servicetitan/react-ioc';
|
|
4
|
+
import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
|
|
5
|
+
export const ChatbotMessageWelcome = () => {
|
|
6
|
+
const [chatbotUiStore] = useDependencies(CHATBOT_UI_STORE_TOKEN);
|
|
7
|
+
return (_jsxs(Text, { children: ["Hi there! I\u2019m ", chatbotUiStore.agent.name, ", an AI chatbot.", _jsx("br", {}), _jsx("br", {}), _jsx("b", { children: "Have a question?" }), " Ask me anything about how ServiceTitan works.", _jsx("br", {}), _jsx("b", { children: "Need help?" }), " If I can\u2019t solve your issue, I\u2019ll guide you through submitting a support case.", _jsx("br", {}), "Let\u2019s get started - how can I assist you today?"] }));
|
|
8
|
+
};
|
|
4
9
|
//# sourceMappingURL=chatbot-message-welcome.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-message-welcome.js","sourceRoot":"","sources":["../../../../src/components/chatbot/messages/chatbot-message-welcome.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"chatbot-message-welcome.js","sourceRoot":"","sources":["../../../../src/components/chatbot/messages/chatbot-message-welcome.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,MAAM,CAAC,MAAM,qBAAqB,GAAO,GAAG,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,sBAAsB,CAAC,CAAC;IACjE,OAAO,CACH,MAAC,IAAI,sCACc,cAAc,CAAC,KAAK,CAAC,IAAI,sBACxC,cAAM,EACN,cAAM,EACN,2CAAuB,oDACvB,cAAM,EACN,qCAAiB,+FAEjB,cAAM,4DAEH,CACV,CAAC;AACN,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/titan-chatbot-ui-anvil2",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Chatbot experience UI package (Anvil2 version)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"push:local": "yalc push"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@servicetitan/titan-chat-ui-anvil2": "^
|
|
21
|
-
"@servicetitan/titan-chat-ui-common": "^
|
|
22
|
-
"@servicetitan/titan-chatbot-api": "^
|
|
20
|
+
"@servicetitan/titan-chat-ui-anvil2": "^4.0.0",
|
|
21
|
+
"@servicetitan/titan-chat-ui-common": "^4.0.0",
|
|
22
|
+
"@servicetitan/titan-chatbot-api": "^4.0.0",
|
|
23
23
|
"nanoid": "^5.1.5"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"react-dom": ">=18"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@servicetitan/cypress-shared": "^
|
|
40
|
-
"cypress": "^
|
|
39
|
+
"@servicetitan/cypress-shared": "^4.0.0",
|
|
40
|
+
"cypress": "^15.2.0"
|
|
41
41
|
},
|
|
42
42
|
"keywords": [
|
|
43
43
|
"ServiceTitan"
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"cli": {
|
|
50
50
|
"webpack": false
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "8fcc85c992c16ff2ed52eac25557a7cefb1725b3"
|
|
53
53
|
}
|
|
@@ -27,11 +27,13 @@ export interface IChatbotProps {
|
|
|
27
27
|
className?: string;
|
|
28
28
|
style?: CSSProperties;
|
|
29
29
|
customizations?: ChatbotCustomizations;
|
|
30
|
+
botIcon?: ChatParticipantIcon;
|
|
31
|
+
botName?: string;
|
|
30
32
|
onReady?: () => void;
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
export const Chatbot: FC<IChatbotProps> = observer(
|
|
34
|
-
({ className, customizations, onReady, style }) => {
|
|
36
|
+
({ botIcon, botName, className, customizations, onReady, style }) => {
|
|
35
37
|
const [chatUiStore, chatUiBackendStore] = useDependencies(
|
|
36
38
|
CHATBOT_UI_STORE_TOKEN,
|
|
37
39
|
CHATBOT_UI_BACKEND_STORE_TOKEN
|
|
@@ -40,8 +42,8 @@ export const Chatbot: FC<IChatbotProps> = observer(
|
|
|
40
42
|
const init = async () => {
|
|
41
43
|
chatUiBackendStore.subscribe();
|
|
42
44
|
await chatUiStore.run({
|
|
43
|
-
agentName: 'Titan',
|
|
44
|
-
agentIcon: ChatParticipantIcon.Bot,
|
|
45
|
+
agentName: botName ?? 'Titan',
|
|
46
|
+
agentIcon: botIcon ?? ChatParticipantIcon.Bot,
|
|
45
47
|
});
|
|
46
48
|
onReady?.();
|
|
47
49
|
};
|
|
@@ -57,6 +59,8 @@ export const Chatbot: FC<IChatbotProps> = observer(
|
|
|
57
59
|
component: ChatbotMessageTemplateAgent,
|
|
58
60
|
};
|
|
59
61
|
return {
|
|
62
|
+
loadingComponent: customizations?.loadingComponent,
|
|
63
|
+
input: customizations?.input,
|
|
60
64
|
error: customizations?.error,
|
|
61
65
|
filters: customizations?.filters,
|
|
62
66
|
feedback: customizations?.feedback,
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
MessageFeedbackGuardrailStore,
|
|
11
11
|
MessageFeedbackStore,
|
|
12
12
|
Models,
|
|
13
|
+
useCustomizationChatbot,
|
|
13
14
|
} from '@servicetitan/titan-chatbot-api';
|
|
14
15
|
import classNames from 'classnames';
|
|
15
16
|
import { observer } from 'mobx-react';
|
|
@@ -27,6 +28,7 @@ export const ChatbotMessageFeedbackPopover: FC<IChatbotMessageFeedbackProps> = p
|
|
|
27
28
|
singletons: [MessageFeedbackStore, MessageFeedbackGuardrailStore],
|
|
28
29
|
})(
|
|
29
30
|
observer(({ botMessage, className }) => {
|
|
31
|
+
const customization = useCustomizationChatbot();
|
|
30
32
|
const [chatbotUiStore, messageFeedbackStore, messageFeedbackGuardrailStore] =
|
|
31
33
|
useDependencies(
|
|
32
34
|
CHATBOT_UI_STORE_TOKEN,
|
|
@@ -37,7 +39,7 @@ export const ChatbotMessageFeedbackPopover: FC<IChatbotMessageFeedbackProps> = p
|
|
|
37
39
|
Models.ChatbotFeedbackState.None
|
|
38
40
|
);
|
|
39
41
|
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
|
|
40
|
-
const title =
|
|
42
|
+
const title = customization.feedback?.title;
|
|
41
43
|
const isGuardrail = botMessage.isGuardrailed;
|
|
42
44
|
const feedbackStore: IMessageFeedbackBaseStore = isGuardrail
|
|
43
45
|
? messageFeedbackGuardrailStore
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CHATBOT_UI_STORE_TOKEN, Models } from '@servicetitan/titan-chatbot-api';
|
|
1
|
+
import { Models, useCustomizationChatbot } from '@servicetitan/titan-chatbot-api';
|
|
3
2
|
import { observer } from 'mobx-react';
|
|
4
3
|
import { FC } from 'react';
|
|
5
4
|
import { ChatbotMessageFeedbackPopover } from './chatbot-message-feedback-popover';
|
|
@@ -11,12 +10,10 @@ interface IChatbotFeedbackProps {
|
|
|
11
10
|
|
|
12
11
|
export const ChatbotMessageFeedback: FC<IChatbotFeedbackProps> = observer(
|
|
13
12
|
({ botMessage, className }) => {
|
|
14
|
-
const
|
|
13
|
+
const customization = useCustomizationChatbot();
|
|
15
14
|
|
|
16
15
|
// We show feedback for all messages with normal answer and for guardrailed messages if internal chatbot setting is enabled
|
|
17
|
-
const showGuardrailFeedback = Boolean(
|
|
18
|
-
chatbotUiStore.customizations?.feedback?.showGuardrailFeedback
|
|
19
|
-
);
|
|
16
|
+
const showGuardrailFeedback = Boolean(customization?.feedback?.showGuardrailFeedback);
|
|
20
17
|
const isFeedbackVisible = showGuardrailFeedback || !botMessage.isGuardrailed;
|
|
21
18
|
|
|
22
19
|
if (!isFeedbackVisible) {
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { Text } from '@servicetitan/anvil2';
|
|
2
|
+
import { useDependencies } from '@servicetitan/react-ioc';
|
|
3
|
+
import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
|
|
2
4
|
import { FC } from 'react';
|
|
3
5
|
|
|
4
|
-
export const ChatbotMessageWelcome: FC = () =>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
export const ChatbotMessageWelcome: FC = () => {
|
|
7
|
+
const [chatbotUiStore] = useDependencies(CHATBOT_UI_STORE_TOKEN);
|
|
8
|
+
return (
|
|
9
|
+
<Text>
|
|
10
|
+
Hi there! I’m {chatbotUiStore.agent.name}, an AI chatbot.
|
|
11
|
+
<br />
|
|
12
|
+
<br />
|
|
13
|
+
<b>Have a question?</b> Ask me anything about how ServiceTitan works.
|
|
14
|
+
<br />
|
|
15
|
+
<b>Need help?</b> If I can’t solve your issue, I’ll guide you through submitting a
|
|
16
|
+
support case.
|
|
17
|
+
<br />
|
|
18
|
+
Let’s get started - how can I assist you today?
|
|
19
|
+
</Text>
|
|
20
|
+
);
|
|
21
|
+
};
|