@servicetitan/anvil2-ext-atlas 0.0.13 → 0.1.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 +18 -0
- package/dist/_commonjsHelpers-B85MJLTf.js +6 -0
- package/dist/_commonjsHelpers-B85MJLTf.js.map +1 -0
- package/dist/atlas-header-jdAIcEpa.js +23 -0
- package/dist/atlas-header-jdAIcEpa.js.map +1 -0
- package/dist/atlas-header.d.ts +2 -0
- package/dist/atlas-header.js +2 -0
- package/dist/atlas-header.js.map +1 -0
- package/dist/chat-composer-rich-BM5hoC1f.js +162 -0
- package/dist/chat-composer-rich-BM5hoC1f.js.map +1 -0
- package/dist/chat-composer-rich.css +119 -0
- package/dist/chat-composer-rich.d.ts +2 -0
- package/dist/chat-composer-rich.js +2 -0
- package/dist/chat-composer-rich.js.map +1 -0
- package/dist/chat-window-BEkLTYNg.js +76 -0
- package/dist/chat-window-BEkLTYNg.js.map +1 -0
- package/dist/chat-window.css +49 -0
- package/dist/chat.d.ts +2 -0
- package/dist/chat.js +2 -0
- package/dist/chat.js.map +1 -0
- package/dist/components/atlas-header/atlas-header.d.ts +21 -0
- package/dist/components/atlas-header/index.d.ts +2 -0
- package/dist/components/chat/chat-window.d.ts +13 -0
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat-composer-rich/chat-composer-rich.d.ts +23 -0
- package/dist/components/chat-composer-rich/index.d.ts +2 -0
- package/dist/components/content/content.d.ts +7 -0
- package/dist/components/content/index.d.ts +1 -0
- package/dist/components/footer/footer.d.ts +16 -0
- package/dist/components/footer/index.d.ts +2 -0
- package/dist/components/header/header.d.ts +23 -0
- package/dist/components/header/index.d.ts +2 -0
- package/dist/components/index.d.ts +16 -1
- package/dist/components/infinite-content/hooks/use-infinite-scroll.d.ts +11 -0
- package/dist/components/infinite-content/hooks/use-scroll-callback.d.ts +11 -0
- package/dist/components/infinite-content/index.d.ts +2 -0
- package/dist/components/infinite-content/infinite-content.d.ts +17 -0
- package/dist/components/loader/index.d.ts +1 -0
- package/dist/components/loader/loader.d.ts +2 -0
- package/dist/components/markdown-text/index.d.ts +2 -0
- package/dist/components/markdown-text/markdown-text.d.ts +5 -0
- package/dist/components/messages/assistant-message.d.ts +10 -0
- package/dist/components/messages/error-message.d.ts +8 -0
- package/dist/components/messages/index.d.ts +6 -0
- package/dist/components/messages/markdown-message.d.ts +13 -0
- package/dist/components/messages/message-interface.d.ts +4 -0
- package/dist/components/messages/small-action.d.ts +13 -0
- package/dist/components/messages/system-message.d.ts +18 -0
- package/dist/components/messages/user-message.d.ts +13 -0
- package/dist/components/notification-card/index.d.ts +1 -0
- package/dist/components/notification-card/notification-card.d.ts +10 -0
- package/dist/components/recommendations/confirmation-card/confirmation-card.d.ts +10 -0
- package/dist/components/recommendations/confirmation-card/index.d.ts +1 -0
- package/dist/components/recommendations/index.d.ts +4 -0
- package/dist/components/recommendations/multiple-recommendation-card/index.d.ts +1 -0
- package/dist/components/recommendations/multiple-recommendation-card/multiple-recommendation-card.d.ts +7 -0
- package/dist/components/recommendations/shared-interfaces.d.ts +26 -0
- package/dist/components/recommendations/single-recommendation-card/index.d.ts +1 -0
- package/dist/components/recommendations/single-recommendation-card/single-recommendation-card.d.ts +7 -0
- package/dist/components/screens/index.d.ts +1 -0
- package/dist/components/screens/system-error.d.ts +10 -0
- package/dist/components/screens/welcome.d.ts +8 -0
- package/dist/components/spinner/index.d.ts +1 -0
- package/dist/components/spinner/spinner.d.ts +1 -0
- package/dist/components/suggestion/index.d.ts +1 -0
- package/dist/components/suggestion/suggestion.d.ts +11 -0
- package/dist/components/toolbox/index.d.ts +2 -0
- package/dist/components/toolbox/toolbox.d.ts +12 -0
- package/dist/components/toolbox/toolbox.enums.d.ts +5 -0
- package/dist/content-acT_RzNQ.js +55 -0
- package/dist/content-acT_RzNQ.js.map +1 -0
- package/dist/content.css +10 -0
- package/dist/content.d.ts +2 -0
- package/dist/content.js +2 -0
- package/dist/content.js.map +1 -0
- package/dist/footer-DezXey1O.js +86 -0
- package/dist/footer-DezXey1O.js.map +1 -0
- package/dist/footer.css +12 -0
- package/dist/footer.d.ts +2 -0
- package/dist/footer.js +2 -0
- package/dist/footer.js.map +1 -0
- package/dist/header-DgkrbsFN.js +171 -0
- package/dist/header-DgkrbsFN.js.map +1 -0
- package/dist/header.css +23 -0
- package/dist/header.d.ts +2 -0
- package/dist/header.js +2 -0
- package/dist/header.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/use-draggable.d.ts +18 -0
- package/dist/index-DDXI3m_u.js +73 -0
- package/dist/index-DDXI3m_u.js.map +1 -0
- package/dist/index-DFEn2XpE.js +24643 -0
- package/dist/index-DFEn2XpE.js.map +1 -0
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/infinite-content-B4ojfnZH.js +144 -0
- package/dist/infinite-content-B4ojfnZH.js.map +1 -0
- package/dist/infinite-content.css +25 -0
- package/dist/infinite-content.d.ts +2 -0
- package/dist/infinite-content.js +2 -0
- package/dist/infinite-content.js.map +1 -0
- package/dist/loader-DYmcO1Y_.js +48 -0
- package/dist/loader-DYmcO1Y_.js.map +1 -0
- package/dist/loader.d.ts +2 -0
- package/dist/loader.js +2 -0
- package/dist/loader.js.map +1 -0
- package/dist/markdown-text-CKN0oo8R.js +13 -0
- package/dist/markdown-text-CKN0oo8R.js.map +1 -0
- package/dist/markdown-text.css +45 -0
- package/dist/markdown-text.d.ts +2 -0
- package/dist/markdown-text.js +2 -0
- package/dist/markdown-text.js.map +1 -0
- package/dist/messages.d.ts +2 -0
- package/dist/messages.js +2 -0
- package/dist/messages.js.map +1 -0
- package/dist/notification-card-B38ZC7k4.js +59 -0
- package/dist/notification-card-B38ZC7k4.js.map +1 -0
- package/dist/notification-card.d.ts +2 -0
- package/dist/notification-card.js +2 -0
- package/dist/notification-card.js.map +1 -0
- package/dist/proxy-B3m3ViIw.js +9928 -0
- package/dist/proxy-B3m3ViIw.js.map +1 -0
- package/dist/recommendations.d.ts +2 -0
- package/dist/recommendations.js +2 -0
- package/dist/recommendations.js.map +1 -0
- package/dist/screens.d.ts +2 -0
- package/dist/screens.js +2 -0
- package/dist/screens.js.map +1 -0
- package/dist/single-recommendation-card-G78KiWnb.js +199 -0
- package/dist/single-recommendation-card-G78KiWnb.js.map +1 -0
- package/dist/spinner-QnlThoJs.js +23 -0
- package/dist/spinner-QnlThoJs.js.map +1 -0
- package/dist/spinner.css +21 -0
- package/dist/spinner.d.ts +2 -0
- package/dist/spinner.js +2 -0
- package/dist/spinner.js.map +1 -0
- package/dist/suggestion-pJLJZyjg.js +33 -0
- package/dist/suggestion-pJLJZyjg.js.map +1 -0
- package/dist/suggestion.d.ts +2 -0
- package/dist/suggestion.js +2 -0
- package/dist/suggestion.js.map +1 -0
- package/dist/toolbox-B-mWIaVL.js +272 -0
- package/dist/toolbox-B-mWIaVL.js.map +1 -0
- package/dist/toolbox.d.ts +2 -0
- package/dist/toolbox.js +2 -0
- package/dist/toolbox.js.map +1 -0
- package/dist/user-message-DCOP95qA.js +247 -0
- package/dist/user-message-DCOP95qA.js.map +1 -0
- package/dist/user-message.css +170 -0
- package/dist/welcome-BY6k2z0K.js +57 -0
- package/dist/welcome-BY6k2z0K.js.map +1 -0
- package/dist/welcome.css +23 -0
- package/package.json +25 -13
- package/dist/DummyComponent-ac_BQfhC.js +0 -8
- package/dist/DummyComponent-ac_BQfhC.js.map +0 -1
- package/dist/DummyComponent.d.ts +0 -2
- package/dist/DummyComponent.js +0 -2
- package/dist/DummyComponent.js.map +0 -1
- package/dist/components/DummyComponent/DummyComponent.d.ts +0 -1
- package/dist/components/DummyComponent/index.d.ts +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommendations.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/screens.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screens.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
import { Flex, Text, Card, Button, Link, Checkbox, Overflow, RadioGroup, Radio } from '@servicetitan/anvil2';
|
|
4
|
+
import { A as AtlasHeader } from './atlas-header-jdAIcEpa.js';
|
|
5
|
+
|
|
6
|
+
const ConfirmationCard = ({
|
|
7
|
+
recommendationId,
|
|
8
|
+
actions,
|
|
9
|
+
message,
|
|
10
|
+
onSubmit,
|
|
11
|
+
description,
|
|
12
|
+
className,
|
|
13
|
+
submitted
|
|
14
|
+
}) => {
|
|
15
|
+
const { buttonActions, linkActions } = useMemo(() => {
|
|
16
|
+
const buttons = [];
|
|
17
|
+
const links = [];
|
|
18
|
+
actions.forEach((action) => {
|
|
19
|
+
if (action.type?.toLowerCase() === "link") {
|
|
20
|
+
links.push(action);
|
|
21
|
+
} else {
|
|
22
|
+
buttons.push(action);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return { buttonActions: buttons, linkActions: links };
|
|
26
|
+
}, [actions]);
|
|
27
|
+
const handleSubmit = (action) => {
|
|
28
|
+
onSubmit({
|
|
29
|
+
sourceMessageId: recommendationId,
|
|
30
|
+
optionIds: [],
|
|
31
|
+
actionId: action.id,
|
|
32
|
+
parameters: {
|
|
33
|
+
url: action.url
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
return /* @__PURE__ */ jsxs(Flex, { direction: "column", className, children: [
|
|
38
|
+
/* @__PURE__ */ jsx(AtlasHeader, {}),
|
|
39
|
+
/* @__PURE__ */ jsx(Text, { size: "medium", children: message }),
|
|
40
|
+
/* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 3, children: [
|
|
41
|
+
description && /* @__PURE__ */ jsx(Text, { size: "small", children: description }),
|
|
42
|
+
/* @__PURE__ */ jsxs(Flex, { alignItems: "flex-start", gap: 1, children: [
|
|
43
|
+
buttonActions.map((action) => /* @__PURE__ */ jsx(
|
|
44
|
+
Button,
|
|
45
|
+
{
|
|
46
|
+
size: "medium",
|
|
47
|
+
appearance: action.type?.toLowerCase() ?? "primary",
|
|
48
|
+
onClick: () => handleSubmit(action),
|
|
49
|
+
disabled: submitted,
|
|
50
|
+
children: action.name
|
|
51
|
+
},
|
|
52
|
+
action.id
|
|
53
|
+
)),
|
|
54
|
+
linkActions.map((action) => /* @__PURE__ */ jsx(
|
|
55
|
+
Link,
|
|
56
|
+
{
|
|
57
|
+
quiet: true,
|
|
58
|
+
appearance: "primary",
|
|
59
|
+
onClick: () => handleSubmit(action),
|
|
60
|
+
children: action.name
|
|
61
|
+
},
|
|
62
|
+
action.id
|
|
63
|
+
))
|
|
64
|
+
] })
|
|
65
|
+
] }) })
|
|
66
|
+
] });
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const MultipleRecommendationCard = ({
|
|
70
|
+
recommendationId,
|
|
71
|
+
message,
|
|
72
|
+
options,
|
|
73
|
+
actions,
|
|
74
|
+
onSubmit,
|
|
75
|
+
submitted,
|
|
76
|
+
selected
|
|
77
|
+
}) => {
|
|
78
|
+
const [localSelectedValues, setLocalSelectedValues] = useState([]);
|
|
79
|
+
const handleCheckboxChange = (value, checked) => {
|
|
80
|
+
if (checked) {
|
|
81
|
+
setLocalSelectedValues((prev) => [...prev, value]);
|
|
82
|
+
} else {
|
|
83
|
+
setLocalSelectedValues((prev) => prev.filter((v) => v !== value));
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const handleSubmit = (id) => {
|
|
87
|
+
onSubmit({
|
|
88
|
+
sourceMessageId: recommendationId,
|
|
89
|
+
optionIds: localSelectedValues,
|
|
90
|
+
actionId: id
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
return /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
|
|
94
|
+
/* @__PURE__ */ jsx(AtlasHeader, {}),
|
|
95
|
+
/* @__PURE__ */ jsx(Text, { size: "medium", children: message }),
|
|
96
|
+
/* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, children: [
|
|
97
|
+
options?.map((option) => /* @__PURE__ */ jsx(
|
|
98
|
+
Checkbox,
|
|
99
|
+
{
|
|
100
|
+
disabled: submitted,
|
|
101
|
+
name: "action",
|
|
102
|
+
value: option.id,
|
|
103
|
+
checked: !submitted ? localSelectedValues.includes(option.id ?? "") : selected?.includes(option.id),
|
|
104
|
+
onChange: (e) => handleCheckboxChange(
|
|
105
|
+
option.id ?? "",
|
|
106
|
+
e?.target?.checked ?? false
|
|
107
|
+
),
|
|
108
|
+
label: option.label,
|
|
109
|
+
description: option.description ? /* @__PURE__ */ jsx(
|
|
110
|
+
Overflow.Text,
|
|
111
|
+
{
|
|
112
|
+
rows: 2,
|
|
113
|
+
expandable: true,
|
|
114
|
+
expandText: "Show more...",
|
|
115
|
+
collapseText: "Show less...",
|
|
116
|
+
children: option.description && /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: option.description })
|
|
117
|
+
}
|
|
118
|
+
) : void 0
|
|
119
|
+
},
|
|
120
|
+
option.id
|
|
121
|
+
)),
|
|
122
|
+
/* @__PURE__ */ jsx(Flex, { justifyContent: "flex-start", gap: 2, children: actions?.map((action) => /* @__PURE__ */ jsx(
|
|
123
|
+
Button,
|
|
124
|
+
{
|
|
125
|
+
size: "medium",
|
|
126
|
+
appearance: action.type?.toLowerCase() ?? "primary",
|
|
127
|
+
onClick: () => handleSubmit(action.id),
|
|
128
|
+
disabled: submitted,
|
|
129
|
+
children: action.name
|
|
130
|
+
},
|
|
131
|
+
action.id
|
|
132
|
+
)) })
|
|
133
|
+
] }) })
|
|
134
|
+
] });
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const SingleRecommendationCard = ({
|
|
138
|
+
recommendationId,
|
|
139
|
+
message,
|
|
140
|
+
options,
|
|
141
|
+
actions,
|
|
142
|
+
onSubmit,
|
|
143
|
+
submitted = false,
|
|
144
|
+
selected
|
|
145
|
+
}) => {
|
|
146
|
+
const [localSelectedValue, setLocalSelectedValue] = useState("");
|
|
147
|
+
const handleRadioChange = (value) => {
|
|
148
|
+
setLocalSelectedValue(value);
|
|
149
|
+
};
|
|
150
|
+
const handleSubmit = (id) => {
|
|
151
|
+
onSubmit({
|
|
152
|
+
sourceMessageId: recommendationId,
|
|
153
|
+
optionIds: localSelectedValue ? [localSelectedValue] : [],
|
|
154
|
+
actionId: id
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
return /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
|
|
158
|
+
/* @__PURE__ */ jsx(AtlasHeader, {}),
|
|
159
|
+
/* @__PURE__ */ jsx(Text, { size: "medium", children: message }),
|
|
160
|
+
/* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, children: [
|
|
161
|
+
/* @__PURE__ */ jsx(RadioGroup, { children: options?.map((option) => /* @__PURE__ */ jsx(
|
|
162
|
+
Radio,
|
|
163
|
+
{
|
|
164
|
+
disabled: submitted,
|
|
165
|
+
name: "action",
|
|
166
|
+
value: option.id,
|
|
167
|
+
checked: !submitted ? localSelectedValue === option.id : selected?.includes(option.id ?? ""),
|
|
168
|
+
onChange: () => handleRadioChange(option.id),
|
|
169
|
+
label: option.label,
|
|
170
|
+
description: option.description ? /* @__PURE__ */ jsx(
|
|
171
|
+
Overflow.Text,
|
|
172
|
+
{
|
|
173
|
+
rows: 2,
|
|
174
|
+
expandable: true,
|
|
175
|
+
expandText: "Show more...",
|
|
176
|
+
collapseText: "Show less...",
|
|
177
|
+
children: option.description && /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: option.description })
|
|
178
|
+
}
|
|
179
|
+
) : void 0
|
|
180
|
+
},
|
|
181
|
+
option.id
|
|
182
|
+
)) }),
|
|
183
|
+
/* @__PURE__ */ jsx(Flex, { justifyContent: "flex-start", gap: 2, children: actions?.map((action) => /* @__PURE__ */ jsx(
|
|
184
|
+
Button,
|
|
185
|
+
{
|
|
186
|
+
size: "medium",
|
|
187
|
+
appearance: action.type?.toLowerCase() ?? "primary",
|
|
188
|
+
onClick: () => handleSubmit(action.id),
|
|
189
|
+
disabled: submitted || !localSelectedValue,
|
|
190
|
+
children: action.name
|
|
191
|
+
},
|
|
192
|
+
action.id
|
|
193
|
+
)) })
|
|
194
|
+
] }) })
|
|
195
|
+
] });
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export { ConfirmationCard as C, MultipleRecommendationCard as M, SingleRecommendationCard as S };
|
|
199
|
+
//# sourceMappingURL=single-recommendation-card-G78KiWnb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-recommendation-card-G78KiWnb.js","sources":["../src/components/recommendations/confirmation-card/confirmation-card.tsx","../src/components/recommendations/multiple-recommendation-card/multiple-recommendation-card.tsx","../src/components/recommendations/single-recommendation-card/single-recommendation-card.tsx"],"sourcesContent":["import { FC, useMemo } from \"react\";\nimport {\n Button,\n ButtonAppearance,\n Card,\n Flex,\n Link,\n Text,\n} from \"@servicetitan/anvil2\";\n\nimport {\n BaseRecommendationProps,\n ConfirmationResponse,\n RecommendationAction,\n} from \"../shared-interfaces\";\nimport { AtlasHeader } from \"../../atlas-header\";\n\nexport interface ConfirmationRecommendationProps extends BaseRecommendationProps {\n recommendationId?: string;\n message: string;\n description?: string;\n onSubmit: (confirmationResponse: ConfirmationResponse) => void;\n className?: string;\n}\n\nexport const ConfirmationCard: FC<ConfirmationRecommendationProps> = ({\n recommendationId,\n actions,\n message,\n onSubmit,\n description,\n className,\n submitted,\n}) => {\n const { buttonActions, linkActions } = useMemo(() => {\n const buttons: RecommendationAction[] = [];\n const links: RecommendationAction[] = [];\n\n actions.forEach((action) => {\n if (action.type?.toLowerCase() === \"link\") {\n links.push(action);\n } else {\n buttons.push(action);\n }\n });\n\n return { buttonActions: buttons, linkActions: links };\n }, [actions]);\n\n const handleSubmit = (action: RecommendationAction) => {\n onSubmit({\n sourceMessageId: recommendationId,\n optionIds: [],\n actionId: action.id,\n parameters: {\n url: action.url,\n },\n });\n };\n\n return (\n <Flex direction=\"column\" className={className}>\n <AtlasHeader />\n <Text size=\"medium\">{message}</Text>\n <Card>\n <Flex direction=\"column\" gap={3}>\n {description && <Text size=\"small\">{description}</Text>}\n <Flex alignItems=\"flex-start\" gap={1}>\n {buttonActions.map((action) => (\n <Button\n size=\"medium\"\n key={action.id}\n appearance={\n (action.type?.toLowerCase() as ButtonAppearance) ?? \"primary\"\n }\n onClick={() => handleSubmit(action)}\n disabled={submitted}\n >\n {action.name}\n </Button>\n ))}\n {linkActions.map((action) => (\n <Link\n quiet\n appearance=\"primary\"\n key={action.id}\n onClick={() => handleSubmit(action)}\n >\n {action.name}\n </Link>\n ))}\n </Flex>\n </Flex>\n </Card>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Button,\n ButtonAppearance,\n Card,\n Checkbox,\n Flex,\n Overflow,\n Text,\n} from \"@servicetitan/anvil2\";\n\nimport { BaseRecommendationProps, Options } from \"../shared-interfaces\";\nimport { AtlasHeader } from \"../../atlas-header\";\ninterface MultipleRecommendationProps extends BaseRecommendationProps {\n options: Options[];\n}\n\nexport const MultipleRecommendationCard: FC<MultipleRecommendationProps> = ({\n recommendationId,\n message,\n options,\n actions,\n onSubmit,\n submitted,\n selected,\n}) => {\n const [localSelectedValues, setLocalSelectedValues] = useState<string[]>([]);\n\n const handleCheckboxChange = (value: string, checked: boolean) => {\n if (checked) {\n setLocalSelectedValues((prev) => [...prev, value]);\n } else {\n setLocalSelectedValues((prev) => prev.filter((v) => v !== value));\n }\n };\n\n const handleSubmit = (id: string) => {\n onSubmit({\n sourceMessageId: recommendationId,\n optionIds: localSelectedValues,\n actionId: id,\n });\n };\n\n return (\n <Flex direction=\"column\">\n <AtlasHeader />\n <Text size=\"medium\">{message}</Text>\n <Card>\n <Flex direction=\"column\" gap={2}>\n {options?.map((option) => (\n <Checkbox\n disabled={submitted}\n name=\"action\"\n key={option.id}\n value={option.id}\n checked={\n !submitted\n ? localSelectedValues.includes(option.id ?? \"\")\n : selected?.includes(option.id)\n }\n onChange={(e) =>\n handleCheckboxChange(\n option.id ?? \"\",\n e?.target?.checked ?? false,\n )\n }\n label={option.label}\n description={\n option.description ? (\n <Overflow.Text\n rows={2}\n expandable\n expandText=\"Show more...\"\n collapseText=\"Show less...\"\n >\n {option.description && (\n <Text subdued size=\"small\">\n {option.description}\n </Text>\n )}\n </Overflow.Text>\n ) : undefined\n }\n />\n ))}\n <Flex justifyContent=\"flex-start\" gap={2}>\n {actions?.map((action) => (\n <Button\n size=\"medium\"\n key={action.id}\n appearance={\n (action.type?.toLowerCase() as ButtonAppearance) ?? \"primary\"\n }\n onClick={() => handleSubmit(action.id!)}\n disabled={submitted}\n >\n {action.name}\n </Button>\n ))}\n </Flex>\n </Flex>\n </Card>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Button,\n ButtonAppearance,\n Card,\n Flex,\n Overflow,\n Radio,\n RadioGroup,\n Text,\n} from \"@servicetitan/anvil2\";\n\nimport { BaseRecommendationProps, Options } from \"../shared-interfaces\";\nimport { AtlasHeader } from \"../../atlas-header\";\ninterface SingleRecommendationProps extends BaseRecommendationProps {\n options: Options[];\n}\n\nexport const SingleRecommendationCard: FC<SingleRecommendationProps> = ({\n recommendationId,\n message,\n options,\n actions,\n onSubmit,\n submitted = false,\n selected,\n}) => {\n const [localSelectedValue, setLocalSelectedValue] = useState<string>(\"\");\n\n const handleRadioChange = (value: string) => {\n setLocalSelectedValue(value);\n };\n\n const handleSubmit = (id: string) => {\n onSubmit({\n sourceMessageId: recommendationId,\n optionIds: localSelectedValue ? [localSelectedValue] : [],\n actionId: id,\n });\n };\n\n return (\n <Flex direction=\"column\">\n <AtlasHeader />\n <Text size=\"medium\">{message}</Text>\n <Card>\n <Flex direction=\"column\" gap={2}>\n <RadioGroup>\n {options?.map((option) => (\n <Radio\n disabled={submitted}\n key={option.id}\n name=\"action\"\n value={option.id}\n checked={\n !submitted\n ? localSelectedValue === option.id\n : selected?.includes(option.id ?? \"\")\n }\n onChange={() => handleRadioChange(option.id!)}\n label={option.label}\n description={\n option.description ? (\n <Overflow.Text\n rows={2}\n expandable\n expandText=\"Show more...\"\n collapseText=\"Show less...\"\n >\n {option.description && (\n <Text subdued size=\"small\">\n {option.description}\n </Text>\n )}\n </Overflow.Text>\n ) : undefined\n }\n />\n ))}\n </RadioGroup>\n <Flex justifyContent=\"flex-start\" gap={2}>\n {actions?.map((action) => (\n <Button\n size=\"medium\"\n key={action.id}\n appearance={\n (action.type?.toLowerCase() as ButtonAppearance) ?? \"primary\"\n }\n onClick={() => handleSubmit(action.id!)}\n disabled={submitted || !localSelectedValue}\n >\n {action.name}\n </Button>\n ))}\n </Flex>\n </Flex>\n </Card>\n </Flex>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Flex } from '@servicetitan/anvil2';
|
|
3
|
+
|
|
4
|
+
import './spinner.css';const loader = "_loader_yk7zm_1";
|
|
5
|
+
const styles = {
|
|
6
|
+
loader: loader};
|
|
7
|
+
|
|
8
|
+
const Spinner = () => {
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
Flex,
|
|
11
|
+
{
|
|
12
|
+
role: "status",
|
|
13
|
+
"aria-label": "Loading content",
|
|
14
|
+
alignItems: "center",
|
|
15
|
+
justifyContent: "center",
|
|
16
|
+
grow: 1,
|
|
17
|
+
children: /* @__PURE__ */ jsx("span", { className: styles["loader"] })
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { Spinner as S };
|
|
23
|
+
//# sourceMappingURL=spinner-QnlThoJs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner-QnlThoJs.js","sources":["../src/components/spinner/spinner.tsx"],"sourcesContent":["import { Flex } from \"@servicetitan/anvil2\";\n\nimport styles from \"./spinner.module.scss\";\n\nexport const Spinner = () => {\n return (\n <Flex\n role=\"status\"\n aria-label=\"Loading content\"\n alignItems=\"center\"\n justifyContent=\"center\"\n grow={1}\n >\n <span className={styles[\"loader\"]} />\n </Flex>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAIO,MAAM,UAAU,MAAM;AAC3B,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,iBAAA;AAAA,MACX,UAAA,EAAW,QAAA;AAAA,MACX,cAAA,EAAe,QAAA;AAAA,MACf,IAAA,EAAM,CAAA;AAAA,MAEN,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,QAAQ,CAAA,EAAG;AAAA;AAAA,GACrC;AAEJ;;;;"}
|
package/dist/spinner.css
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
@layer starter, reset, base, state, application;
|
|
2
|
+
|
|
3
|
+
._loader_yk7zm_1 {
|
|
4
|
+
width: 48px;
|
|
5
|
+
height: 48px;
|
|
6
|
+
border: 5px solid var(--color-cyan-400);
|
|
7
|
+
border-bottom-color: transparent;
|
|
8
|
+
border-radius: var(--border-radius-circular);
|
|
9
|
+
display: inline-block;
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
animation: _rotation_yk7zm_1 1s linear infinite;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@keyframes _rotation_yk7zm_1 {
|
|
15
|
+
0% {
|
|
16
|
+
transform: rotate(0deg);
|
|
17
|
+
}
|
|
18
|
+
100% {
|
|
19
|
+
transform: rotate(360deg);
|
|
20
|
+
}
|
|
21
|
+
}
|
package/dist/spinner.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { ButtonCompound, Card, Text, Flex } from '@servicetitan/anvil2';
|
|
3
|
+
|
|
4
|
+
const Suggestion = ({ text, onClick }) => {
|
|
5
|
+
return /* @__PURE__ */ jsx(ButtonCompound, { onClick: () => onClick(text), children: /* @__PURE__ */ jsx(Card, { padding: "small", children: /* @__PURE__ */ jsx(Text, { variant: "body", size: "small", children: text }) }) });
|
|
6
|
+
};
|
|
7
|
+
const SuggestionList = ({ suggestions, onSelect }) => {
|
|
8
|
+
if (suggestions?.length === 0) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
Flex,
|
|
13
|
+
{
|
|
14
|
+
gap: 1,
|
|
15
|
+
style: {
|
|
16
|
+
flexWrap: "wrap",
|
|
17
|
+
paddingInline: "var(--size-4)",
|
|
18
|
+
paddingBlockStart: "var(--size-1)"
|
|
19
|
+
},
|
|
20
|
+
children: suggestions.map((suggestion) => /* @__PURE__ */ jsx(
|
|
21
|
+
Suggestion,
|
|
22
|
+
{
|
|
23
|
+
text: suggestion,
|
|
24
|
+
onClick: () => onSelect(suggestion)
|
|
25
|
+
},
|
|
26
|
+
suggestion
|
|
27
|
+
))
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { Suggestion as S, SuggestionList as a };
|
|
33
|
+
//# sourceMappingURL=suggestion-pJLJZyjg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestion-pJLJZyjg.js","sources":["../src/components/suggestion/suggestion.tsx"],"sourcesContent":["import { FC } from \"react\";\nimport { ButtonCompound, Card, Flex, Text } from \"@servicetitan/anvil2\";\n\ninterface SuggestionProps {\n text: string;\n onClick: (suggestion: string) => void;\n}\n\nexport const Suggestion: FC<SuggestionProps> = ({ text, onClick }) => {\n return (\n <ButtonCompound onClick={() => onClick(text)}>\n <Card padding=\"small\">\n <Text variant=\"body\" size=\"small\">\n {text}\n </Text>\n </Card>\n </ButtonCompound>\n );\n};\n\nexport const SuggestionList: FC<{\n suggestions: string[];\n onSelect: (text: string) => void;\n}> = ({ suggestions, onSelect }) => {\n if (suggestions?.length === 0) {\n return null;\n }\n\n return (\n <Flex\n gap={1}\n style={{\n flexWrap: \"wrap\",\n paddingInline: \"var(--size-4)\",\n paddingBlockStart: \"var(--size-1)\",\n }}\n >\n {suggestions.map((suggestion) => (\n <Suggestion\n key={suggestion}\n text={suggestion}\n onClick={() => onSelect(suggestion)}\n />\n ))}\n </Flex>\n );\n};\n"],"names":[],"mappings":";;;AAQO,MAAM,UAAA,GAAkC,CAAC,EAAE,IAAA,EAAM,SAAQ,KAAM;AACpE,EAAA,2BACG,cAAA,EAAA,EAAe,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,GACzC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAQ,OAAA,EACZ,QAAA,kBAAA,GAAA,CAAC,QAAK,OAAA,EAAQ,MAAA,EAAO,MAAK,OAAA,EACvB,QAAA,EAAA,IAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;AAEO,MAAM,cAAA,GAGR,CAAC,EAAE,WAAA,EAAa,UAAS,KAAM;AAClC,EAAA,IAAI,WAAA,EAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,MAAA;AAAA,QACV,aAAA,EAAe,eAAA;AAAA,QACf,iBAAA,EAAmB;AAAA,OACrB;AAAA,MAEC,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,qBAChB,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAM,UAAA;AAAA,UACN,OAAA,EAAS,MAAM,QAAA,CAAS,UAAU;AAAA,SAAA;AAAA,QAF7B;AAAA,OAIR;AAAA;AAAA,GACH;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestion.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
|
+
import { Flex, Tooltip, Button, Text } from '@servicetitan/anvil2';
|
|
5
|
+
|
|
6
|
+
const SvgRefresh = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M17.65 6.35a7.95 7.95 0 0 0-6.48-2.31c-3.67.37-6.69 3.35-7.1 7.02C3.52 15.91 7.27 20 12 20a7.98 7.98 0 0 0 7.21-4.56c.32-.67-.16-1.44-.9-1.44-.37 0-.72.2-.88.53a5.994 5.994 0 0 1-6.8 3.31c-2.22-.49-4.01-2.3-4.48-4.52A6.002 6.002 0 0 1 12 6c1.66 0 3.14.69 4.22 1.78l-1.51 1.51c-.63.63-.19 1.71.7 1.71H19c.55 0 1-.45 1-1V6.41c0-.89-1.08-1.34-1.71-.71l-.64.65z" }));
|
|
7
|
+
|
|
8
|
+
const SvgCheck = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M9 16.17 5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41L9 16.17z" }));
|
|
9
|
+
|
|
10
|
+
const SvgContentCopy = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M15 20H5V7c0-.55-.45-1-1-1s-1 .45-1 1v13c0 1.1.9 2 2 2h10c.55 0 1-.45 1-1s-.45-1-1-1zm5-4V4c0-1.1-.9-2-2-2H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h9c1.1 0 2-.9 2-2zm-2 0H9V4h9v12z" }));
|
|
11
|
+
|
|
12
|
+
const SvgError = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 11c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1 4h-2v-2h2v2z" }));
|
|
13
|
+
|
|
14
|
+
const SvgOutlinedFlag = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "m14 6-.72-1.45c-.17-.34-.52-.55-.9-.55H6c-.55 0-1 .45-1 1v15c0 .55.45 1 1 1s1-.45 1-1v-6h5l.72 1.45a1 1 0 0 0 .89.55H19c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1h-5zm4 8h-4l-1-2H7V6h5l1 2h5v6z" }));
|
|
15
|
+
|
|
16
|
+
const SvgStopCircle = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm3 14H9c-.55 0-1-.45-1-1V9c0-.55.45-1 1-1h6c.55 0 1 .45 1 1v6c0 .55-.45 1-1 1z" }));
|
|
17
|
+
|
|
18
|
+
const SvgVolumeDown = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M18.5 12A4.5 4.5 0 0 0 16 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L9 9H6c-.55 0-1 .45-1 1z" }));
|
|
19
|
+
|
|
20
|
+
const SvgResponseDislike = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M14.99 4.62H6c-.8 0-1.52.48-1.83 1.21L.91 13.44c-.85 1.98.6 4.18 2.75 4.18h5.65l-.95 4.58c-.1.5.05 1.01.41 1.37.29.29.67.43 1.05.43s.77-.15 1.06-.44l5.53-5.54c.37-.37.58-.88.58-1.41V6.62c0-1.1-.9-2-2-2m-4.33 16.33.61-2.92.5-2.41H3.66c-.47 0-.72-.28-.83-.45a.97.97 0 0 1-.08-.95L6 6.62h8.99v9.99zm8.285-15.184.02-.206a1.013 1.013 0 0 1 1.984 0l.02.206v10.492a1.012 1.012 0 1 1-2.024 0z" }));
|
|
21
|
+
|
|
22
|
+
const SvgResponseDisliked = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M14.99 4.62H6c-.8 0-1.52.48-1.83 1.21L.91 13.44c-.85 1.98.6 4.18 2.75 4.18h5.65l-.95 4.58c-.1.5.05 1.01.41 1.37.29.29.67.43 1.05.43s.77-.15 1.06-.44l5.53-5.54c.37-.37.58-.88.58-1.41V6.62c0-1.1-.9-2-2-2m3.955 1.146.02-.206a1.013 1.013 0 0 1 1.984 0l.02.206v10.492a1.012 1.012 0 1 1-2.024 0z" }));
|
|
23
|
+
|
|
24
|
+
const SvgResponseLike = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M6.753 21.684h8.99c.8 0 1.52-.48 1.83-1.21l3.26-7.61c.85-1.98-.6-4.18-2.75-4.18h-5.65l.95-4.58c.1-.5-.05-1.01-.41-1.37-.29-.29-.67-.43-1.05-.43s-.77.15-1.06.44l-5.53 5.54c-.37.37-.58.88-.58 1.41v9.99c0 1.1.9 2 2 2m4.33-16.33-.61 2.92-.5 2.41h8.11c.47 0 .72.28.83.45a.97.97 0 0 1 .08.95l-3.25 7.6h-8.99v-9.99zM2.799 20.682l-.02.205a1.013 1.013 0 0 1-1.984 0l-.02-.205V10.19a1.012 1.012 0 1 1 2.024 0z" }));
|
|
25
|
+
|
|
26
|
+
const SvgResponseLiked = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M6.753 21.684h8.99c.8 0 1.52-.48 1.83-1.21l3.26-7.61c.85-1.98-.6-4.18-2.75-4.18h-5.65l.95-4.58c.1-.5-.05-1.01-.41-1.37-.29-.29-.67-.43-1.05-.43s-.77.15-1.06.44l-5.53 5.54c-.37.37-.58.88-.58 1.41v9.99c0 1.1.9 2 2 2m-3.954-1.002-.02.205a1.013 1.013 0 0 1-1.984 0l-.02-.205V10.19a1.012 1.012 0 1 1 2.024 0z" }));
|
|
27
|
+
|
|
28
|
+
var UserFeedback = /* @__PURE__ */ ((UserFeedback2) => {
|
|
29
|
+
UserFeedback2["None"] = "None";
|
|
30
|
+
UserFeedback2["Positive"] = "Positive";
|
|
31
|
+
UserFeedback2["Negative"] = "Negative";
|
|
32
|
+
return UserFeedback2;
|
|
33
|
+
})(UserFeedback || {});
|
|
34
|
+
|
|
35
|
+
const copy = {
|
|
36
|
+
icons: {
|
|
37
|
+
[0 /* None */]: SvgContentCopy,
|
|
38
|
+
[1 /* Loading */]: SvgContentCopy,
|
|
39
|
+
[2 /* Success */]: SvgCheck,
|
|
40
|
+
[3 /* Error */]: SvgError
|
|
41
|
+
},
|
|
42
|
+
tooltips: {
|
|
43
|
+
[0 /* None */]: "Copy response",
|
|
44
|
+
[1 /* Loading */]: "Copying...",
|
|
45
|
+
[2 /* Success */]: "Response copied",
|
|
46
|
+
[3 /* Error */]: "Copy failed"
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const play = {
|
|
50
|
+
icons: {
|
|
51
|
+
[0 /* None */]: SvgVolumeDown,
|
|
52
|
+
[1 /* Loading */]: SvgVolumeDown,
|
|
53
|
+
[2 /* Success */]: SvgStopCircle,
|
|
54
|
+
[3 /* Error */]: SvgError
|
|
55
|
+
},
|
|
56
|
+
tooltips: {
|
|
57
|
+
[0 /* None */]: "Play response",
|
|
58
|
+
[1 /* Loading */]: "Starting playback...",
|
|
59
|
+
[2 /* Success */]: "Stop playing",
|
|
60
|
+
[3 /* Error */]: "Error playing response"
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const retry = {
|
|
64
|
+
icons: {
|
|
65
|
+
[0 /* None */]: SvgRefresh,
|
|
66
|
+
[1 /* Loading */]: SvgRefresh,
|
|
67
|
+
[2 /* Success */]: SvgRefresh,
|
|
68
|
+
[3 /* Error */]: SvgRefresh
|
|
69
|
+
},
|
|
70
|
+
tooltips: {
|
|
71
|
+
[0 /* None */]: "Retry response",
|
|
72
|
+
[1 /* Loading */]: "Retrying...",
|
|
73
|
+
[2 /* Success */]: "Retry successful",
|
|
74
|
+
[3 /* Error */]: "Retry failed"
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const flag = {
|
|
78
|
+
icons: {
|
|
79
|
+
[0 /* None */]: SvgOutlinedFlag,
|
|
80
|
+
[1 /* Loading */]: SvgOutlinedFlag,
|
|
81
|
+
[2 /* Success */]: SvgOutlinedFlag,
|
|
82
|
+
[3 /* Error */]: SvgOutlinedFlag
|
|
83
|
+
},
|
|
84
|
+
tooltips: {
|
|
85
|
+
[0 /* None */]: "Flag response",
|
|
86
|
+
[1 /* Loading */]: "Flagging...",
|
|
87
|
+
[2 /* Success */]: "Flagged successfully",
|
|
88
|
+
[3 /* Error */]: "Flag failed"
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const Toolbox = ({
|
|
92
|
+
text,
|
|
93
|
+
onRetry,
|
|
94
|
+
onLike,
|
|
95
|
+
onDislike,
|
|
96
|
+
onFlag,
|
|
97
|
+
onPlay,
|
|
98
|
+
currentFeedback
|
|
99
|
+
}) => {
|
|
100
|
+
const [isCopied, setIsCopied] = useState(0 /* None */);
|
|
101
|
+
const [isSpeaking, setIsSpeaking] = useState(0 /* None */);
|
|
102
|
+
const [isRetrying, setIsRetrying] = useState(0 /* None */);
|
|
103
|
+
const [isFlagging, setIsFlagging] = useState(0 /* None */);
|
|
104
|
+
const handleCopy = useCallback(async () => {
|
|
105
|
+
if (!text) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
setIsCopied(1 /* Loading */);
|
|
110
|
+
await window.navigator.clipboard.writeText(text);
|
|
111
|
+
setIsCopied(2 /* Success */);
|
|
112
|
+
} catch {
|
|
113
|
+
setIsCopied(3 /* Error */);
|
|
114
|
+
} finally {
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
setIsCopied(0 /* None */);
|
|
117
|
+
}, 3e3);
|
|
118
|
+
}
|
|
119
|
+
}, [text]);
|
|
120
|
+
const handlePlay = useCallback(async () => {
|
|
121
|
+
if (!onPlay) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
setIsSpeaking(1 /* Loading */);
|
|
126
|
+
await onPlay();
|
|
127
|
+
setIsSpeaking(2 /* Success */);
|
|
128
|
+
setTimeout(() => {
|
|
129
|
+
setIsSpeaking(0 /* None */);
|
|
130
|
+
}, 1e3);
|
|
131
|
+
} catch {
|
|
132
|
+
setIsSpeaking(3 /* Error */);
|
|
133
|
+
setTimeout(() => {
|
|
134
|
+
setIsSpeaking(0 /* None */);
|
|
135
|
+
}, 3e3);
|
|
136
|
+
}
|
|
137
|
+
}, [onPlay]);
|
|
138
|
+
const handleRetry = useCallback(async () => {
|
|
139
|
+
if (!onRetry) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
setIsRetrying(1 /* Loading */);
|
|
144
|
+
await onRetry();
|
|
145
|
+
setIsRetrying(2 /* Success */);
|
|
146
|
+
} catch {
|
|
147
|
+
setIsRetrying(3 /* Error */);
|
|
148
|
+
}
|
|
149
|
+
}, [onRetry]);
|
|
150
|
+
const handleLike = useCallback(async () => {
|
|
151
|
+
if (!onLike) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
await onLike();
|
|
156
|
+
} catch {
|
|
157
|
+
}
|
|
158
|
+
}, [onLike]);
|
|
159
|
+
const handleDislike = useCallback(async () => {
|
|
160
|
+
if (!onDislike) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
await onDislike();
|
|
165
|
+
} catch {
|
|
166
|
+
}
|
|
167
|
+
}, [onDislike]);
|
|
168
|
+
const handleFlag = useCallback(async () => {
|
|
169
|
+
if (!onFlag) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
setIsFlagging(1 /* Loading */);
|
|
174
|
+
await onFlag();
|
|
175
|
+
setIsFlagging(2 /* Success */);
|
|
176
|
+
setTimeout(() => {
|
|
177
|
+
setIsFlagging(0 /* None */);
|
|
178
|
+
}, 3e3);
|
|
179
|
+
} catch {
|
|
180
|
+
setIsFlagging(3 /* Error */);
|
|
181
|
+
setTimeout(() => {
|
|
182
|
+
setIsFlagging(0 /* None */);
|
|
183
|
+
}, 3e3);
|
|
184
|
+
}
|
|
185
|
+
}, [onFlag]);
|
|
186
|
+
return /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
|
|
187
|
+
/* @__PURE__ */ jsxs(Flex, { children: [
|
|
188
|
+
/* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
189
|
+
/* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
|
|
190
|
+
Button,
|
|
191
|
+
{
|
|
192
|
+
icon: copy.icons[isCopied],
|
|
193
|
+
size: "small",
|
|
194
|
+
appearance: "ghost",
|
|
195
|
+
onClick: handleCopy,
|
|
196
|
+
disabled: !text
|
|
197
|
+
}
|
|
198
|
+
) }),
|
|
199
|
+
/* @__PURE__ */ jsx(Tooltip.Content, { children: copy.tooltips[isCopied] })
|
|
200
|
+
] }),
|
|
201
|
+
onPlay && /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
202
|
+
/* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
|
|
203
|
+
Button,
|
|
204
|
+
{
|
|
205
|
+
size: "small",
|
|
206
|
+
appearance: "ghost",
|
|
207
|
+
icon: play.icons[isSpeaking],
|
|
208
|
+
onClick: handlePlay,
|
|
209
|
+
disabled: !onPlay
|
|
210
|
+
}
|
|
211
|
+
) }),
|
|
212
|
+
/* @__PURE__ */ jsx(Tooltip.Content, { children: play.tooltips[isSpeaking] })
|
|
213
|
+
] }),
|
|
214
|
+
onRetry && /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
215
|
+
/* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
|
|
216
|
+
Button,
|
|
217
|
+
{
|
|
218
|
+
icon: retry.icons[isRetrying],
|
|
219
|
+
size: "small",
|
|
220
|
+
appearance: "ghost",
|
|
221
|
+
onClick: handleRetry,
|
|
222
|
+
disabled: !onRetry
|
|
223
|
+
}
|
|
224
|
+
) }),
|
|
225
|
+
/* @__PURE__ */ jsx(Tooltip.Content, { children: retry.tooltips[isRetrying] })
|
|
226
|
+
] }),
|
|
227
|
+
currentFeedback !== UserFeedback.Negative && /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
228
|
+
/* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
|
|
229
|
+
Button,
|
|
230
|
+
{
|
|
231
|
+
icon: currentFeedback === UserFeedback.Positive ? SvgResponseLiked : SvgResponseLike,
|
|
232
|
+
size: "small",
|
|
233
|
+
appearance: "ghost",
|
|
234
|
+
onClick: handleLike,
|
|
235
|
+
disabled: !onLike
|
|
236
|
+
}
|
|
237
|
+
) }),
|
|
238
|
+
/* @__PURE__ */ jsx(Tooltip.Content, { children: currentFeedback === UserFeedback.Positive ? "Remove like" : "Like response" })
|
|
239
|
+
] }),
|
|
240
|
+
currentFeedback !== UserFeedback.Positive && /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
241
|
+
/* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
|
|
242
|
+
Button,
|
|
243
|
+
{
|
|
244
|
+
icon: currentFeedback === UserFeedback.Negative ? SvgResponseDisliked : SvgResponseDislike,
|
|
245
|
+
size: "small",
|
|
246
|
+
appearance: "ghost",
|
|
247
|
+
onClick: handleDislike,
|
|
248
|
+
disabled: !onDislike
|
|
249
|
+
}
|
|
250
|
+
) }),
|
|
251
|
+
/* @__PURE__ */ jsx(Tooltip.Content, { children: currentFeedback === UserFeedback.Negative ? "Remove dislike" : "Dislike response" })
|
|
252
|
+
] }),
|
|
253
|
+
onFlag && /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
254
|
+
/* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
|
|
255
|
+
Button,
|
|
256
|
+
{
|
|
257
|
+
icon: flag.icons[isFlagging],
|
|
258
|
+
size: "small",
|
|
259
|
+
appearance: "ghost",
|
|
260
|
+
onClick: handleFlag,
|
|
261
|
+
disabled: !onFlag
|
|
262
|
+
}
|
|
263
|
+
) }),
|
|
264
|
+
/* @__PURE__ */ jsx(Tooltip.Content, { children: flag.tooltips[isFlagging] })
|
|
265
|
+
] })
|
|
266
|
+
] }),
|
|
267
|
+
currentFeedback !== UserFeedback.None && /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "Thank you for your feedback!" })
|
|
268
|
+
] });
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
export { SvgRefresh as S, Toolbox as T, UserFeedback as U };
|
|
272
|
+
//# sourceMappingURL=toolbox-B-mWIaVL.js.map
|