@ensembleapp/client-sdk 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -18627,7 +18627,7 @@ var DefaultChatTransport = class extends HttpChatTransport {
18627
18627
  };
18628
18628
 
18629
18629
  // lib/hooks/useChat.ts
18630
- import { useEffect, useState } from "react";
18630
+ import { useEffect, useMemo, useRef, useState } from "react";
18631
18631
  function useChat({
18632
18632
  api,
18633
18633
  threadId,
@@ -18641,6 +18641,29 @@ function useChat({
18641
18641
  onMessage
18642
18642
  }) {
18643
18643
  const { baseUrl, token, headers: customHeaders = {} } = api;
18644
+ const dataContextRef = useRef(dataContext);
18645
+ dataContextRef.current = dataContext;
18646
+ const transport = useMemo(() => new DefaultChatTransport({
18647
+ api: `${baseUrl}/chat`,
18648
+ headers: {
18649
+ "Content-Type": "application/json",
18650
+ Authorization: `Bearer ${token}`,
18651
+ "thread-id": threadId,
18652
+ ...agentId ? { "agent-id": agentId } : {},
18653
+ ...agentExecutionId ? { "agent-execution-id": agentExecutionId } : {},
18654
+ ...customHeaders
18655
+ },
18656
+ // only send last message to server
18657
+ prepareSendMessagesRequest({ messages: messages2, id }) {
18658
+ return {
18659
+ body: {
18660
+ id,
18661
+ message: messages2[messages2.length - 1],
18662
+ dataContext: dataContextRef.current
18663
+ }
18664
+ };
18665
+ }
18666
+ }), [baseUrl, token, threadId, agentId, agentExecutionId, customHeaders]);
18644
18667
  const {
18645
18668
  messages,
18646
18669
  status,
@@ -18649,27 +18672,7 @@ function useChat({
18649
18672
  setMessages
18650
18673
  } = useAIChat({
18651
18674
  id: threadId,
18652
- transport: new DefaultChatTransport({
18653
- api: `${baseUrl}/chat`,
18654
- headers: {
18655
- "Content-Type": "application/json",
18656
- Authorization: `Bearer ${token}`,
18657
- "thread-id": threadId,
18658
- ...agentId ? { "agent-id": agentId } : {},
18659
- ...agentExecutionId ? { "agent-execution-id": agentExecutionId } : {},
18660
- ...customHeaders
18661
- },
18662
- // only send last message to server
18663
- prepareSendMessagesRequest({ messages: messages2, id }) {
18664
- return {
18665
- body: {
18666
- id,
18667
- message: messages2[messages2.length - 1],
18668
- dataContext
18669
- }
18670
- };
18671
- }
18672
- }),
18675
+ transport,
18673
18676
  onError: (error40) => {
18674
18677
  console.error("Chat error:", error40);
18675
18678
  onError?.(error40);
@@ -18909,11 +18912,11 @@ function styleInject(css, { insertAt } = {}) {
18909
18912
  }
18910
18913
 
18911
18914
  // lib/components/ChatWidget.css
18912
- styleInject(':root[data-chat-widget],\n[data-chat-widget] {\n --chat-primary: #3b82f6;\n --chat-primary-text: #ffffff;\n --chat-primary-hover: #2563eb;\n --chat-background: #ffffff;\n --chat-border: #e5e7eb;\n --chat-header-text: #ffffff;\n --chat-user-text: #ffffff;\n --chat-assistant-bg: transparent;\n --chat-assistant-text: #111827;\n --chat-font-family:\n "Inter",\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n sans-serif;\n --chat-radius: 0.75rem;\n --chat-input-bg: #ffffff;\n --chat-input-text: #111827;\n --chat-input-placeholder: #6b7280;\n --chat-thought-border: #d1d5db;\n --chat-font-size: 0.925rem;\n --chat-thought-font-size: 0.75rem;\n}\n.chat-widget {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 24rem;\n background: var(--chat-background);\n border: 1px solid var(--chat-border);\n border-radius: var(--chat-radius);\n box-shadow: 0 20px 45px rgba(15, 23, 42, 0.12);\n overflow: hidden;\n font-family: var(--chat-font-family);\n color: var(--chat-assistant-text);\n}\n.chat-widget__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 40px;\n padding: 0.75rem 1rem;\n background: var(--chat-primary);\n color: var(--chat-header-text);\n}\n.chat-widget__title {\n margin: 0;\n font-size: 0.875rem;\n font-weight: 600;\n}\n.chat-widget__messages {\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n.chat-widget__message {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.chat-widget__message-row {\n display: flex;\n}\n.chat-widget__message-row--user {\n justify-content: flex-end;\n}\n.chat-widget__message-row--assistant {\n justify-content: flex-start;\n}\n.chat-widget__bubble {\n max-width: 90%;\n padding: 0.5rem 0.25rem;\n border-radius: calc(var(--chat-radius) * 0.65);\n font-size: var(--chat-font-size);\n}\n.chat-widget__bubble--user {\n background: var(--chat-primary);\n color: var(--chat-user-text);\n border-bottom-right-radius: 0.35rem;\n}\n.chat-widget__bubble--assistant {\n background: var(--chat-assistant-bg);\n color: var(--chat-assistant-text);\n border-bottom-left-radius: 0.35rem;\n}\n.chat-widget__markdown {\n white-space: normal;\n font-size: var(--chat-font-size);\n}\n.chat-widget__markdown h1 {\n font-size: calc(var(--chat-font-size) * 1.4);\n}\n.chat-widget__markdown h2 {\n font-size: calc(var(--chat-font-size) * 1.25);\n}\n.chat-widget__markdown h3 {\n font-size: calc(var(--chat-font-size) * 1.1);\n}\n.chat-widget__markdown h4 {\n font-size: calc(var(--chat-font-size) * 1.05);\n}\n.chat-widget__markdown h5 {\n font-size: calc(var(--chat-font-size) * 1);\n}\n.chat-widget__markdown h6 {\n font-size: calc(var(--chat-font-size) * 0.95);\n}\n.chat-widget__anchor-button {\n position: fixed;\n bottom: 20px;\n right: 20px;\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.65rem 0.85rem;\n background: var(--chat-primary);\n color: var(--chat-primary-text);\n border: none;\n border-radius: 999px;\n box-shadow: 0 10px 25px rgba(15, 23, 42, 0.2);\n cursor: pointer;\n font-weight: 600;\n z-index: 99999;\n}\n.chat-widget__anchor-button:hover {\n background: var(--chat-primary-hover);\n}\n.chat-widget__anchor--left {\n right: auto;\n left: 20px;\n}\n.chat-widget__anchor-icon {\n width: 1.1rem;\n height: 1.1rem;\n}\n.chat-widget__popup {\n position: fixed;\n bottom: 80px;\n right: 20px;\n z-index: 99998;\n}\n.chat-widget__anchor--left.chat-widget__popup {\n right: auto;\n left: 20px;\n}\n.chat-widget__popup-inner {\n width: 384px;\n max-width: calc(100vw - 40px);\n height: 500px;\n max-height: calc(100vh - 140px);\n box-shadow: 0 20px 45px rgba(15, 23, 42, 0.12);\n border-radius: 12px;\n overflow: hidden;\n}\n.chat-widget__markdown table {\n width: 100%;\n border-collapse: collapse;\n margin: 0.5rem 0;\n}\n.chat-widget__markdown th,\n.chat-widget__markdown td {\n border: 1px solid var(--chat-border);\n padding: 0.5rem;\n text-align: left;\n vertical-align: top;\n}\n.chat-widget__markdown thead th {\n background: var(--chat-assistant-bg);\n color: var(--chat-assistant-text);\n font-weight: 600;\n}\n.chat-widget__thoughts {\n min-width: 0;\n --chat-font-size: var(--chat-thought-font-size);\n}\n.chat-widget__details {\n border: 0;\n}\n.chat-widget__thoughts-summary {\n list-style: none;\n display: flex;\n align-items: center;\n gap: 0.35rem;\n cursor: pointer;\n color: #6b7280;\n font-size: 0.8125rem;\n}\n.chat-widget__thoughts-summary:hover {\n color: var(--chat-assistant-text);\n}\n.chat-widget__thoughts-icon-container {\n display: flex;\n border: 1px solid #d1d5db;\n border-radius: 999px;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n}\n.chat-widget__thoughts-icon {\n width: 0.75rem;\n height: 0.75rem;\n transition: transform 0.2s ease;\n}\n.chat-widget__details[open] .chat-widget__thoughts-icon {\n transform: rotate(90deg);\n}\n.chat-widget__thoughts-content {\n margin-top: 0.5rem;\n margin-left: 0.4rem;\n padding: 0.75rem;\n border-left: 2px solid var(--chat-thought-border);\n border-color: var(--chat-primary);\n max-width: 100%;\n overflow-x: auto;\n}\n.chat-widget__thoughts-text {\n margin: 0;\n line-height: 1.5;\n color: #4b5563;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n "Courier New",\n monospace;\n white-space: pre-wrap;\n word-break: break-word;\n overflow-wrap: anywhere;\n display: block;\n}\n.chat-widget__loading {\n display: flex;\n justify-content: flex-start;\n}\n.chat-widget__loading-bubble {\n background: var(--chat-assistant-bg);\n color: var(--chat-assistant-text);\n border-radius: calc(var(--chat-radius) * 0.65);\n border-bottom-left-radius: 0.35rem;\n padding: 0.5rem 0.75rem;\n}\n.chat-widget__loading-dots {\n display: flex;\n gap: 0.35rem;\n}\n.chat-widget__loading-dot {\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 999px;\n background: #9ca3af;\n animation: chat-widget-bounce 1s infinite ease-in-out;\n}\n.chat-widget__loading-dot[data-delay="1"] {\n animation-delay: 0.1s;\n}\n.chat-widget__loading-dot[data-delay="2"] {\n animation-delay: 0.2s;\n}\n@keyframes chat-widget-bounce {\n 0%, 80%, 100% {\n transform: scale(0.6);\n opacity: 0.4;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n}\n.chat-widget__input {\n border-top: 1px solid var(--chat-border);\n padding: 0.25rem 0 0.75rem;\n background: var(--chat-input-bg);\n}\n.chat-widget__form {\n position: relative;\n}\n.chat-widget__textarea {\n width: 100%;\n border: 0;\n padding: 0.75rem 5.25rem 0.75rem 0.75rem;\n background: transparent;\n font-size: 0.925rem;\n resize: none;\n color: var(--chat-input-text);\n font-family: inherit;\n}\n.chat-widget__textarea::-moz-placeholder {\n color: var(--chat-input-placeholder);\n}\n.chat-widget__textarea::placeholder {\n color: var(--chat-input-placeholder);\n}\n.chat-widget__textarea:focus-visible {\n outline: none;\n}\n.chat-widget__textarea:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.chat-widget__toolbar {\n position: absolute;\n top: 0;\n right: 3.75rem;\n height: 100%;\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n border-right: 1px solid var(--chat-border);\n}\n.chat-widget__submit {\n position: absolute;\n top: 50%;\n right: 0.75rem;\n transform: translateY(-50%);\n background: transparent;\n border: 0;\n width: 2.5rem;\n height: 2.5rem;\n display: grid;\n place-items: center;\n color: var(--chat-primary);\n cursor: pointer;\n}\n.chat-widget__submit:disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.chat-widget__submit:not(:disabled):hover {\n color: var(--chat-primary-hover);\n}\n.chat-widget__send-icon {\n width: 1.2rem;\n height: 1.2rem;\n}\n.chat-widget__mic-button {\n position: relative;\n border: none;\n background: transparent;\n width: 2.25rem;\n height: 2.25rem;\n display: grid;\n place-items: center;\n color: var(--chat-primary);\n cursor: pointer;\n border-radius: 999px;\n}\n.chat-widget__mic-button:disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.chat-widget__mic-button--active {\n color: var(--chat-primary-hover);\n background: rgba(59, 130, 246, 0.08);\n}\n.chat-widget__mic-icon {\n width: 1rem;\n height: 1rem;\n}\n.chat-widget__mic-bar {\n position: absolute;\n bottom: 0.1rem;\n left: 50%;\n width: 16px;\n height: 2px;\n border-radius: 999px;\n background: rgba(148, 163, 184, 0.4);\n overflow: hidden;\n display: block;\n transform: translateX(-50%);\n pointer-events: none;\n}\n.chat-widget__mic-bar-fill {\n display: block;\n width: 100%;\n height: 100%;\n background: currentColor;\n transform-origin: left;\n transition: transform 0.12s linear;\n}\n.chat-widget__voice {\n display: flex;\n margin-top: 0.25rem;\n}\n.chat-widget__voice-button {\n border: none;\n background: none;\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.1rem 0;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--chat-primary);\n cursor: pointer;\n}\n.chat-widget__voice-button:disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.chat-widget__voice-button--active {\n color: var(--chat-primary-hover);\n}\n.chat-widget__voice-icon {\n width: 0.95rem;\n height: 0.95rem;\n}\n.chat-widget__voice-icon--spin {\n animation: chat-widget-spin 1s linear infinite;\n}\n@keyframes chat-widget-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n');
18915
+ styleInject(':root[data-chat-widget],\n[data-chat-widget] {\n --chat-primary: #3b82f6;\n --chat-primary-text: #ffffff;\n --chat-primary-hover: #2563eb;\n --chat-background: #ffffff;\n --chat-border: #e5e7eb;\n --chat-header-text: #ffffff;\n --chat-user-text: #ffffff;\n --chat-assistant-bg: transparent;\n --chat-assistant-text: #111827;\n --chat-font-family:\n "Inter",\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n sans-serif;\n --chat-radius: 0.75rem;\n --chat-input-bg: #ffffff;\n --chat-input-text: #111827;\n --chat-input-placeholder: #6b7280;\n --chat-thought-border: #d1d5db;\n --chat-font-size: 0.925rem;\n --chat-thought-font-size: 0.75rem;\n}\n.chat-widget {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 24rem;\n background: var(--chat-background);\n border: 1px solid var(--chat-border);\n border-radius: var(--chat-radius);\n box-shadow: 0 20px 45px rgba(15, 23, 42, 0.12);\n overflow: hidden;\n font-family: var(--chat-font-family);\n color: var(--chat-assistant-text);\n}\n.chat-widget__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 40px;\n padding: 0.75rem 1rem;\n background: var(--chat-primary);\n color: var(--chat-header-text);\n}\n.chat-widget__title {\n margin: 0;\n font-size: 0.875rem;\n font-weight: 600;\n}\n.chat-widget__messages {\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n.chat-widget__message {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.chat-widget__message-row {\n display: flex;\n}\n.chat-widget__message-row--user {\n justify-content: flex-end;\n}\n.chat-widget__message-row--assistant {\n justify-content: flex-start;\n}\n.chat-widget__bubble {\n max-width: 90%;\n padding: 0.5rem 0.25rem;\n border-radius: calc(var(--chat-radius) * 0.65);\n font-size: var(--chat-font-size);\n}\n.chat-widget__bubble--user {\n background: var(--chat-primary);\n color: var(--chat-user-text);\n border-bottom-right-radius: 0.35rem;\n}\n.chat-widget__bubble--assistant {\n width: 90%;\n background: var(--chat-assistant-bg);\n color: var(--chat-assistant-text);\n border-bottom-left-radius: 0.35rem;\n}\n.chat-widget__widget {\n width: 100%;\n}\n.chat-widget__markdown {\n white-space: normal;\n font-size: var(--chat-font-size);\n}\n.chat-widget__markdown h1 {\n font-size: calc(var(--chat-font-size) * 1.4);\n}\n.chat-widget__markdown h2 {\n font-size: calc(var(--chat-font-size) * 1.25);\n}\n.chat-widget__markdown h3 {\n font-size: calc(var(--chat-font-size) * 1.1);\n}\n.chat-widget__markdown h4 {\n font-size: calc(var(--chat-font-size) * 1.05);\n}\n.chat-widget__markdown h5 {\n font-size: calc(var(--chat-font-size) * 1);\n}\n.chat-widget__markdown h6 {\n font-size: calc(var(--chat-font-size) * 0.95);\n}\n.chat-widget__anchor-button {\n position: fixed;\n bottom: 20px;\n right: 20px;\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.65rem 0.85rem;\n background: var(--chat-primary);\n color: var(--chat-primary-text);\n border: none;\n border-radius: 999px;\n box-shadow: 0 10px 25px rgba(15, 23, 42, 0.2);\n cursor: pointer;\n font-weight: 600;\n z-index: 99999;\n}\n.chat-widget__anchor-button:hover {\n background: var(--chat-primary-hover);\n}\n.chat-widget__anchor--left {\n right: auto;\n left: 20px;\n}\n.chat-widget__anchor-icon {\n width: 1.1rem;\n height: 1.1rem;\n}\n.chat-widget__popup {\n position: fixed;\n bottom: 80px;\n right: 20px;\n z-index: 99998;\n}\n.chat-widget__anchor--left.chat-widget__popup {\n right: auto;\n left: 20px;\n}\n.chat-widget__popup-inner {\n width: 384px;\n max-width: calc(100vw - 40px);\n height: 500px;\n max-height: calc(100vh - 140px);\n box-shadow: 0 20px 45px rgba(15, 23, 42, 0.12);\n border-radius: 12px;\n overflow: hidden;\n}\n.chat-widget__markdown table {\n width: 100%;\n border-collapse: collapse;\n margin: 0.5rem 0;\n}\n.chat-widget__markdown th,\n.chat-widget__markdown td {\n border: 1px solid var(--chat-border);\n padding: 0.5rem;\n text-align: left;\n vertical-align: top;\n}\n.chat-widget__markdown thead th {\n background: var(--chat-assistant-bg);\n color: var(--chat-assistant-text);\n font-weight: 600;\n}\n.chat-widget__thoughts {\n min-width: 0;\n --chat-font-size: var(--chat-thought-font-size);\n}\n.chat-widget__details {\n border: 0;\n}\n.chat-widget__thoughts-summary {\n list-style: none;\n display: flex;\n align-items: center;\n gap: 0.35rem;\n cursor: pointer;\n color: #6b7280;\n font-size: 0.8125rem;\n}\n.chat-widget__thoughts-summary:hover {\n color: var(--chat-assistant-text);\n}\n.chat-widget__thoughts-icon-container {\n display: flex;\n border: 1px solid #d1d5db;\n border-radius: 999px;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n}\n.chat-widget__thoughts-icon {\n width: 0.75rem;\n height: 0.75rem;\n transition: transform 0.2s ease;\n}\n.chat-widget__details[open] .chat-widget__thoughts-icon {\n transform: rotate(90deg);\n}\n.chat-widget__thoughts-content {\n margin-top: 0.5rem;\n margin-left: 0.4rem;\n padding: 0.75rem;\n border-left: 2px solid var(--chat-thought-border);\n border-color: var(--chat-primary);\n max-width: 100%;\n overflow-x: auto;\n}\n.chat-widget__thoughts-text {\n margin: 0;\n line-height: 1.5;\n color: #4b5563;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n "Courier New",\n monospace;\n white-space: pre-wrap;\n word-break: break-word;\n overflow-wrap: anywhere;\n display: block;\n}\n.chat-widget__loading {\n display: flex;\n justify-content: flex-start;\n}\n.chat-widget__loading-bubble {\n background: var(--chat-assistant-bg);\n color: var(--chat-assistant-text);\n border-radius: calc(var(--chat-radius) * 0.65);\n border-bottom-left-radius: 0.35rem;\n padding: 0.5rem 0.75rem;\n}\n.chat-widget__loading-dots {\n display: flex;\n gap: 0.35rem;\n}\n.chat-widget__loading-dot {\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 999px;\n background: #9ca3af;\n animation: chat-widget-bounce 1s infinite ease-in-out;\n}\n.chat-widget__loading-dot[data-delay="1"] {\n animation-delay: 0.1s;\n}\n.chat-widget__loading-dot[data-delay="2"] {\n animation-delay: 0.2s;\n}\n@keyframes chat-widget-bounce {\n 0%, 80%, 100% {\n transform: scale(0.6);\n opacity: 0.4;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n}\n.chat-widget__input {\n border-top: 1px solid var(--chat-border);\n padding: 0.25rem 0 0.75rem;\n background: var(--chat-input-bg);\n}\n.chat-widget__form {\n position: relative;\n}\n.chat-widget__textarea {\n width: 100%;\n border: 0;\n padding: 0.75rem 5.25rem 0.75rem 0.75rem;\n background: transparent;\n font-size: 0.925rem;\n resize: none;\n color: var(--chat-input-text);\n font-family: inherit;\n}\n.chat-widget__textarea::-moz-placeholder {\n color: var(--chat-input-placeholder);\n}\n.chat-widget__textarea::placeholder {\n color: var(--chat-input-placeholder);\n}\n.chat-widget__textarea:focus-visible {\n outline: none;\n}\n.chat-widget__textarea:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.chat-widget__toolbar {\n position: absolute;\n top: 0;\n right: 3.75rem;\n height: 100%;\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n border-right: 1px solid var(--chat-border);\n}\n.chat-widget__submit {\n position: absolute;\n top: 50%;\n right: 0.75rem;\n transform: translateY(-50%);\n background: transparent;\n border: 0;\n width: 2.5rem;\n height: 2.5rem;\n display: grid;\n place-items: center;\n color: var(--chat-primary);\n cursor: pointer;\n}\n.chat-widget__submit:disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.chat-widget__submit:not(:disabled):hover {\n color: var(--chat-primary-hover);\n}\n.chat-widget__send-icon {\n width: 1.2rem;\n height: 1.2rem;\n}\n.chat-widget__mic-button {\n position: relative;\n border: none;\n background: transparent;\n width: 2.25rem;\n height: 2.25rem;\n display: grid;\n place-items: center;\n color: var(--chat-primary);\n cursor: pointer;\n border-radius: 999px;\n}\n.chat-widget__mic-button:disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.chat-widget__mic-button--active {\n color: var(--chat-primary-hover);\n background: rgba(59, 130, 246, 0.08);\n}\n.chat-widget__mic-icon {\n width: 1rem;\n height: 1rem;\n}\n.chat-widget__mic-bar {\n position: absolute;\n bottom: 0.1rem;\n left: 50%;\n width: 16px;\n height: 2px;\n border-radius: 999px;\n background: rgba(148, 163, 184, 0.4);\n overflow: hidden;\n display: block;\n transform: translateX(-50%);\n pointer-events: none;\n}\n.chat-widget__mic-bar-fill {\n display: block;\n width: 100%;\n height: 100%;\n background: currentColor;\n transform-origin: left;\n transition: transform 0.12s linear;\n}\n.chat-widget__voice {\n display: flex;\n margin-top: 0.25rem;\n}\n.chat-widget__voice-button {\n border: none;\n background: none;\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n padding: 0.1rem 0;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--chat-primary);\n cursor: pointer;\n}\n.chat-widget__voice-button:disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.chat-widget__voice-button--active {\n color: var(--chat-primary-hover);\n}\n.chat-widget__voice-icon {\n width: 0.95rem;\n height: 0.95rem;\n}\n.chat-widget__voice-icon--spin {\n animation: chat-widget-spin 1s linear infinite;\n}\n@keyframes chat-widget-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n');
18913
18916
 
18914
18917
  // lib/components/ChatWidget.tsx
18915
18918
  import { ChevronRight as ChevronRight2, Send, StopCircle } from "lucide-react";
18916
- import React3, { useCallback as useCallback4, useEffect as useEffect4, useMemo, useRef as useRef2, useState as useState6 } from "react";
18919
+ import React3, { useCallback as useCallback4, useEffect as useEffect4, useMemo as useMemo2, useRef as useRef3, useState as useState6 } from "react";
18917
18920
  import ReactMarkdown from "react-markdown";
18918
18921
 
18919
18922
  // ../../node_modules/ccount/index.js
@@ -23884,7 +23887,7 @@ import { Mic, MicOff } from "lucide-react";
23884
23887
  import {
23885
23888
  useCallback as useCallback3,
23886
23889
  useEffect as useEffect3,
23887
- useRef,
23890
+ useRef as useRef2,
23888
23891
  useState as useState4
23889
23892
  } from "react";
23890
23893
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
@@ -23909,13 +23912,13 @@ function SpeechToTextButton({
23909
23912
  const [isListening, setIsListening] = useState4(false);
23910
23913
  const [isSupported, setIsSupported] = useState4(false);
23911
23914
  const [countdown, setCountdown] = useState4(0);
23912
- const recognitionRef = useRef(null);
23915
+ const recognitionRef = useRef2(null);
23913
23916
  const [countdownActive, setCountdownActive] = useState4(false);
23914
- const silenceTimer = useRef(null);
23915
- const finalTimer = useRef(null);
23916
- const finalTextRef = useRef("");
23917
- const countdownFrameRef = useRef(null);
23918
- const countdownEndRef = useRef(0);
23917
+ const silenceTimer = useRef2(null);
23918
+ const finalTimer = useRef2(null);
23919
+ const finalTextRef = useRef2("");
23920
+ const countdownFrameRef = useRef2(null);
23921
+ const countdownEndRef = useRef2(0);
23919
23922
  const recognitionLanguage = language ?? "en-US";
23920
23923
  const clearSilenceTimer = useCallback3(() => {
23921
23924
  if (silenceTimer.current) {
@@ -24428,11 +24431,11 @@ function ChatWidget({
24428
24431
  widgets,
24429
24432
  feedback
24430
24433
  }) {
24431
- const theme = useMemo(
24434
+ const theme = useMemo2(
24432
24435
  () => ({ ...defaultTheme, ...styleProps || {} }),
24433
24436
  [styleProps]
24434
24437
  );
24435
- const themeVariables = useMemo(
24438
+ const themeVariables = useMemo2(
24436
24439
  () => ({
24437
24440
  "--chat-primary": theme.primaryColor,
24438
24441
  "--chat-primary-text": theme.primaryTextColor,
@@ -24455,11 +24458,11 @@ function ChatWidget({
24455
24458
  const [input, setInput] = useState6("");
24456
24459
  const [isMicActive, setIsMicActive] = useState6(false);
24457
24460
  const [isSpeechPending, setIsSpeechPending] = useState6(false);
24458
- const messagesEndRef = useRef2(null);
24459
- const scrollContainerRef = useRef2(null);
24460
- const isAtBottomRef = useRef2(true);
24461
- const textareaRef = useRef2(null);
24462
- const suppressScrollRef = useRef2(false);
24461
+ const messagesEndRef = useRef3(null);
24462
+ const scrollContainerRef = useRef3(null);
24463
+ const isAtBottomRef = useRef3(true);
24464
+ const textareaRef = useRef3(null);
24465
+ const suppressScrollRef = useRef3(false);
24463
24466
  const {
24464
24467
  messages,
24465
24468
  status,
@@ -24504,7 +24507,7 @@ function ChatWidget({
24504
24507
  return next;
24505
24508
  });
24506
24509
  }, []);
24507
- const voiceConfig = useMemo(() => {
24510
+ const voiceConfig = useMemo2(() => {
24508
24511
  if (!voice || voice.enabled === false || !voice.url) {
24509
24512
  return null;
24510
24513
  }
@@ -24606,7 +24609,7 @@ function ChatWidget({
24606
24609
  setIsMicActive(false);
24607
24610
  }
24608
24611
  }, [speechEnabled]);
24609
- const lastRegisteredRef = useRef2({
24612
+ const lastRegisteredRef = useRef3({
24610
24613
  threadId: "",
24611
24614
  widgets: null
24612
24615
  });
@@ -24715,7 +24718,7 @@ styleInject(".chat-popup__anchor {\n position: fixed;\n inset-block-end: 20px;
24715
24718
 
24716
24719
  // lib/components/PopupChatWidget.tsx
24717
24720
  import { MessageSquare as MessageSquare2, X } from "lucide-react";
24718
- import { useEffect as useEffect5, useMemo as useMemo2, useState as useState7 } from "react";
24721
+ import { useEffect as useEffect5, useMemo as useMemo3, useState as useState7 } from "react";
24719
24722
  import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
24720
24723
  function PopupChatWidget({ anchor, ...props }) {
24721
24724
  const [isOpen, setIsOpen] = useState7(anchor?.initiallyOpen ?? false);
@@ -24740,7 +24743,7 @@ function PopupChatWidget({ anchor, ...props }) {
24740
24743
  const anchorPositionClass = anchor?.position === "bottom-start" ? "chat-popup--start" : "chat-popup--end";
24741
24744
  const closeConfig = anchor?.closeButton ?? props.closeButton;
24742
24745
  const showClose = closeConfig?.show !== false;
24743
- const themeStyle = useMemo2(() => {
24746
+ const themeStyle = useMemo3(() => {
24744
24747
  const primary = props.styles?.primaryColor ?? "#3b82f6";
24745
24748
  const primaryText = props.styles?.primaryTextColor ?? "#ffffff";
24746
24749
  const background = props.styles?.backgroundColor ?? "#ffffff";
@@ -24764,7 +24767,7 @@ function PopupChatWidget({ anchor, ...props }) {
24764
24767
  "--chat-header-text": headerText
24765
24768
  };
24766
24769
  }, [props.styles]);
24767
- const popupStyle = useMemo2(() => {
24770
+ const popupStyle = useMemo3(() => {
24768
24771
  const size = props.popupSize ?? {};
24769
24772
  return {
24770
24773
  width: size.width ?? "600px",
@@ -24971,21 +24974,32 @@ var defaultChatWidgets = [
24971
24974
  widgetType: "vendor-cards",
24972
24975
  schema: zod_default.object({
24973
24976
  vendors: zod_default.array(zod_default.object({
24974
- id: zod_default.string(),
24975
- rank: zod_default.number().describe("ranking position of the vendor from 1 to N"),
24976
- reason: zod_default.string().describe("reason for the vendor ranking")
24977
+ vendor_id: zod_default.string(),
24978
+ rank: zod_default.number().optional().describe("ranking position of the vendor from 1 to N when applicable"),
24979
+ reason: zod_default.string().optional().describe("reason for the vendor ranking when applicable")
24977
24980
  }))
24978
- }).describe("displaying a list of vendor cards with rankings and reasons"),
24981
+ }).describe("displaying a list of vendor cards with rankings and reasons. Only use this widget when calling Care Network vendor search tools."),
24979
24982
  enrich: {
24980
- toolId: "LEsUueB52QpakvN1n5HG",
24983
+ toolId: "CPgsswom7FkUYvplmy6H",
24981
24984
  inputs: {
24982
- ids: "${vendors|map('id')|join(',')}"
24985
+ vendorIds: "${vendors|map('vendor_id')|join(',')}"
24983
24986
  }
24984
24987
  },
24985
24988
  render: ({ payload, enrichedResult }) => {
24989
+ const typedPayload = payload;
24986
24990
  const vendorData = enrichedResult?.data ?? {};
24987
- return /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexDirection: "column", gap: "0.75rem" }, children: payload.vendors.map((v) => {
24988
- const data = vendorData[v.id];
24991
+ const formatLanguage = (code3) => {
24992
+ const langMap = { en: "English", es: "Spanish", zh: "Chinese", fr: "French" };
24993
+ return langMap[code3.trim()] || code3.trim();
24994
+ };
24995
+ return /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexDirection: "column", gap: "0.75rem" }, children: typedPayload.vendors.map((v) => {
24996
+ const data = vendorData[v.vendor_id];
24997
+ const name17 = data?.names?.find((n) => n.type === "org")?.value ?? "Care Provider";
24998
+ const languages = data?.languages ?? [];
24999
+ const ageGroups = data?.details?.age_groups ?? [];
25000
+ const services = data?.details?.services ?? [];
25001
+ const address = data?.location?.formatted_address;
25002
+ const hours = data?.scheduling?.hours;
24989
25003
  return /* @__PURE__ */ jsxs7(
24990
25004
  "div",
24991
25005
  {
@@ -25002,26 +25016,53 @@ var defaultChatWidgets = [
25002
25016
  children: [
25003
25017
  /* @__PURE__ */ jsxs7("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [
25004
25018
  /* @__PURE__ */ jsxs7("span", { style: { fontWeight: 600, fontSize: "1rem", color: "#111827" }, children: [
25005
- "#",
25006
- v.rank,
25007
- " ",
25008
- data?.name ?? `Vendor ${v.id}`
25019
+ v.rank ? `#${v.rank} ` : "",
25020
+ name17
25009
25021
  ] }),
25010
- data?.rating && /* @__PURE__ */ jsxs7("span", { style: { fontSize: "0.875rem", color: "#6b7280" }, children: [
25011
- "\u2B50 ",
25012
- data.rating.toFixed(1)
25013
- ] })
25022
+ hours && /* @__PURE__ */ jsx8("span", { style: { fontSize: "0.75rem", color: "#6b7280" }, children: hours })
25023
+ ] }),
25024
+ address && /* @__PURE__ */ jsx8("div", { style: { fontSize: "0.875rem", color: "#6b7280" }, children: address }),
25025
+ services.length > 0 && /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexWrap: "wrap", gap: "0.375rem" }, children: services.map((service) => /* @__PURE__ */ jsx8(
25026
+ "span",
25027
+ {
25028
+ style: {
25029
+ fontSize: "0.75rem",
25030
+ padding: "0.125rem 0.5rem",
25031
+ background: "#dbeafe",
25032
+ color: "#1e40af",
25033
+ borderRadius: "9999px"
25034
+ },
25035
+ children: service
25036
+ },
25037
+ service
25038
+ )) }),
25039
+ languages.length > 0 && /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexWrap: "wrap", gap: "0.375rem" }, children: languages.map((lang) => /* @__PURE__ */ jsx8(
25040
+ "span",
25041
+ {
25042
+ style: {
25043
+ fontSize: "0.75rem",
25044
+ padding: "0.125rem 0.5rem",
25045
+ background: "#f3e8ff",
25046
+ color: "#7c3aed",
25047
+ borderRadius: "9999px"
25048
+ },
25049
+ children: formatLanguage(lang)
25050
+ },
25051
+ lang
25052
+ )) }),
25053
+ ageGroups.length > 0 && /* @__PURE__ */ jsxs7("div", { style: { fontSize: "0.75rem", color: "#6b7280" }, children: [
25054
+ /* @__PURE__ */ jsx8("strong", { children: "Ages:" }),
25055
+ " ",
25056
+ ageGroups.join(", ")
25014
25057
  ] }),
25015
- data?.description && /* @__PURE__ */ jsx8("div", { style: { fontSize: "0.875rem", color: "#6b7280" }, children: data.description }),
25016
- /* @__PURE__ */ jsxs7("div", { style: { fontSize: "0.875rem", color: "#374151" }, children: [
25058
+ v.reason && /* @__PURE__ */ jsxs7("div", { style: { fontSize: "0.875rem", color: "#374151" }, children: [
25017
25059
  /* @__PURE__ */ jsx8("strong", { children: "Why:" }),
25018
25060
  " ",
25019
25061
  v.reason
25020
- ] }),
25021
- data?.address && /* @__PURE__ */ jsx8("div", { style: { fontSize: "0.75rem", color: "#9ca3af" }, children: data.address })
25062
+ ] })
25022
25063
  ]
25023
25064
  },
25024
- v.id
25065
+ v.vendor_id
25025
25066
  );
25026
25067
  }) });
25027
25068
  }