@giovchat/react-native 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +390 -2
- package/dist/GiovChat.d.ts +135 -0
- package/dist/GiovChat.d.ts.map +1 -0
- package/dist/GiovChat.js +294 -0
- package/dist/GiovChat.js.map +1 -0
- package/dist/attachments.d.ts +121 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +185 -0
- package/dist/attachments.js.map +1 -0
- package/dist/brand-assets.d.ts +6 -0
- package/dist/brand-assets.d.ts.map +1 -0
- package/dist/brand-assets.js +9 -0
- package/dist/brand-assets.js.map +1 -0
- package/dist/brandingStyle.d.ts +38 -0
- package/dist/brandingStyle.d.ts.map +1 -0
- package/dist/brandingStyle.js +71 -0
- package/dist/brandingStyle.js.map +1 -0
- package/dist/client.d.ts +226 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +891 -0
- package/dist/client.js.map +1 -0
- package/dist/color.d.ts +25 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +78 -0
- package/dist/color.js.map +1 -0
- package/dist/components/Attachments.d.ts +13 -0
- package/dist/components/Attachments.d.ts.map +1 -0
- package/dist/components/Attachments.js +42 -0
- package/dist/components/Attachments.js.map +1 -0
- package/dist/components/Branding.d.ts +29 -0
- package/dist/components/Branding.d.ts.map +1 -0
- package/dist/components/Branding.js +71 -0
- package/dist/components/Branding.js.map +1 -0
- package/dist/components/ChatMarkdown.d.ts +15 -0
- package/dist/components/ChatMarkdown.d.ts.map +1 -0
- package/dist/components/ChatMarkdown.js +72 -0
- package/dist/components/ChatMarkdown.js.map +1 -0
- package/dist/components/GiovBotMark.d.ts +6 -0
- package/dist/components/GiovBotMark.d.ts.map +1 -0
- package/dist/components/GiovBotMark.js +11 -0
- package/dist/components/GiovBotMark.js.map +1 -0
- package/dist/components/GreetingBubble.d.ts +7 -0
- package/dist/components/GreetingBubble.d.ts.map +1 -0
- package/dist/components/GreetingBubble.js +12 -0
- package/dist/components/GreetingBubble.js.map +1 -0
- package/dist/components/Header.d.ts +18 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +67 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/MessageBubble.d.ts +23 -0
- package/dist/components/MessageBubble.d.ts.map +1 -0
- package/dist/components/MessageBubble.js +51 -0
- package/dist/components/MessageBubble.js.map +1 -0
- package/dist/components/PreChatForm.d.ts +11 -0
- package/dist/components/PreChatForm.d.ts.map +1 -0
- package/dist/components/PreChatForm.js +72 -0
- package/dist/components/PreChatForm.js.map +1 -0
- package/dist/components/RatingCard.d.ts +23 -0
- package/dist/components/RatingCard.d.ts.map +1 -0
- package/dist/components/RatingCard.js +107 -0
- package/dist/components/RatingCard.js.map +1 -0
- package/dist/components/TypingIndicator.d.ts +9 -0
- package/dist/components/TypingIndicator.d.ts.map +1 -0
- package/dist/components/TypingIndicator.js +18 -0
- package/dist/components/TypingIndicator.js.map +1 -0
- package/dist/components/WidgetStyles.d.ts +3 -0
- package/dist/components/WidgetStyles.d.ts.map +1 -0
- package/dist/components/WidgetStyles.js +9 -0
- package/dist/components/WidgetStyles.js.map +1 -0
- package/dist/components/bubbleStyles.d.ts +47 -0
- package/dist/components/bubbleStyles.d.ts.map +1 -0
- package/dist/components/bubbleStyles.js +19 -0
- package/dist/components/bubbleStyles.js.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +14 -0
- package/dist/components/index.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -0
- package/dist/i18n.d.ts +96 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +392 -0
- package/dist/i18n.js.map +1 -0
- package/dist/identity.d.ts +41 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +41 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown.d.ts +56 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +219 -0
- package/dist/markdown.js.map +1 -0
- package/dist/outbox.d.ts +68 -0
- package/dist/outbox.d.ts.map +1 -0
- package/dist/outbox.js +168 -0
- package/dist/outbox.js.map +1 -0
- package/dist/protocol.d.ts +9 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +39 -0
- package/dist/protocol.js.map +1 -0
- package/dist/rating.d.ts +41 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +165 -0
- package/dist/rating.js.map +1 -0
- package/dist/ratingStore.d.ts +36 -0
- package/dist/ratingStore.d.ts.map +1 -0
- package/dist/ratingStore.js +55 -0
- package/dist/ratingStore.js.map +1 -0
- package/dist/styleOverrides.d.ts +45 -0
- package/dist/styleOverrides.d.ts.map +1 -0
- package/dist/styleOverrides.js +63 -0
- package/dist/styleOverrides.js.map +1 -0
- package/dist/types.d.ts +156 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/unread.d.ts +9 -0
- package/dist/unread.d.ts.map +1 -0
- package/dist/unread.js +49 -0
- package/dist/unread.js.map +1 -0
- package/dist/useChatSession.d.ts +95 -0
- package/dist/useChatSession.d.ts.map +1 -0
- package/dist/useChatSession.js +965 -0
- package/dist/useChatSession.js.map +1 -0
- package/package.json +60 -4
- package/src/GiovChat.tsx +640 -0
- package/src/attachments.ts +218 -0
- package/src/brand-assets.ts +5 -0
- package/src/brandingStyle.ts +87 -0
- package/src/client.ts +848 -0
- package/src/color.ts +74 -0
- package/src/components/Attachments.tsx +75 -0
- package/src/components/Branding.tsx +94 -0
- package/src/components/ChatMarkdown.tsx +111 -0
- package/src/components/GiovBotMark.tsx +19 -0
- package/src/components/GreetingBubble.tsx +20 -0
- package/src/components/Header.tsx +131 -0
- package/src/components/MessageBubble.tsx +137 -0
- package/src/components/PreChatForm.tsx +183 -0
- package/src/components/RatingCard.tsx +219 -0
- package/src/components/TypingIndicator.tsx +34 -0
- package/src/components/WidgetStyles.tsx +5 -0
- package/src/components/bubbleStyles.ts +16 -0
- package/src/components/index.ts +14 -0
- package/src/errors.ts +33 -0
- package/src/i18n.ts +474 -0
- package/src/identity.ts +54 -0
- package/src/index.ts +85 -0
- package/src/markdown.ts +227 -0
- package/src/outbox.ts +175 -0
- package/src/protocol.ts +36 -0
- package/src/rating.ts +169 -0
- package/src/ratingStore.ts +65 -0
- package/src/styleOverrides.ts +98 -0
- package/src/types.ts +170 -0
- package/src/unread.ts +39 -0
- package/src/useChatSession.ts +841 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_PRIVACY_POLICY_URL = void 0;
|
|
4
|
+
exports.Header = Header;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const react_native_1 = require("react-native");
|
|
8
|
+
const WidgetStyles_1 = require("./WidgetStyles");
|
|
9
|
+
const GiovBotMark_1 = require("./GiovBotMark");
|
|
10
|
+
const i18n_1 = require("../i18n");
|
|
11
|
+
const color_1 = require("../color");
|
|
12
|
+
/** The web widget's fallback (apps/widget-web/src/components/ChatMenu.tsx). */
|
|
13
|
+
exports.DEFAULT_PRIVACY_POLICY_URL = "https://giovchat.app/privacy";
|
|
14
|
+
function Header({ title, subtitle, primaryColor, onClose, avatarUrl, kind, privacyPolicyUrl }) {
|
|
15
|
+
const custom = (0, WidgetStyles_1.useWidgetStyles)();
|
|
16
|
+
const strings = (0, i18n_1.useGiovChatStrings)();
|
|
17
|
+
const [menuOpen, setMenuOpen] = (0, react_1.useState)(false);
|
|
18
|
+
// Black or white on the brand colour by WCAG contrast; the host's text colours still win.
|
|
19
|
+
const background = custom.header.backgroundColor ?? primaryColor;
|
|
20
|
+
const ink = (0, color_1.textOn)(background);
|
|
21
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: [styles.container, { backgroundColor: primaryColor }, custom.header], children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: [styles.avatar, (0, color_1.isLightBackground)(background) && styles.avatarOnLight], children: avatarUrl ? ((0, jsx_runtime_1.jsx)(react_native_1.Image, { source: { uri: avatarUrl }, style: styles.avatarImage, accessible: false })) : kind === "bot" ? ((0, jsx_runtime_1.jsx)(GiovBotMark_1.GiovBotMark, { size: 26 })) : ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.avatarLetter, { color: ink }, custom.headerTitle], children: title.charAt(0).toUpperCase() })) }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.info, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.title, { color: ink }, custom.headerTitle], numberOfLines: 1, accessibilityRole: "header", children: title }), subtitle ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.subtitle, { color: (0, color_1.secondaryTextOn)(background) }, custom.headerSubtitle], numberOfLines: 1, children: subtitle })) : null] }), (0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { onPress: () => setMenuOpen((open) => !open), hitSlop: { top: 12, bottom: 12, left: 8, right: 8 }, accessibilityLabel: strings.menu, accessibilityRole: "button", accessibilityState: { expanded: menuOpen }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.closeIcon, { color: custom.headerTitle.color ?? ink }], children: "\u22EF" }) }), menuOpen && ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.menu, children: (0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { style: styles.menuItem, accessibilityRole: "link", accessibilityLabel: strings.privacyPolicy, onPress: () => {
|
|
22
|
+
setMenuOpen(false);
|
|
23
|
+
void react_native_1.Linking.openURL(privacyPolicyUrl ?? exports.DEFAULT_PRIVACY_POLICY_URL).catch(() => undefined);
|
|
24
|
+
}, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.menuText, children: strings.privacyPolicy }) }) })), onClose && ((0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { onPress: onClose, hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }, accessibilityLabel: strings.closeChat, accessibilityRole: "button", children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.closeIcon, { color: custom.headerTitle.color ?? ink }], children: "\u2715" }) }))] }));
|
|
25
|
+
}
|
|
26
|
+
const styles = react_native_1.StyleSheet.create({
|
|
27
|
+
container: {
|
|
28
|
+
flexDirection: "row",
|
|
29
|
+
alignItems: "center",
|
|
30
|
+
paddingHorizontal: 16,
|
|
31
|
+
paddingVertical: 14,
|
|
32
|
+
gap: 12,
|
|
33
|
+
zIndex: 2,
|
|
34
|
+
},
|
|
35
|
+
menu: {
|
|
36
|
+
position: "absolute",
|
|
37
|
+
top: "100%",
|
|
38
|
+
right: 12,
|
|
39
|
+
backgroundColor: "#fff",
|
|
40
|
+
borderRadius: 10,
|
|
41
|
+
paddingVertical: 4,
|
|
42
|
+
shadowColor: "#000",
|
|
43
|
+
shadowOpacity: 0.15,
|
|
44
|
+
shadowRadius: 12,
|
|
45
|
+
shadowOffset: { width: 0, height: 4 },
|
|
46
|
+
elevation: 6,
|
|
47
|
+
},
|
|
48
|
+
menuItem: { paddingHorizontal: 14, paddingVertical: 10 },
|
|
49
|
+
menuText: { color: "#111", fontSize: 14 },
|
|
50
|
+
avatar: {
|
|
51
|
+
width: 38,
|
|
52
|
+
height: 38,
|
|
53
|
+
borderRadius: 19,
|
|
54
|
+
backgroundColor: "rgba(255,255,255,0.22)",
|
|
55
|
+
alignItems: "center",
|
|
56
|
+
justifyContent: "center",
|
|
57
|
+
overflow: "hidden",
|
|
58
|
+
},
|
|
59
|
+
avatarOnLight: { backgroundColor: "rgba(0,0,0,0.1)" },
|
|
60
|
+
avatarImage: { width: 38, height: 38 },
|
|
61
|
+
avatarLetter: { color: "#fff", fontWeight: "700", fontSize: 17 },
|
|
62
|
+
info: { flex: 1 },
|
|
63
|
+
title: { color: "#fff", fontWeight: "700", fontSize: 16 },
|
|
64
|
+
subtitle: { color: "rgba(255,255,255,0.78)", fontSize: 12, marginTop: 2 },
|
|
65
|
+
closeIcon: { color: "#fff", fontSize: 18, fontWeight: "300", lineHeight: 22 },
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { GiovMessage } from "../types";
|
|
3
|
+
import { type RateFn, type VoteFn } from "./RatingCard";
|
|
4
|
+
export interface MessageBubbleProps {
|
|
5
|
+
message: GiovMessage;
|
|
6
|
+
primaryColor: string;
|
|
7
|
+
dark: boolean;
|
|
8
|
+
botName?: string;
|
|
9
|
+
/** Adds the download credential to attachment URLs. Without it, attachments load as stored. */
|
|
10
|
+
resolveAttachmentUrl?: (url: string) => string;
|
|
11
|
+
/** Offered on a visitor message that failed to send. */
|
|
12
|
+
onRetry?: (message: GiovMessage) => void;
|
|
13
|
+
/** Drops a visitor message that failed to send (a refused one can never succeed on retry). */
|
|
14
|
+
onDiscard?: (message: GiovMessage) => void;
|
|
15
|
+
/** Draw the conversation rating card under a message that carries one (default true). */
|
|
16
|
+
ratingCard?: boolean;
|
|
17
|
+
/** Answers the card. Without it the card is read-only. */
|
|
18
|
+
onRate?: RateFn;
|
|
19
|
+
/** Thumbs under GiovBot answers. Without it no thumbs are drawn. */
|
|
20
|
+
onVote?: VoteFn;
|
|
21
|
+
}
|
|
22
|
+
export declare function MessageBubble({ message, primaryColor, dark, botName, resolveAttachmentUrl, onRetry, onDiscard, ratingCard, onRate, onVote }: MessageBubbleProps): React.JSX.Element;
|
|
23
|
+
//# sourceMappingURL=MessageBubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBubble.d.ts","sourceRoot":"","sources":["../../src/components/MessageBubble.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,OAAO,EAA8B,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAMpF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,wDAAwD;IACxD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,8FAA8F;IAC9F,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,oBAA+B,EAAE,OAAO,EAAE,SAAS,EAAE,UAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,kBAAkB,qBAqGjL"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageBubble = MessageBubble;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_native_1 = require("react-native");
|
|
6
|
+
const bubbleStyles_1 = require("./bubbleStyles");
|
|
7
|
+
const WidgetStyles_1 = require("./WidgetStyles");
|
|
8
|
+
const GiovBotMark_1 = require("./GiovBotMark");
|
|
9
|
+
const ChatMarkdown_1 = require("./ChatMarkdown");
|
|
10
|
+
const Attachments_1 = require("./Attachments");
|
|
11
|
+
const RatingCard_1 = require("./RatingCard");
|
|
12
|
+
const rating_1 = require("../rating");
|
|
13
|
+
const identity_1 = require("../identity");
|
|
14
|
+
const i18n_1 = require("../i18n");
|
|
15
|
+
const color_1 = require("../color");
|
|
16
|
+
const identity = (url) => url;
|
|
17
|
+
function MessageBubble({ message, primaryColor, dark, botName, resolveAttachmentUrl = identity, onRetry, onDiscard, ratingCard = true, onRate, onVote }) {
|
|
18
|
+
const custom = (0, WidgetStyles_1.useWidgetStyles)();
|
|
19
|
+
const strings = (0, i18n_1.useGiovChatStrings)();
|
|
20
|
+
const isVisitor = message.role === "visitor";
|
|
21
|
+
const isBot = message.role === "agent" && message.isBot === true;
|
|
22
|
+
const textStyle = isVisitor ? custom.visitorText : custom.agentText;
|
|
23
|
+
// Text on the brand colour is black or white by WCAG contrast; labels and times keep 4.5:1 on their bubble.
|
|
24
|
+
const bubbleColor = isVisitor ? custom.visitorBubble.backgroundColor ?? primaryColor : custom.agentBubble.backgroundColor ?? (dark ? "#242424" : "#f0f0f0");
|
|
25
|
+
const lightVisitor = isVisitor && (0, color_1.isLightBackground)(bubbleColor);
|
|
26
|
+
const textColor = isVisitor ? (0, color_1.textOn)(bubbleColor) : dark ? "#f0f0f0" : "#111";
|
|
27
|
+
const quietColor = (0, color_1.secondaryTextOn)(bubbleColor);
|
|
28
|
+
const failed = isVisitor && message.status === "failed";
|
|
29
|
+
const senderLabel = (0, identity_1.messageSenderLabel)(message, { botName, you: strings.you, automated: strings.automated, agent: strings.agent });
|
|
30
|
+
const time = new Date(message.createdAt).toLocaleTimeString([], {
|
|
31
|
+
hour: "2-digit",
|
|
32
|
+
minute: "2-digit",
|
|
33
|
+
});
|
|
34
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: [bubbleStyles_1.bubbleStyles.wrapper, isVisitor ? bubbleStyles_1.bubbleStyles.right : bubbleStyles_1.bubbleStyles.left, isBot && bubbleStyles_1.bubbleStyles.assistantRow], children: [isBot && (0, jsx_runtime_1.jsx)(GiovBotMark_1.GiovBotMark, {}), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: [
|
|
35
|
+
bubbleStyles_1.bubbleStyles.bubble,
|
|
36
|
+
isVisitor
|
|
37
|
+
? [bubbleStyles_1.bubbleStyles.visitorBubble, { backgroundColor: primaryColor }]
|
|
38
|
+
: [bubbleStyles_1.bubbleStyles.agentBubble, dark && bubbleStyles_1.bubbleStyles.agentBubbleDark],
|
|
39
|
+
isVisitor ? custom.visitorBubble : custom.agentBubble,
|
|
40
|
+
message.status === "sending" && { opacity: 0.75 },
|
|
41
|
+
], accessibilityState: message.isStreaming ? { busy: true } : undefined, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [
|
|
42
|
+
bubbleStyles_1.bubbleStyles.sender,
|
|
43
|
+
{ color: quietColor },
|
|
44
|
+
textStyle,
|
|
45
|
+
], children: senderLabel }), message.attachments?.length ? ((0, jsx_runtime_1.jsx)(Attachments_1.AttachmentList, { attachments: message.attachments, resolveUrl: resolveAttachmentUrl, dark: isVisitor ? !lightVisitor : dark, textColor: typeof textStyle.color === "string" ? textStyle.color : textColor })) : null, message.content ? ((0, jsx_runtime_1.jsx)(ChatMarkdown_1.ChatMarkdown, { content: message.content, textStyle: [bubbleStyles_1.bubbleStyles.content, { color: textColor }, textStyle], accentColor: isVisitor ? (lightVisitor ? "rgba(0,0,0,0.35)" : "rgba(255,255,255,0.5)") : dark ? "rgba(255,255,255,0.3)" : "rgba(0,0,0,0.2)", codeBackground: isVisitor ? (lightVisitor ? "rgba(0,0,0,0.08)" : "rgba(255,255,255,0.18)") : dark ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.06)" })) : null, ratingCard && message.rating && !isVisitor ? ((0, jsx_runtime_1.jsx)(RatingCard_1.RatingCard, { block: message.rating, primaryColor: primaryColor, dark: dark, onRate: onRate })) : null, !message.isStreaming && ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [
|
|
46
|
+
bubbleStyles_1.bubbleStyles.timestamp,
|
|
47
|
+
{ color: quietColor },
|
|
48
|
+
textStyle,
|
|
49
|
+
], children: message.status === "sending" ? strings.sending : time }))] }), failed && ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: "row", alignItems: "center", gap: 12, marginTop: 4 }, children: [(0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { onPress: onRetry ? () => onRetry(message) : undefined, disabled: !onRetry, accessibilityRole: "button", accessibilityLabel: `${strings.notSent}. ${strings.tapToRetry}`, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: (0, jsx_runtime_1.jsxs)(react_native_1.Text, { style: { color: "#dc2626", fontSize: 12 }, children: [strings.notSent, onRetry ? ` · ${strings.tapToRetry}` : ""] }) }), onDiscard && ((0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { onPress: () => onDiscard(message), accessibilityRole: "button", accessibilityLabel: strings.discard, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: dark ? "#999" : "#666", fontSize: 12 }, children: strings.discard }) }))] }))] }), onVote && (0, rating_1.canVoteOn)(message) ? ((0, jsx_runtime_1.jsx)(RatingCard_1.AnswerFeedback, { messageId: message.id, value: message.feedback, dark: dark, primaryColor: primaryColor, onVote: onVote })) : null] }));
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=MessageBubble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBubble.js","sourceRoot":"","sources":["../../src/components/MessageBubble.tsx"],"names":[],"mappings":";;AAmCA,sCAqGC;;AAvID,+CAA4D;AAE5D,iDAAmD;AACnD,iDAAiD;AACjD,+CAA4C;AAC5C,iDAA8C;AAC9C,+CAA+C;AAC/C,6CAAoF;AACpF,sCAAsC;AACtC,0CAAiD;AACjD,kCAA6C;AAC7C,oCAAsE;AAqBtE,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC;AAEtC,SAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,GAAG,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAsB;IAChL,MAAM,MAAM,GAAG,IAAA,8BAAe,GAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,yBAAkB,GAAE,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;IACjE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IACpE,4GAA4G;IAC5G,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,IAAI,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5J,MAAM,YAAY,GAAG,SAAS,IAAI,IAAA,yBAAiB,EAAC,WAAW,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAA,cAAM,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,MAAM,UAAU,GAAG,IAAA,uBAAe,EAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;IAExD,MAAM,WAAW,GAAG,IAAA,6BAAkB,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAEnI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE;QAC9D,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO,CACL,6DACA,wBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,2BAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,2BAAC,CAAC,KAAK,CAAC,CAAC,CAAC,2BAAC,CAAC,IAAI,EAAE,KAAK,IAAI,2BAAC,CAAC,YAAY,CAAC,aAC5E,KAAK,IAAI,uBAAC,yBAAW,KAAG,EACzB,wBAAC,mBAAI,IACH,KAAK,EAAE;4BACL,2BAAC,CAAC,MAAM;4BACR,SAAS;gCACP,CAAC,CAAC,CAAC,2BAAC,CAAC,aAAa,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;gCACtD,CAAC,CAAC,CAAC,2BAAC,CAAC,WAAW,EAAE,IAAI,IAAI,2BAAC,CAAC,eAAe,CAAC;4BAC9C,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;4BACrD,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;yBAClD,EACD,kBAAkB,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,aAEpE,uBAAC,mBAAI,IACH,KAAK,EAAE;oCACL,2BAAC,CAAC,MAAM;oCACR,EAAE,KAAK,EAAE,UAAU,EAAE;oCACrB,SAAS;iCACV,YAEA,WAAW,GACP,EACN,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAC7B,uBAAC,4BAAc,IAAC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAI,CAC7M,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CACjB,uBAAC,2BAAY,IACX,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,SAAS,EAAE,CAAC,2BAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EACvD,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,iBAAiB,EAC3I,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,kBAAkB,GAChJ,CACH,CAAC,CAAC,CAAC,IAAI,EACP,UAAU,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAC5C,uBAAC,uBAAU,IAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAI,CAC9F,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,OAAO,CAAC,WAAW,IAAI,CACvB,uBAAC,mBAAI,IACH,KAAK,EAAE;oCACL,2BAAC,CAAC,SAAS;oCACX,EAAE,KAAK,EAAE,UAAU,EAAE;oCACrB,SAAS;iCACV,YAEA,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GACjD,CACR,IACI,EACN,MAAM,IAAI,CACT,wBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,aAChF,uBAAC,+BAAgB,IACf,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EACrD,QAAQ,EAAE,CAAC,OAAO,EAClB,iBAAiB,EAAC,QAAQ,EAC1B,kBAAkB,EAAE,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,EAAE,EAC/D,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAEjD,wBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,aAC5C,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IACtD,GACU,EAClB,SAAS,IAAI,CACZ,uBAAC,+BAAgB,IACf,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EACjC,iBAAiB,EAAC,QAAQ,EAC1B,kBAAkB,EAAE,OAAO,CAAC,OAAO,EACnC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAEjD,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAG,OAAO,CAAC,OAAO,GAAQ,GACrE,CACpB,IACI,CACR,IACI,EACN,MAAM,IAAI,IAAA,kBAAS,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAC9B,uBAAC,2BAAc,IAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAI,CAC3H,CAAC,CAAC,CAAC,IAAI,IACL,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { GiovChatContact, RequestUserInfo } from "../types";
|
|
3
|
+
export interface PreChatFormProps {
|
|
4
|
+
fields: RequestUserInfo;
|
|
5
|
+
primaryColor: string;
|
|
6
|
+
dark: boolean;
|
|
7
|
+
initialValues?: GiovChatContact;
|
|
8
|
+
onSubmit: (info: GiovChatContact) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function PreChatForm({ fields, primaryColor, dark, initialValues, onSubmit, }: PreChatFormProps): React.JSX.Element;
|
|
11
|
+
//# sourceMappingURL=PreChatForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreChatForm.d.ts","sourceRoot":"","sources":["../../src/components/PreChatForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AASxC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKjE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;CAC3C;AAID,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,aAAa,EACb,QAAQ,GACT,EAAE,gBAAgB,qBAiIlB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PreChatForm = PreChatForm;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_native_1 = require("react-native");
|
|
7
|
+
const WidgetStyles_1 = require("./WidgetStyles");
|
|
8
|
+
const i18n_1 = require("../i18n");
|
|
9
|
+
const color_1 = require("../color");
|
|
10
|
+
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
11
|
+
function PreChatForm({ fields, primaryColor, dark, initialValues, onSubmit, }) {
|
|
12
|
+
const custom = (0, WidgetStyles_1.useWidgetStyles)();
|
|
13
|
+
const strings = (0, i18n_1.useGiovChatStrings)();
|
|
14
|
+
const [firstName, setFirstName] = (0, react_1.useState)(initialValues?.firstName ?? "");
|
|
15
|
+
const [lastName, setLastName] = (0, react_1.useState)(initialValues?.lastName ?? "");
|
|
16
|
+
const [email, setEmail] = (0, react_1.useState)(initialValues?.email ?? "");
|
|
17
|
+
const [phone, setPhone] = (0, react_1.useState)(initialValues?.phone ?? "");
|
|
18
|
+
const bg = dark ? "#111" : "#fff";
|
|
19
|
+
const textColor = dark ? "#f0f0f0" : "#111";
|
|
20
|
+
const labelColor = dark ? "#aaa" : "#555";
|
|
21
|
+
const inputBg = dark ? "#1c1c1c" : "#fafafa";
|
|
22
|
+
const inputBorder = dark ? "#333" : "#e5e5e5";
|
|
23
|
+
const placeholderColor = custom.hint.color ?? (dark ? "#555" : "#c0c0c0");
|
|
24
|
+
const isValid = (!fields.firstName || firstName.trim().length > 0) &&
|
|
25
|
+
(!fields.lastName || lastName.trim().length > 0) &&
|
|
26
|
+
(!fields.email || EMAIL_RE.test(email.trim())) &&
|
|
27
|
+
(!fields.phone || phone.trim().length > 0);
|
|
28
|
+
const handleSubmit = () => {
|
|
29
|
+
if (!isValid)
|
|
30
|
+
return;
|
|
31
|
+
onSubmit({
|
|
32
|
+
firstName: firstName.trim() || undefined,
|
|
33
|
+
lastName: lastName.trim() || undefined,
|
|
34
|
+
email: email.trim() || undefined,
|
|
35
|
+
phone: phone.trim() || undefined,
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
const inputStyle = [
|
|
39
|
+
styles.input,
|
|
40
|
+
{ color: textColor, backgroundColor: inputBg, borderColor: inputBorder },
|
|
41
|
+
custom.input,
|
|
42
|
+
];
|
|
43
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.ScrollView, { style: [styles.scroll, { backgroundColor: bg }, custom.form], contentContainerStyle: styles.content, keyboardShouldPersistTaps: "handled", children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.heading, { color: textColor }, custom.formTitle], children: strings.preChatTitle }), fields.firstName && ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.field, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.label, { color: labelColor }, custom.label], children: strings.required(strings.firstName) }), (0, jsx_runtime_1.jsx)(react_native_1.TextInput, { style: inputStyle, value: firstName, accessibilityLabel: strings.required(strings.firstName), onChangeText: setFirstName, placeholder: strings.firstName, placeholderTextColor: placeholderColor, autoCapitalize: "words", autoCorrect: false, returnKeyType: "next" })] })), fields.lastName && ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.field, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.label, { color: labelColor }, custom.label], children: strings.required(strings.lastName) }), (0, jsx_runtime_1.jsx)(react_native_1.TextInput, { style: inputStyle, value: lastName, accessibilityLabel: strings.required(strings.lastName), onChangeText: setLastName, placeholder: strings.lastName, placeholderTextColor: placeholderColor, autoCapitalize: "words", autoCorrect: false, returnKeyType: "next" })] })), fields.email && ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.field, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.label, { color: labelColor }, custom.label], children: strings.required(strings.email) }), (0, jsx_runtime_1.jsx)(react_native_1.TextInput, { style: inputStyle, value: email, accessibilityLabel: strings.required(strings.email), onChangeText: setEmail, placeholder: "you@example.com", placeholderTextColor: placeholderColor, keyboardType: "email-address", autoCapitalize: "none", autoCorrect: false, returnKeyType: "next" })] })), fields.phone && ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.field, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.label, { color: labelColor }, custom.label], children: strings.required(strings.phone) }), (0, jsx_runtime_1.jsx)(react_native_1.TextInput, { style: inputStyle, value: phone, accessibilityLabel: strings.required(strings.phone), onChangeText: setPhone, placeholder: "+1 555 000 0000", placeholderTextColor: placeholderColor, keyboardType: "phone-pad", returnKeyType: "done" })] })), (0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { style: [
|
|
44
|
+
styles.submitBtn,
|
|
45
|
+
{ backgroundColor: primaryColor },
|
|
46
|
+
custom.button,
|
|
47
|
+
!isValid && styles.submitBtnDisabled,
|
|
48
|
+
], onPress: handleSubmit, disabled: !isValid, accessibilityRole: "button", accessibilityLabel: strings.startChat, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.submitBtnText, { color: (0, color_1.textOn)(custom.button.backgroundColor ?? primaryColor) }, custom.buttonText], children: strings.startChat }) })] }));
|
|
49
|
+
}
|
|
50
|
+
const styles = react_native_1.StyleSheet.create({
|
|
51
|
+
scroll: { flex: 1 },
|
|
52
|
+
content: { padding: 20, flexGrow: 1 },
|
|
53
|
+
heading: { fontSize: 18, fontWeight: "700", marginBottom: 24 },
|
|
54
|
+
field: { marginBottom: 16 },
|
|
55
|
+
label: { fontSize: 13, fontWeight: "600", marginBottom: 6 },
|
|
56
|
+
input: {
|
|
57
|
+
borderWidth: 1,
|
|
58
|
+
borderRadius: 10,
|
|
59
|
+
paddingHorizontal: 14,
|
|
60
|
+
paddingVertical: 11,
|
|
61
|
+
fontSize: 14,
|
|
62
|
+
},
|
|
63
|
+
submitBtn: {
|
|
64
|
+
borderRadius: 10,
|
|
65
|
+
paddingVertical: 14,
|
|
66
|
+
alignItems: "center",
|
|
67
|
+
marginTop: 8,
|
|
68
|
+
},
|
|
69
|
+
submitBtnDisabled: { opacity: 0.45 },
|
|
70
|
+
submitBtnText: { color: "#fff", fontWeight: "700", fontSize: 15 },
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=PreChatForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreChatForm.js","sourceRoot":"","sources":["../../src/components/PreChatForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { GiovFeedbackValue, GiovRatingBlock } from "../types";
|
|
3
|
+
export type RateFn = (requestId: string, score: number, comment: string) => Promise<void>;
|
|
4
|
+
export type VoteFn = (messageId: string, value: GiovFeedbackValue, reason?: string) => Promise<void>;
|
|
5
|
+
export interface RatingCardProps {
|
|
6
|
+
block: GiovRatingBlock;
|
|
7
|
+
primaryColor: string;
|
|
8
|
+
dark: boolean;
|
|
9
|
+
/** Without it the card is read-only (a hidden or unsupported feature). */
|
|
10
|
+
onRate?: RateFn;
|
|
11
|
+
/** Where the card was drawn; sets the test ids. */
|
|
12
|
+
testIDPrefix?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function RatingCard({ block, primaryColor, dark, onRate, testIDPrefix }: RatingCardProps): React.JSX.Element | null;
|
|
15
|
+
/** Thumbs under a GiovBot answer: one vote, changeable; a thumbs-down offers an optional reason. */
|
|
16
|
+
export declare function AnswerFeedback({ messageId, value, dark, primaryColor, onVote }: {
|
|
17
|
+
messageId: string;
|
|
18
|
+
value?: "up" | "down";
|
|
19
|
+
dark: boolean;
|
|
20
|
+
primaryColor: string;
|
|
21
|
+
onVote: VoteFn;
|
|
22
|
+
}): React.JSX.Element;
|
|
23
|
+
//# sourceMappingURL=RatingCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RatingCard.d.ts","sourceRoot":"","sources":["../../src/components/RatingCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAanE,MAAM,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1F,MAAM,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErG,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,YAA4B,EAAE,EAAE,eAAe,4BA+H9G;AAED,oGAAoG;AACpG,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;IAC/E,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAC/F,qBA0DA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RatingCard = RatingCard;
|
|
4
|
+
exports.AnswerFeedback = AnswerFeedback;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const react_native_1 = require("react-native");
|
|
8
|
+
const i18n_1 = require("../i18n");
|
|
9
|
+
const errors_1 = require("../errors");
|
|
10
|
+
const rating_1 = require("../rating");
|
|
11
|
+
const color_1 = require("../color");
|
|
12
|
+
/**
|
|
13
|
+
* The conversation rating card (a `rating` block) and the thumbs under GiovBot answers. The card keeps
|
|
14
|
+
* the visitor's pick on screen while the answer is on its way and takes it back, with a short message,
|
|
15
|
+
* when it fails. Faces are emoji, so nothing native is needed (Expo Go included).
|
|
16
|
+
*/
|
|
17
|
+
const FACES = ["😞", "🙁", "😐", "🙂", "😄"];
|
|
18
|
+
function RatingCard({ block, primaryColor, dark, onRate, testIDPrefix = "giov-rating" }) {
|
|
19
|
+
const strings = (0, i18n_1.useGiovChatStrings)();
|
|
20
|
+
const [now, setNow] = (0, react_1.useState)(() => Date.now());
|
|
21
|
+
const [pick, setPick] = (0, react_1.useState)(0);
|
|
22
|
+
const [comment, setComment] = (0, react_1.useState)("");
|
|
23
|
+
const [editing, setEditing] = (0, react_1.useState)(false);
|
|
24
|
+
const [pending, setPending] = (0, react_1.useState)(null);
|
|
25
|
+
const [error, setError] = (0, react_1.useState)("");
|
|
26
|
+
const [lock, setLock] = (0, react_1.useState)("");
|
|
27
|
+
// Read-only from `closesAt` on, without waiting for another render.
|
|
28
|
+
(0, react_1.useEffect)(() => {
|
|
29
|
+
const wait = block.closesAt - Date.now();
|
|
30
|
+
if (wait <= 0)
|
|
31
|
+
return;
|
|
32
|
+
const timer = setTimeout(() => setNow(Date.now()), Math.min(wait, 2 ** 31 - 1));
|
|
33
|
+
return () => clearTimeout(timer);
|
|
34
|
+
}, [block.closesAt, now]);
|
|
35
|
+
const ink = dark ? "#f0f0f0" : "#111";
|
|
36
|
+
const quiet = dark ? "#aaa" : "#555";
|
|
37
|
+
const border = dark ? "#3a3a3a" : "#d4d4d4";
|
|
38
|
+
const label = (score) => strings.ratingFace(score);
|
|
39
|
+
if (lock === "replaced" || (0, rating_1.ratingPhase)(block, now) === "hidden")
|
|
40
|
+
return null;
|
|
41
|
+
const closed = lock === "closed" || (0, rating_1.ratingPhase)(block, now) === "closed";
|
|
42
|
+
const score = pending?.score ?? block.score;
|
|
43
|
+
const text = pending ? pending.comment : block.comment;
|
|
44
|
+
if (score && !editing) {
|
|
45
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: `${testIDPrefix}-done`, accessibilityRole: "summary", accessibilityLabel: `${strings.yourRating}: ${label(score)}`, style: { marginTop: 8, gap: 6 }, children: [(0, jsx_runtime_1.jsxs)(react_native_1.Text, { style: { color: ink, fontSize: 14, fontWeight: "600" }, children: [(0, jsx_runtime_1.jsxs)(react_native_1.Text, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: [FACES[score - 1], " "] }), strings.ratingThanks, " \u00B7 ", label(score)] }), text ? (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: quiet, fontSize: 13 }, children: text }) : null, !closed && onRate ? ((0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { testID: `${testIDPrefix}-change`, accessibilityRole: "button", accessibilityLabel: strings.ratingChange, disabled: !!pending, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, onPress: () => { setPick(score); setComment(text ?? ""); setError(""); setEditing(true); }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: primaryColor, fontSize: 13, fontWeight: "600" }, children: strings.ratingChange }) })) : null] }));
|
|
46
|
+
}
|
|
47
|
+
if (closed)
|
|
48
|
+
return (0, jsx_runtime_1.jsx)(react_native_1.Text, { testID: `${testIDPrefix}-closed`, style: { color: quiet, fontSize: 13, marginTop: 8 }, children: strings.ratingClosed });
|
|
49
|
+
const submit = async () => {
|
|
50
|
+
if (!pick || pending || !onRate)
|
|
51
|
+
return;
|
|
52
|
+
const next = { score: pick, comment: comment.trim() };
|
|
53
|
+
setError("");
|
|
54
|
+
setPending(next);
|
|
55
|
+
setEditing(false);
|
|
56
|
+
try {
|
|
57
|
+
await onRate(block.requestId, next.score, next.comment);
|
|
58
|
+
}
|
|
59
|
+
catch (failure) {
|
|
60
|
+
const code = failure instanceof errors_1.GiovChatError ? failure.code : "network";
|
|
61
|
+
const kind = (0, rating_1.ratingFailure)(code);
|
|
62
|
+
if (kind === "retry") {
|
|
63
|
+
setEditing(true);
|
|
64
|
+
setError(code === "too_many_changes" ? strings.ratingTooMany
|
|
65
|
+
: code === "rate_limited" ? strings.ratingWait(failure instanceof errors_1.GiovChatError ? failure.retryAfterSeconds ?? 30 : 30)
|
|
66
|
+
: strings.ratingFailed);
|
|
67
|
+
}
|
|
68
|
+
else
|
|
69
|
+
setLock(kind);
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
setPending(null);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: `${testIDPrefix}-form`, accessibilityLabel: strings.rateTitle, style: { marginTop: 8, gap: 8 }, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { accessibilityRole: "radiogroup", accessibilityLabel: strings.yourRating, style: { flexDirection: "row", gap: 6 }, children: FACES.map((face, index) => {
|
|
76
|
+
const n = index + 1;
|
|
77
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { testID: `${testIDPrefix}-face-${n}`, accessibilityRole: "radio", accessibilityLabel: label(n), accessibilityState: { checked: pick === n }, onPress: () => setPick(n), style: { width: 44, height: 44, borderRadius: 22, alignItems: "center", justifyContent: "center", borderWidth: pick === n ? 2 : 1, borderColor: pick === n ? primaryColor : border }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { fontSize: 22 }, children: face }) }, n));
|
|
78
|
+
}) }), (0, jsx_runtime_1.jsx)(react_native_1.TextInput, { testID: `${testIDPrefix}-comment`, value: comment, onChangeText: setComment, maxLength: rating_1.MAX_RATING_COMMENT, multiline: true, placeholder: strings.ratingComment, placeholderTextColor: dark ? "#777" : "#999", accessibilityLabel: strings.ratingComment, style: { color: ink, borderWidth: 1, borderColor: border, borderRadius: 10, paddingHorizontal: 10, paddingVertical: 8, fontSize: 14, minHeight: 56, maxHeight: 120 } }), error ? (0, jsx_runtime_1.jsx)(react_native_1.Text, { accessibilityRole: "alert", style: { color: "#dc2626", fontSize: 13 }, children: error }) : null, (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: "row", gap: 12, alignItems: "center" }, children: [(0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { testID: `${testIDPrefix}-send`, accessibilityRole: "button", accessibilityLabel: strings.ratingSend, accessibilityState: { disabled: !pick || !!pending || !onRate }, disabled: !pick || !!pending || !onRate, onPress: submit, style: { backgroundColor: primaryColor, borderRadius: 8, paddingHorizontal: 18, paddingVertical: 9, opacity: !pick || !onRate ? 0.4 : 1 }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: (0, color_1.textOn)(primaryColor), fontSize: 14, fontWeight: "600" }, children: strings.ratingSend }) }), block.score ? ((0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { testID: `${testIDPrefix}-cancel`, accessibilityRole: "button", accessibilityLabel: strings.ratingCancel, onPress: () => setEditing(false), hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: quiet, fontSize: 14 }, children: strings.ratingCancel }) })) : null] })] }));
|
|
79
|
+
}
|
|
80
|
+
/** Thumbs under a GiovBot answer: one vote, changeable; a thumbs-down offers an optional reason. */
|
|
81
|
+
function AnswerFeedback({ messageId, value, dark, primaryColor, onVote }) {
|
|
82
|
+
const strings = (0, i18n_1.useGiovChatStrings)();
|
|
83
|
+
const [asking, setAsking] = (0, react_1.useState)(false);
|
|
84
|
+
const [reason, setReason] = (0, react_1.useState)("");
|
|
85
|
+
const [failed, setFailed] = (0, react_1.useState)(false);
|
|
86
|
+
const quiet = dark ? "#aaa" : "#555";
|
|
87
|
+
const tap = async (tapped) => {
|
|
88
|
+
const next = (0, rating_1.nextFeedback)(value, tapped);
|
|
89
|
+
setFailed(false);
|
|
90
|
+
setReason("");
|
|
91
|
+
setAsking(next === "down");
|
|
92
|
+
try {
|
|
93
|
+
await onVote(messageId, next);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
setAsking(false);
|
|
97
|
+
setFailed(true);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const sendReason = async () => {
|
|
101
|
+
setAsking(false);
|
|
102
|
+
if (reason.trim())
|
|
103
|
+
await onVote(messageId, "down", reason.trim()).catch(() => setFailed(true));
|
|
104
|
+
};
|
|
105
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: `giov-feedback-${messageId}`, accessibilityRole: "toolbar", accessibilityLabel: strings.answerGroup, style: { marginTop: 2, marginLeft: 52 }, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: "row", alignItems: "center", gap: 4 }, children: [["up", "down"].map((kind) => ((0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { testID: `giov-feedback-${kind}`, accessibilityRole: "button", accessibilityLabel: kind === "up" ? strings.answerGood : strings.answerBad, accessibilityState: { selected: value === kind }, onPress: () => tap(kind), hitSlop: { top: 6, bottom: 6, left: 6, right: 6 }, style: { width: 36, height: 36, borderRadius: 18, alignItems: "center", justifyContent: "center", backgroundColor: value === kind ? primaryColor : "transparent", opacity: value && value !== kind ? 0.4 : 1 }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { fontSize: 16 }, children: kind === "up" ? "👍" : "👎" }) }, kind))), failed ? (0, jsx_runtime_1.jsx)(react_native_1.Text, { accessibilityRole: "alert", style: { color: "#dc2626", fontSize: 12 }, children: strings.answerFailed }) : null] }), asking ? ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: "row", alignItems: "center", gap: 8, marginTop: 4 }, children: [(0, jsx_runtime_1.jsx)(react_native_1.TextInput, { testID: "giov-feedback-reason", value: reason, onChangeText: setReason, maxLength: rating_1.MAX_FEEDBACK_REASON, placeholder: strings.answerReason, placeholderTextColor: dark ? "#777" : "#999", accessibilityLabel: strings.answerReason, style: { flex: 1, color: dark ? "#f0f0f0" : "#111", borderWidth: 1, borderColor: dark ? "#3a3a3a" : "#d4d4d4", borderRadius: 10, paddingHorizontal: 10, paddingVertical: 6, fontSize: 13 } }), (0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { testID: "giov-feedback-send", accessibilityRole: "button", accessibilityLabel: strings.ratingSend, onPress: sendReason, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: primaryColor, fontSize: 13, fontWeight: "600" }, children: strings.ratingSend }) }), (0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { testID: "giov-feedback-skip", accessibilityRole: "button", accessibilityLabel: strings.answerSkip, onPress: () => setAsking(false), hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: quiet, fontSize: 13 }, children: strings.answerSkip }) })] })) : null] }));
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=RatingCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RatingCard.js","sourceRoot":"","sources":["../../src/components/RatingCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface TypingIndicatorProps {
|
|
3
|
+
dark: boolean;
|
|
4
|
+
/** Only explicit server AI identity enables the AI mark. */
|
|
5
|
+
isBot?: boolean;
|
|
6
|
+
botName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function TypingIndicator({ dark, isBot, botName }: TypingIndicatorProps): React.JSX.Element;
|
|
9
|
+
//# sourceMappingURL=TypingIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypingIndicator.d.ts","sourceRoot":"","sources":["../../src/components/TypingIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,oBAAoB,qBAmB7E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TypingIndicator = TypingIndicator;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_native_1 = require("react-native");
|
|
6
|
+
const bubbleStyles_1 = require("./bubbleStyles");
|
|
7
|
+
const WidgetStyles_1 = require("./WidgetStyles");
|
|
8
|
+
const GiovBotMark_1 = require("./GiovBotMark");
|
|
9
|
+
const i18n_1 = require("../i18n");
|
|
10
|
+
function TypingIndicator({ dark, isBot, botName }) {
|
|
11
|
+
const custom = (0, WidgetStyles_1.useWidgetStyles)();
|
|
12
|
+
const strings = (0, i18n_1.useGiovChatStrings)();
|
|
13
|
+
const isAI = isBot === true;
|
|
14
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: [bubbleStyles_1.bubbleStyles.wrapper, bubbleStyles_1.bubbleStyles.left, isAI && bubbleStyles_1.bubbleStyles.assistantRow],
|
|
15
|
+
// One element, so screen readers say the label instead of the dots (iOS ignores a label otherwise).
|
|
16
|
+
accessible: true, accessibilityLabel: isAI ? strings.botTyping(botName?.trim() || "GiovBot") : strings.teamTyping, children: [isAI && (0, jsx_runtime_1.jsx)(GiovBotMark_1.GiovBotMark, {}), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: [bubbleStyles_1.bubbleStyles.bubble, bubbleStyles_1.bubbleStyles.agentBubble, dark && bubbleStyles_1.bubbleStyles.agentBubbleDark, custom.agentBubble], children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [{ color: dark ? "#666" : "#aaa", fontSize: 20, letterSpacing: 4 }, custom.agentText], children: "\u2022 \u2022 \u2022" }) })] }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=TypingIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypingIndicator.js","sourceRoot":"","sources":["../../src/components/TypingIndicator.tsx"],"names":[],"mappings":";;AAcA,0CAmBC;;AAhCD,+CAA0C;AAC1C,iDAAmD;AACnD,iDAAiD;AACjD,+CAA4C;AAC5C,kCAA6C;AAS7C,SAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAwB;IAC5E,MAAM,MAAM,GAAG,IAAA,8BAAe,GAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,yBAAkB,GAAE,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC;IAC5B,OAAO,CACL,wBAAC,mBAAI,IACH,KAAK,EAAE,CAAC,2BAAC,CAAC,OAAO,EAAE,2BAAC,CAAC,IAAI,EAAE,IAAI,IAAI,2BAAC,CAAC,YAAY,CAAC;QAClD,oGAAoG;QACpG,UAAU,QACV,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,aAE9F,IAAI,IAAI,uBAAC,yBAAW,KAAG,EACxB,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,2BAAC,CAAC,MAAM,EAAE,2BAAC,CAAC,WAAW,EAAE,IAAI,IAAI,2BAAC,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,YACnF,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,qCAE3F,GACF,IACF,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidgetStyles.d.ts","sourceRoot":"","sources":["../../src/components/WidgetStyles.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,2EAAkD,CAAC;AACnF,eAAO,MAAM,eAAe,wDAAwC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useWidgetStyles = exports.WidgetStylesContext = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const styleOverrides_1 = require("../styleOverrides");
|
|
6
|
+
exports.WidgetStylesContext = (0, react_1.createContext)((0, styleOverrides_1.resolveStyleOverrides)(undefined));
|
|
7
|
+
const useWidgetStyles = () => (0, react_1.useContext)(exports.WidgetStylesContext);
|
|
8
|
+
exports.useWidgetStyles = useWidgetStyles;
|
|
9
|
+
//# sourceMappingURL=WidgetStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidgetStyles.js","sourceRoot":"","sources":["../../src/components/WidgetStyles.tsx"],"names":[],"mappings":";;;AAAA,iCAAkD;AAClD,sDAA0D;AAE7C,QAAA,mBAAmB,GAAG,IAAA,qBAAa,EAAC,IAAA,sCAAqB,EAAC,SAAS,CAAC,CAAC,CAAC;AAC5E,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,IAAA,kBAAU,EAAC,2BAAmB,CAAC,CAAC;AAAxD,QAAA,eAAe,mBAAyC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Shared styles for chat bubble components. */
|
|
2
|
+
export declare const bubbleStyles: {
|
|
3
|
+
wrapper: {
|
|
4
|
+
marginHorizontal: number;
|
|
5
|
+
marginBottom: number;
|
|
6
|
+
};
|
|
7
|
+
right: {
|
|
8
|
+
alignItems: "flex-end";
|
|
9
|
+
};
|
|
10
|
+
left: {
|
|
11
|
+
alignItems: "flex-start";
|
|
12
|
+
};
|
|
13
|
+
assistantRow: {
|
|
14
|
+
flexDirection: "row";
|
|
15
|
+
gap: number;
|
|
16
|
+
};
|
|
17
|
+
bubble: {
|
|
18
|
+
maxWidth: "78%";
|
|
19
|
+
borderRadius: number;
|
|
20
|
+
padding: number;
|
|
21
|
+
};
|
|
22
|
+
visitorBubble: {
|
|
23
|
+
borderBottomRightRadius: number;
|
|
24
|
+
};
|
|
25
|
+
agentBubble: {
|
|
26
|
+
backgroundColor: string;
|
|
27
|
+
borderBottomLeftRadius: number;
|
|
28
|
+
};
|
|
29
|
+
agentBubbleDark: {
|
|
30
|
+
backgroundColor: string;
|
|
31
|
+
};
|
|
32
|
+
sender: {
|
|
33
|
+
fontSize: number;
|
|
34
|
+
fontWeight: "600";
|
|
35
|
+
marginBottom: number;
|
|
36
|
+
};
|
|
37
|
+
content: {
|
|
38
|
+
fontSize: number;
|
|
39
|
+
lineHeight: number;
|
|
40
|
+
};
|
|
41
|
+
timestamp: {
|
|
42
|
+
fontSize: number;
|
|
43
|
+
marginTop: number;
|
|
44
|
+
textAlign: "right";
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=bubbleStyles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bubbleStyles.d.ts","sourceRoot":"","sources":["../../src/components/bubbleStyles.ts"],"names":[],"mappings":"AAEA,gDAAgD;AAChD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYvB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bubbleStyles = void 0;
|
|
4
|
+
const react_native_1 = require("react-native");
|
|
5
|
+
/** Shared styles for chat bubble components. */
|
|
6
|
+
exports.bubbleStyles = react_native_1.StyleSheet.create({
|
|
7
|
+
wrapper: { marginHorizontal: 16, marginBottom: 8 },
|
|
8
|
+
right: { alignItems: "flex-end" },
|
|
9
|
+
left: { alignItems: "flex-start" },
|
|
10
|
+
assistantRow: { flexDirection: "row", gap: 8 },
|
|
11
|
+
bubble: { maxWidth: "78%", borderRadius: 16, padding: 12 },
|
|
12
|
+
visitorBubble: { borderBottomRightRadius: 4 },
|
|
13
|
+
agentBubble: { backgroundColor: "#f0f0f0", borderBottomLeftRadius: 4 },
|
|
14
|
+
agentBubbleDark: { backgroundColor: "#242424" },
|
|
15
|
+
sender: { fontSize: 11, fontWeight: "600", marginBottom: 3 },
|
|
16
|
+
content: { fontSize: 14, lineHeight: 20 },
|
|
17
|
+
timestamp: { fontSize: 10, marginTop: 4, textAlign: "right" },
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=bubbleStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bubbleStyles.js","sourceRoot":"","sources":["../../src/components/bubbleStyles.ts"],"names":[],"mappings":";;;AAAA,+CAA0C;AAE1C,gDAAgD;AACnC,QAAA,YAAY,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE;IAClD,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE;IACjC,IAAI,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE;IAClC,YAAY,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;IAC9C,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC1D,aAAa,EAAE,EAAE,uBAAuB,EAAE,CAAC,EAAE;IAC7C,WAAW,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC,EAAE;IACtE,eAAe,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE;IAC/C,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE;IAC5D,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACzC,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;CAC9D,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Header } from "./Header";
|
|
2
|
+
export type { HeaderProps } from "./Header";
|
|
3
|
+
export { MessageBubble } from "./MessageBubble";
|
|
4
|
+
export type { MessageBubbleProps } from "./MessageBubble";
|
|
5
|
+
export { GreetingBubble } from "./GreetingBubble";
|
|
6
|
+
export type { GreetingBubbleProps } from "./GreetingBubble";
|
|
7
|
+
export { TypingIndicator } from "./TypingIndicator";
|
|
8
|
+
export type { TypingIndicatorProps } from "./TypingIndicator";
|
|
9
|
+
export { PreChatForm } from "./PreChatForm";
|
|
10
|
+
export type { PreChatFormProps } from "./PreChatForm";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|