@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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +390 -2
  3. package/dist/GiovChat.d.ts +135 -0
  4. package/dist/GiovChat.d.ts.map +1 -0
  5. package/dist/GiovChat.js +294 -0
  6. package/dist/GiovChat.js.map +1 -0
  7. package/dist/attachments.d.ts +121 -0
  8. package/dist/attachments.d.ts.map +1 -0
  9. package/dist/attachments.js +185 -0
  10. package/dist/attachments.js.map +1 -0
  11. package/dist/brand-assets.d.ts +6 -0
  12. package/dist/brand-assets.d.ts.map +1 -0
  13. package/dist/brand-assets.js +9 -0
  14. package/dist/brand-assets.js.map +1 -0
  15. package/dist/brandingStyle.d.ts +38 -0
  16. package/dist/brandingStyle.d.ts.map +1 -0
  17. package/dist/brandingStyle.js +71 -0
  18. package/dist/brandingStyle.js.map +1 -0
  19. package/dist/client.d.ts +226 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +891 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/color.d.ts +25 -0
  24. package/dist/color.d.ts.map +1 -0
  25. package/dist/color.js +78 -0
  26. package/dist/color.js.map +1 -0
  27. package/dist/components/Attachments.d.ts +13 -0
  28. package/dist/components/Attachments.d.ts.map +1 -0
  29. package/dist/components/Attachments.js +42 -0
  30. package/dist/components/Attachments.js.map +1 -0
  31. package/dist/components/Branding.d.ts +29 -0
  32. package/dist/components/Branding.d.ts.map +1 -0
  33. package/dist/components/Branding.js +71 -0
  34. package/dist/components/Branding.js.map +1 -0
  35. package/dist/components/ChatMarkdown.d.ts +15 -0
  36. package/dist/components/ChatMarkdown.d.ts.map +1 -0
  37. package/dist/components/ChatMarkdown.js +72 -0
  38. package/dist/components/ChatMarkdown.js.map +1 -0
  39. package/dist/components/GiovBotMark.d.ts +6 -0
  40. package/dist/components/GiovBotMark.d.ts.map +1 -0
  41. package/dist/components/GiovBotMark.js +11 -0
  42. package/dist/components/GiovBotMark.js.map +1 -0
  43. package/dist/components/GreetingBubble.d.ts +7 -0
  44. package/dist/components/GreetingBubble.d.ts.map +1 -0
  45. package/dist/components/GreetingBubble.js +12 -0
  46. package/dist/components/GreetingBubble.js.map +1 -0
  47. package/dist/components/Header.d.ts +18 -0
  48. package/dist/components/Header.d.ts.map +1 -0
  49. package/dist/components/Header.js +67 -0
  50. package/dist/components/Header.js.map +1 -0
  51. package/dist/components/MessageBubble.d.ts +23 -0
  52. package/dist/components/MessageBubble.d.ts.map +1 -0
  53. package/dist/components/MessageBubble.js +51 -0
  54. package/dist/components/MessageBubble.js.map +1 -0
  55. package/dist/components/PreChatForm.d.ts +11 -0
  56. package/dist/components/PreChatForm.d.ts.map +1 -0
  57. package/dist/components/PreChatForm.js +72 -0
  58. package/dist/components/PreChatForm.js.map +1 -0
  59. package/dist/components/RatingCard.d.ts +23 -0
  60. package/dist/components/RatingCard.d.ts.map +1 -0
  61. package/dist/components/RatingCard.js +107 -0
  62. package/dist/components/RatingCard.js.map +1 -0
  63. package/dist/components/TypingIndicator.d.ts +9 -0
  64. package/dist/components/TypingIndicator.d.ts.map +1 -0
  65. package/dist/components/TypingIndicator.js +18 -0
  66. package/dist/components/TypingIndicator.js.map +1 -0
  67. package/dist/components/WidgetStyles.d.ts +3 -0
  68. package/dist/components/WidgetStyles.d.ts.map +1 -0
  69. package/dist/components/WidgetStyles.js +9 -0
  70. package/dist/components/WidgetStyles.js.map +1 -0
  71. package/dist/components/bubbleStyles.d.ts +47 -0
  72. package/dist/components/bubbleStyles.d.ts.map +1 -0
  73. package/dist/components/bubbleStyles.js +19 -0
  74. package/dist/components/bubbleStyles.js.map +1 -0
  75. package/dist/components/index.d.ts +11 -0
  76. package/dist/components/index.d.ts.map +1 -0
  77. package/dist/components/index.js +14 -0
  78. package/dist/components/index.js.map +1 -0
  79. package/dist/errors.d.ts +20 -0
  80. package/dist/errors.d.ts.map +1 -0
  81. package/dist/errors.js +26 -0
  82. package/dist/errors.js.map +1 -0
  83. package/dist/i18n.d.ts +96 -0
  84. package/dist/i18n.d.ts.map +1 -0
  85. package/dist/i18n.js +392 -0
  86. package/dist/i18n.js.map +1 -0
  87. package/dist/identity.d.ts +41 -0
  88. package/dist/identity.d.ts.map +1 -0
  89. package/dist/identity.js +41 -0
  90. package/dist/identity.js.map +1 -0
  91. package/dist/index.d.ts +30 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +64 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/markdown.d.ts +56 -0
  96. package/dist/markdown.d.ts.map +1 -0
  97. package/dist/markdown.js +219 -0
  98. package/dist/markdown.js.map +1 -0
  99. package/dist/outbox.d.ts +68 -0
  100. package/dist/outbox.d.ts.map +1 -0
  101. package/dist/outbox.js +168 -0
  102. package/dist/outbox.js.map +1 -0
  103. package/dist/protocol.d.ts +9 -0
  104. package/dist/protocol.d.ts.map +1 -0
  105. package/dist/protocol.js +39 -0
  106. package/dist/protocol.js.map +1 -0
  107. package/dist/rating.d.ts +41 -0
  108. package/dist/rating.d.ts.map +1 -0
  109. package/dist/rating.js +165 -0
  110. package/dist/rating.js.map +1 -0
  111. package/dist/ratingStore.d.ts +36 -0
  112. package/dist/ratingStore.d.ts.map +1 -0
  113. package/dist/ratingStore.js +55 -0
  114. package/dist/ratingStore.js.map +1 -0
  115. package/dist/styleOverrides.d.ts +45 -0
  116. package/dist/styleOverrides.d.ts.map +1 -0
  117. package/dist/styleOverrides.js +63 -0
  118. package/dist/styleOverrides.js.map +1 -0
  119. package/dist/types.d.ts +156 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +3 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/unread.d.ts +9 -0
  124. package/dist/unread.d.ts.map +1 -0
  125. package/dist/unread.js +49 -0
  126. package/dist/unread.js.map +1 -0
  127. package/dist/useChatSession.d.ts +95 -0
  128. package/dist/useChatSession.d.ts.map +1 -0
  129. package/dist/useChatSession.js +965 -0
  130. package/dist/useChatSession.js.map +1 -0
  131. package/package.json +60 -4
  132. package/src/GiovChat.tsx +640 -0
  133. package/src/attachments.ts +218 -0
  134. package/src/brand-assets.ts +5 -0
  135. package/src/brandingStyle.ts +87 -0
  136. package/src/client.ts +848 -0
  137. package/src/color.ts +74 -0
  138. package/src/components/Attachments.tsx +75 -0
  139. package/src/components/Branding.tsx +94 -0
  140. package/src/components/ChatMarkdown.tsx +111 -0
  141. package/src/components/GiovBotMark.tsx +19 -0
  142. package/src/components/GreetingBubble.tsx +20 -0
  143. package/src/components/Header.tsx +131 -0
  144. package/src/components/MessageBubble.tsx +137 -0
  145. package/src/components/PreChatForm.tsx +183 -0
  146. package/src/components/RatingCard.tsx +219 -0
  147. package/src/components/TypingIndicator.tsx +34 -0
  148. package/src/components/WidgetStyles.tsx +5 -0
  149. package/src/components/bubbleStyles.ts +16 -0
  150. package/src/components/index.ts +14 -0
  151. package/src/errors.ts +33 -0
  152. package/src/i18n.ts +474 -0
  153. package/src/identity.ts +54 -0
  154. package/src/index.ts +85 -0
  155. package/src/markdown.ts +227 -0
  156. package/src/outbox.ts +175 -0
  157. package/src/protocol.ts +36 -0
  158. package/src/rating.ts +169 -0
  159. package/src/ratingStore.ts +65 -0
  160. package/src/styleOverrides.ts +98 -0
  161. package/src/types.ts +170 -0
  162. package/src/unread.ts +39 -0
  163. 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":"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"}
@@ -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":";;AAwBA,kCAuIC;;AA/JD,iCAAwC;AACxC,+CAOsB;AAEtB,iDAAiD;AACjD,kCAA6C;AAC7C,oCAAkC;AAUlC,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,SAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,aAAa,EACb,QAAQ,GACS;IACjB,MAAM,MAAM,GAAG,IAAA,8BAAe,GAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,yBAAkB,GAAE,CAAC;IACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,aAAa,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAE/D,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE1E,MAAM,OAAO,GACX,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE7C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,QAAQ,CAAC;YACP,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,SAAS;YACxC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,SAAS;YACtC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS;YAChC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS;SACjC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,MAAM,CAAC,KAAK;QACZ,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;QACxE,MAAM,CAAC,KAAK;KACb,CAAC;IAEF,OAAO,CACL,wBAAC,yBAAU,IACT,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAC5D,qBAAqB,EAAE,MAAM,CAAC,OAAO,EACrC,yBAAyB,EAAC,SAAS,aAEnC,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,YAAG,OAAO,CAAC,YAAY,GAAQ,EAEnG,MAAM,CAAC,SAAS,IAAI,CACnB,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACvB,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,YAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAQ,EAC9G,uBAAC,wBAAS,IACR,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,SAAS,EAChB,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EACvD,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,OAAO,CAAC,SAAS,EAC9B,oBAAoB,EAAE,gBAAgB,EACtC,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,KAAK,EAClB,aAAa,EAAC,MAAM,GACpB,IACG,CACR,EAEA,MAAM,CAAC,QAAQ,IAAI,CAClB,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACvB,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,YAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAQ,EAC7G,uBAAC,wBAAS,IACR,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,QAAQ,EACf,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EACtD,YAAY,EAAE,WAAW,EACzB,WAAW,EAAE,OAAO,CAAC,QAAQ,EAC7B,oBAAoB,EAAE,gBAAgB,EACtC,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,KAAK,EAClB,aAAa,EAAC,MAAM,GACpB,IACG,CACR,EAEA,MAAM,CAAC,KAAK,IAAI,CACf,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACvB,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,YAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAQ,EAC1G,uBAAC,wBAAS,IACR,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EACnD,YAAY,EAAE,QAAQ,EACtB,WAAW,EAAC,iBAAiB,EAC7B,oBAAoB,EAAE,gBAAgB,EACtC,YAAY,EAAC,eAAe,EAC5B,cAAc,EAAC,MAAM,EACrB,WAAW,EAAE,KAAK,EAClB,aAAa,EAAC,MAAM,GACpB,IACG,CACR,EAEA,MAAM,CAAC,KAAK,IAAI,CACf,wBAAC,mBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACvB,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,YAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAQ,EAC1G,uBAAC,wBAAS,IACR,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EACnD,YAAY,EAAE,QAAQ,EACtB,WAAW,EAAC,iBAAiB,EAC7B,oBAAoB,EAAE,gBAAgB,EACtC,YAAY,EAAC,WAAW,EACxB,aAAa,EAAC,MAAM,GACpB,IACG,CACR,EAED,uBAAC,+BAAgB,IACf,KAAK,EAAE;oBACL,MAAM,CAAC,SAAS;oBAChB,EAAE,eAAe,EAAE,YAAY,EAAE;oBACjC,MAAM,CAAC,MAAM;oBACb,CAAC,OAAO,IAAI,MAAM,CAAC,iBAAiB;iBACrC,EACD,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,CAAC,OAAO,EAClB,iBAAiB,EAAC,QAAQ,EAC1B,kBAAkB,EAAE,OAAO,CAAC,SAAS,YAErC,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAA,cAAM,EAAC,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,YAAG,OAAO,CAAC,SAAS,GAAQ,GACnI,IACR,CACd,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACnB,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;IACrC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;IAC9D,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;IAC3B,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE;IAC3D,KAAK,EAAE;QACL,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,EAAE;QACrB,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb;IACD,SAAS,EAAE;QACT,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,CAAC;KACb;IACD,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;IACpC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;CAClE,CAAC,CAAC"}
@@ -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,3 @@
1
+ export declare const WidgetStylesContext: import("react").Context<import("../styleOverrides").ResolvedWidgetStyles>;
2
+ export declare const useWidgetStyles: () => import("../styleOverrides").ResolvedWidgetStyles;
3
+ //# sourceMappingURL=WidgetStyles.d.ts.map
@@ -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