@axos-web-dev/shared-components 2.0.0-dev.1 → 2.0.0-queryparams.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/README.md +111 -111
  2. package/dist/ATMLocator/ATMLocator.js +3 -8
  3. package/dist/Article/Article.d.ts +2 -2
  4. package/dist/Article/Article.js +13 -2
  5. package/dist/Auth/ErrorAlert.js +4 -9
  6. package/dist/Auth/SignInPassword.js +0 -1
  7. package/dist/Avatar/Avatar.module.js +7 -7
  8. package/dist/Blockquote/Blockquote.module.js +3 -3
  9. package/dist/BulletItem/BulletItem.js +0 -1
  10. package/dist/Button/Button.js +10 -10
  11. package/dist/Calculators/AnnualFeeCalculator/index.js +0 -1
  12. package/dist/Calculators/ApyCalculator/index.js +3 -1
  13. package/dist/Calculators/AxosOneCalculator/index.js +16 -9
  14. package/dist/Calculators/BalanceAPYCalculator/index.js +0 -1
  15. package/dist/Calculators/BuyDownCalculator/index.js +0 -1
  16. package/dist/Calculators/Calculator.js +0 -5
  17. package/dist/Calculators/MarginTradingCalculator/index.js +119 -2
  18. package/dist/Calculators/MarineLoanMonthlyPaymentCalculator/index.js +0 -1
  19. package/dist/Calculators/MaxLoanCalculator/index.js +0 -1
  20. package/dist/Calculators/MonthlyPaymentCalculator/index.js +0 -1
  21. package/dist/Calculators/MonthlyPaymentLVFCalculator/index.js +0 -1
  22. package/dist/Calculators/SummitApyCalculator/index.js +3 -2
  23. package/dist/Carousel/index.js +3 -8
  24. package/dist/Chatbot/Bubble.js +1 -1
  25. package/dist/Chatbot/Chat.js +0 -7
  26. package/dist/Chatbot/ChatWindow.d.ts +2 -0
  27. package/dist/Chatbot/ChatWindow.js +27 -14
  28. package/dist/Chatbot/Chatbot.d.ts +1 -1
  29. package/dist/Chatbot/Chatbot.js +118 -13
  30. package/dist/Chatbot/ChatbotMessage.d.ts +1 -0
  31. package/dist/Chatbot/ChatbotMessage.js +42 -22
  32. package/dist/Chatbot/store/chat.d.ts +6 -0
  33. package/dist/Chatbot/store/chat.js +14 -2
  34. package/dist/Chatbot/store/messages.d.ts +1 -0
  35. package/dist/Chatbot/store/messages.js +5 -2
  36. package/dist/Chevron/index.js +2 -8
  37. package/dist/Comparison/Comparison.js +3 -8
  38. package/dist/ExecutiveBio/ExecutiveBio.css.d.ts +51 -1
  39. package/dist/ExecutiveBio/ExecutiveBio.css.js +48 -46
  40. package/dist/ExecutiveBio/ExecutiveBio.d.ts +1 -1
  41. package/dist/ExecutiveBio/ExecutiveBio.interface.d.ts +3 -1
  42. package/dist/ExecutiveBio/ExecutiveBio.js +142 -151
  43. package/dist/ExecutiveBio/ExecutiveBioSet.d.ts +1 -2
  44. package/dist/ExecutiveBio/ExecutiveBioSet.js +29 -16
  45. package/dist/ExecutiveBio/index.js +2 -1
  46. package/dist/FaqAccordion/index.js +3 -8
  47. package/dist/FdicCallout/FdicCallout.module.js +2 -2
  48. package/dist/FooterSiteMap/AxosBank/FooterSiteMap.js +83 -184
  49. package/dist/Forms/ApplicationStart.js +0 -1
  50. package/dist/Forms/ApplyNow.js +1 -6
  51. package/dist/Forms/BoatMooringLocation.js +0 -1
  52. package/dist/Forms/ClearingForm.js +0 -1
  53. package/dist/Forms/CommercialDeposits.js +0 -1
  54. package/dist/Forms/CommercialDepositsNoLendingOption.js +0 -1
  55. package/dist/Forms/CommercialLending.js +0 -1
  56. package/dist/Forms/CommercialPremiumFinance.js +0 -1
  57. package/dist/Forms/ConstructionLendingDynamic.d.ts +12 -0
  58. package/dist/Forms/ConstructionLendingDynamic.js +324 -0
  59. package/dist/Forms/ContactCompany.js +0 -1
  60. package/dist/Forms/ContactCompanyTitle.js +0 -1
  61. package/dist/Forms/ContactUs.js +0 -1
  62. package/dist/Forms/ContactUsAAS.js +0 -1
  63. package/dist/Forms/ContactUsBusiness.js +3 -8
  64. package/dist/Forms/ContactUsBusinessNameEmail.js +3 -8
  65. package/dist/Forms/ContactUsLVF.js +0 -1
  66. package/dist/Forms/ContactUsNMLSId.js +3 -8
  67. package/dist/Forms/CpraRequest.js +100 -3
  68. package/dist/Forms/CraPublicFile.js +3 -8
  69. package/dist/Forms/DealerServices.js +0 -1
  70. package/dist/Forms/EmailOnly.js +10 -10
  71. package/dist/Forms/EmailUs.js +0 -1
  72. package/dist/Forms/FormEnums.js +1 -3
  73. package/dist/Forms/Forms.css.d.ts +1 -1
  74. package/dist/Forms/Forms.css.js +3 -3
  75. package/dist/Forms/HoneyPot/index.js +0 -1
  76. package/dist/Forms/MortgageRate/MortgageRateForm.js +4 -9
  77. package/dist/Forms/MortgageRate/MortgageRateWatch.js +3 -8
  78. package/dist/Forms/MortgageWarehouseLending.js +3 -8
  79. package/dist/Forms/QuickPricer/QuickPricerForm.js +0 -1
  80. package/dist/Forms/ScheduleCall.js +0 -1
  81. package/dist/Forms/ScheduleCallPremier.js +0 -1
  82. package/dist/Forms/SuccesForm.js +3 -8
  83. package/dist/Forms/VendorQuestionnaire.js +0 -1
  84. package/dist/Forms/index.d.ts +1 -0
  85. package/dist/Forms/index.js +2 -1
  86. package/dist/Hyperlink/index.js +6 -10
  87. package/dist/IconBillboard/IconBillboard.css.d.ts +1 -0
  88. package/dist/IconBillboard/IconBillboard.css.js +11 -9
  89. package/dist/IconBillboard/index.js +2 -1
  90. package/dist/ImageBillboard/ImageBillboardSet.js +14 -8
  91. package/dist/ImageLink/ImageLink.js +3 -8
  92. package/dist/ImageLink/ImageLinkSet.js +3 -8
  93. package/dist/ImageLink/index.js +1 -6
  94. package/dist/Insight/Featured/CategorySelector.js +1 -6
  95. package/dist/Insight/Featured/Featured.js +3 -8
  96. package/dist/Insight/Featured/Header.js +3 -8
  97. package/dist/Interstitial/Interstitial.module.js +10 -10
  98. package/dist/LandingPageHeader/LandingPageHeader.css.d.ts +19 -1
  99. package/dist/LandingPageHeader/LandingPageHeader.css.js +6 -6
  100. package/dist/LandingPageHeader/LandingPageHeader.d.ts +3 -1
  101. package/dist/LandingPageHeader/LandingPageHeader.js +42 -16
  102. package/dist/LoadingIndicator/index.js +0 -1
  103. package/dist/Modal/Modal.js +1 -6
  104. package/dist/Modal/contextApi/store.d.ts +16 -2
  105. package/dist/Modal/contextApi/store.js +37 -6
  106. package/dist/NavigationMenu/AxosALTS/NavBar.module.js +23 -23
  107. package/dist/NavigationMenu/AxosALTS/NavData.d.ts +7 -1
  108. package/dist/NavigationMenu/AxosALTS/NavData.js +6 -137
  109. package/dist/NavigationMenu/AxosALTS/index.js +10 -12
  110. package/dist/NavigationMenu/AxosAdvisor/NavBar.module.js +52 -52
  111. package/dist/NavigationMenu/AxosAdvisor/SubNavBar.js +0 -1
  112. package/dist/NavigationMenu/AxosAdvisor/index.js +0 -1
  113. package/dist/NavigationMenu/AxosAdvisorServices/NavBar.module.js +53 -53
  114. package/dist/NavigationMenu/AxosAdvisorServices/SubNavBar.js +0 -1
  115. package/dist/NavigationMenu/AxosAdvisorServices/index.js +0 -1
  116. package/dist/NavigationMenu/AxosBank/MobileMenu/MobileMenu.js +341 -73
  117. package/dist/NavigationMenu/AxosBank/MobileMenu/MobileMenu.module.js +50 -17
  118. package/dist/NavigationMenu/AxosBank/MobileMenu/MobileNavData.d.ts +20 -6
  119. package/dist/NavigationMenu/AxosBank/MobileMenu/MobileNavData.js +211 -355
  120. package/dist/NavigationMenu/AxosBank/NavBar.module.js +39 -39
  121. package/dist/NavigationMenu/AxosBank/NavData.d.ts +39 -2
  122. package/dist/NavigationMenu/AxosBank/NavData.js +34 -166
  123. package/dist/NavigationMenu/AxosBank/SubNavBar.js +199 -220
  124. package/dist/NavigationMenu/AxosBank/index.js +16 -43
  125. package/dist/NavigationMenu/AxosClearing/NavBar.module.js +37 -37
  126. package/dist/NavigationMenu/AxosClearing/index.js +0 -1
  127. package/dist/NavigationMenu/AxosFiduciary/NavBar.module.js +41 -41
  128. package/dist/NavigationMenu/LaVictoire/NavBar.module.js +37 -37
  129. package/dist/NavigationMenu/LaVictoire/NavData.d.ts +13 -2
  130. package/dist/NavigationMenu/LaVictoire/NavData.js +14 -146
  131. package/dist/NavigationMenu/LaVictoire/SubNavBar.js +4 -1
  132. package/dist/NavigationMenu/LaVictoire/index.js +16 -41
  133. package/dist/NavigationMenu/Navbar.js +4 -5
  134. package/dist/NavigationMenu/SignInNavButton.js +16 -24
  135. package/dist/SetContainer/SetContainer.js +4 -9
  136. package/dist/SocialMediaBar/iconsRepository.d.ts +44 -14
  137. package/dist/SocialMediaBar/iconsRepository.js +28 -37
  138. package/dist/SocialMediaBar/index.js +3 -1
  139. package/dist/Tab/Tab.js +0 -1
  140. package/dist/Table/Table.js +0 -1
  141. package/dist/VideoTile/VideoTile.js +0 -5
  142. package/dist/VideoWrapper/index.js +0 -5
  143. package/dist/WalnutIframe/wrapper.module.js +3 -3
  144. package/dist/assets/Avatar/Avatar.css +59 -59
  145. package/dist/assets/Blockquote/Blockquote.css +72 -72
  146. package/dist/assets/Calculators/ApyCalculator/ApyCalculator.css +1 -1
  147. package/dist/assets/Calculators/MarginTradingCalculator/MarginTradingCalculator.css +2 -2
  148. package/dist/assets/Calculators/SummitApyCalculator/BalanceAPYCalculator.css +1 -1
  149. package/dist/assets/Carousel/Carousel.css +1 -1
  150. package/dist/assets/Chatbot/AnimatedGradientBorder.css +2 -1
  151. package/dist/assets/Chatbot/ChatWindow.css +16 -8
  152. package/dist/assets/DownloadTile/DownloadTile.css +2 -2
  153. package/dist/assets/ExecutiveBio/ExecutiveBio.css +281 -171
  154. package/dist/assets/FdicCallout/FdicCallout.css +48 -48
  155. package/dist/assets/Forms/Forms.css +29 -25
  156. package/dist/assets/HelpArticle/HelpArticle.css +2 -2
  157. package/dist/assets/IconBillboard/IconBillboard.css +35 -28
  158. package/dist/assets/Inputs/Input.css +1 -1
  159. package/dist/assets/Insight/Featured/CategorySelector.css +1 -1
  160. package/dist/assets/Insight/Insight.css +4 -4
  161. package/dist/assets/Interstitial/Interstitial.css +142 -142
  162. package/dist/assets/LandingPageHeader/LandingPageHeader.css +28 -15
  163. package/dist/assets/NavigationMenu/AxosALTS/NavBar.css +264 -264
  164. package/dist/assets/NavigationMenu/AxosAdvisor/NavBar.css +609 -609
  165. package/dist/assets/NavigationMenu/AxosAdvisorServices/NavBar.css +630 -630
  166. package/dist/assets/NavigationMenu/AxosBank/MobileMenu/MobileMenu.css +353 -192
  167. package/dist/assets/NavigationMenu/AxosBank/NavBar.css +445 -445
  168. package/dist/assets/NavigationMenu/AxosClearing/NavBar.css +484 -484
  169. package/dist/assets/NavigationMenu/AxosFiduciary/NavBar.css +427 -427
  170. package/dist/assets/NavigationMenu/LaVictoire/NavBar.css +429 -429
  171. package/dist/assets/Topic/Topic.css +1 -1
  172. package/dist/assets/Typography/Typography.css +1 -1
  173. package/dist/assets/VideoTile/VideoTile.css +1 -1
  174. package/dist/assets/WalnutIframe/wrapper.css +48 -48
  175. package/dist/assets/globals.css +24 -14
  176. package/dist/assets/utils/optimizeImage/optimizeImage.css +47 -47
  177. package/dist/main.js +8 -3
  178. package/dist/utils/allowedAxosDomains.d.ts +5 -2
  179. package/dist/utils/allowedAxosDomains.js +50 -47
  180. package/dist/utils/appendQueryParams.js +36 -5
  181. package/dist/utils/index.js +2 -1
  182. package/dist/utils/optimizeImage/optimizeImage.module.js +3 -3
  183. package/dist/utils/samePageNavigation.d.ts +3 -0
  184. package/dist/utils/samePageNavigation.js +23 -0
  185. package/dist/utils/validateExternalLinks.d.ts +1 -1
  186. package/dist/utils/validateExternalLinks.js +4 -6
  187. package/package.json +149 -148
  188. package/dist/NavigationMenu/NavDataJson.d.ts +0 -2
  189. package/dist/NavigationMenu/NavDataJson.js +0 -317
@@ -14,7 +14,16 @@ const Chatbot = ({
14
14
  menuOption = "Support Virtual Agent",
15
15
  debug = false
16
16
  }) => {
17
- const { hasOpenedOnce, toggle, reset } = useOpenChat();
17
+ const {
18
+ hasOpenedOnce,
19
+ toggle,
20
+ reset,
21
+ startEscalation,
22
+ hasEscalated,
23
+ endEscalation,
24
+ unblockInput,
25
+ blockInput
26
+ } = useOpenChat();
18
27
  const { addMessage, addMessages, clearMessages, messages } = useMessages();
19
28
  const clientRef = useRef(null);
20
29
  const menuRef = useRef(null);
@@ -26,6 +35,20 @@ const Chatbot = ({
26
35
  const [hasStarted, setHasStarted] = useState(false);
27
36
  const [menusLoaded, setMenusLoaded] = useState(false);
28
37
  const [pendingStart, setPendingStart] = useState(false);
38
+ const [isTyping, setIsTyping] = useState(false);
39
+ const [scalationStarted, setScalationStarted] = useState(false);
40
+ useEffect(() => {
41
+ if (messages.length === 0) return;
42
+ const hasScalation = messages.some(
43
+ (msg) => msg.$userType === "user" || ["escalationAccepted", "escalationStarted"].includes(
44
+ msg.event
45
+ )
46
+ );
47
+ setScalationStarted(hasScalation);
48
+ return () => {
49
+ setScalationStarted(false);
50
+ };
51
+ }, [messages]);
29
52
  const brandMap = /* @__PURE__ */ new Map([
30
53
  ["axos", 1],
31
54
  ["ufb", 3]
@@ -33,8 +56,7 @@ const Chatbot = ({
33
56
  const typingMessage = {
34
57
  $sid: "typing-1",
35
58
  type: "system",
36
- // or a custom type like "typing"
37
- text: "AI is typing...",
59
+ text: scalationStarted ? "Typing" : "AI is typing...",
38
60
  sender: { id: "system", type: "system" },
39
61
  $timestamp: /* @__PURE__ */ new Date(),
40
62
  $userType: "system",
@@ -77,13 +99,44 @@ const Chatbot = ({
77
99
  };
78
100
  const onChatMessageHandler = async (message) => {
79
101
  console.log("Received message:", message);
80
- addMessage(message);
81
- if (!["virtual_agent", "system"].includes(message.$userType)) {
82
- addMessage(typingMessage);
102
+ const { event, $userType } = message;
103
+ if (["system", "virtual_agent", "user"].includes($userType) && event === void 0) {
104
+ addMessage(message);
105
+ if (!hasEscalated) {
106
+ unblockInput?.();
107
+ }
108
+ return;
109
+ }
110
+ switch (event) {
111
+ case "escalationAccepted":
112
+ case "escalationStarted":
113
+ setScalationStarted(true);
114
+ startEscalation?.();
115
+ addMessage(message);
116
+ return;
117
+ case "escalationEnded":
118
+ case "escalationFailed": {
119
+ endEscalation?.();
120
+ addMessage(message);
121
+ return;
122
+ }
123
+ default:
124
+ addMessage(message);
125
+ if (["end_user"].includes(message.$userType)) {
126
+ if (!hasEscalated) {
127
+ addMessage(typingMessage);
128
+ }
129
+ }
130
+ return;
83
131
  }
84
132
  };
85
133
  const onChatTypingStartedHandler = async (identity) => {
86
134
  console.log("Typing started by:", identity);
135
+ setIsTyping(true);
136
+ };
137
+ const onChatTypingEndedHandler = async (identity) => {
138
+ console.log("Typing ended by:", identity);
139
+ setIsTyping(false);
87
140
  };
88
141
  const onChatDisconnectedHandler = async () => {
89
142
  console.log("Chat disconnected");
@@ -105,23 +158,47 @@ const Chatbot = ({
105
158
  const onChatMemberLeftHandler = async (identity) => {
106
159
  console.log("Chat member left:", identity);
107
160
  };
161
+ const onChatMemberJoinedHandler = async (identity) => {
162
+ console.log("Chat member joined:", identity);
163
+ };
108
164
  const onChatConnectedHandler = async () => {
109
165
  setStatus("connected");
110
166
  console.log("connected");
111
- const messages2 = await clientRef.current?.fetchMessages();
112
- if (messages2) {
113
- addMessages(messages2);
167
+ try {
168
+ if (!clientRef.current) {
169
+ console.error("Client not initialized on chat connected");
170
+ return;
171
+ }
172
+ const messages2 = await clientRef.current?.fetchMessages();
173
+ console.log("Fetched messages on chat connected:", messages2);
174
+ if (messages2) {
175
+ addMessages(messages2);
176
+ const hasEscalation = messages2.some(
177
+ (msg) => msg.$userType === "user" || ["escalationAccepted", "escalationStarted"].includes(
178
+ msg.event
179
+ )
180
+ );
181
+ console.log(hasEscalation);
182
+ if (hasEscalation) {
183
+ setScalationStarted(true);
184
+ startEscalation?.();
185
+ }
186
+ }
187
+ } catch (error) {
188
+ console.error("Error fetching messages on chat connected:", error);
114
189
  }
115
190
  };
116
191
  const registerEventHandlers = () => {
117
192
  clientRef.current?.on("chat.ongoing", onChatOngoingHandler);
118
193
  clientRef.current?.on("chat.message", onChatMessageHandler);
119
194
  clientRef.current?.on("chat.typingStarted", onChatTypingStartedHandler);
195
+ clientRef.current?.on("chat.typingEnded", onChatTypingEndedHandler);
120
196
  clientRef.current?.on("chat.disconnected", onChatDisconnectedHandler);
121
197
  clientRef.current?.on("chat.dismissed", onDismissedHandler);
122
198
  clientRef.current?.on("chat.timeout", onTimeoutHandler);
123
199
  clientRef.current?.on("chat.ended", onEndedHandler);
124
200
  clientRef.current?.on("chat.destroyed", onDestroyedHandler);
201
+ clientRef.current?.on("chat.memberJoined", onChatMemberJoinedHandler);
125
202
  clientRef.current?.on("chat.memberLeft", onChatMemberLeftHandler);
126
203
  clientRef?.current?.on("chat.connected", onChatConnectedHandler);
127
204
  };
@@ -131,12 +208,14 @@ const Chatbot = ({
131
208
  clientRef.current?.off("chat.ongoing", onDismissedHandler);
132
209
  clientRef.current?.off("chat.message", onChatMessageHandler);
133
210
  clientRef.current?.off("chat.typingStarted", onChatTypingStartedHandler);
211
+ clientRef.current?.off("chat.typingEnded", onChatTypingEndedHandler);
134
212
  clientRef.current?.off("chat.disconnected", onChatDisconnectedHandler);
135
213
  clientRef.current?.off("chat.dismissed", onDismissedHandler);
136
214
  clientRef.current?.off("chat.timeout", onTimeoutHandler);
137
215
  clientRef.current?.off("chat.ended", onEndedHandler);
138
216
  clientRef.current?.off("chat.destroyed", onDestroyedHandler);
139
217
  clientRef.current?.off("chat.memberLeft", onChatMemberLeftHandler);
218
+ clientRef.current?.off("chat.memberJoined", onChatMemberJoinedHandler);
140
219
  clientRef.current?.off("chat.connected", onChatConnectedHandler);
141
220
  };
142
221
  const createClient = async () => {
@@ -150,6 +229,9 @@ const Chatbot = ({
150
229
  tenant: process.env.CCAI_TENANT_NAME || "",
151
230
  host: process.env.CCAI_HOST || "",
152
231
  // or your region
232
+ // companyId: import.meta.env.VITE_COMPANY_ID || "",
233
+ // tenant: import.meta.env.VITE_TENANT_NAME || "",
234
+ // host: import.meta.env.VITE_HOST || "", // or your region
153
235
  authenticate
154
236
  });
155
237
  client?.on("ready", onReadyHandler);
@@ -210,9 +292,17 @@ const Chatbot = ({
210
292
  setHasStarted(true);
211
293
  }
212
294
  };
213
- const onSendMessage = (msg) => {
295
+ const onSendMessage = async (msg) => {
214
296
  console.log("Sending message:", msg);
215
- clientRef.current?.sendTextMessage(msg);
297
+ try {
298
+ await clientRef.current?.sendTextMessage(msg);
299
+ } catch (error) {
300
+ console.log(error);
301
+ } finally {
302
+ if (!hasEscalated) {
303
+ blockInput?.();
304
+ }
305
+ }
216
306
  };
217
307
  const onEndChat = async () => {
218
308
  console.log("Ending chat");
@@ -223,6 +313,7 @@ const Chatbot = ({
223
313
  chatRef.current = null;
224
314
  console.log("Chat ended");
225
315
  setHasStarted(false);
316
+ endEscalation?.();
226
317
  }
227
318
  };
228
319
  const onEndAndStartNewChat = async () => {
@@ -251,6 +342,7 @@ const Chatbot = ({
251
342
  setHasStarted(false);
252
343
  setStatus("idle");
253
344
  clearMessages();
345
+ endEscalation?.();
254
346
  clientRef.current?.destroy();
255
347
  clientRef.current?.destroyChat();
256
348
  clientRef.current = null;
@@ -262,7 +354,18 @@ const Chatbot = ({
262
354
  reset();
263
355
  setHasStarted(false);
264
356
  };
265
- return /* @__PURE__ */ jsxs("div", { className: project === "ufb" ? chatbotUFB : chatbotAXB, children: [
357
+ const onPreviewTyping = async (msg) => {
358
+ console.log("Preview typing message:", msg);
359
+ try {
360
+ if (clientRef.current) {
361
+ chatRef.current?.startTyping();
362
+ await clientRef.current?.sendPreviewMessage(msg);
363
+ }
364
+ } catch (error) {
365
+ console.error("Error sending preview message:", error);
366
+ }
367
+ };
368
+ return menusLoaded && /* @__PURE__ */ jsxs("div", { className: project === "ufb" ? chatbotUFB : chatbotAXB, children: [
266
369
  /* @__PURE__ */ jsx(Bubble, { onClick: handleClick }),
267
370
  /* @__PURE__ */ jsx(
268
371
  ChatWindow,
@@ -274,7 +377,9 @@ const Chatbot = ({
274
377
  endChat: onEndChat,
275
378
  onClose,
276
379
  onNewChat: onEndAndStartNewChat,
277
- onCloseAfterThankYou
380
+ onCloseAfterThankYou,
381
+ previewTyping: onPreviewTyping,
382
+ isTyping
278
383
  }
279
384
  )
280
385
  ] });
@@ -11,6 +11,7 @@ interface ChatbotMessageProps {
11
11
  virtualAgent?: VirtualAgent | null;
12
12
  onCancelEndChat?: () => void;
13
13
  onSend?: (content: string) => void;
14
+ onEndChat?: () => void;
14
15
  }
15
16
  export declare const ChatbotMessage: FC<ChatbotMessageProps>;
16
17
  export {};
@@ -9,7 +9,8 @@ import '../assets/themes/victorie.css';import '../assets/themes/ufb.css';import
9
9
  /* empty css */
10
10
  /* empty css */
11
11
  import clsx from "clsx";
12
- import { shimmerText, notificationStyle, endChatButtonStyle, messageStyle, user_msg, agent_msg, inline_button_wrapper, inline_button } from "./ChatWindow.css.js";
12
+ import { shimmerText, notificationStyle, messageStyle, user_msg, agent_msg, inline_button_wrapper, inline_button, endChatButtonStyle } from "./ChatWindow.css.js";
13
+ import { useOpenChat } from "./store/chat.js";
13
14
  function timeAgo(date) {
14
15
  const seconds = Math.floor(((/* @__PURE__ */ new Date()).getTime() - date.getTime()) / 1e3);
15
16
  if (seconds < 60) return "Just now";
@@ -23,9 +24,10 @@ const ChatbotMessage = ({
23
24
  showAvatar,
24
25
  showName,
25
26
  virtualAgent,
26
- onCancelEndChat,
27
+ onEndChat,
27
28
  onSend
28
29
  }) => {
30
+ const { hasEscalated } = useOpenChat();
29
31
  const [timeText, setTimeText] = useState(timeAgo(msg.$timestamp));
30
32
  useEffect(() => {
31
33
  const interval = setInterval(() => {
@@ -33,7 +35,7 @@ const ChatbotMessage = ({
33
35
  }, 3e4);
34
36
  return () => clearInterval(interval);
35
37
  }, [msg.$timestamp]);
36
- if (msg.$sid === "typing-1") {
38
+ if (msg.$sid === "typing-1" && !hasEscalated) {
37
39
  return /* @__PURE__ */ jsx(
38
40
  "div",
39
41
  {
@@ -73,23 +75,20 @@ const ChatbotMessage = ({
73
75
  " ",
74
76
  msg.to_agent ? /* @__PURE__ */ jsx("strong", { children: msg?.to_agent?.name }) : "an agent"
75
77
  ] }, msg.$index),
76
- msg.type == "noti" && msg.$userType == "virtual_agent" && msg.event == "escalationDeflected" && /* @__PURE__ */ jsxs(Fragment, { children: [
77
- /* @__PURE__ */ jsxs(
78
- "div",
79
- {
80
- className: notificationStyle,
81
- style: { fontSize: 12 },
82
- children: [
83
- "Our chat team is available weekdays, 8am-5pm, except federal bank holidays. For immediate assistance you can reach out to us at",
84
- " ",
85
- /* @__PURE__ */ jsx("a", { href: "tel:1-888-502-2967", children: "1-888-502-2967" }),
86
- "."
87
- ]
88
- },
89
- msg.$index
90
- ),
91
- /* @__PURE__ */ jsx("div", { style: { textAlign: "center", marginBottom: 12 }, children: /* @__PURE__ */ jsx("button", { className: endChatButtonStyle, onClick: onCancelEndChat, children: "End Chat" }) })
92
- ] }),
78
+ msg.type == "noti" && msg.$userType == "virtual_agent" && msg.event == "escalationDeflected" && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
79
+ "div",
80
+ {
81
+ className: notificationStyle,
82
+ style: { fontSize: 12 },
83
+ children: [
84
+ "Our chat team is available weekdays, 8am-5pm, except federal bank holidays. For immediate assistance you can reach out to us at",
85
+ " ",
86
+ /* @__PURE__ */ jsx("a", { href: "tel:1-888-502-2967", children: "1-888-502-2967" }),
87
+ "."
88
+ ]
89
+ },
90
+ msg.$index
91
+ ) }),
93
92
  ["text", "markdown_template", "markdown"].includes(msg.type) && /* @__PURE__ */ jsx(
94
93
  "div",
95
94
  {
@@ -178,7 +177,28 @@ const ChatbotMessage = ({
178
177
  index
179
178
  );
180
179
  }) }),
181
- msg.event == "chatEnded" && /* @__PURE__ */ jsxs(Fragment, { children: [
180
+ " ",
181
+ msg.event == "chatEnded" && msg.status == "failed" && /* @__PURE__ */ jsxs(Fragment, { children: [
182
+ /* @__PURE__ */ jsxs(
183
+ "div",
184
+ {
185
+ title: (/* @__PURE__ */ new Date()).toLocaleString(),
186
+ style: {
187
+ fontSize: 12,
188
+ color: "#888",
189
+ marginBottom: 4,
190
+ textAlign: "center"
191
+ },
192
+ children: [
193
+ "No team members are online at the moment.",
194
+ /* @__PURE__ */ jsx("br", {}),
195
+ " Please try again later."
196
+ ]
197
+ }
198
+ ),
199
+ /* @__PURE__ */ jsx("div", { style: { textAlign: "center", marginBottom: 12 }, children: /* @__PURE__ */ jsx("button", { className: endChatButtonStyle, onClick: onEndChat, children: "End Chat" }) })
200
+ ] }),
201
+ msg.event == "chatEnded" && msg.status != "failed" && /* @__PURE__ */ jsxs(Fragment, { children: [
182
202
  /* @__PURE__ */ jsxs(
183
203
  "div",
184
204
  {
@@ -196,7 +216,7 @@ const ChatbotMessage = ({
196
216
  ]
197
217
  }
198
218
  ),
199
- /* @__PURE__ */ jsx("div", { style: { textAlign: "center", marginBottom: 12 }, children: /* @__PURE__ */ jsx("button", { className: endChatButtonStyle, onClick: onCancelEndChat, children: "End Chat" }) })
219
+ /* @__PURE__ */ jsx("div", { style: { textAlign: "center", marginBottom: 12 }, children: /* @__PURE__ */ jsx("button", { className: endChatButtonStyle, onClick: onEndChat, children: "End Chat" }) })
200
220
  ] }),
201
221
  msg.type == "text" && /* @__PURE__ */ jsx(
202
222
  "div",
@@ -8,6 +8,12 @@ interface OpenChatState {
8
8
  showThankyouMessage: boolean;
9
9
  displayThankyouMessage: () => void;
10
10
  toggleThankyouMessage?: () => void;
11
+ hasEscalated?: boolean;
12
+ startEscalation?: () => void;
13
+ endEscalation?: () => void;
14
+ isBlockedInput?: boolean;
15
+ blockInput?: () => void;
16
+ unblockInput?: () => void;
11
17
  }
12
18
  export declare const useOpenChat: import('zustand').UseBoundStore<import('zustand').StoreApi<OpenChatState>>;
13
19
  export {};
@@ -3,6 +3,7 @@ const useOpenChat = create((set, get) => ({
3
3
  isOpen: false,
4
4
  hasOpenedOnce: false,
5
5
  showThankyouMessage: false,
6
+ hasEscalated: false,
6
7
  toggle: () => set((state) => ({ isOpen: !state.isOpen, hasOpenedOnce: true })),
7
8
  open: () => {
8
9
  const alreadyOpened = get().hasOpenedOnce;
@@ -12,9 +13,20 @@ const useOpenChat = create((set, get) => ({
12
13
  });
13
14
  },
14
15
  close: () => set({ isOpen: false }),
15
- reset: () => set({ hasOpenedOnce: false, isOpen: false, showThankyouMessage: false }),
16
+ reset: () => set({
17
+ hasOpenedOnce: false,
18
+ isOpen: false,
19
+ showThankyouMessage: false,
20
+ hasEscalated: false,
21
+ isBlockedInput: false
22
+ }),
16
23
  displayThankyouMessage: () => set({ showThankyouMessage: true }),
17
- toggleThankyouMessage: () => set((state) => ({ showThankyouMessage: !state.showThankyouMessage }))
24
+ toggleThankyouMessage: () => set((state) => ({ showThankyouMessage: !state.showThankyouMessage })),
25
+ startEscalation: () => set({ hasEscalated: true }),
26
+ endEscalation: () => set({ hasEscalated: false }),
27
+ isBlockedInput: false,
28
+ blockInput: () => set({ isBlockedInput: true }),
29
+ unblockInput: () => set({ isBlockedInput: false })
18
30
  }));
19
31
  export {
20
32
  useOpenChat
@@ -6,6 +6,7 @@ interface MessageStore {
6
6
  removeMessage: (id: string) => void;
7
7
  addMessages: (newMessages: MessageResponse[]) => void;
8
8
  clearMessages: () => void;
9
+ isEscalated: boolean;
9
10
  }
10
11
  export interface Message {
11
12
  id: string;
@@ -1,5 +1,5 @@
1
1
  import { create } from "zustand";
2
- const useMessages = create((set) => ({
2
+ const useMessages = create((set, get) => ({
3
3
  messages: [],
4
4
  addMessage: (message) => set((state) => {
5
5
  const cleaned = state.messages.filter((m) => m.$sid !== "typing-1");
@@ -11,7 +11,10 @@ const useMessages = create((set) => ({
11
11
  )
12
12
  })),
13
13
  addMessages: (newMessages) => set((state) => ({ messages: [...state.messages, ...newMessages] })),
14
- clearMessages: () => set({ messages: [] })
14
+ clearMessages: () => set({ messages: [] }),
15
+ isEscalated: get()?.messages?.some(
16
+ (msg) => ["escalationAccepted", "escalationStarted"].includes(msg.event)
17
+ )
15
18
  }));
16
19
  export {
17
20
  useMessages
@@ -18,8 +18,6 @@ import { Interstitial } from "../Interstitial/Interstitial.js";
18
18
  import { chevron, chevron_wrapper } from "./Chevron.css.js";
19
19
  /* empty css */
20
20
  import { useGlobalContext } from "../Modal/contextApi/store.js";
21
- import { findMoreAxosDomains } from "../utils/allowedAxosDomains.js";
22
- import { validateLink } from "../utils/validateExternalLinks.js";
23
21
  import clsx from "clsx";
24
22
  import "../Button/Button.css.js";
25
23
  import "react-use";
@@ -111,15 +109,11 @@ import "next/navigation.js";
111
109
  /* empty css */
112
110
  /* empty css */
113
111
  import "next/link.js";
114
- import "../NavigationMenu/AxosBank/MobileMenu/MobileNavData.js";
115
112
  /* empty css */
116
- import "../NavigationMenu/AxosBank/NavData.js";
117
113
  /* empty css */
118
114
  /* empty css */
119
- import "../NavigationMenu/AxosALTS/NavData.js";
120
115
  /* empty css */
121
116
  /* empty css */
122
- import "../NavigationMenu/LaVictoire/NavData.js";
123
117
  import "../PageNavItem/PageNavItem.css.js";
124
118
  import "react-slick";
125
119
  /* empty css */
@@ -147,7 +141,7 @@ const Chevron = ({
147
141
  action
148
142
  }) => {
149
143
  variant = getVariant(variant);
150
- const { setTargetLinkUrl, setOpenModal } = useGlobalContext();
144
+ const { setTargetLinkUrl, setOpenModal, validateLink, resolveUrl } = useGlobalContext();
151
145
  const [isOpenMktInterstitial, setIsOpenMktInterstitial] = useState(false);
152
146
  const openMarketingInterstitial = () => {
153
147
  setIsOpenMktInterstitial(true);
@@ -202,7 +196,7 @@ const Chevron = ({
202
196
  {
203
197
  id,
204
198
  tabIndex: 0,
205
- href: !action ? findMoreAxosDomains(targetUrl) : "#!",
199
+ href: !action ? resolveUrl(targetUrl) : "#!",
206
200
  className: `${chevron({ variant })} ${className ? className : ""}`,
207
201
  onClick: action ? action : marketingIntersitial ? openMarketingInterstitial : onClick,
208
202
  target: newTab ? "_blank" : "_self",
@@ -13,7 +13,7 @@ import "../Accordion/Accordion.js";
13
13
  import "../Accordion/Accordion.css.js";
14
14
  import "../icons/ArrowIcon/ArrowIcon.css.js";
15
15
  import "../icons/CheckIcon/CheckIcon.css.js";
16
- import '../assets/VideoWrapper/VideoWrapper.css';import '../assets/TopicalNavSet/TopicalNavSet.css';import '../assets/TopicalNavItem/TopicalNavItem.css';import '../assets/Topic/Topic.css';import '../assets/TextBlock/TextBlock.css';import '../assets/SocialMediaBar/SocialMediaBar.css';import '../assets/SecondaryFooter/SecondaryFooter.css';import '../assets/Pagination/Pagination.css';import '../assets/PageNavSet/PageNavigationSet.css';import '../assets/NavigationMenu/LaVictoire/NavBar2.css';import '../assets/NavigationMenu/AxosALTS/NavBar2.css';import '../assets/NavigationMenu/AxosClearing/NavBar2.css';import '../assets/NavigationMenu/AxosBank/SubNavbar.css';import '../assets/NavigationMenu/AxosBank/NavBar2.css';import '../assets/NavigationMenu/AxosAdvisorServices/SubNavbar.css';import '../assets/NavigationMenu/AxosAdvisorServices/NavBar2.css';import '../assets/NavigationMenu/AxosAdvisor/SubNavbar.css';import '../assets/NavigationMenu/AxosAdvisor/NavBar2.css';import '../assets/Insight/Featured/Header.css';import '../assets/Insight/Featured/CategorySelector.css';import '../assets/Insight/Featured/Featured.css';import '../assets/ImageLink/ImageLink.css';import '../assets/VideoTile/VideoTile.css';import '../assets/HelpArticle/HelpArticle.css';import '../assets/FooterSiteMap/AxosBank/FooterSiteMap.css';import '../assets/FooterDisclosure/LVF/LaVictorieFooter.css';import '../assets/DownloadTile/DownloadTile.css';import '../assets/CollectInformationAlert/CollectInformationAlert.css';import '../assets/Chatbot/ChatWindow.css';import '../assets/Chatbot/Chatbot.css';import '../assets/Chatbot/Bubble.css';import '../assets/Chatbot/AnimatedGradientBorder.css';import '../assets/CallToActionBar/CallToActionBar.css';import '../assets/Insight/Insight.css';import '../assets/Typography/Typography.css';import '../assets/AwardsItem/AwardsItem.css';import '../assets/AwardsBanner/AwardsBanner.css';import '../assets/Auth/SignIn.css';import '../assets/Auth/ErrorAlert.css';import '../assets/Calculators/MarginTradingCalculator/MarginTradingCalculator.css';import '../assets/Forms/QuickPricer/UserInformation.css';import '../assets/Modal/Modal.css';import '../assets/Forms/QuickPricer/QuickPricerResults.css';import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/DownloadIcon/DownloadIcon.css';import '../assets/themes/victorie.css';import '../assets/themes/ufb.css';import '../assets/themes/premier.css';import '../assets/themes/axos.css';/* empty css */
16
+ import '../assets/VideoWrapper/VideoWrapper.css';import '../assets/TopicalNavSet/TopicalNavSet.css';import '../assets/TopicalNavItem/TopicalNavItem.css';import '../assets/Topic/Topic.css';import '../assets/TextBlock/TextBlock.css';import '../assets/SocialMediaBar/SocialMediaBar.css';import '../assets/SecondaryFooter/SecondaryFooter.css';import '../assets/Pagination/Pagination.css';import '../assets/PageNavSet/PageNavigationSet.css';import '../assets/NavigationMenu/LaVictoire/NavBar2.css';import '../assets/NavigationMenu/AxosALTS/NavBar2.css';import '../assets/NavigationMenu/AxosClearing/NavBar2.css';import '../assets/NavigationMenu/AxosBank/SubNavbar.css';import '../assets/NavigationMenu/AxosBank/NavBar2.css';import '../assets/NavigationMenu/AxosAdvisorServices/SubNavbar.css';import '../assets/NavigationMenu/AxosAdvisorServices/NavBar2.css';import '../assets/NavigationMenu/AxosAdvisor/SubNavbar.css';import '../assets/NavigationMenu/AxosAdvisor/NavBar2.css';import '../assets/Insight/Featured/Header.css';import '../assets/Insight/Featured/CategorySelector.css';import '../assets/Insight/Featured/Featured.css';import '../assets/ImageLink/ImageLink.css';import '../assets/VideoTile/VideoTile.css';import '../assets/HelpArticle/HelpArticle.css';import '../assets/FooterSiteMap/AxosBank/FooterSiteMap.css';import '../assets/FooterDisclosure/LVF/LaVictorieFooter.css';import '../assets/DownloadTile/DownloadTile.css';import '../assets/CollectInformationAlert/CollectInformationAlert.css';import '../assets/Chatbot/ChatWindow.css';import '../assets/Chatbot/Chatbot.css';import '../assets/Chatbot/Bubble.css';import '../assets/Chatbot/AnimatedGradientBorder.css';import '../assets/CallToActionBar/CallToActionBar.css';import '../assets/Insight/Insight.css';import '../assets/Typography/Typography.css';import '../assets/AwardsItem/AwardsItem.css';import '../assets/AwardsBanner/AwardsBanner.css';import '../assets/Auth/SignIn.css';import '../assets/Auth/ErrorAlert.css';import '../assets/Calculators/MarginTradingCalculator/MarginTradingCalculator.css';import '../assets/Forms/QuickPricer/UserInformation.css';import '../assets/Forms/QuickPricer/QuickPricerResults.css';import '../assets/Modal/Modal.css';import '../assets/icons/FollowIcon/FollowIcon.css';import '../assets/icons/DownloadIcon/DownloadIcon.css';import '../assets/themes/victorie.css';import '../assets/themes/ufb.css';import '../assets/themes/premier.css';import '../assets/themes/axos.css';/* empty css */
17
17
  /* empty css */
18
18
  /* empty css */
19
19
  /* empty css */
@@ -22,9 +22,9 @@ import '../assets/VideoWrapper/VideoWrapper.css';import '../assets/TopicalNavSet
22
22
  import "../AlertBanner/AlertBanner.css.js";
23
23
  import "../Article/Article.css.js";
24
24
  import "../ArticlesSet/ArticlesSet.css.js";
25
- import "../utils/allowedAxosDomains.js";
26
25
  import "../Calculators/calculator.css.js";
27
26
  import "../Calculators/AnnualFeeCalculator/AnnualFeeCalculator.css.js";
27
+ import "../Modal/contextApi/store.js";
28
28
  import "../Calculators/ApyCalculator/ApyCalculator.css.js";
29
29
  import "../Table/Table.css.js";
30
30
  import "../Calculators/AxosOneCalculator/BalanceAPYCalculator.css.js";
@@ -51,11 +51,10 @@ import "../Input/RadioButton.css.js";
51
51
  import "../Input/Checkbox.css.js";
52
52
  import "../LoadingIndicator/LoadingIndicator.css.js";
53
53
  import "../Chevron/Chevron.css.js";
54
+ /* empty css */
54
55
  import "../Interstitial/Interstitial-variants.css.js";
55
56
  import "../Inputs/Input.css.js";
56
57
  /* empty css */
57
- /* empty css */
58
- import "../Modal/contextApi/store.js";
59
58
  import "../Hyperlink/Hyperlink.css.js";
60
59
  /* empty css */
61
60
  import "iframe-resizer";
@@ -110,15 +109,11 @@ import "next/navigation.js";
110
109
  /* empty css */
111
110
  /* empty css */
112
111
  import "next/link.js";
113
- import "../NavigationMenu/AxosBank/MobileMenu/MobileNavData.js";
114
112
  /* empty css */
115
- import "../NavigationMenu/AxosBank/NavData.js";
116
113
  /* empty css */
117
114
  /* empty css */
118
- import "../NavigationMenu/AxosALTS/NavData.js";
119
115
  /* empty css */
120
116
  /* empty css */
121
- import "../NavigationMenu/LaVictoire/NavData.js";
122
117
  import "../PageNavItem/PageNavItem.css.js";
123
118
  import "react-slick";
124
119
  /* empty css */
@@ -1,4 +1,5 @@
1
1
  export declare const executive_bio: string;
2
+ export declare const compact: string;
2
3
  export declare const item_bio: import('@vanilla-extract/recipes').RuntimeFn<{
3
4
  variant: {
4
5
  primary: {
@@ -91,6 +92,52 @@ export declare const contact_entry: import('@vanilla-extract/recipes').RuntimeFn
91
92
  export declare const contacts: string;
92
93
  export declare const headshot: string;
93
94
  export declare const img_area: string;
95
+ export declare const components: import('@vanilla-extract/recipes').RuntimeFn<{
96
+ columns: {
97
+ 1: {
98
+ gridTemplateColumns: "1fr";
99
+ };
100
+ 2: {
101
+ gridTemplateColumns: "repeat(2, 1fr)";
102
+ width: "min(840px, calc(100% - 4rem))";
103
+ "@media": {
104
+ "(max-width: 768px)": {
105
+ gridTemplateColumns: "1fr";
106
+ width: "min(350px, calc(100% - 2rem))";
107
+ };
108
+ };
109
+ };
110
+ 3: {
111
+ gridTemplateColumns: "repeat(3, 1fr)";
112
+ "@media": {
113
+ "(max-width: 1175px)": {
114
+ gridTemplateColumns: "repeat(2, 1fr)";
115
+ width: "min(840px, calc(100% - 4rem))";
116
+ };
117
+ "(max-width: 768px)": {
118
+ gridTemplateColumns: "1fr";
119
+ width: "min(350px, calc(100% - 2rem))";
120
+ };
121
+ };
122
+ };
123
+ 4: {
124
+ gridTemplateColumns: "repeat(4, 1fr)";
125
+ "@media": {
126
+ "(max-width: 1175px)": {
127
+ gridTemplateColumns: "repeat(2, 1fr)";
128
+ width: "min(840px, calc(100% - 4rem))";
129
+ };
130
+ "(max-width: 768px)": {
131
+ gridTemplateColumns: "1fr";
132
+ width: "min(350px, calc(100% - 2rem))";
133
+ };
134
+ "(min-width: 1176px)": {
135
+ width: "min(1000px, 100%)";
136
+ };
137
+ };
138
+ };
139
+ };
140
+ }>;
94
141
  export declare const media: string;
95
142
  export declare const person: string;
96
143
  export declare const shift: string;
@@ -99,15 +146,19 @@ export declare const section_theme: import('@vanilla-extract/recipes').RuntimeFn
99
146
  variant: {
100
147
  primary: {
101
148
  background: `var(--${string})`;
149
+ color: `var(--${string})`;
102
150
  };
103
151
  secondary: {
104
152
  background: `var(--${string})`;
153
+ color: `var(--${string})`;
105
154
  };
106
155
  tertiary: {
107
156
  background: `var(--${string})`;
157
+ color: `var(--${string})`;
108
158
  };
109
159
  quaternary: {
110
160
  background: `var(--${string})`;
161
+ color: `var(--${string})`;
111
162
  };
112
163
  };
113
164
  }>;
@@ -127,7 +178,6 @@ export declare const header_theme: import('@vanilla-extract/recipes').RuntimeFn<
127
178
  };
128
179
  };
129
180
  }>;
130
- export declare const components: string;
131
181
  export declare const details: string;
132
182
  export declare const url_row: string;
133
183
  export declare const flexColumn: string;