@webority/mobile-chat 0.128.0 → 0.133.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/AgentByline.js +1 -0
- package/lib/commonjs/ChatComposer.js +1 -0
- package/lib/commonjs/ChatConversationActions.js +1 -0
- package/lib/commonjs/ChatDictationButton.js +1 -0
- package/lib/commonjs/ChatEmbed.js +1 -0
- package/lib/commonjs/ChatEntrance.js +1 -0
- package/lib/commonjs/ChatFooter.js +1 -0
- package/lib/commonjs/ChatFrame.js +1 -0
- package/lib/commonjs/ChatHistory.js +1 -0
- package/lib/commonjs/ChatLiveBar.js +1 -0
- package/lib/commonjs/ChatMessageActions.js +1 -0
- package/lib/commonjs/ChatNudge.js +1 -0
- package/lib/commonjs/ChatOpenTickets.js +1 -0
- package/lib/commonjs/ChatScreen.js +1 -0
- package/lib/commonjs/ChatSheet.js +1 -0
- package/lib/commonjs/ChatStarters.js +1 -0
- package/lib/commonjs/ChatThread.js +1 -0
- package/lib/commonjs/ReadAloudButton.js +1 -0
- package/lib/commonjs/chatShared.js +1 -0
- package/lib/commonjs/features.map.json +40 -0
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/loaders/ChatLoader.js +1 -0
- package/lib/commonjs/loaders/OrbLoader.js +1 -0
- package/lib/commonjs/loaders/PhrasesLoader.js +1 -0
- package/lib/commonjs/loaders/SkeletonLoader.js +1 -0
- package/lib/commonjs/loaders/StepsLoader.js +1 -0
- package/lib/commonjs/loaders/TypingPill.js +1 -0
- package/lib/commonjs/pushOpen.js +1 -0
- package/lib/commonjs/renderers/ActionPart.js +1 -0
- package/lib/commonjs/renderers/ChartPart.js +1 -0
- package/lib/commonjs/renderers/FigureText.js +1 -0
- package/lib/commonjs/renderers/FiguresPart.js +1 -0
- package/lib/commonjs/renderers/FilePart.js +1 -0
- package/lib/commonjs/renderers/HandoffPart.js +1 -0
- package/lib/commonjs/renderers/ImagePart.js +1 -0
- package/lib/commonjs/renderers/InputRequestPart.js +1 -0
- package/lib/commonjs/renderers/NoticePart.js +1 -0
- package/lib/commonjs/renderers/QuickRepliesPart.js +1 -0
- package/lib/commonjs/renderers/RecordCardPart.js +1 -0
- package/lib/commonjs/renderers/SourcesPart.js +1 -0
- package/lib/commonjs/renderers/TablePart.js +1 -0
- package/lib/commonjs/renderers/TextPart.js +1 -0
- package/lib/commonjs/renderers/TicketPart.js +1 -0
- package/lib/commonjs/renderers/VoiceClipPart.js +1 -0
- package/lib/commonjs/renderers/index.js +1 -0
- package/lib/commonjs/speech/azureSpeech.js +1 -0
- package/lib/commonjs/speech/expoAudio.js +1 -0
- package/lib/commonjs/speech/phoneSpeech.js +1 -0
- package/lib/commonjs/speech/speechText.js +1 -0
- package/lib/commonjs/types.js +1 -0
- package/lib/commonjs/useChat.js +1 -1
- package/lib/commonjs/useChatHaptics.js +1 -0
- package/lib/commonjs/useChatSpeech.js +1 -0
- package/lib/commonjs/useTranscriptActions.js +1 -0
- package/lib/module/AgentByline.js +1 -0
- package/lib/module/ChatComposer.js +1 -0
- package/lib/module/ChatConversationActions.js +1 -0
- package/lib/module/ChatDictationButton.js +1 -0
- package/lib/module/ChatEmbed.js +1 -0
- package/lib/module/ChatEntrance.js +1 -0
- package/lib/module/ChatFooter.js +1 -0
- package/lib/module/ChatFrame.js +1 -0
- package/lib/module/ChatHistory.js +1 -0
- package/lib/module/ChatLiveBar.js +1 -0
- package/lib/module/ChatMessageActions.js +1 -0
- package/lib/module/ChatNudge.js +1 -0
- package/lib/module/ChatOpenTickets.js +1 -0
- package/lib/module/ChatScreen.js +1 -0
- package/lib/module/ChatSheet.js +1 -0
- package/lib/module/ChatStarters.js +1 -0
- package/lib/module/ChatThread.js +1 -0
- package/lib/module/ReadAloudButton.js +1 -0
- package/lib/module/chatShared.js +1 -0
- package/lib/module/features.map.json +40 -0
- package/lib/module/index.js +1 -1
- package/lib/module/loaders/ChatLoader.js +1 -0
- package/lib/module/loaders/OrbLoader.js +1 -0
- package/lib/module/loaders/PhrasesLoader.js +1 -0
- package/lib/module/loaders/SkeletonLoader.js +1 -0
- package/lib/module/loaders/StepsLoader.js +1 -0
- package/lib/module/loaders/TypingPill.js +1 -0
- package/lib/module/pushOpen.js +1 -0
- package/lib/module/renderers/ActionPart.js +1 -0
- package/lib/module/renderers/ChartPart.js +1 -0
- package/lib/module/renderers/FigureText.js +1 -0
- package/lib/module/renderers/FiguresPart.js +1 -0
- package/lib/module/renderers/FilePart.js +1 -0
- package/lib/module/renderers/HandoffPart.js +1 -0
- package/lib/module/renderers/ImagePart.js +1 -0
- package/lib/module/renderers/InputRequestPart.js +1 -0
- package/lib/module/renderers/NoticePart.js +1 -0
- package/lib/module/renderers/QuickRepliesPart.js +1 -0
- package/lib/module/renderers/RecordCardPart.js +1 -0
- package/lib/module/renderers/SourcesPart.js +1 -0
- package/lib/module/renderers/TablePart.js +1 -0
- package/lib/module/renderers/TextPart.js +1 -0
- package/lib/module/renderers/TicketPart.js +1 -0
- package/lib/module/renderers/VoiceClipPart.js +1 -0
- package/lib/module/renderers/index.js +1 -0
- package/lib/module/speech/azureSpeech.js +1 -0
- package/lib/module/speech/expoAudio.js +1 -0
- package/lib/module/speech/phoneSpeech.js +1 -0
- package/lib/module/speech/speechText.js +1 -0
- package/lib/module/types.js +1 -0
- package/lib/module/useChat.js +1 -1
- package/lib/module/useChatHaptics.js +1 -0
- package/lib/module/useChatSpeech.js +1 -0
- package/lib/module/useTranscriptActions.js +1 -0
- package/lib/typescript/commonjs/AgentByline.d.ts +9 -0
- package/lib/typescript/commonjs/ChatComposer.d.ts +14 -0
- package/lib/typescript/commonjs/ChatConversationActions.d.ts +10 -0
- package/lib/typescript/commonjs/ChatDictationButton.d.ts +17 -0
- package/lib/typescript/commonjs/ChatEmbed.d.ts +11 -0
- package/lib/typescript/commonjs/ChatEntrance.d.ts +8 -0
- package/lib/typescript/commonjs/ChatFooter.d.ts +9 -0
- package/lib/typescript/commonjs/ChatFrame.d.ts +39 -0
- package/lib/typescript/commonjs/ChatHistory.d.ts +11 -0
- package/lib/typescript/commonjs/ChatLiveBar.d.ts +11 -0
- package/lib/typescript/commonjs/ChatMessageActions.d.ts +15 -0
- package/lib/typescript/commonjs/ChatNudge.d.ts +14 -0
- package/lib/typescript/commonjs/ChatOpenTickets.d.ts +12 -0
- package/lib/typescript/commonjs/ChatScreen.d.ts +5 -0
- package/lib/typescript/commonjs/ChatSheet.d.ts +21 -0
- package/lib/typescript/commonjs/ChatStarters.d.ts +12 -0
- package/lib/typescript/commonjs/ChatThread.d.ts +34 -0
- package/lib/typescript/commonjs/ReadAloudButton.d.ts +11 -0
- package/lib/typescript/commonjs/chatShared.d.ts +4 -0
- package/lib/typescript/commonjs/index.d.ts +26 -21
- package/lib/typescript/commonjs/loaders/ChatLoader.d.ts +13 -0
- package/lib/typescript/commonjs/loaders/OrbLoader.d.ts +8 -0
- package/lib/typescript/commonjs/loaders/PhrasesLoader.d.ts +8 -0
- package/lib/typescript/commonjs/loaders/SkeletonLoader.d.ts +8 -0
- package/lib/typescript/commonjs/loaders/StepsLoader.d.ts +8 -0
- package/lib/typescript/commonjs/loaders/TypingPill.d.ts +7 -0
- package/lib/typescript/commonjs/pushOpen.d.ts +3 -0
- package/lib/typescript/commonjs/renderers/ActionPart.d.ts +3 -0
- package/lib/typescript/commonjs/renderers/ChartPart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/FigureText.d.ts +21 -0
- package/lib/typescript/commonjs/renderers/FiguresPart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/FilePart.d.ts +3 -0
- package/lib/typescript/commonjs/renderers/HandoffPart.d.ts +9 -0
- package/lib/typescript/commonjs/renderers/ImagePart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/InputRequestPart.d.ts +3 -0
- package/lib/typescript/commonjs/renderers/NoticePart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/QuickRepliesPart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/RecordCardPart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/SourcesPart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/TablePart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/TextPart.d.ts +8 -0
- package/lib/typescript/commonjs/renderers/TicketPart.d.ts +9 -0
- package/lib/typescript/commonjs/renderers/VoiceClipPart.d.ts +9 -0
- package/lib/typescript/commonjs/renderers/index.d.ts +3 -0
- package/lib/typescript/commonjs/speech/azureSpeech.d.ts +25 -0
- package/lib/typescript/commonjs/speech/expoAudio.d.ts +23 -0
- package/lib/typescript/commonjs/speech/phoneSpeech.d.ts +16 -0
- package/lib/typescript/commonjs/speech/speechText.d.ts +16 -0
- package/lib/typescript/commonjs/types.d.ts +21 -0
- package/lib/typescript/commonjs/useChat.d.ts +38 -10
- package/lib/typescript/commonjs/useChatHaptics.d.ts +3 -0
- package/lib/typescript/commonjs/useChatSpeech.d.ts +4 -0
- package/lib/typescript/commonjs/useTranscriptActions.d.ts +10 -0
- package/lib/typescript/module/AgentByline.d.ts +9 -0
- package/lib/typescript/module/ChatComposer.d.ts +14 -0
- package/lib/typescript/module/ChatConversationActions.d.ts +10 -0
- package/lib/typescript/module/ChatDictationButton.d.ts +17 -0
- package/lib/typescript/module/ChatEmbed.d.ts +11 -0
- package/lib/typescript/module/ChatEntrance.d.ts +8 -0
- package/lib/typescript/module/ChatFooter.d.ts +9 -0
- package/lib/typescript/module/ChatFrame.d.ts +39 -0
- package/lib/typescript/module/ChatHistory.d.ts +11 -0
- package/lib/typescript/module/ChatLiveBar.d.ts +11 -0
- package/lib/typescript/module/ChatMessageActions.d.ts +15 -0
- package/lib/typescript/module/ChatNudge.d.ts +14 -0
- package/lib/typescript/module/ChatOpenTickets.d.ts +12 -0
- package/lib/typescript/module/ChatScreen.d.ts +5 -0
- package/lib/typescript/module/ChatSheet.d.ts +21 -0
- package/lib/typescript/module/ChatStarters.d.ts +12 -0
- package/lib/typescript/module/ChatThread.d.ts +34 -0
- package/lib/typescript/module/ReadAloudButton.d.ts +11 -0
- package/lib/typescript/module/chatShared.d.ts +4 -0
- package/lib/typescript/module/index.d.ts +26 -21
- package/lib/typescript/module/loaders/ChatLoader.d.ts +13 -0
- package/lib/typescript/module/loaders/OrbLoader.d.ts +8 -0
- package/lib/typescript/module/loaders/PhrasesLoader.d.ts +8 -0
- package/lib/typescript/module/loaders/SkeletonLoader.d.ts +8 -0
- package/lib/typescript/module/loaders/StepsLoader.d.ts +8 -0
- package/lib/typescript/module/loaders/TypingPill.d.ts +7 -0
- package/lib/typescript/module/pushOpen.d.ts +3 -0
- package/lib/typescript/module/renderers/ActionPart.d.ts +3 -0
- package/lib/typescript/module/renderers/ChartPart.d.ts +8 -0
- package/lib/typescript/module/renderers/FigureText.d.ts +21 -0
- package/lib/typescript/module/renderers/FiguresPart.d.ts +8 -0
- package/lib/typescript/module/renderers/FilePart.d.ts +3 -0
- package/lib/typescript/module/renderers/HandoffPart.d.ts +9 -0
- package/lib/typescript/module/renderers/ImagePart.d.ts +8 -0
- package/lib/typescript/module/renderers/InputRequestPart.d.ts +3 -0
- package/lib/typescript/module/renderers/NoticePart.d.ts +8 -0
- package/lib/typescript/module/renderers/QuickRepliesPart.d.ts +8 -0
- package/lib/typescript/module/renderers/RecordCardPart.d.ts +8 -0
- package/lib/typescript/module/renderers/SourcesPart.d.ts +8 -0
- package/lib/typescript/module/renderers/TablePart.d.ts +8 -0
- package/lib/typescript/module/renderers/TextPart.d.ts +8 -0
- package/lib/typescript/module/renderers/TicketPart.d.ts +9 -0
- package/lib/typescript/module/renderers/VoiceClipPart.d.ts +9 -0
- package/lib/typescript/module/renderers/index.d.ts +3 -0
- package/lib/typescript/module/speech/azureSpeech.d.ts +25 -0
- package/lib/typescript/module/speech/expoAudio.d.ts +23 -0
- package/lib/typescript/module/speech/phoneSpeech.d.ts +16 -0
- package/lib/typescript/module/speech/speechText.d.ts +16 -0
- package/lib/typescript/module/types.d.ts +21 -0
- package/lib/typescript/module/useChat.d.ts +38 -10
- package/lib/typescript/module/useChatHaptics.d.ts +3 -0
- package/lib/typescript/module/useChatSpeech.d.ts +4 -0
- package/lib/typescript/module/useTranscriptActions.d.ts +10 -0
- package/package.json +42 -15
- package/README.md +0 -185
- package/lib/commonjs/components/ActionCard.js +0 -1
- package/lib/commonjs/components/ChatComposer.js +0 -1
- package/lib/commonjs/components/ChatConversationList.js +0 -1
- package/lib/commonjs/components/ChatLauncher.js +0 -1
- package/lib/commonjs/components/ChatMarkdown.js +0 -1
- package/lib/commonjs/components/ChatMessage.js +0 -1
- package/lib/commonjs/components/ChatScreen.js +0 -1
- package/lib/commonjs/components/ChatThread.js +0 -1
- package/lib/commonjs/components/ComposerAttachments.js +0 -1
- package/lib/commonjs/components/ReplyRating.js +0 -1
- package/lib/module/components/ActionCard.js +0 -1
- package/lib/module/components/ChatComposer.js +0 -1
- package/lib/module/components/ChatConversationList.js +0 -1
- package/lib/module/components/ChatLauncher.js +0 -1
- package/lib/module/components/ChatMarkdown.js +0 -1
- package/lib/module/components/ChatMessage.js +0 -1
- package/lib/module/components/ChatScreen.js +0 -1
- package/lib/module/components/ChatThread.js +0 -1
- package/lib/module/components/ComposerAttachments.js +0 -1
- package/lib/module/components/ReplyRating.js +0 -1
- package/lib/typescript/commonjs/components/ActionCard.d.ts +0 -23
- package/lib/typescript/commonjs/components/ChatComposer.d.ts +0 -42
- package/lib/typescript/commonjs/components/ChatConversationList.d.ts +0 -22
- package/lib/typescript/commonjs/components/ChatLauncher.d.ts +0 -22
- package/lib/typescript/commonjs/components/ChatMarkdown.d.ts +0 -24
- package/lib/typescript/commonjs/components/ChatMessage.d.ts +0 -55
- package/lib/typescript/commonjs/components/ChatScreen.d.ts +0 -40
- package/lib/typescript/commonjs/components/ChatThread.d.ts +0 -30
- package/lib/typescript/commonjs/components/ComposerAttachments.d.ts +0 -12
- package/lib/typescript/commonjs/components/ReplyRating.d.ts +0 -19
- package/lib/typescript/module/components/ActionCard.d.ts +0 -23
- package/lib/typescript/module/components/ChatComposer.d.ts +0 -42
- package/lib/typescript/module/components/ChatConversationList.d.ts +0 -22
- package/lib/typescript/module/components/ChatLauncher.d.ts +0 -22
- package/lib/typescript/module/components/ChatMarkdown.d.ts +0 -24
- package/lib/typescript/module/components/ChatMessage.d.ts +0 -55
- package/lib/typescript/module/components/ChatScreen.d.ts +0 -40
- package/lib/typescript/module/components/ChatThread.d.ts +0 -30
- package/lib/typescript/module/components/ComposerAttachments.d.ts +0 -12
- package/lib/typescript/module/components/ReplyRating.d.ts +0 -19
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AgentByline=AgentByline;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");function AgentByline({author:e,labels:i}){const t=(0,_mobileUi.useTheme)(),r=e.displayName||i.agent,a=e.avatarUrl?{uri:e.avatarUrl}:void 0;return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",style:{flexDirection:"row",alignItems:"center",gap:t.space.xs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Avatar,{size:"xs",name:r,source:a}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:r})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatComposer=ChatComposer;var _permissions=require("@webority/mobile-core/permissions"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_ChatDictationButton=require("./ChatDictationButton.js"),_ChatFooter=require("./ChatFooter.js"),_speechText=require("./speech/speechText.js"),_jsxRuntime=require("react/jsx-runtime");const ALLOWANCE_SHOWN_AT=10,DEFAULT_MAX_LENGTH=4e3;function ChatComposer({chat:e,labels:t,pickAttachments:s,keyboardOffset:a,keyboardAware:i,safeArea:o,testID:n="chat-composer"}){const r=(0,_mobileUi.useTheme)(),l=(0,_react.useMemo)(()=>buildStyles(r),[r]),[c,m]=(0,_react.useState)(""),[u,h]=(0,_react.useState)(null),d=e.editing;(0,_react.useEffect)(()=>{m(d?d.text:"")},[d]);const p=e.attachments,_=p.some(e=>"Uploading"===e.status),x=p.some(e=>"Ready"===e.status),g=e.messagesLeftToday,b=e.profile?.limits.maxMessageLength??DEFAULT_MAX_LENGTH,j=void 0!==s&&e.features.Attachments&&(e.profile?.limits.maxAttachments??0)>0,f=e.features.HumanHandoff&&("WaitingForAgent"===e.conversationState||"WithAgent"===e.conversationState),v=j&&!e.handoffPause?(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:"paperclip",accessibilityLabel:t.attach,variant:"ghost",tone:"neutral",onPress:()=>{s&&s().then(t=>e.attach(t))},testID:`${n}-attach`}):void 0,y=d?(0,_jsxRuntime.jsx)(_mobileUi.Banner,{message:t.editing,accessibilityRole:"summary",actions:[{label:t.cancel,onPress:()=>e.cancelEdit()}],testID:`${n}-editing`}):null,R=p.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:l.tray,testID:`${n}-attachments`,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:l.row,children:p.map(s=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:l.item,children:[(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:s.fileName,variant:"soft",onRemove:()=>{e.removeAttachment(s.key)},labels:{remove:t.removeAttachment},removeTestID:`${n}-remove-${s.key}`,testID:`${n}-chip-${s.key}`}),"Uploading"===s.status?(0,_jsxRuntime.jsx)(_mobileUi.ProgressBar,{progress:s.progress??void 0,label:t.attachmentUploading,height:4,containerStyle:l.progress}):null,"Failed"===s.status?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:t.attachmentFailed}):null]},s.key))})}):null,A=null!==g&&g<=ALLOWANCE_SHOWN_AT?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:0===g?"danger":"secondary",accessibilityLiveRegion:"polite",testID:`${n}-allowance`,children:t.allowance(g)}):null,C=u?(0,_jsxRuntime.jsx)(_mobileUi.Banner,{message:u.message,tone:"danger",dismissible:!0,onClose:()=>h(null),actions:u.openSettings?[{label:t.dictateOpenSettings,onPress:()=>{_permissions.Permissions.openSettings()}}]:void 0,testID:`${n}-voice-notice`}):null,S=y||R||A||C?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[y,R,A,C]}):void 0,T=!_&&(!!x||void 0),D=c.length>0,L=!0===e.profile?.experience.motion;return(0,_jsxRuntime.jsx)(_mobileUi.Composer,{onSend:t=>{e.submit(t)},value:c,onChangeText:t=>{m(t),f&&t.length>0&&e.notifyTyping()},loading:e.streaming,ring:L&&(D||e.streaming),sendReveal:L?"onText":"always",onStop:e.features.Stop?()=>e.stop():void 0,stopLabel:t.stop,disabled:0===g||e.handoffPause,maxLength:b,canSend:T,placeholder:e.handoffPause?t.handoffMoment:t.placeholder,accessibilityLabel:t.composer,labels:{send:t.send},leading:v,trailing:(0,_jsxRuntime.jsx)(_ChatDictationButton.ChatDictationButton,{chat:e,labels:t,disabled:0===g||e.handoffPause,onText:e=>m(t=>(0,_speechText.joinDictation)(t,e,b)),onNotice:h}),above:S,below:(0,_jsxRuntime.jsx)(_ChatFooter.ChatFooter,{chat:e,labels:t}),keyboardAware:i,keyboardOffset:a,safeArea:o,testID:n})}const buildStyles=e=>_reactNative.StyleSheet.create({tray:{gap:e.space.xs},row:{flexDirection:"row",flexWrap:"wrap",gap:e.space.xs},item:{gap:e.space.xxs,maxWidth:"100%"},progress:{minWidth:120}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatConversationActions=ChatConversationActions;var _mobileUi=require("@webority/mobile-ui"),_useTranscriptActions=_interopRequireDefault(require("./useTranscriptActions.js")),_jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ChatConversationActions({chat:e,labels:i,testID:t}){const n=(0,_useTranscriptActions.default)(e,i);return n.canShare&&e.messages.some(e=>!e.streaming)?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:"share",variant:"ghost",size:"sm",accessibilityLabel:i.shareConversation,disabled:e.streaming||e.thinking,onPress:()=>{n.shareConversation()},testID:t}),null!==n.notice?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:n.notice}):null]}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatDictationButton=ChatDictationButton;var _mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_phoneSpeech=require("./speech/phoneSpeech.js"),_useChatSpeech=require("./useChatSpeech.js"),_jsxRuntime=require("react/jsx-runtime");function ChatDictationButton({chat:e,labels:t,disabled:i=!1,onText:n,onNotice:r,testID:a="chat-dictation"}){const c=(0,_useChatSpeech.useChatSpeech)(e),[o,s]=(0,_react.useState)("idle"),u=(0,_react.useRef)(null),l=(0,_react.useRef)(!0);if((0,_react.useEffect)(()=>(l.current=!0,()=>{l.current=!1,u.current?.abort()}),[]),!e.features.Dictation||null===c)return null;const d="transcribing"===o,h="listening"===o,g=h?t.dictateStop:d?t.dictateTranscribing:t.dictate;return(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:h?"stop":"microphone",accessibilityLabel:g,variant:"ghost",tone:"neutral",active:h,loading:d,disabled:i||d,onPress:()=>{if("listening"===o)return s("transcribing"),void u.current?.abort();if("idle"!==o)return;r(null);const e=new AbortController;u.current=e,s("listening"),(0,_mobileUi.announce)(t.dictateListening);let i=!1;(async()=>{try{await c.startDictation({signal:e.signal,onText:e=>{l.current&&(i=!0,n(e))},onEnd:()=>{l.current&&s("transcribing")}}),l.current&&!i&&r({message:t.dictationNotHeard,openSettings:!1})}catch(e){if(!l.current)return;e instanceof _phoneSpeech.PhoneSpeechError?r(dictationFailure(e,t)):(_mobileCore.Logger.error("[chat] dictation failed",e),r({message:t.dictationFailed,openSettings:!1}))}finally{l.current&&(u.current=null,s("idle"))}})()},testID:a})}const dictationFailure=(e,t)=>{switch(e.phoneCode){case"MicBlocked":return{message:t.dictationBlocked,openSettings:!0};case"MicDenied":return{message:t.dictationBlocked,openSettings:!1};case"MicUnavailable":return{message:t.dictationNoMicrophone,openSettings:!1};default:return{message:t.dictationFailed,openSettings:!1}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatEmbed=ChatEmbed;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_ChatFrame=require("./ChatFrame.js"),_jsxRuntime=require("react/jsx-runtime");function ChatEmbed({chat:e,labels:t,renderers:r,layoutParts:a,loader:o="Steps",motion:i="On",pickAttachments:s,onOpenAttachment:n,onOpenTarget:l,onNavigate:d,openTicket:h,handoffHosts:c,keyboardOffset:m,title:u,headerActions:b,height:f=520,testID:_="chat-embed"}){const p=(0,_mobileUi.useTheme)();return null===e.profile||e.features.VisitorChat?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:f,overflow:"hidden",borderRadius:(0,_mobileUi.radiusOf)(p,"lg"),borderWidth:1,borderColor:p.colors["border-subtle"],backgroundColor:p.colors.bg},testID:_,children:(0,_jsxRuntime.jsx)(_ChatFrame.ChatFrame,{chat:e,labels:(0,_chatCore.mergeLabels)(t),renderers:r,layoutParts:a,loader:o,motion:i,pickAttachments:s,onOpenAttachment:n,onOpenTarget:l,onNavigate:d,openTicket:h,handoffHosts:c,keyboardOffset:m,layout:"embedded",title:u,headerActions:b,testID:`${_}-frame`})}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatEntrance=ChatEntrance;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const ENTER_MS=260,STAGGER_MS=45,RISE_PX=8,START_SCALE=.98;function ChatEntrance({index:e=0,animate:t=!0,children:a}){const r=(0,_mobileUi.useReducedMotion)(),i=!t||r,[n]=(0,_react.useState)(()=>new _reactNative.Animated.Value(0));return(0,_react.useEffect)(()=>{if(i)return void n.setValue(1);const t=_reactNative.Animated.timing(n,{toValue:1,duration:ENTER_MS,delay:e*STAGGER_MS,useNativeDriver:!0});return t.start(),()=>t.stop()},[e,i,n]),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:{opacity:n,transform:[{translateY:n.interpolate({inputRange:[0,1],outputRange:[RISE_PX,0]})},{scale:n.interpolate({inputRange:[0,1],outputRange:[START_SCALE,1]})}]},children:a})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatFooter=ChatFooter;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const GOOGLE_PRIVACY="https://policies.google.com/privacy",GOOGLE_TERMS="https://policies.google.com/terms",openLink=e=>{_reactNative.Linking.openURL(e).catch(()=>{})};function ChatFooter({chat:e,labels:i}){const t=(0,_mobileUi.useTheme)(),o=e.profile;if(!o)return null;const r=o.footer.disclaimer??i.disclaimer,n=o.footer.privacyUrl,a=o.footer.assuranceText,c=(0,_chatCore.showsCaptchaNote)(o);return Boolean(r)||Boolean(n)||Boolean(a)||c?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:t.space.xxs,alignItems:"center"},children:[r?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"tertiary",align:"center",children:r}):null,n?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"link",accessibilityRole:"link",onPress:()=>openLink(n),children:i.footerPrivacy}):null,a?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"tertiary",align:"center",children:a}):null,c?(0,_jsxRuntime.jsxs)(_mobileUi.Text,{variant:"caption",color:"tertiary",align:"center",children:[i.captchaNote," ",(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"link",accessibilityRole:"link",onPress:()=>openLink(GOOGLE_PRIVACY),children:i.captchaPrivacy})," ",(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"link",accessibilityRole:"link",onPress:()=>openLink(GOOGLE_TERMS),children:i.captchaTerms})]}):null]}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatFrame=ChatFrame;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_ChatComposer=require("./ChatComposer.js"),_ChatConversationActions=require("./ChatConversationActions.js"),_ChatHistory=require("./ChatHistory.js"),_ChatLiveBar=require("./ChatLiveBar.js"),_ChatStarters=require("./ChatStarters.js"),_ChatThread=require("./ChatThread.js"),_useChatHaptics=require("./useChatHaptics.js"),_jsxRuntime=require("react/jsx-runtime");function ChatFrame({chat:e,labels:t,renderers:s,layoutParts:a,loader:r="Steps",motion:i="On",pickAttachments:n,onOpenAttachment:o,onOpenTarget:l,onNavigate:c,openTicket:u,handoffHosts:m,keyboardOffset:h,layout:d,title:_,headerActions:x,testID:j="chat-frame"}){const C=(0,_mobileUi.useTheme)(),[p,b]=(0,_react.useState)(!1);(0,_useChatHaptics.useChatHaptics)(e);const f="sheet"!==d,y=null!==e.profile;if(y&&!e.features.VisitorChat)return null;const v=e.messages.length>0,R=!0===e.profile?.experience.sound.muteControl&&e.features.Sounds,g=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",gap:C.space.sm,paddingHorizontal:C.space.md,paddingVertical:C.space.sm,borderBottomWidth:1,borderBottomColor:C.colors["border-subtle"]},children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1,minWidth:0},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"title",accessibilityRole:"header",numberOfLines:1,children:_??e.profile?.assistant.name??t.panelTitle}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:t.headerStatus})]}),x,p?null:(0,_jsxRuntime.jsx)(_ChatConversationActions.ChatConversationActions,{chat:e,labels:t,testID:`${j}-conversation-actions`}),R?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:e.muted?t.unmuteSounds:t.muteSounds,variant:"link",size:"sm",accessibilityState:{checked:e.muted},onPress:()=>e.session.setMuted(!e.muted),testID:`${j}-mute`}):null,e.features.History?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:p?t.backToChat:t.history,variant:"link",size:"sm",onPress:()=>b(e=>!e),testID:`${j}-history`}):null,p?null:(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:t.newChat,size:"sm",variant:"soft",leftIcon:"add",disabled:!v&&!e.loading,onPress:()=>e.newConversation(),testID:`${j}-new`})]});let I;return I=p?(0,_jsxRuntime.jsx)(_ChatHistory.ChatHistory,{chat:e,labels:t,onOpen:()=>b(!1),testID:`${j}-history-list`}):e.profileError?(0,_jsxRuntime.jsx)(_mobileUi.Banner,{tone:"danger",message:e.profileError.message,accessibilityRole:"alert",testID:`${j}-profile-error`}):!y||e.loading?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1,alignItems:"center",justifyContent:"center"},children:(0,_jsxRuntime.jsx)(_mobileUi.Spinner,{message:t.loadingConversation,testID:`${j}-loading`})}):e.loadError?(0,_jsxRuntime.jsx)(_mobileUi.Banner,{tone:"danger",message:e.loadError.message,accessibilityRole:"alert",testID:`${j}-load-error`}):v?(0,_jsxRuntime.jsx)(_ChatThread.ChatThread,{chat:e,labels:t,renderers:s,layoutParts:a,loader:r,motion:i,pickAttachments:n,onOpenAttachment:o,onOpenTarget:l,onNavigate:c,openTicket:u,handoffHosts:m,keyboardAware:f,keyboardOffset:h,style:{flex:1},testID:`${j}-thread`}):(0,_jsxRuntime.jsx)(_ChatStarters.ChatStarters,{chat:e,labels:t,openTicket:u,testID:`${j}-starters`}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1},testID:j,children:[g,p?null:(0,_jsxRuntime.jsx)(_ChatLiveBar.ChatLiveBar,{chat:e,labels:t,testID:`${j}-live`}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1},children:I}),p?null:(0,_jsxRuntime.jsx)(_ChatComposer.ChatComposer,{chat:e,labels:t,pickAttachments:n,keyboardOffset:h,keyboardAware:f,testID:`${j}-composer`})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatHistory=ChatHistory;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const TITLE_MAX_LENGTH=120,EMPTY_LIST_STATE=Object.freeze({items:[],totalCount:null,loading:!1,error:null,hasMore:!1}),NO_SUBSCRIPTION=()=>()=>{};function ChatHistory({chat:e,labels:t,onOpen:i,testID:n="chat-history"}){const l=(0,_mobileUi.useTheme)(),[s,a]=(0,_react.useState)(null),r=null!==s&&s.client===e.client?s.list:null,o=(0,_react.useCallback)(e=>r?r.subscribe(e):NO_SUBSCRIPTION(),[r]),c=(0,_react.useCallback)(()=>r?r.getState():EMPTY_LIST_STATE,[r]),u=(0,_react.useSyncExternalStore)(o,c),[m,_]=(0,_react.useState)(null),[d,b]=(0,_react.useState)(""),[x,j]=(0,_react.useState)(""),[h,p]=(0,_react.useState)(null),[y,g]=(0,_react.useState)(""),[I,T]=(0,_react.useState)(!1);(0,_react.useEffect)(()=>{const t=(0,_chatCore.createConversationList)({client:e.client});return a({client:e.client,list:t}),t.load(),()=>t.dispose()},[e.client]);const saveRename=async()=>{if(!m||!r)return;const e=d.trim();if(""!==e){T(!0),j("");try{await r.rename(m.publicId,e),_(null)}catch{j(t.renameFailed)}finally{T(!1)}}},S=!u.loading&&null===u.error&&0===u.items.length;return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{contentContainerStyle:{padding:l.space.md,gap:l.space.sm,flexGrow:1},accessibilityLabel:t.history,testID:n,children:[u.error?(0,_jsxRuntime.jsx)(_mobileUi.Banner,{tone:"danger",message:u.error.message||t.loadFailed,actions:[{label:t.retry,onPress:()=>{r?.load()}}],testID:`${n}-error`}):null,S?(0,_jsxRuntime.jsx)(_mobileUi.EmptyState,{size:"sm",title:t.historyEmptyTitle,description:t.historyEmptyText,testID:`${n}-empty`}):null,u.items.map(s=>{const a=s.title||t.untitled;return(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outline",padding:"sm",onPress:()=>(t=>{e.openConversation(t.publicId),i()})(s),accessibilityLabel:a,testID:`${n}-item-${s.publicId}`,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",gap:l.space.sm},children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1,minWidth:0},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",numberOfLines:1,children:a}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:(0,_mobileCore.formatDate)(s.lastActivityDateTimeUtc)})]}),e.features.Rename?(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:"edit",variant:"ghost",accessibilityLabel:t.rename,onPress:()=>{j(""),b(s.title??""),_(s)},testID:`${n}-rename-${s.publicId}`}):null,e.features.Delete?(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:"trash",tone:"danger",variant:"ghost",accessibilityLabel:t.deleteChat,onPress:()=>{g(""),p(s)},testID:`${n}-delete-${s.publicId}`}):null]})},s.publicId)}),u.loading&&0===u.items.length?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:l.space.sm},accessibilityElementsHidden:!0,children:[(0,_jsxRuntime.jsx)(_mobileUi.Skeleton,{height:56}),(0,_jsxRuntime.jsx)(_mobileUi.Skeleton,{height:56}),(0,_jsxRuntime.jsx)(_mobileUi.Skeleton,{height:56})]}):null,!u.loading&&u.hasMore?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:t.loadMore,variant:"outline",onPress:()=>{r?.loadMore()},testID:`${n}-more`}):null,(0,_jsxRuntime.jsxs)(_mobileUi.Dialog,{open:null!==m,onClose:()=>{I||_(null)},title:t.rename,dismissOnAction:!1,actions:[{label:t.cancel,tone:"neutral",disabled:I,onPress:()=>_(null)},{label:t.renameSave,disabled:""===d.trim()||I,loading:I,onPress:()=>{saveRename()}}],testID:`${n}-rename`,children:[(0,_jsxRuntime.jsx)(_mobileUi.Input,{label:t.conversationTitle,value:d,onChangeText:b,maxLength:TITLE_MAX_LENGTH,returnKeyType:"done",onSubmitEditing:()=>{saveRename()},testID:`${n}-rename-input`}),""!==x?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",testID:`${n}-rename-error`,children:x}):null]}),(0,_jsxRuntime.jsx)(_mobileUi.Dialog,{open:null!==h,onClose:()=>{I||p(null)},tone:"warning",title:t.deleteConfirmTitle,message:y||t.deleteConfirmMessage,dismissOnAction:!1,actions:[{label:t.cancel,tone:"neutral",disabled:I,onPress:()=>p(null)},{label:t.deleteConfirm,tone:"danger",loading:I,onPress:()=>{(async()=>{if(h&&r){T(!0),g("");try{await r.remove(h.publicId),h.publicId===e.conversationId&&e.newConversation(),p(null)}catch{g(t.deleteFailed)}finally{T(!1)}}})()}}],testID:`${n}-confirm`})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatLiveBar=ChatLiveBar;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const newestAgentName=(e,t)=>{for(let i=e.messages.length-1;i>=0;i-=1){const n=e.messages[i];if("Agent"===n?.author.kind)return n.author.displayName||t}return t};function ChatLiveBar({chat:e,labels:t,testID:i="chat-live-bar"}){const n=(0,_mobileUi.useTheme)();if(!e.features.HumanHandoff||null===e.conversationId)return null;const s=e.conversationState;if("Closed"===s)return null;if("Open"===s)return(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityLiveRegion:"polite",style:{paddingHorizontal:n.space.md,paddingVertical:n.space.xs},testID:i,children:(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:t.talkToPerson,variant:"soft",size:"sm",leftIcon:"user",loading:e.handoffPending,disabled:e.streaming||e.thinking,onPress:()=>{e.requestHandoff()},testID:`${i}-talk`})});const a="Lost"===e.live,r="WaitingForAgent"===s?t.handoffWaiting:t.handoffJoined(newestAgentName(e,t.agent));return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityLiveRegion:"polite",style:{gap:n.space.xs,paddingHorizontal:n.space.md,paddingVertical:n.space.xs},testID:i,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:r}),a?(0,_jsxRuntime.jsx)(_mobileUi.Banner,{tone:"warning",message:t.liveLost,actions:[{label:t.retry,onPress:()=>e.resumeLive()}],testID:`${i}-lost`}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatMessageActions=ChatMessageActions;var _chatCore=require("@webority/chat-core"),_clipboard=require("@webority/mobile-core/clipboard"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_ReadAloudButton=require("./ReadAloudButton.js"),_useTranscriptActions=_interopRequireDefault(require("./useTranscriptActions.js")),_jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const TEXT_AUTHORS=new Set(["Assistant","Agent","Script"]),RATED_AUTHORS=new Set(["Assistant","Agent"]);function ChatMessageActions({chat:e,message:t,labels:i,isLast:s,isLastVisitor:a,testID:r}){const n=(0,_mobileUi.useTheme)(),[l,o]=(0,_react.useState)(!1),[u,c]=(0,_react.useState)("idle"),d=(0,_react.useRef)(null),_=(0,_useTranscriptActions.default)(e,i),m=(0,_react.useMemo)(()=>TEXT_AUTHORS.has(t.author.kind)&&(0,_chatCore.buildTranscript)([t],{labels:i,title:null,figureText:!1}).entries.length>0,[t,i]);if((0,_react.useEffect)(()=>()=>{null!==d.current&&clearTimeout(d.current)},[]),t.streaming)return null;const x=t.parts.filter(e=>"Text"===e.kind).map(e=>e.text).join("\n\n"),h=TEXT_AUTHORS.has(t.author.kind)&&""!==x,g=t.stored&&RATED_AUTHORS.has(t.author.kind),p=("Assistant"===t.author.kind||"Agent"===t.author.kind)&&""!==(0,_chatCore.messagePlainText)(t.parts).trim(),b=s&&"Assistant"===t.author.kind&&!e.streaming&&!e.thinking&&e.features.Regenerate&&e.messages.some(e=>e.stored&&"Visitor"===e.author.kind),R=a&&t.stored&&e.features.Edit,save=async i=>{c("idle");try{await e.rate(t.id,i),c("saved")}catch{c("failed")}};return h&&e.features.Copy||m&&e.features.Share&&_.canShare||p||b||R||g&&e.features.Rating?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",flexWrap:"wrap",alignItems:"center",gap:n.space.xs},testID:r,children:[h&&e.features.Copy?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:l?i.copied:i.copy,variant:"link",size:"sm",onPress:()=>{(async()=>{await(0,_clipboard.copyText)(x)&&(o(!0),null!==d.current&&clearTimeout(d.current),d.current=setTimeout(()=>o(!1),2e3))})()},testID:`${r}-copy`}):null,m&&e.features.Share&&_.canShare?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:i.share,variant:"link",size:"sm",leftIcon:"share",disabled:e.streaming||e.thinking,onPress:()=>{_.shareReply(t)},testID:`${r}-share`}):null,p?(0,_jsxRuntime.jsx)(_ReadAloudButton.ReadAloudButton,{chat:e,message:t,labels:i}):null,b?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:i.regenerate,variant:"link",size:"sm",onPress:()=>{e.regenerate()},testID:`${r}-regenerate`}):null,R?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:i.edit,variant:"link",size:"sm",onPress:()=>e.startEdit(t.id),testID:`${r}-edit`}):null,g&&e.features.Rating?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:i.rateUp,size:"sm",leftIcon:"like",variant:"Up"===t.rating?"soft":"ghost",accessibilityState:{selected:"Up"===t.rating},onPress:()=>{save("Up")},testID:`${r}-rate-up`}),(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:i.rateDown,size:"sm",leftIcon:"dislike",variant:"Down"===t.rating?"soft":"ghost",accessibilityState:{selected:"Down"===t.rating},onPress:()=>{save("Down")},testID:`${r}-rate-down`}),"failed"===u?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:i.ratingFailed}):null,"saved"===u?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",accessibilityLiveRegion:"polite",children:i.rated}):null]}):null,null!==_.notice?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:_.notice}):null]}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatNudge=ChatNudge;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const LAUNCHER_CLEARANCE=72,EDGE_INSET=16;function ChatNudge({chat:e,labels:t,enabled:r,onActivate:i,bottomOffset:o,position:s,testID:a="chat-nudge"}){const n=e.profile,u=e.features,c=n?(0,_chatCore.resolveNudge)(n,u):null,[l,_]=(0,_react.useState)(!1),[E,b]=(0,_react.useState)(!1);if((0,_react.useEffect)(()=>{if(!r||!c||l)return void b(!1);const e=setTimeout(()=>b(!0),1e3*c.delaySeconds);return()=>clearTimeout(e)},[r,c,l]),!c||!E||l)return null;const d="start"===s?{left:EDGE_INSET}:{right:EDGE_INSET};return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{position:"absolute",bottom:o+LAUNCHER_CLEARANCE,...d,maxWidth:320},pointerEvents:"box-none",children:(0,_jsxRuntime.jsx)(_mobileUi.Banner,{tone:"info",message:c.text,dismissible:!0,onClose:()=>_(!0),actions:[{label:t.launcher,onPress:i}],testID:a})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatOpenTickets=ChatOpenTickets;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const SHOWN_AT_MOST=3;function ChatOpenTickets({chat:e,labels:t,onOpenTicket:i,testID:s="chat-open-tickets"}){const n=(0,_mobileUi.useTheme)();return e.features.OpenTickets&&0!==e.openTickets.length?(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityRole:"list",accessibilityLabel:t.openTickets,style:{gap:n.space.xs},testID:s,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:t.openTickets}),e.openTickets.slice(0,SHOWN_AT_MOST).map(e=>{const n=i?()=>i({ticketId:e.ticketId,number:e.number}):void 0;return(0,_jsxRuntime.jsxs)(_mobileUi.Card,{variant:"outline",padding:"sm",interactive:void 0!==n,onPress:n,testID:`${s}-${e.ticketId}`,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:t.ticketAria(e.number)}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",numberOfLines:1,children:e.subject}),(0,_jsxRuntime.jsx)(_mobileUi.Chip,{size:"sm",variant:"soft",label:e.status})]},e.ticketId)})]}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatScreen=ChatScreen;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_ChatFrame=require("./ChatFrame.js"),_jsxRuntime=require("react/jsx-runtime");function ChatScreen({chat:e,labels:t,renderers:r,layoutParts:a,loader:o="Steps",motion:n="On",pickAttachments:s,onOpenAttachment:i,onOpenTarget:c,onNavigate:l,openTicket:h,handoffHosts:u,keyboardOffset:m,title:d,headerActions:f,testID:b="chat-screen"}){const p=(0,_mobileUi.useTheme)();return null===e.profile||e.features.VisitorChat?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1,backgroundColor:p.colors.bg},testID:b,children:(0,_jsxRuntime.jsx)(_ChatFrame.ChatFrame,{chat:e,labels:(0,_chatCore.mergeLabels)(t),renderers:r,layoutParts:a,loader:o,motion:n,pickAttachments:s,onOpenAttachment:i,onOpenTarget:c,onNavigate:l,openTicket:h,handoffHosts:u,keyboardOffset:m,layout:"screen",title:d,headerActions:f,testID:`${b}-frame`})}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatSheet=ChatSheet;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_ChatFrame=require("./ChatFrame.js"),_ChatNudge=require("./ChatNudge.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_SNAP_POINTS=["92%"];function ChatSheet({chat:e,labels:t,renderers:s,layoutParts:n,loader:o="Steps",motion:a="On",pickAttachments:r,onOpenAttachment:i,onOpenTarget:c,onNavigate:l,keyboardOffset:u,open:f,defaultOpen:h=!1,onOpenChange:m,position:p="end",bottomOffset:_=16,snapPoints:b=DEFAULT_SNAP_POINTS,compact:d=!1,openTicket:g,handoffHosts:C,conversationId:x,testID:N="chat-sheet"}){const j=(0,_mobileUi.useTheme)(),y=(0,_chatCore.mergeLabels)(t),v=void 0!==f,A=v?f:e.open,O=(0,_react.useRef)(null),P=(0,_react.useRef)(null),R=(0,_react.useRef)(!1),T=(0,_react.useRef)(x??null),I=e.setChatVisible;(0,_react.useEffect)(()=>{R.current||(R.current=!0,v||!h||null===e.profile||e.open||e.session.open({trigger:"manual"}))},[v,h,e.profile,e.open,e.session]),(0,_react.useEffect)(()=>{v&&(f&&!e.open&&e.session.open({trigger:"manual"}),!f&&e.open&&e.session.close("button"))},[v,f,e.open,e.session]);const k=(0,_react.useRef)(A);if((0,_react.useEffect)(()=>{if(k.current&&!A){const e=(0,_reactNative.findNodeHandle)(O.current);null!==e&&_reactNative.AccessibilityInfo.setAccessibilityFocus(e)}k.current=A},[A]),(0,_react.useEffect)(()=>{I(A)},[I,A]),(0,_react.useEffect)(()=>{!v&&x&&x!==T.current&&null!==e.profile&&(T.current=x,e.open||(e.session.open({trigger:"manual"}),m?.(!0)))},[v,x,e.profile,e.open,e.session,m]),(0,_react.useEffect)(()=>{if(null!==P.current){if(A)for(const t of e.messages){if("Assistant"!==t.author.kind||t.streaming||P.current.has(t.id))continue;P.current.add(t.id);const e=(0,_chatCore.messagePlainText)(t.parts);""!==e&&_reactNative.AccessibilityInfo.announceForAccessibility(e)}}else P.current=new Set(e.messages.map(e=>e.id))},[e.messages,A]),null===e.profile||!e.features.VisitorChat)return null;const setOpen=t=>{t?e.session.open({trigger:"manual"}):e.session.close("button"),m?.(t)},S="start"===p?"bottomLeft":"bottomRight";return(0,_jsxRuntime.jsxs)(_reactNative.View,{testID:N,children:[A?null:(0,_jsxRuntime.jsx)(_mobileUi.FloatingActionButton,{ref:O,icon:"messages",label:d?void 0:y.launcher,position:S,bottomOffset:_,accessibilityLabel:y.launcher,onPress:()=>setOpen(!0),testID:`${N}-launcher`}),(0,_jsxRuntime.jsx)(_ChatNudge.ChatNudge,{chat:e,labels:y,enabled:!A&&e.features.Nudges,onActivate:()=>setOpen(!0),bottomOffset:_,position:p,testID:`${N}-nudge`}),(0,_jsxRuntime.jsx)(_mobileUi.BottomSheet,{open:A,onClose:()=>setOpen(!1),snapPoints:b,keyboardBehavior:"shift",scrollable:!1,enablePanDownToClose:!0,enableBackdropPress:!0,accessibilityViewIsModal:!0,accessibilityLabel:y.panelTitle,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1,backgroundColor:j.colors.bg},children:(0,_jsxRuntime.jsx)(_ChatFrame.ChatFrame,{chat:e,labels:y,renderers:s,layoutParts:n,loader:o,motion:a,pickAttachments:r,onOpenAttachment:i,onOpenTarget:c,onNavigate:l,openTicket:g,handoffHosts:C,keyboardOffset:u,layout:"sheet",testID:`${N}-frame`})})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatStarters=ChatStarters;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_ChatOpenTickets=require("./ChatOpenTickets.js"),_jsxRuntime=require("react/jsx-runtime");function ChatStarters({chat:e,labels:t,openTicket:r,testID:i="chat-starters"}){const s=(0,_mobileUi.useTheme)(),a=e.profile,n=null!==e.lastConversation,l=(0,_react.useMemo)(()=>a?(0,_chatCore.resolveStart)(a,{pathname:a.screen??"/",returning:n}).greeting:"",[a,n]);if(!a)return null;const c=e.features.Starters&&e.features.BehaviourStarters&&e.starters.length>0,o=e.lastConversation,u=e.features.ResumeLast&&null!==o;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1,justifyContent:"center",alignItems:"center",gap:s.space.md,padding:s.space.md},testID:i,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"h2",align:"center",children:l}),c?(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityRole:"none",accessibilityLabel:t.starters,style:{flexDirection:"row",flexWrap:"wrap",justifyContent:"center",gap:s.space.xs},children:e.starters.map(r=>(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:r.label,onPress:()=>{e.submit(r.message)},accessibilityLabel:`${t.starters}: ${r.label}`,testID:`${i}-${r.id}`},r.id))}):null,u&&o?(0,_jsxRuntime.jsxs)(_mobileUi.Card,{variant:"outline",padding:"sm",onPress:()=>{e.resumeLast()},testID:`${i}-resume`,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:t.resumeLast}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",numberOfLines:1,children:o.title||t.untitled}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:(0,_mobileCore.formatDate)(o.lastActivityDateTimeUtc)})]}):null,(0,_jsxRuntime.jsx)(_ChatOpenTickets.ChatOpenTickets,{chat:e,labels:t,onOpenTicket:r})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatThread=ChatThread;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_AgentByline=require("./AgentByline.js"),_ChatEntrance=require("./ChatEntrance.js"),_ChatMessageActions=require("./ChatMessageActions.js"),_chatShared=require("./chatShared.js"),_ChatLoader=require("./loaders/ChatLoader.js"),_TypingPill=require("./loaders/TypingPill.js"),_index=require("./renderers/index.js"),_NoticePart=require("./renderers/NoticePart.js"),_jsxRuntime=require("react/jsx-runtime");const MINE=new Set(["Visitor","Customer"]),joinedText=e=>e.filter(e=>"Text"===e.kind).map(e=>e.text).join("\n\n"),renderPart=(e,t,s,a,i,r)=>{const n=e[t.kind];if(n)return(0,_react.createElement)(n,{key:r,part:t,message:s,turn:a,pickAttachments:i});const o={kind:"Notice",code:"NeedsNewerApp",text:a.labels.needsNewerApp};return(0,_react.createElement)(_NoticePart.NoticePart,{key:r,part:o,message:s,turn:a})},sameMessage=(e,t)=>e.signature===t.signature&&e.message.id===t.message.id&&e.message.rating===t.message.rating&&e.message.stored===t.message.stored&&e.groupPosition===t.groupPosition&&e.isLast===t.isLast&&e.isLastVisitor===t.isLastVisitor&&e.thinking===t.thinking&&e.streaming===t.streaming&&e.pickAttachments===t.pickAttachments&&e.labels===t.labels&&e.all===t.all&&e.layoutParts===t.layoutParts&&e.chat.session===t.chat.session&&e.chat.features===t.chat.features&&e.chat.onNavigate===t.chat.onNavigate&&e.onNavigate===t.onNavigate&&e.onOpenAttachment===t.onOpenAttachment&&e.onOpenTarget===t.onOpenTarget&&e.openTicket===t.openTicket&&e.handoffHosts===t.handoffHosts;function ThreadMessageView({chat:e,message:t,labels:s,all:a,layoutParts:i,groupPosition:r,isLast:n,isLastVisitor:o,pickAttachments:l,onOpenAttachment:c,onOpenTarget:g,onNavigate:m,openTicket:u,handoffHosts:p,testID:h}){const d=(0,_mobileUi.useTheme)(),_=(0,_chatCore.createTurnApi)(e.session,{messageId:t.id,labels:s,openAttachment:c,openTarget:g??_chatShared.defaultOpenTarget,onNavigate:m??e.onNavigate,openTicket:u,handoffHosts:p});let x=0;const nextSlot=()=>(x+=1,x),y=(0,_jsxRuntime.jsx)(_ChatMessageActions.ChatMessageActions,{chat:e,message:t,labels:s,isLast:n,isLastVisitor:o,testID:`${h}-actions`});if(MINE.has(t.author.kind)){const e=t.parts.filter(e=>"File"===e.kind),i=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:d.space.xs},children:[e.map(e=>renderPart(a,e,t,_,l,`${t.id}-file-${nextSlot()}`)),y]});return(0,_jsxRuntime.jsx)(_mobileUi.MessageBubble,{side:"mine",text:joinedText(t.parts),labels:{you:s.you},groupPosition:r,footer:i,testID:h})}const j="Agent"===t.author.kind,T=t.author.displayName||s.agent,f=(i?i(t):t.parts).map(e=>Array.isArray(e)?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row",flexWrap:"wrap",gap:d.space.xs},children:e.map(e=>renderPart(a,e,t,_,l,`${t.id}-part-${nextSlot()}`))},`${t.id}-group-${nextSlot()}`):renderPart(a,e,t,_,l,`${t.id}-item-${nextSlot()}`)),b=j?[(0,_jsxRuntime.jsx)(_AgentByline.AgentByline,{author:t.author,labels:s},`${t.id}-byline`),...f]:f,A=(0,_chatCore.messagePlainText)(t.parts);return(0,_jsxRuntime.jsx)(_mobileUi.MessageBubble,{side:"theirs",author:j?void 0:s.assistant,text:j?`${s.agentSays(T)} ${A}`:A,streaming:t.streaming,groupPosition:r,footer:y,testID:h,children:b})}const ThreadMessage=(0,_react.memo)(ThreadMessageView,sameMessage),TYPING_ORB_MARK=14,TYPING_ASSISTANT_MARK=8,TypingMark=({size:e})=>{const t=(0,_mobileUi.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{width:e,height:e,borderRadius:t.radius.pill,backgroundColor:t.colors.primary}})},TurnGap=()=>{const e=(0,_mobileUi.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:e.space.lg}})},followNew=()=>!0;function ChatThread({chat:e,labels:t,renderers:s,layoutParts:a,loader:i="Steps",motion:r="On",pickAttachments:n,onOpenAttachment:o,onOpenTarget:l,onNavigate:c,openTicket:g,handoffHosts:m,keyboardAware:u,keyboardOffset:p,empty:h,style:d,testID:_="chat-thread"}){const x=(0,_mobileUi.useTheme)(),y=(0,_react.useMemo)(()=>({..._index.defaultRenderers,...s}),[s]),j=(0,_react.useMemo)(()=>e.messages.filter(e=>!(e.streaming&&0===e.parts.length)).reverse(),[e.messages]),T=e.messages[e.messages.length-1]?.id,f=(0,_react.useRef)(T);(0,_react.useEffect)(()=>{if(T===f.current)return;f.current=T;const s=e.messages[e.messages.length-1];if("Agent"!==s?.author.kind||!s.stored||s.restored||s.streaming)return;const a=s.author.displayName||t.agent;_reactNative.AccessibilityInfo.announceForAccessibility(`${t.agentSays(a)} ${(0,_chatCore.messagePlainText)(s.parts)}`)},[T,e.messages,t]);const b=(0,_react.useMemo)(()=>{for(let t=e.messages.length-1;t>=0;t-=1){const s=e.messages[t];if(s?.stored&&"Visitor"===s.author.kind)return s.id}},[e.messages]),A=e.streaming||null===e.turnError&&!e.stopped?null:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:x.space.xs},testID:`${_}-error`,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:e.turnError?.message??t.stopped}),e.features.Retry?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row"},children:(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:t.retry,variant:"link",size:"sm",onPress:()=>{e.retry()},testID:`${_}-retry`})}):null]}),N=e.thinking&&null!==e.profile?(0,_jsxRuntime.jsx)(_ChatLoader.ChatLoader,{style:i,steps:e.steps,phrases:e.profile.experience.pacing.thinkingPhrases,intervalMs:e.profile.experience.pacing.phraseIntervalMs,announce:t.preparingAnswer(e.profile.assistant.name),motion:r}):null,k=!0===e.pending?.typing?(0,_jsxRuntime.jsx)(_TypingPill.TypingPill,{motion:r,mark:(0,_jsxRuntime.jsx)(TypingMark,{size:"Orb"===i?TYPING_ORB_MARK:TYPING_ASSISTANT_MARK})}):null,R=null!==e.agentTyping&&"WithAgent"===e.conversationState?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:x.space.xs,alignSelf:"flex-start"},children:[(0,_jsxRuntime.jsx)(_TypingPill.TypingPill,{motion:r,mark:(0,_jsxRuntime.jsx)(TypingMark,{size:TYPING_ASSISTANT_MARK})}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",accessibilityLiveRegion:"polite",children:t.agentTyping(e.agentTyping.displayName||t.agent)})]}):null,P=k||N||A||R?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:x.space.sm},children:[k,N,R,A]}):void 0;return(0,_jsxRuntime.jsx)(_mobileUi.MessageList,{messages:j,keyExtractor:e=>e.id,renderMessage:({item:s,groupPosition:i})=>(0,_jsxRuntime.jsx)(_ChatEntrance.ChatEntrance,{animate:!s.restored,children:(0,_jsxRuntime.jsx)(ThreadMessage,{chat:e,message:s,signature:(0,_chatShared.messageSignature)(s),labels:t,all:y,layoutParts:a,groupPosition:i,isLast:s.id===T,isLastVisitor:s.id===b,thinking:e.thinking,streaming:e.streaming,pickAttachments:n,onOpenAttachment:o,onOpenTarget:l,onNavigate:c,openTicket:g,handoffHosts:m,testID:`${_}-${s.id}`})}),getAuthorKey:e=>e.author.kind,getDate:e=>e.createdDateTimeUtc,followNew:followNew,typing:P,empty:h,ItemSeparatorComponent:TurnGap,keyboardAware:u,keyboardOffset:p,accessibilityLabel:t.thread,style:d,testID:_})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ReadAloudButton=ReadAloudButton;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_phoneSpeech=require("./speech/phoneSpeech.js"),_useChatSpeech=require("./useChatSpeech.js"),_jsxRuntime=require("react/jsx-runtime");function ReadAloudButton({chat:e,message:r,labels:t,testID:a="chat-read-aloud"}){const o=(0,_useChatSpeech.useChatSpeech)(e),[i,u]=(0,_react.useState)(!1),[n,s]=(0,_react.useState)(!1),c=(0,_react.useRef)(null),l=(0,_react.useRef)(!0),h=(0,_react.useMemo)(()=>(0,_chatCore.messagePlainText)(r.parts),[r.parts]);if((0,_react.useEffect)(()=>(l.current=!0,()=>{l.current=!1,c.current?.abort()}),[]),!e.features.ReadAloud||null===o||r.streaming||""===h.trim())return null;return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:i?"stop":"volume-high",accessibilityLabel:i?t.readAloudStop:t.readAloud,variant:"ghost",tone:"neutral",size:"sm",onPress:()=>{if(i)return void c.current?.abort();s(!1);const e=new AbortController;c.current=e,u(!0);(async()=>{try{await o.speak(h,{signal:e.signal})}catch(r){if(!l.current||e.signal.aborted)return;s(!0),r instanceof _phoneSpeech.PhoneSpeechError||_mobileCore.Logger.error("[chat] read aloud failed",r)}finally{l.current&&(c.current=null,u(!1))}})()},testID:a}),n?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:t.readAloudFailed}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultOpenTarget=defaultOpenTarget,exports.messageSignature=messageSignature;var _reactNative=require("react-native");function messageSignature(e){let t=0;for(const a of e.parts)"Text"===a.kind&&(t+=a.text.length);return`${e.id}|${e.parts.length}|${t}`}const ABSOLUTE_WEB_URL=/^https?:\/\//i;function defaultOpenTarget(e){ABSOLUTE_WEB_URL.test(e)&&_reactNative.Linking.openURL(e).catch(()=>{})}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"VisitorChat": "src/ChatFrame.tsx",
|
|
3
|
+
"Starters": "src/ChatStarters.tsx",
|
|
4
|
+
"Nudges": "src/ChatSheet.tsx",
|
|
5
|
+
"ResumeLast": "src/ChatStarters.tsx",
|
|
6
|
+
"OpenTickets": "src/ChatOpenTickets.tsx",
|
|
7
|
+
"History": "src/ChatFrame.tsx",
|
|
8
|
+
"Rename": "src/ChatHistory.tsx",
|
|
9
|
+
"Delete": "src/ChatHistory.tsx",
|
|
10
|
+
"SuggestedReplies": "src/renderers/QuickRepliesPart.tsx",
|
|
11
|
+
"Stop": "src/ChatComposer.tsx",
|
|
12
|
+
"Retry": "src/ChatThread.tsx",
|
|
13
|
+
"Edit": "src/ChatMessageActions.tsx",
|
|
14
|
+
"Regenerate": "src/ChatMessageActions.tsx",
|
|
15
|
+
"Sources": "src/renderers/SourcesPart.tsx",
|
|
16
|
+
"Rating": "src/ChatMessageActions.tsx",
|
|
17
|
+
"Copy": "src/ChatMessageActions.tsx",
|
|
18
|
+
"Share": "src/ChatMessageActions.tsx",
|
|
19
|
+
"Print": null,
|
|
20
|
+
"Attachments": "src/ChatComposer.tsx",
|
|
21
|
+
"RichAnswers": null,
|
|
22
|
+
"InputRequests": null,
|
|
23
|
+
"LeadCapture": null,
|
|
24
|
+
"Booking": null,
|
|
25
|
+
"Scripts": null,
|
|
26
|
+
"AiAnswers": null,
|
|
27
|
+
"HumanHandoff": "src/ChatLiveBar.tsx",
|
|
28
|
+
"Dictation": "src/ChatDictationButton.tsx",
|
|
29
|
+
"ReadAloud": "src/ReadAloudButton.tsx",
|
|
30
|
+
"VoiceClips": "src/renderers/VoiceClipPart.tsx",
|
|
31
|
+
"Sounds": "src/useChatHaptics.ts",
|
|
32
|
+
"AutoOpen": null,
|
|
33
|
+
"BehaviourStarters": "src/ChatStarters.tsx",
|
|
34
|
+
"LeadShortcuts": "src/renderers/InputRequestPart.tsx",
|
|
35
|
+
"LeadRecap": "src/renderers/ActionPart.tsx",
|
|
36
|
+
"FigureText": "src/renderers/TextPart.tsx",
|
|
37
|
+
"LinkHandoff": "src/renderers/QuickRepliesPart.tsx",
|
|
38
|
+
"Explain": null,
|
|
39
|
+
"PanelSwitch": null
|
|
40
|
+
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"AgentByline",{enumerable:!0,get:function(){return _AgentByline.AgentByline}}),Object.defineProperty(exports,"CHAT_PUSH_TYPE",{enumerable:!0,get:function(){return _pushOpen.CHAT_PUSH_TYPE}}),Object.defineProperty(exports,"ChatComposer",{enumerable:!0,get:function(){return _ChatComposer.ChatComposer}}),Object.defineProperty(exports,"ChatConversationActions",{enumerable:!0,get:function(){return _ChatConversationActions.ChatConversationActions}}),Object.defineProperty(exports,"ChatDictationButton",{enumerable:!0,get:function(){return _ChatDictationButton.ChatDictationButton}}),Object.defineProperty(exports,"ChatEmbed",{enumerable:!0,get:function(){return _ChatEmbed.ChatEmbed}}),Object.defineProperty(exports,"ChatFooter",{enumerable:!0,get:function(){return _ChatFooter.ChatFooter}}),Object.defineProperty(exports,"ChatHistory",{enumerable:!0,get:function(){return _ChatHistory.ChatHistory}}),Object.defineProperty(exports,"ChatLiveBar",{enumerable:!0,get:function(){return _ChatLiveBar.ChatLiveBar}}),Object.defineProperty(exports,"ChatLoader",{enumerable:!0,get:function(){return _ChatLoader.ChatLoader}}),Object.defineProperty(exports,"ChatMessageActions",{enumerable:!0,get:function(){return _ChatMessageActions.ChatMessageActions}}),Object.defineProperty(exports,"ChatNudge",{enumerable:!0,get:function(){return _ChatNudge.ChatNudge}}),Object.defineProperty(exports,"ChatOpenTickets",{enumerable:!0,get:function(){return _ChatOpenTickets.ChatOpenTickets}}),Object.defineProperty(exports,"ChatScreen",{enumerable:!0,get:function(){return _ChatScreen.ChatScreen}}),Object.defineProperty(exports,"ChatSheet",{enumerable:!0,get:function(){return _ChatSheet.ChatSheet}}),Object.defineProperty(exports,"ChatStarters",{enumerable:!0,get:function(){return _ChatStarters.ChatStarters}}),Object.defineProperty(exports,"ChatThread",{enumerable:!0,get:function(){return _ChatThread.ChatThread}}),Object.defineProperty(exports,"ReadAloudButton",{enumerable:!0,get:function(){return _ReadAloudButton.ReadAloudButton}}),Object.defineProperty(exports,"TypingPill",{enumerable:!0,get:function(){return _TypingPill.TypingPill}}),Object.defineProperty(exports,"chatConversationIdFromPush",{enumerable:!0,get:function(){return _pushOpen.chatConversationIdFromPush}}),Object.defineProperty(exports,"defaultOpenTarget",{enumerable:!0,get:function(){return _chatShared.defaultOpenTarget}}),Object.defineProperty(exports,"defaultRenderers",{enumerable:!0,get:function(){return _index.defaultRenderers}}),Object.defineProperty(exports,"messageSignature",{enumerable:!0,get:function(){return _chatShared.messageSignature}}),Object.defineProperty(exports,"useChat",{enumerable:!0,get:function(){return _useChat.useChat}}),Object.defineProperty(exports,"useChatSpeech",{enumerable:!0,get:function(){return _useChatSpeech.useChatSpeech}});var _AgentByline=require("./AgentByline.js"),_ChatComposer=require("./ChatComposer.js"),_ChatConversationActions=require("./ChatConversationActions.js"),_ChatDictationButton=require("./ChatDictationButton.js"),_ChatEmbed=require("./ChatEmbed.js"),_ChatFooter=require("./ChatFooter.js"),_ChatHistory=require("./ChatHistory.js"),_ChatLiveBar=require("./ChatLiveBar.js"),_ChatMessageActions=require("./ChatMessageActions.js"),_ChatNudge=require("./ChatNudge.js"),_ChatOpenTickets=require("./ChatOpenTickets.js"),_ChatScreen=require("./ChatScreen.js"),_ChatSheet=require("./ChatSheet.js"),_ChatStarters=require("./ChatStarters.js"),_ChatThread=require("./ChatThread.js"),_chatShared=require("./chatShared.js"),_ChatLoader=require("./loaders/ChatLoader.js"),_TypingPill=require("./loaders/TypingPill.js"),_pushOpen=require("./pushOpen.js"),_ReadAloudButton=require("./ReadAloudButton.js"),_index=require("./renderers/index.js"),_useChat=require("./useChat.js"),_useChatSpeech=require("./useChatSpeech.js");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatLoader=ChatLoader;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_OrbLoader=require("./OrbLoader.js"),_PhrasesLoader=require("./PhrasesLoader.js"),_SkeletonLoader=require("./SkeletonLoader.js"),_StepsLoader=require("./StepsLoader.js"),_jsxRuntime=require("react/jsx-runtime");const ANNOUNCE_DELAY_MS=500;function ChatLoader({style:e="Steps",steps:t=[],phrases:r,intervalMs:s,motion:o="On",announce:a,testID:i="chat-loader"}){if(!_chatCore.LOADER_STYLES.includes(e))throw new Error(`ChatLoader style must be one of ${_chatCore.LOADER_STYLES.join(", ")}; got "${e}".`);const c=(0,_mobileUi.useReducedMotion)(),n="Reduced"===o||c,[u,d]=(0,_react.useState)({style:e,count:0});(0,_react.useEffect)(()=>{d({style:e,count:0})},[e]),(0,_react.useEffect)(()=>{if(n)return;const t=setInterval(()=>{d(t=>({style:e,count:(t.style===e?t.count:0)+1}))},s);return()=>clearInterval(t)},[e,s,n]);const l=(0,_react.useRef)(a),[_,L]=(0,_react.useState)("");(0,_react.useEffect)(()=>{const e=setTimeout(()=>L(l.current),ANNOUNCE_DELAY_MS);return()=>clearTimeout(e)},[]);const h=n||u.style!==e?0:u.count,b=(0,_chatCore.loaderView)(e,t,r,h);return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityRole:"progressbar",accessibilityLabel:b.label,accessibilityLiveRegion:"polite",testID:i,children:[loaderBody(e,b,n),(0,_jsxRuntime.jsx)(_mobileUi.Text,{accessibilityLiveRegion:"polite",style:styles.announce,children:_})]})}const loaderBody=(e,t,r)=>{switch(e){case"Steps":return(0,_jsxRuntime.jsx)(_StepsLoader.StepsLoader,{view:t,reduced:r});case"Phrases":return(0,_jsxRuntime.jsx)(_PhrasesLoader.PhrasesLoader,{view:t,reduced:r});case"Orb":return(0,_jsxRuntime.jsx)(_OrbLoader.OrbLoader,{view:t,reduced:r});case"Skeleton":return(0,_jsxRuntime.jsx)(_SkeletonLoader.SkeletonLoader,{view:t,reduced:r})}},styles=_reactNative.StyleSheet.create({announce:{position:"absolute",width:1,height:1,opacity:0,overflow:"hidden"}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OrbLoader=OrbLoader;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const CIRCLE=28,HALO=36,HALO_OPACITY=.6,BREATHE_MIN=.92,BREATHE_MAX=1.04,BREATHE_MS=1600;function OrbLoader({view:e,reduced:t}){const r=(0,_mobileUi.useTheme)(),i=(0,_react.useMemo)(()=>buildStyles(r),[r]),a=(0,_react.useRef)(new _reactNative.Animated.Value(t?1:BREATHE_MIN)).current;return(0,_react.useEffect)(()=>{if(t)return void a.setValue(1);const e=_reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.timing(a,{toValue:BREATHE_MAX,duration:BREATHE_MS,useNativeDriver:!0}),_reactNative.Animated.timing(a,{toValue:BREATHE_MIN,duration:BREATHE_MS,useNativeDriver:!0})]));return e.start(),()=>e.stop()},[a,t]),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:i.row,children:[(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[i.cell,{transform:[{scale:a}]}],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:i.halo}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:i.circle})]}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:e.label})]})}const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center",gap:e.space.sm},cell:{width:36,height:36,alignItems:"center",justifyContent:"center"},halo:{position:"absolute",width:36,height:36,borderRadius:e.radius.pill,backgroundColor:e.colors["primary-soft"],opacity:.6},circle:{width:28,height:28,borderRadius:e.radius.pill,backgroundColor:e.colors.primary}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PhrasesLoader=PhrasesLoader;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const DOT=12,CROSS_FADE_MS=180,LABEL_RISE_PX=8;function PhrasesLoader({view:e,reduced:t}){const r=(0,_mobileUi.useTheme)(),a=(0,_react.useMemo)(()=>buildStyles(r),[r]),i=(0,_react.useRef)(new _reactNative.Animated.Value(1)).current,s=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current,l=(0,_react.useRef)(e.label);return(0,_react.useEffect)(()=>{if(l.current===e.label)return;if(l.current=e.label,t)return i.setValue(1),void s.setValue(0);i.setValue(0),s.setValue(LABEL_RISE_PX);const r=_reactNative.Animated.parallel([_reactNative.Animated.timing(i,{toValue:1,duration:CROSS_FADE_MS,useNativeDriver:!0}),_reactNative.Animated.timing(s,{toValue:0,duration:CROSS_FADE_MS,useNativeDriver:!0})]);return r.start(),()=>r.stop()},[e.label,t,i,s]),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:a.row,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:a.dot}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[a.label,{opacity:i,transform:[{translateY:s}]}],children:(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",numberOfLines:1,children:e.label})})]})}const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center",gap:e.space.sm},dot:{width:12,height:12,borderRadius:e.radius.pill,backgroundColor:e.colors.primary},label:{flexShrink:1}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SkeletonLoader=SkeletonLoader;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const LINE_HEIGHT=10,BLOCK_HEIGHT=44,LINE_WIDTHS=["92%","78%","85%","40%"];function SkeletonLoader({view:e,reduced:t}){const i=(0,_mobileUi.useTheme)(),r=(0,_react.useMemo)(()=>buildStyles(i),[i]),s=t?"none":"shimmer";return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:r.root,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:e.label}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:r.body,accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",children:[LINE_WIDTHS.map(e=>(0,_jsxRuntime.jsx)(_mobileUi.Skeleton,{shape:"rounded",height:LINE_HEIGHT,width:e,variant:s},e)),(0,_jsxRuntime.jsx)(_mobileUi.Skeleton,{shape:"rect",height:BLOCK_HEIGHT,width:"60%",variant:s})]})]})}const buildStyles=e=>_reactNative.StyleSheet.create({root:{gap:e.space.sm},body:{gap:e.space.xs}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.StepsLoader=StepsLoader;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const ICON=16,PENDING_DOT=6,PENDING_OPACITY=.4,ROW_FADE_MS=280,CHECK_MARK="✓";function StepsLoader({view:e,reduced:t}){const i=(0,_mobileUi.useTheme)(),s=(0,_react.useMemo)(()=>buildStyles(i),[i]);return(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityRole:"list",style:s.list,children:keyedSteps(e.steps).map(({key:i,label:r},a)=>(0,_jsxRuntime.jsx)(StepRow,{label:r,state:stateOf(a,e.activeIndex),reduced:t,styles:s},i))})}const keyedSteps=e=>{const t=new Map;return e.map(e=>{const i=(t.get(e)??0)+1;return t.set(e,i),{key:`${e}\0${i}`,label:e}})},stateOf=(e,t)=>e<t?"done":e===t?"active":"pending",StepRow=({label:e,state:t,reduced:i,styles:s})=>{const r=(0,_react.useRef)(new _reactNative.Animated.Value(i?1:0)).current;(0,_react.useEffect)(()=>{if(i)return void r.setValue(1);const e=_reactNative.Animated.timing(r,{toValue:1,duration:280,useNativeDriver:!0});return e.start(),()=>e.stop()},[r,i]);const a="active"===t;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{accessibilityState:{busy:a},style:[s.row,{opacity:r}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:s.icon,children:["done"===t?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:"✓"}):null,a?(0,_jsxRuntime.jsx)(_mobileUi.Spinner,{size:"sm"}):null,"pending"===t?(0,_jsxRuntime.jsx)(_reactNative.View,{style:s.pendingDot}):null]}),a?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",color:"primary",children:e}):(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",style:"pending"===t?s.pendingLabel:void 0,children:e})]})},buildStyles=e=>_reactNative.StyleSheet.create({list:{gap:e.space.sm},row:{flexDirection:"row",alignItems:"center",gap:e.space.sm},icon:{width:16,height:16,alignItems:"center",justifyContent:"center"},pendingDot:{width:6,height:6,borderRadius:e.radius.pill,backgroundColor:e.colors["border-subtle"]},pendingLabel:{opacity:.4}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TypingPill=TypingPill;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const DOT=6,LIFT_PX=4,CYCLE_MS=1200,HALF_MS=300,STEP_MS=140,STILL_OPACITY=[1,.65,.3],DOT_INDEXES=[0,1,2];function TypingPill({motion:e,mark:t}){const i=(0,_mobileUi.useTheme)(),r=(0,_react.useMemo)(()=>buildStyles(i),[i]),a=(0,_mobileUi.useReducedMotion)(),s="Reduced"===e||a;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:r.pill,accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",children:[t,(0,_jsxRuntime.jsx)(_reactNative.View,{style:r.dots,children:DOT_INDEXES.map(e=>(0,_jsxRuntime.jsx)(Dot,{index:e,reduced:s,color:i.colors["text-subtle"],size:DOT},e))})]})}const Dot=({index:e,reduced:t,color:i,size:r})=>{const a=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;(0,_react.useEffect)(()=>{if(t)return void a.setValue(0);const i=_reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.delay(140*e),_reactNative.Animated.timing(a,{toValue:1,duration:300,useNativeDriver:!0}),_reactNative.Animated.timing(a,{toValue:0,duration:300,useNativeDriver:!0}),_reactNative.Animated.delay(600-140*e)]));return i.start(),()=>i.stop()},[a,e,t]);const s={width:r,height:r,borderRadius:r/2,backgroundColor:i};if(t)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[s,{opacity:STILL_OPACITY[e]}]});const n=a.interpolate({inputRange:[0,1],outputRange:[0,-4]});return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[s,{transform:[{translateY:n}]}]})},buildStyles=e=>_reactNative.StyleSheet.create({pill:{flexDirection:"row",alignItems:"center",alignSelf:"flex-start",gap:e.space.sm,backgroundColor:e.colors["bg-subtle"],borderRadius:e.radius.pill,paddingHorizontal:e.space.md,paddingVertical:e.space.sm},dots:{flexDirection:"row",alignItems:"center",gap:e.space.xs}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAT_PUSH_TYPE=void 0,exports.chatConversationIdFromPush=chatConversationIdFromPush;const CHAT_PUSH_TYPE=exports.CHAT_PUSH_TYPE="ChatAgentReplied",CONVERSATION_ID=/^[0-9a-fA-F-]{36}$/;function chatConversationIdFromPush(t){if(!t||t.type!==CHAT_PUSH_TYPE)return null;const e=t.conversationId;return"string"==typeof e&&CONVERSATION_ID.test(e)?e:null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ActionPart=ActionPart;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_NoticePart=require("./NoticePart.js"),_jsxRuntime=require("react/jsx-runtime");const statusLine=(e,t)=>{switch(e.state){case"Confirmed":return t.actionConfirmed;case"Done":return t.actionDone;case"Rejected":return t.actionRejected;case"Expired":return t.actionExpired;case"Failed":return t.actionFailed;case"Repeat":return e.decidedDateTimeUtc?t.actionRepeat((0,_chatCore.formatChatDate)(e.decidedDateTimeUtc)):t.actionDone;case"Pending":return""}};function ActionBody({part:e,turn:t}){const i=(0,_mobileUi.useTheme)(),{labels:n,features:a}=t,[r,o]=(0,_react.useState)(null),[s,c]=(0,_react.useState)(""),[l,u]=(0,_react.useState)(!1),run=async(e,t)=>{o(e),c("");try{await t()}catch(e){const t=e?.message;c("string"==typeof t&&""!==t?t:n.actionFailed),o(null)}},d=(e.editFields??[]).map(e=>({label:e.label,value:e.id})),m=a.LeadRecap&&d.length>0,x=null!==r;return(0,_jsxRuntime.jsxs)(_mobileUi.Card,{variant:"outline",padding:"sm",children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:i.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:e.title}),e.lines.map(e=>(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",children:e},e)),e.consentText?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:e.consentText}):null,"Pending"===e.state?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[""!==s?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:s}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",flexWrap:"wrap",gap:i.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:"confirm"===r?n.actionWorking:e.confirmLabel??n.actionConfirm,loading:"confirm"===r,disabled:x,onPress:()=>{run("confirm",()=>t.confirmAction(e.actionId))}}),(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:e.rejectLabel??n.actionDismiss,variant:"ghost",disabled:x,onPress:()=>{run("reject",()=>t.rejectAction(e.actionId))}}),m?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:n.editSomething,variant:"ghost",disabled:x,onPress:()=>u(!0)}):null]})]}):(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:statusLine(e,n)}),e.note?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:e.note}):null]}),m?(0,_jsxRuntime.jsx)(_mobileUi.OptionSheet,{open:l,onClose:()=>u(!1),title:n.editSomething,options:d,onChange:(e,i)=>{u(!1),t.chooseQuickReply({id:`lead.edit:${String(i.value)}`,label:i.label,action:"Send",target:null,navigateAfterMs:null,icon:null,variant:null})}}):null]})}function ActionPart(e){const{part:t,message:i,turn:n}=e;if("Action"!==t.kind){const e={kind:"Notice",code:"NeedsNewerApp",text:n.labels.needsNewerApp};return(0,_jsxRuntime.jsx)(_NoticePart.NoticePart,{part:e,message:i,turn:n})}return(0,_jsxRuntime.jsx)(ActionBody,{part:t,turn:n},t.actionId)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChartPart=ChartPart;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_FigureText=require("./FigureText.js"),_jsxRuntime=require("react/jsx-runtime");const TONES=["primary","info","success","warning","danger","neutral"],toneAt=e=>TONES[e%TONES.length]??"primary",withPositions=e=>e.reduce((e,t)=>(e.push({key:e.length,item:t}),e),[]),writeValue=(e,t)=>{const i=0!==e&&Math.abs(e)<.001?(0,_FigureText.runsToText)((0,_chatCore.formatFigure)(e)):(0,_mobileCore.formatNumber)(e,{maximumFractionDigits:2});return t?`${i} ${t}`:i};function ChartPart({part:e,turn:t}){const i=(0,_mobileUi.useTheme)();if(e.series.every(e=>0===e.points.length))return null;const{unit:r}=e,a=e.title?(0,_chatCore.toFigureText)(e.title):t.labels.chart,l=e.series.length>1;return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityLabel:a,style:{gap:i.space.sm},children:[e.title?(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:e.title,variant:"label",color:"primary",strong:!0}):null,withPositions(e.series).map(({key:o,item:s})=>{const n=toneAt(o),u=(0,_chatCore.toFigureText)(s.name)||a,c=s.points;if(0===c.length)return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:i.space.xs},children:[l?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:(0,_chatCore.toFigureText)(s.name)}):null,(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:t.labels.chartEmpty})]},o);const m=c.map(e=>e.value),x=m.reduce((e,t)=>Math.min(e,t)),_=m.reduce((e,t)=>Math.max(e,t)),h=c[0],b=c[c.length-1];let g;if("Bar"===e.chartType)g=(0,_jsxRuntime.jsx)(_mobileUi.BarChart,{data:c.map(e=>({label:(0,_chatCore.toFigureText)(e.label),value:e.value})),height:c.length>4?300:240,label:u,formatValue:e=>writeValue(e,r),formatTick:e=>r?`${(0,_mobileCore.formatCompactNumber)(e)} ${r}`:(0,_mobileCore.formatCompactNumber)(e),tone:n});else if("Line"===e.chartType)g=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:i.space.xs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Sparkline,{data:m,height:160,fill:!0,tone:n,label:u,formatLabel:e=>writeValue(e,r)}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",justifyContent:"space-between"},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"tertiary",children:(0,_chatCore.toFigureText)(h.label)}),c.length>1?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"tertiary",children:(0,_chatCore.toFigureText)(b.label)}):null]}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:`${t.labels.chartLow(writeValue(x,r))} ${t.labels.chartHigh(writeValue(_,r))}`})]});else{const e=m.reduce((e,t)=>e+(Number.isFinite(t)&&t>0?t:0),0);g=(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityRole:"list",style:{gap:i.space.sm},children:withPositions(c).map(({key:t,item:i})=>{const a=e>0&&Number.isFinite(i.value)&&i.value>0?i.value/e:0;return(0,_jsxRuntime.jsx)(_mobileUi.ProgressBar,{progress:a,height:8,tone:toneAt(t),label:(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:i.label,variant:"bodySmall"}),valueLabel:`${writeValue(i.value,r)} (${(0,_mobileCore.formatPercent)(a,{maximumFractionDigits:0})})`},t)})})}return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:i.space.xs},children:[l?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:(0,_chatCore.toFigureText)(s.name)}):null,g]},o)})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FigureRuns=FigureRuns,exports.FigureText=FigureText,exports.runsToText=runsToText;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");const sizeStepOf=e=>"caption"===e?"xs":"bodySmall"===e||"label"===e?"sm":"title"===e?"lg":"base",inkFor=(e,t)=>"secondary"===t?e.colors["text-muted"]:"tertiary"===t?e.colors["text-subtle"]:"success"===t||"warning"===t||"danger"===t||"info"===t?e.colors[`${t}-text`]:e.colors["text-body"];function runsToText(e){return e.map(e=>e.text).join("")}const withOffsets=e=>e.reduce((e,t)=>{const r=e[e.length-1],n=r?r.offset+r.run.text.length:0;return e.push({offset:n,run:t}),e},[]);function runNode(e,t,r){if("text"===e.kind)return e.text;const n="sub"===e.kind?Math.round(.4*t):-Math.round(.45*t),i=Math.round(.75*t);return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{transform:[{translateY:n}]},children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontSize:i,lineHeight:i,includeFontPadding:!1,color:r},children:e.text})})}function FigureRuns({runs:e,variant:t="bodySmall",color:r,strong:n=!1,numberOfLines:i,accessibilityLabel:s,testID:o}){const u=(0,_mobileUi.useTheme)(),a=u.text[sizeStepOf(t)].size,c=inkFor(u,r);return(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:t,color:r,weight:n?"semibold":void 0,numberOfLines:i,testID:o,accessibilityLabel:s??runsToText(e),children:withOffsets(e).map(({offset:e,run:t})=>(0,_jsxRuntime.jsx)(_react.Fragment,{children:runNode(t,a,c)},e))})}function FigureText({text:e,variant:t="bodySmall",...r}){const n=(0,_react.useMemo)(()=>(0,_chatCore.toFigureRuns)(e),[e]);return(0,_jsxRuntime.jsx)(FigureRuns,{runs:n,variant:t,...r})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FiguresPart=FiguresPart;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_FigureText=require("./FigureText.js"),_jsxRuntime=require("react/jsx-runtime");const TONE={Neutral:"neutral",Positive:"success",Caution:"warning",Negative:"danger"},withPositions=e=>e.reduce((e,t)=>(e.push({key:e.length,item:t}),e),[]),valueRunsOf=e=>{const t=0!==e.value&&Math.abs(e.value)<.001?(0,_chatCore.formatFigure)(e.value):[{kind:"text",text:(0,_mobileCore.formatNumber)(e.value,{maximumFractionDigits:2})}];return e.unit?[...t,{kind:"text",text:` ${e.unit}`}]:t};function FiguresPart({part:e,turn:t}){const i=(0,_mobileUi.useTheme)();return 0===e.figures.length?null:(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityRole:"list",accessibilityLabel:t.labels.figures,style:{flexDirection:"row",flexWrap:"wrap",gap:i.space.sm},children:withPositions(e.figures).map(({key:e,item:i})=>{const r=valueRunsOf(i),s=t.labels.figureStatus(i.status),u=(0,_chatCore.toFigureText)(i.label);return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexBasis:"48%",flexGrow:1,minWidth:140},children:(0,_jsxRuntime.jsx)(_mobileUi.StatTile,{label:u,value:(0,_jsxRuntime.jsx)(_FigureText.FigureRuns,{runs:r,variant:"title",color:"primary",strong:!0}),tone:TONE[i.status],caption:s||void 0,accessibilityLabel:`${u}: ${(0,_FigureText.runsToText)(r)}${s?`, ${s}`:""}`})},e)})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FilePart=FilePart;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_NoticePart=require("./NoticePart.js"),_jsxRuntime=require("react/jsx-runtime");function FilePart(e){const{part:t,message:i,turn:r}=e;if("File"!==t.kind){const e={kind:"Notice",code:"NeedsNewerApp",text:r.labels.needsNewerApp};return(0,_jsxRuntime.jsx)(_NoticePart.NoticePart,{part:e,message:i,turn:r})}const{openAttachment:s}=r;return(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:`${t.fileName} (${(0,_chatCore.formatFileSize)(t.length)})`,leftIcon:"paperclip",variant:"soft",size:"sm",accessibilityLabel:r.labels.fileOpen(t.fileName),onPress:s?()=>s(t):void 0})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.HandoffPart=HandoffPart;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");function HandoffPart({part:e,turn:i}){const t=(0,_mobileUi.useTheme)(),{labels:a}=i,n=!i.isLast&&("Requested"===e.state||"Waiting"===e.state),s=e.agent?.displayName||a.agent,r=e.agent?.avatarUrl;let o;switch(e.state){case"Requested":o=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",gap:t.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Spinner,{size:"sm"}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",children:a.handoffRequested})]});break;case"Waiting":o=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:t.space.xs},children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",gap:t.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Spinner,{size:"sm"}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:a.handoffWaiting})]}),"number"==typeof e.queuePosition?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:a.handoffQueued(e.queuePosition)}):null,(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:a.handoffQueuedText})]});break;case"Joined":o=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",gap:t.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Avatar,{size:"sm",name:s,source:r?{uri:r}:void 0}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:a.handoffJoined(s)})]});break;case"Left":o=(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",children:a.handoffLeft(s)});break;case"Ended":o=(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",children:a.handoffEnded})}return(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outline",padding:"sm",accessibilityLiveRegion:n?void 0:"polite",children:o})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImagePart=ImagePart;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_RATIO=4/3;function ImagePart({part:e,turn:t}){const i=(0,_mobileUi.useTheme)(),a=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),[s,l]=(0,_react.useState)(!1),r=t.attachmentUrl?t.attachmentUrl(e.attachmentId):void 0;if(void 0===r)return(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:e.alt});const n=null!==e.width&&null!==e.height&&e.width>0&&e.height>0?e.width/e.height:DEFAULT_RATIO,o=(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:e.alt});return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"imagebutton",accessibilityLabel:t.labels.imageOpen(e.alt),onPress:()=>l(!0),children:(0,_jsxRuntime.jsx)(_mobileUi.AuthedImage,{uri:r,contentFit:"cover",accessible:!0,accessibilityLabel:e.alt,style:{width:"100%",aspectRatio:n,maxHeight:320,borderRadius:i.radius.md},fallback:o})}),(0,_jsxRuntime.jsx)(_mobileUi.Modal,{open:s,onClose:()=>l(!1),backdropPressClose:!1,presentation:"fullScreen",accessibilityLabel:e.alt,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1,backgroundColor:i.colors.bg},children:[(0,_jsxRuntime.jsx)(_mobileUi.ZoomableImage,{style:{flex:1},accessibilityLabel:e.alt,children:(0,_jsxRuntime.jsx)(_mobileUi.AuthedImage,{uri:r,contentFit:"contain",style:{flex:1},accessibilityLabel:e.alt})}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{position:"absolute",top:a.top+i.space.sm,right:i.space.sm},children:(0,_jsxRuntime.jsx)(_mobileUi.Button,{variant:"soft",size:"sm",label:t.labels.close,onPress:()=>l(!1)})})]})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.InputRequestPart=InputRequestPart;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_NoticePart=require("./NoticePart.js"),_jsxRuntime=require("react/jsx-runtime");const FIELD_TYPES=new Set(["Email","Phone","Name","Company","Text","LongText","Choice","MultiChoice","TimeSlot","File","Consent"]),isUndrawnField=(e,t)=>!FIELD_TYPES.has(e.type)||"File"===e.type&&!t,fileNameOf=(e,t)=>{const i=e.name;return"string"==typeof i&&""!==i?i:t},slotFormat=new Intl.DateTimeFormat(void 0,{weekday:"short",day:"numeric",month:"short",hour:"numeric",minute:"2-digit"}),selectedIds=e=>""===e?[]:JSON.parse(e),KEYBOARD_TYPES={Email:"email-address",Phone:"phone-pad"},AUTO_COMPLETE={Email:"email",Phone:"tel",Name:"name",Company:"organization"},optionalSuffix=(e,t)=>e.required?"":` (${t.inputOptional})`;function OpenRequest({part:e,turn:t,pickAttachments:i}){const a=(0,_mobileUi.useTheme)(),{labels:s,features:l}=t,[n,r]=(0,_react.useState)({}),[o,u]=(0,_react.useState)({}),[c,d]=(0,_react.useState)(""),[p,m]=(0,_react.useState)(!1),[x,y]=(0,_react.useState)({}),setValue=(e,t)=>r(i=>({...i,[e]:t})),patchUpload=(e,t)=>y(i=>{const a=i[e];return a?{...i,[e]:{...a,...t}}:i}),b=Object.values(x).some(e=>"Ready"!==e.status),leave=async e=>{m(!0),d("");try{await e()}catch{d(s.errorGeneric),m(!1)}},_=l.LeadShortcuts,j=_&&1===e.fields.length&&!e.fields[0].required,h=_&&e.cancellable;return(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outline",padding:"sm",children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:a.space.sm},children:[e.title?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:e.title}):null,_&&e.allowTyped?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:s.typeAnswer}):null,e.fields.map(e=>{const l=n[e.key]??"",r=o[e.key];if("File"===e.type){const l=x[e.key];return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:a.space.xs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:`${e.label}${optionalSuffix(e,s)}`}),l?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:a.space.xxs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:l.fileName,variant:"soft",onRemove:"Uploading"===l.status?void 0:()=>{return t=e.key,y(e=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))),void setValue(t,"");var t},labels:{remove:s.inputRemoveFile}}),"Uploading"===l.status?(0,_jsxRuntime.jsx)(_mobileUi.ProgressBar,{progress:l.progress??void 0,label:s.attachmentUploading,height:4}):null,"Failed"===l.status?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:s.attachmentFailed}):null]}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row"},children:(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:s.inputChooseFile,variant:"soft",size:"sm",leftIcon:"paperclip",disabled:p,onPress:()=>{(async e=>{if(!i)return;let a;try{a=await i()}catch{return void d(s.errorGeneric)}const l=a[0];if(l){y(t=>({...t,[e.key]:{fileName:fileNameOf(l,e.label),status:"Uploading",progress:null}}));try{const i=await t.uploadInputFile(l,t=>patchUpload(e.key,{progress:t}));setValue(e.key,i),patchUpload(e.key,{status:"Ready",progress:null})}catch{setValue(e.key,""),patchUpload(e.key,{status:"Failed",progress:null})}}})(e)}})}),r?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:r}):null]},e.key)}if("MultiChoice"===e.type){const t=(e.options??[]).map(e=>({label:e.label,value:e.id}));return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:a.space.xs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:`${e.label}${optionalSuffix(e,s)}`}),(0,_jsxRuntime.jsx)(_mobileUi.ChoiceGroup,{selectionMode:"multiple",options:t,value:selectedIds(l),onChange:i=>setValue(e.key,JSON.stringify(t.filter(e=>i.includes(e.value)).map(e=>e.value))),accessibilityLabel:e.label,error:r,disabled:p})]},e.key)}if("Choice"===e.type||"TimeSlot"===e.type){const t="TimeSlot"===e.type?(e.slots??[]).map(e=>({label:slotFormat.format(new Date(e.startDateTimeUtc)),value:e.id})):(e.options??[]).map(e=>({label:e.label,value:e.id}));return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:a.space.xs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:`${e.label}${optionalSuffix(e,s)}`}),(0,_jsxRuntime.jsx)(_mobileUi.ChoiceGroup,{options:t,value:""===l?void 0:l,onChange:t=>setValue(e.key,String(t)),accessibilityLabel:e.label,error:r,disabled:p})]},e.key)}return"Consent"===e.type?(0,_jsxRuntime.jsx)(_mobileUi.Checkbox,{checked:"true"===l,onChange:t=>setValue(e.key,t?"true":"false"),label:`${e.consentText??e.label}${optionalSuffix(e,s)}`,error:r,disabled:p},e.key):(0,_jsxRuntime.jsx)(_mobileUi.Input,{label:e.label,placeholder:e.placeholder??void 0,value:l,onChangeText:t=>setValue(e.key,t),maxLength:e.maxLength??void 0,required:e.required,error:r,help:e.required?void 0:s.inputOptional,labelMode:"top",disabled:p,type:"LongText"===e.type?"textarea":e.secret?"password":"input",keyboardType:KEYBOARD_TYPES[e.type]??"default",autoCapitalize:"Email"===e.type?"none":void 0,autoComplete:AUTO_COMPLETE[e.type]},e.key)}),""!==c?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:c}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",flexWrap:"wrap",gap:a.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:p?s.inputSubmitting:e.submitLabel,loading:p,disabled:p||b,onPress:()=>{(async()=>{if(b)return;const i={},a={};for(const t of e.fields){const e=n[t.key]??"";if("Consent"===t.type){const l="true"===e;t.required&&!l&&(i[t.key]=s.inputConsentRequired),a[t.key]=l?"true":"false"}else if("Choice"===t.type||"TimeSlot"===t.type)t.required&&""===e&&(i[t.key]=s.inputRequired),a[t.key]=e;else if("MultiChoice"===t.type){const l=selectedIds(e);t.required&&0===l.length&&(i[t.key]=s.inputRequired),a[t.key]=JSON.stringify(l)}else if("File"===t.type)t.required&&""===e&&(i[t.key]=s.inputRequired),a[t.key]=e;else{const l=e.trim();t.required&&""===l&&(i[t.key]=s.inputRequired),a[t.key]=l}}if(u(i),!(Object.keys(i).length>0)){m(!0),d("");try{const i=await t.answerInput(e.requestId,a);if(i.ok)return;u(i.errors),d(i.message??"")}catch{d(s.errorGeneric)}m(!1)}})()}}),j?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:s.skip,variant:"ghost",disabled:p,onPress:()=>{leave(()=>t.skipInput(e.requestId))}}):null,h?(0,_jsxRuntime.jsx)(_mobileUi.Button,{label:s.cancel,variant:"ghost",disabled:p,onPress:()=>{leave(()=>t.cancelLead())}}):null]})]})})}function InputRequestPart(e){const{part:t,message:i,turn:a,pickAttachments:s}=e,l=void 0!==s;if("InputRequest"!==t.kind||t.fields.some(e=>isUndrawnField(e,l))){const e={kind:"Notice",code:"NeedsNewerApp",text:a.labels.needsNewerApp};return(0,_jsxRuntime.jsx)(_NoticePart.NoticePart,{part:e,message:i,turn:a})}return"Answered"===t.state?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:t.answeredSummary??a.labels.inputAnswered}):"Skipped"===t.state?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:a.labels.inputSkipped}):"Expired"===t.state?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:a.labels.inputExpired}):(0,_jsxRuntime.jsx)(OpenRequest,{part:t,turn:a,pickAttachments:s},t.requestId)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.NoticePart=NoticePart;var _mobileUi=require("@webority/mobile-ui"),_jsxRuntime=require("react/jsx-runtime");function NoticePart({part:e}){const t="ActionLimitReached"===e.code||"AssistantUnavailable"===e.code?"warning":"info";return(0,_jsxRuntime.jsx)(_mobileUi.Banner,{message:e.text,tone:t,accessibilityRole:"summary"})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.QuickRepliesPart=QuickRepliesPart;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_ChatEntrance=require("../ChatEntrance.js"),_chatShared=require("../chatShared.js"),_jsxRuntime=require("react/jsx-runtime");function lookOf(e){switch(e){case"Primary":return{variant:"soft",tone:"primary"};case"Cta":return{variant:"solid",tone:"primary"};default:return{variant:"outline"}}}function QuickRepliesPart({part:e,turn:t}){const i=(0,_mobileUi.useTheme)();if(!t.features.SuggestedReplies||!t.isLast||t.busy||t.handoffPause||0===e.replies.length)return null;const a=t.openTarget,n=void 0!==a&&a!==_chatShared.defaultOpenTarget;return(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityRole:"list",accessibilityLabel:t.labels.quickReplies,style:{flexDirection:"row",flexWrap:"wrap",gap:i.space.xs},children:e.replies.map((e,i)=>{const r=lookOf(e.variant),s=e.icon?e.icon:void 0;if("Send"===e.action)return(0,_jsxRuntime.jsx)(_ChatEntrance.ChatEntrance,{index:i,children:(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:e.label,variant:r.variant,tone:r.tone,leftIcon:s,onPress:()=>t.chooseQuickReply(e)})},e.id);const o=e.target;if("Open"===e.action&&o&&a)return(0,_jsxRuntime.jsx)(_ChatEntrance.ChatEntrance,{index:i,children:(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:e.label,variant:r.variant,tone:r.tone,leftIcon:s,onPress:()=>a(o)})},e.id);if("Navigate"===e.action&&t.features.LinkHandoff&&o&&a){const l=(0,_chatCore.isHandoffTarget)(o,t.handoffHosts)&&(!o.startsWith("/")||n);return(0,_jsxRuntime.jsx)(_ChatEntrance.ChatEntrance,{index:i,children:(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:e.label,variant:r.variant,tone:r.tone,leftIcon:s,onPress:l?()=>t.beginHandoff(e,()=>a(o)):void 0})},e.id)}return null})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RecordCardPart=RecordCardPart;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_FigureText=require("./FigureText.js"),_jsxRuntime=require("react/jsx-runtime");const withPositions=e=>e.reduce((e,t)=>(e.push({key:e.length,item:t}),e),[]);function RecordCardPart({part:e,turn:t}){const i=(0,_mobileUi.useTheme)(),r=void 0!==t.openRecord&&null!==e.target;return(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outline",padding:"sm",accessibilityRole:r?"button":"summary",accessibilityLabel:r?t.labels.recordOpenFor(e.title):void 0,onPress:r?()=>t.openRecord?.(e):void 0,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:i.space.xs},children:[(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:e.title,variant:"label",color:"primary",strong:!0,numberOfLines:2}),e.subtitle?(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:e.subtitle,variant:"bodySmall",color:"secondary"}):null,withPositions(e.fields).map(({key:e,item:t})=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:i.space.xs},children:[e>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:_reactNative.StyleSheet.hairlineWidth,backgroundColor:i.colors["border-subtle"]}}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",justifyContent:"space-between",gap:i.space.sm},children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexShrink:1},children:(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:t.label,variant:"caption",color:"secondary"})}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1,alignItems:"flex-end"},children:(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:(0,_chatCore.formatChatValue)(t.value,t.type,null),variant:"bodySmall",color:"primary"})})]})]},e))]})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SourcesPart=SourcesPart;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_ChatEntrance=require("../ChatEntrance.js"),_jsxRuntime=require("react/jsx-runtime");const HTTP_LINK=/^https?:\/\//i;function SourcesPart({part:e,turn:t}){const r=(0,_mobileUi.useTheme)();if(!t.features.Sources||0===e.sources.length)return null;const s=t.openTarget;return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityRole:"list",accessibilityLabel:t.labels.sources,style:{gap:r.space.xs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:t.labels.sources}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row",flexWrap:"wrap",gap:r.space.xs},children:e.sources.map((e,r)=>{const i=e.url;return(0,_jsxRuntime.jsx)(_ChatEntrance.ChatEntrance,{index:r,children:(0,_jsxRuntime.jsx)(_mobileUi.Chip,{label:`${e.marker} ${e.title}`,variant:"outline",size:"sm",accessibilityLabel:t.labels.openSource(e.title),onPress:null!==i&&HTTP_LINK.test(i)&&s?()=>s(i):void 0})},e.marker)})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TablePart=TablePart;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_FigureText=require("./FigureText.js"),_jsxRuntime=require("react/jsx-runtime");const PREVIEW_ROWS=10,COLUMN_WIDTH={Text:140,Integer:88,Decimal:96,MoneyMinor:112,Percent:80,Date:112,DateTimeUtc:152},NUMERIC=new Set(["Integer","Decimal","MoneyMinor","Percent"]),withPositions=e=>e.reduce((e,t)=>(e.push({key:e.length,item:t}),e),[]);function TablePart({part:e,turn:t}){const i=(0,_mobileUi.useTheme)(),[r,l]=(0,_react.useState)(!1);if(0===e.columns.length||0===e.rows.length)return null;const s=r?e.rows:e.rows.slice(0,PREVIEW_ROWS),a={height:_reactNative.StyleSheet.hairlineWidth,backgroundColor:i.colors["border-subtle"]},n={paddingVertical:i.space.xs,paddingHorizontal:i.space.sm},cellValue=(t,i,r)=>{const l=t[i];return null==l?null:(0,_chatCore.formatChatValue)(l,r.type,e.currency)};return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityLabel:e.title?(0,_chatCore.toFigureText)(e.title):t.labels.table,style:{gap:i.space.xs},children:[e.title?(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:e.title,variant:"label",color:"primary",strong:!0}):null,(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outline",padding:"sm",children:(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!0,nestedScrollEnabled:!0,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row"},children:e.columns.map(e=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:[n,{width:COLUMN_WIDTH[e.type],alignItems:NUMERIC.has(e.type)?"flex-end":"flex-start"}],children:(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:e.label,variant:"label",color:"secondary",strong:!0,numberOfLines:2})},e.key))}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:a}),withPositions(s).map(({key:t,item:i})=>{const r=e.columns.map((e,t)=>`${(0,_chatCore.toFigureText)(e.label)}: ${cellValue(i,t,e)??"-"}`).join(", ");return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessible:!0,accessibilityLabel:r,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",style:{flexDirection:"row"},children:e.columns.map((e,t)=>{const r=cellValue(i,t,e);return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[n,{width:COLUMN_WIDTH[e.type],alignItems:NUMERIC.has(e.type)?"flex-end":"flex-start"}],children:null===r?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"tertiary",children:"-"}):(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:r,variant:"bodySmall",color:"primary",numberOfLines:3})},e.key)})}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:a})]},t)})]})})}),!r&&e.rows.length>PREVIEW_ROWS?(0,_jsxRuntime.jsx)(_mobileUi.Button,{variant:"link",size:"sm",label:t.labels.tableShowAll(e.rows.length),onPress:()=>l(!0)}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TextPart=TextPart;var _chatCore=require("@webority/chat-core"),_mobileUi=require("@webority/mobile-ui"),_FigureText=require("./FigureText.js"),_jsxRuntime=require("react/jsx-runtime");const CITATION=/^\d+$/;function TextPart({part:e,message:t,turn:r}){return"Visitor"===t.author.kind||"Customer"===t.author.kind?r.features.FigureText?(0,_jsxRuntime.jsx)(_FigureText.FigureText,{text:e.text,variant:"body",color:"primary"}):(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"body",children:e.text}):(0,_jsxRuntime.jsx)(_mobileUi.Markdown,{links:"app",headings:"text",resolveLink:e=>r.openTarget&&(0,_chatCore.isHandoffTarget)(e,r.handoffHosts)?e:null,onAppLinkPress:e=>r.openTarget?.(e),isCitation:e=>CITATION.test(e),onOpenCitation:r.openCitation?e=>r.openCitation?.(Number(e)):void 0,children:e.text})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TicketPart=TicketPart;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_jsxRuntime=require("react/jsx-runtime");function TicketPart({part:e,turn:i}){const t=(0,_mobileUi.useTheme)(),{labels:r,openTicket:s}=i,n=r.ticketAria(e.number),a=s?()=>s({ticketId:e.ticketId,number:e.number}):void 0;return(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outline",padding:"sm",interactive:void 0!==a,onPress:a,accessibilityLabel:`${n}, ${e.status}`,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:t.space.xs},children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:t.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:n}),(0,_jsxRuntime.jsx)(_mobileUi.Chip,{size:"sm",variant:"soft",label:e.status})]}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",numberOfLines:2,children:e.subject}),a?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:r.ticketView}):null]})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VoiceClipPart=VoiceClipPart;var _mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_expoAudio=require("../speech/expoAudio.js"),_phoneSpeech=require("../speech/phoneSpeech.js"),_speechText=require("../speech/speechText.js"),_jsxRuntime=require("react/jsx-runtime");const expoFileSystem=()=>{try{return require("expo-file-system")}catch{throw new _phoneSpeech.PhoneSpeechError("Unavailable","Unavailable","Voice files are not available in this app.")}};function VoiceClipPart({part:e,turn:t}){const r=(0,_mobileUi.useTheme)(),i=(0,_react.useMemo)(()=>buildStyles(r),[r]),c=t.labels,[a,n]=(0,_react.useState)(!1),[l,s]=(0,_react.useState)(!1),[o,u]=(0,_react.useState)(!1),[p,h]=(0,_react.useState)(0),_=(0,_react.useRef)(null),m=(0,_react.useRef)(null),x=(0,_react.useRef)(!0);(0,_react.useEffect)(()=>(x.current=!0,()=>{x.current=!1,_.current?.stop(),_.current=null,null!==m.current&&(0,_phoneSpeech.discardFile)(m.current)}),[]);const startPlayback=e=>{const t=(0,_expoAudio.playFile)(e,e=>{x.current&&(h(e.positionMs),u(e.playing))});_.current=t;const release=()=>!(!x.current||_.current!==t)&&(_.current=null,u(!1),!0);t.finished.then(()=>{release()&&h(0)},e=>{release()&&(s(!0),_mobileCore.Logger.error("[chat] voice clip playback failed",e))})},d=t.features.VoiceClips&&!l,b=null!==e.transcript&&""!==e.transcript.trim()?e.transcript:null,y=e.durationMs>0?Math.min(1,Math.max(0,p/e.durationMs)):0;return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessibilityLabel:c.voiceClip,testID:"chat-voice-clip",style:i.root,children:[d?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:i.row,children:[(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:o?"pause":"play",accessibilityLabel:o?c.voiceClipPause:c.voiceClipPlay,variant:"ghost",tone:"neutral",size:"sm",loading:a,onPress:()=>{const r=_.current;null===r?null===m.current?a||(async()=>{n(!0),s(!1);try{const r=new Uint8Array(await t.readAttachment(e.attachmentId)),{File:i,Paths:c}=expoFileSystem(),a=new i(c.cache,`wchat-clip-${e.attachmentId}${(0,_speechText.audioExtension)(r)}`);if(a.create({overwrite:!0}),a.write(r),!x.current)return void(0,_phoneSpeech.discardFile)(a.uri);m.current=a.uri,startPlayback(a.uri)}catch(e){if(!x.current)return;s(!0),_mobileCore.Logger.error("[chat] voice clip failed to load",e)}finally{x.current&&n(!1)}})():startPlayback(m.current):o?r.pause():r.resume()},testID:"chat-voice-clip-play"}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:c.voiceClipTime((0,_speechText.formatClipTime)(p),(0,_speechText.formatClipTime)(e.durationMs))})]}),p>0?(0,_jsxRuntime.jsx)(_mobileUi.ProgressBar,{progress:y,height:4}):null]}):null,null!==b?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"body",children:b}):null,d||null!==b?null:(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:l?"danger":"secondary",accessibilityLiveRegion:"polite",children:c.voiceClipFailed})]})}const buildStyles=e=>_reactNative.StyleSheet.create({root:{gap:e.space.xs},row:{flexDirection:"row",alignItems:"center",gap:e.space.xs}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultRenderers=void 0;var _ActionPart=require("./ActionPart.js"),_ChartPart=require("./ChartPart.js"),_FiguresPart=require("./FiguresPart.js"),_FilePart=require("./FilePart.js"),_HandoffPart=require("./HandoffPart.js"),_ImagePart=require("./ImagePart.js"),_InputRequestPart=require("./InputRequestPart.js"),_NoticePart=require("./NoticePart.js"),_QuickRepliesPart=require("./QuickRepliesPart.js"),_RecordCardPart=require("./RecordCardPart.js"),_SourcesPart=require("./SourcesPart.js"),_TablePart=require("./TablePart.js"),_TextPart=require("./TextPart.js"),_TicketPart=require("./TicketPart.js"),_VoiceClipPart=require("./VoiceClipPart.js");const defaultRenderers=exports.defaultRenderers={Text:_TextPart.TextPart,Sources:_SourcesPart.SourcesPart,QuickReplies:_QuickRepliesPart.QuickRepliesPart,InputRequest:_InputRequestPart.InputRequestPart,Action:_ActionPart.ActionPart,Notice:_NoticePart.NoticePart,Table:_TablePart.TablePart,Chart:_ChartPart.ChartPart,Figures:_FiguresPart.FiguresPart,RecordCard:_RecordCardPart.RecordCardPart,Image:_ImagePart.ImagePart,File:_FilePart.FilePart,Ticket:_TicketPart.TicketPart,Handoff:_HandoffPart.HandoffPart,VoiceClip:_VoiceClipPart.VoiceClipPart};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SpeechRequestError=void 0,exports.synthesizeSpeech=synthesizeSpeech,exports.transcribeClip=transcribeClip;var _chatCore=require("@webority/chat-core"),_speechText=require("./speechText.js");const TRANSCRIBE_API_VERSION="2024-11-15",TTS_OUTPUT_FORMAT="audio-24khz-48kbitrate-mono-mp3",REQUEST_TIMEOUT_MS=15e3,REGION_PATTERN=/^[a-z0-9]+$/;class SpeechRequestError extends Error{constructor(e){super(`Speech request failed with status ${e}`),this.name="SpeechRequestError",this.status=e}}exports.SpeechRequestError=SpeechRequestError;const assertRegion=e=>{if(!REGION_PATTERN.test(e))throw new _chatCore.ChatSpeechError("Unavailable","Speech is not available.")},withTimeout=async(e,t)=>{const r=new AbortController,abort=()=>r.abort(),o=setTimeout(abort,15e3);e?.aborted&&r.abort(),e?.addEventListener("abort",abort);try{return await t(r.signal)}finally{clearTimeout(o),e?.removeEventListener("abort",abort)}};async function transcribeClip(e){const{token:t,uri:r,language:o,signal:s,fetchImpl:i=fetch}=e;assertRegion(t.region);const a=new FormData;return a.append("audio",{uri:r,name:"dictation.m4a",type:"audio/mp4"}),a.append("definition",JSON.stringify({locales:[o]})),withTimeout(s,async e=>{const r=await i(`https://${t.region}.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=${TRANSCRIBE_API_VERSION}`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`},body:a,signal:e});if(!r.ok)throw new SpeechRequestError(r.status);return((await r.json()).combinedPhrases??[]).map(e=>e.text??"").join(" ").trim()})}async function synthesizeSpeech(e){const{token:t,text:r,language:o,voice:s,signal:i,fetchImpl:a=fetch}=e;return assertRegion(t.region),withTimeout(i,async e=>{const i=await a(`https://${t.region}.tts.speech.microsoft.com/cognitiveservices/v1`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/ssml+xml","X-Microsoft-OutputFormat":TTS_OUTPUT_FORMAT,"User-Agent":"webority-chat"},body:(0,_speechText.buildSsml)((0,_speechText.clampSpeakText)(r),o,s),signal:e});if(!i.ok)throw new SpeechRequestError(i.status);return new Uint8Array(await i.arrayBuffer())})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.playFile=playFile,exports.startRecording=startRecording;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core");const expoAudio=()=>require("expo-audio"),expoFileSystem=()=>{try{return require("expo-file-system")}catch{throw new _chatCore.ChatSpeechError("Unavailable","Voice files are not available in this app.")}},RECORDING_OPTIONS={sampleRate:16e3,numberOfChannels:1,bitRate:48e3},setRecordingMode=e=>expoAudio().setAudioModeAsync({allowsRecording:e,playsInSilentMode:!0});async function startRecording(){const e=expoAudio();await setRecordingMode(!0);const t=new e.AudioModule.AudioRecorder({...e.RecordingPresets.HIGH_QUALITY,...RECORDING_OPTIONS});let o=0;try{await t.prepareToRecordAsync(),o=Date.now(),t.record()}catch(e){throw await setRecordingMode(!1),e}return{async stop(){try{await t.stop();const e=t.uri;if(null===e)throw new Error("The recorder finished without a file.");const i=t.getStatus().durationMillis;return{uri:e,durationMs:i>0?i:Date.now()-o}}finally{await setRecordingMode(!1)}},async cancel(){try{t.isRecording&&await t.stop();const e=t.uri;if(null!==e){const{File:t}=expoFileSystem();try{new t(e).delete()}catch(e){_mobileCore.Logger.warn("Removing a cancelled recording failed:",e)}}}finally{await setRecordingMode(!1)}}}}let active=null;function playFile(e,t){active?.stop();let o=null,i=null,r=!1,resolveFinished=()=>{},rejectFinished=()=>{};const a=new Promise((e,t)=>{resolveFinished=e,rejectFinished=t}),release=()=>{i?.remove(),i=null,null!==o&&(o.pause(),o.remove(),o=null),active===n&&(active=null)},n={finished:a,pause:()=>o?.pause(),resume:()=>o?.play(),stop:()=>{r||(r=!0,release(),resolveFinished())}};active=n;const l=expoAudio();return l.setAudioModeAsync({playsInSilentMode:!0,allowsRecording:!1}).then(()=>{if(r)return;const a=l.createAudioPlayer({uri:e});o=a,i=a.addListener("playbackStatusUpdate",e=>{t?.({positionMs:1e3*e.currentTime,durationMs:e.duration>0?1e3*e.duration:null,playing:e.playing}),e.didJustFinish&&(r=!0,release(),resolveFinished())}),a.play()}).catch(e=>{r||(r=!0,release(),rejectFinished(e))}),n}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PhoneSpeechError=void 0,exports.createPhoneSpeech=createPhoneSpeech,exports.discardFile=discardFile;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core"),_permissions=require("@webority/mobile-core/permissions"),_azureSpeech=require("./azureSpeech.js"),_expoAudio=require("./expoAudio.js"),_speechText=require("./speechText.js");class PhoneSpeechError extends _chatCore.ChatSpeechError{constructor(e,r,t){super(e,t),this.name="PhoneSpeechError",this.phoneCode=r}}exports.PhoneSpeechError=PhoneSpeechError;const expoFileSystem=()=>{try{return require("expo-file-system")}catch{throw new PhoneSpeechError("Unavailable","Unavailable","Voice files are not available in this app.")}};function discardFile(e){try{const{File:r}=expoFileSystem();new r(e).delete()}catch(e){_mobileCore.Logger.warn("Removing a temporary audio file failed:",e)}}const failed=e=>e instanceof _chatCore.ChatSpeechError?e:(_mobileCore.Logger.error("[chat] speech failed",e),new PhoneSpeechError("Failed","Failed")),waitForDictation=e=>new Promise(r=>{if(e?.aborted)return void r();const done=()=>{clearTimeout(t),e?.removeEventListener("abort",done),r()},t=setTimeout(done,_speechText.MAX_DICTATION_MS);e?.addEventListener("abort",done)});function createPhoneSpeech(e){const r=e.language??_speechText.DEFAULT_SPEECH_LANGUAGE,t=e.voice??_speechText.DEFAULT_SPEECH_VOICE,o=(0,_chatCore.createSpeechTokenSource)(e.getToken);let a=null,i=null,n=Promise.resolve();const token=async()=>{try{return await o.get()}catch(e){throw failed(e)}},dictate=async e=>{i?.abort();const t=n,o=new AbortController,forward=()=>o.abort();e.signal?.aborted&&o.abort(),e.signal?.addEventListener("abort",forward),i=o;const a=t.then(()=>(async(e,t)=>{const o=await _permissions.Permissions.ensure("microphone").catch(()=>{throw new PhoneSpeechError("Blocked","MicDenied","The microphone permission could not be checked.")});if("blocked"===o)throw new PhoneSpeechError("Blocked","MicBlocked");if("unavailable"===o)throw new PhoneSpeechError("NoMicrophone","MicUnavailable");if("granted"!==o)throw new PhoneSpeechError("Blocked","MicDenied");let a,i;try{a=await(0,_expoAudio.startRecording)()}catch(e){throw failed(e)}e.onStarted?.(),await waitForDictation(t);try{i=await a.stop()}catch(r){throw e.onEnd?.(),failed(r)}if(i.durationMs<_speechText.MIN_DICTATION_MS)return discardFile(i.uri),void e.onEnd?.();try{const t=await(0,_azureSpeech.transcribeClip)({token:await token(),uri:i.uri,language:e.language??r});""!==t&&e.onText?.(t,!0),e.onEnd?.()}catch(r){throw e.onEnd?.(),failed(r)}finally{discardFile(i.uri)}})(e,o.signal));n=a.then(()=>{},()=>{});try{await a}finally{e.signal?.removeEventListener("abort",forward),i===o&&(i=null)}};return{dictation:!0,readAloud:!0,streamsText:!1,startDictation:e=>dictate(e),speak:(e,o)=>(async(e,o)=>{a?.abort();const i=new AbortController;a=i;const forward=()=>i.abort();o.signal?.aborted&&i.abort(),o.signal?.addEventListener("abort",forward);const n=i.signal;let c=null,s=null;const onAbort=()=>{s?.stop()};try{const a=(0,_speechText.clampSpeakText)(e);if(""===a)return;const i=await(0,_azureSpeech.synthesizeSpeech)({token:await token(),text:a,language:o.language??r,voice:t,signal:n});if(n.aborted)return;const{File:l,Paths:h}=expoFileSystem();if(c=new l(h.cache,`wchat-read-${Date.now()}.mp3`),c.create({overwrite:!0}),c.write(i),n.aborted)return;s=(0,_expoAudio.playFile)(c.uri),n.addEventListener("abort",onAbort),n.aborted&&s.stop(),await s.finished}catch(e){if(n.aborted)return;throw failed(e)}finally{n.removeEventListener("abort",onAbort),o.signal?.removeEventListener("abort",forward),a===i&&(a=null),null!==c&&discardFile(c.uri)}})(e,o)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.MIN_DICTATION_MS=exports.MAX_SPEAK_CHARS=exports.MAX_DICTATION_MS=exports.DEFAULT_SPEECH_VOICE=exports.DEFAULT_SPEECH_LANGUAGE=void 0,exports.audioExtension=audioExtension,exports.buildSsml=buildSsml,exports.clampSpeakText=clampSpeakText,exports.escapeSsml=escapeSsml,exports.formatClipTime=formatClipTime,exports.joinDictation=joinDictation;const DEFAULT_SPEECH_LANGUAGE=exports.DEFAULT_SPEECH_LANGUAGE="en-IN",DEFAULT_SPEECH_VOICE=exports.DEFAULT_SPEECH_VOICE="en-IN-NeerjaNeural",MAX_SPEAK_CHARS=exports.MAX_SPEAK_CHARS=4e3,MAX_DICTATION_MS=exports.MAX_DICTATION_MS=6e4,MIN_DICTATION_MS=exports.MIN_DICTATION_MS=600,SENTENCE_END_FLOOR=2e3,ascii=e=>Array.from(e,e=>e.charCodeAt(0)),OGG=ascii("OggS"),RIFF=ascii("RIFF"),EBML=[26,69,223,163],ID3=ascii("ID3"),MPEG_FRAME_HEADERS=[[255,251],[255,243],[255,242]],startsWith=(e,t,s)=>s.every((s,r)=>e[t+r]===s);function audioExtension(e){return startsWith(e,0,OGG)?".ogg":startsWith(e,0,RIFF)?".wav":startsWith(e,0,EBML)?".webm":startsWith(e,0,ID3)||MPEG_FRAME_HEADERS.some(t=>startsWith(e,0,t))?".mp3":".m4a"}function escapeSsml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function buildSsml(e,t,s){return`<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="${escapeSsml(t)}"><voice name="${escapeSsml(s)}">${escapeSsml(e)}</voice></speak>`}function clampSpeakText(e){const t=e.trim();if(t.length<=MAX_SPEAK_CHARS)return t;const s=t.slice(0,MAX_SPEAK_CHARS),r=Math.max(s.lastIndexOf("."),s.lastIndexOf("?"),s.lastIndexOf("!"));return r>SENTENCE_END_FLOOR?s.slice(0,r+1):s}function formatClipTime(e){if(!Number.isFinite(e)||e<0)return"0:00";const t=Math.floor(e/1e3);return`${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}`}function joinDictation(e,t,s){const r=t.trim();if(""===r)return e;return`${e}${e.length>0&&!/\s$/.test(e)?" ":""}${r}`.slice(0,s)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
package/lib/commonjs/useChat.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useChat=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useChat=useChat;var _chatCore=require("@webority/chat-core"),_react=require("react"),_reactNative=require("react-native");const requestFrame=e=>{const t=requestAnimationFrame(e);return()=>cancelAnimationFrame(t)},NO_SUBSCRIPTION=()=>()=>{},IDLE_STATE=Object.freeze({profile:null,profileError:null,features:Object.freeze((0,_chatCore.emptyFeatures)()),conversationId:null,conversationState:"Open",title:null,continuesConversationId:null,messages:[],thinking:!1,steps:[],streaming:!1,loading:!1,loadError:null,turnError:null,stopped:!1,messagesLeftToday:null,editing:null,attachments:[],lastConversation:null,open:!1,muted:!1,greeting:null,starters:[],pending:null,agent:null,agentTyping:null,live:"Off",handoffPending:!1,handoffPause:!1,openTickets:[],draft:null}),IDLE_SESSION=new Proxy({},{get:(e,t)=>{if("symbol"!=typeof t&&"client"!==t&&"toJSON"!==t&&!t.startsWith("$$")){if("getState"===t)return()=>IDLE_STATE;if("subscribe"===t)return NO_SUBSCRIPTION;if("then"!==t)return()=>Promise.resolve()}}});function useChat(e){const{client:t,screen:r,layout:n,narrow:a,conversationId:s,pageContext:c,behaviour:o,prefs:u,getCaptchaToken:i,onEvent:l,onError:f,onNavigate:p}=e,v=JSON.stringify(a??{}),_=(0,_react.useRef)(p);_.current=p;const d=(0,_react.useCallback)(e=>_.current?.(e),[]),m=(0,_react.useRef)(s);m.current=s;const g=(0,_react.useRef)(c);g.current=c;const S=(0,_react.useRef)(o);S.current=o;const h=(0,_react.useRef)(i);h.current=i;const E=(0,_react.useRef)(l);E.current=l;const C=(0,_react.useRef)(f);C.current=f;const y=(0,_react.useRef)(u);y.current=u;const[b,I]=(0,_react.useState)(null);(0,_react.useEffect)(()=>{const e=(0,_chatCore.createChatSession)(t,{screen:r,layout:n,narrow:JSON.parse(v),conversationId:m.current??void 0,pageContext:()=>g.current,behaviour:()=>S.current?.()??null,prefs:y.current,getCaptchaToken:e=>h.current?.(e)??Promise.resolve(null),onEvent:(e,t)=>E.current?.(e,t),onError:e=>C.current?.(e),schedule:requestFrame});return I({client:t,screen:r,layout:n,narrowKey:v,session:e}),()=>e.dispose()},[t,r,n,v]);const N=null!==b&&b.client===t&&b.screen===r&&b.layout===n&&b.narrowKey===v?b.session:IDLE_SESSION,O=(0,_react.useSyncExternalStore)(N.subscribe,N.getState),R=(0,_react.useMemo)(()=>({load:()=>N.load(),submit:e=>N.submit(e),chooseQuickReply:e=>N.chooseQuickReply(e),answerInput:(e,t)=>N.answerInput(e,t),confirmAction:e=>N.confirmAction(e),rejectAction:(e,t)=>N.rejectAction(e,t),stop:()=>N.stop(),retry:()=>N.retry(),regenerate:()=>N.regenerate(),startEdit:e=>N.startEdit(e),cancelEdit:()=>N.cancelEdit(),attach:e=>N.attach(e),removeAttachment:e=>N.removeAttachment(e),openConversation:e=>N.openConversation(e),resumeLast:()=>N.resumeLast(),newConversation:()=>N.newConversation(),rate:(e,t,r)=>N.rate(e,t,r),reset:()=>N.reset(),requestHandoff:e=>N.requestHandoff(e),notifyTyping:()=>N.notifyTyping(),resumeLive:()=>N.resumeLive()}),[N]),A=(0,_react.useRef)(s);(0,_react.useEffect)(()=>{N!==IDLE_SESSION&&s&&s!==A.current&&(A.current=s,N.openConversation(s))},[s,N]);const T=(0,_react.useRef)("active"===_reactNative.AppState.currentState),L=(0,_react.useRef)(!0),k=(0,_react.useCallback)(()=>N.setLiveActive(T.current&&L.current),[N]),w=(0,_react.useCallback)(e=>{L.current=e,k()},[k]);(0,_react.useEffect)(()=>{k();const e=_reactNative.AppState.addEventListener("change",e=>{"active"===e?(T.current=!0,N.endHandoffPause()):T.current=!1,k()});return()=>e.remove()},[k,N]);const P=(0,_react.useCallback)((e,t)=>{E.current?.(e,t)},[]);return{...O,...R,session:N,client:t,emit:P,setChatVisible:w,onNavigate:p?d:void 0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useChatHaptics=useChatHaptics;var _react=require("react"),_reactNative=require("react-native");const isReply=e=>"Assistant"===e.author.kind||"Agent"===e.author.kind&&e.stored;function useChatHaptics(e){const t=(0,_react.useRef)(null),r=e.features.Sounds&&!0===e.profile?.experience.sound.vibrate&&!e.muted,s=e.profile?.experience.sound.vibrateMs??0;(0,_react.useEffect)(()=>{if(null!==t.current)for(const a of e.messages){if(!isReply(a)||a.streaming||t.current.has(a.id))continue;if(t.current.add(a.id),a.restored)continue;const e=a.parts.length>0&&a.parts.every(e=>"Notice"===e.kind),i="Agent"!==a.author.kind||"active"===_reactNative.AppState.currentState;r&&!e&&i&&_reactNative.Vibration.vibrate(s)}else t.current=new Set(e.messages.map(e=>e.id))},[e.messages,r,s])}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useChatSpeech=useChatSpeech;var _react=require("react"),_phoneSpeech=require("./speech/phoneSpeech.js");const adapters=new WeakMap;function useChatSpeech(e){const t=!0===e.profile?.speechAvailable;return(0,_react.useMemo)(()=>{if(!t)return null;let r=adapters.get(e.client);return void 0===r&&(r=(0,_phoneSpeech.createPhoneSpeech)({getToken:()=>e.client.getSpeechToken()}),adapters.set(e.client,r)),r},[e.client,t])}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=useTranscriptActions;var _chatCore=require("@webority/chat-core"),_mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native");const NOTICE_MS=3e3;async function shareMessages(e,r,t,a){const s=(0,_chatCore.buildTranscript)(e,r);if(0===s.entries.length)return;const c=(0,_chatCore.transcriptToText)(s,{heading:t,speakers:t});try{await _reactNative.Share.share({message:c,title:s.title})}catch(e){_mobileCore.Logger.error("[chat] share failed",e),a()}}function useTranscriptActions(e,r){const[t,a]=(0,_react.useState)(null),s=(0,_react.useRef)(null),c=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>(c.current=!0,()=>{c.current=!1,null!==s.current&&clearTimeout(s.current)}),[]);const i=(0,_react.useCallback)(e=>{c.current&&(null!==s.current&&clearTimeout(s.current),a(e),s.current=setTimeout(()=>a(null),NOTICE_MS))},[]),{messages:u,title:n}=e,l=e.features.FigureText,o=(0,_react.useCallback)(e=>shareMessages([e],{labels:r,title:n,figureText:l},!1,()=>i(r.shareFailed)),[r,n,l,i]),h=(0,_react.useCallback)(()=>shareMessages(u,{labels:r,title:n,figureText:l},!0,()=>i(r.shareFailed)),[u,r,n,l,i]);return{canShare:e.features.Share,notice:t,shareReply:o,shareConversation:h}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{Avatar,Text,useTheme}from"@webority/mobile-ui";import{View}from"react-native";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function AgentByline({author:e,labels:s}){const t=useTheme(),i=e.displayName||s.agent,r=e.avatarUrl?{uri:e.avatarUrl}:void 0;return _jsxs(View,{accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",style:{flexDirection:"row",alignItems:"center",gap:t.space.xs},children:[_jsx(Avatar,{size:"xs",name:i,source:r}),_jsx(Text,{variant:"caption",color:"secondary",children:i})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{Permissions}from"@webority/mobile-core/permissions";import{Banner,Chip,Composer,IconButton,ProgressBar,Text,useTheme}from"@webority/mobile-ui";import{useEffect,useMemo,useState}from"react";import{StyleSheet,View}from"react-native";import{ChatDictationButton}from"./ChatDictationButton.js";import{ChatFooter}from"./ChatFooter.js";import{joinDictation}from"./speech/speechText.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const ALLOWANCE_SHOWN_AT=10,DEFAULT_MAX_LENGTH=4e3;export function ChatComposer({chat:e,labels:t,pickAttachments:s,keyboardOffset:a,keyboardAware:o,safeArea:i,testID:n="chat-composer"}){const r=useTheme(),l=useMemo(()=>buildStyles(r),[r]),[c,m]=useState(""),[p,h]=useState(null),d=e.editing;useEffect(()=>{m(d?d.text:"")},[d]);const g=e.attachments,u=g.some(e=>"Uploading"===e.status),f=g.some(e=>"Ready"===e.status),x=e.messagesLeftToday,b=e.profile?.limits.maxMessageLength??4e3,y=void 0!==s&&e.features.Attachments&&(e.profile?.limits.maxAttachments??0)>0,v=e.features.HumanHandoff&&("WaitingForAgent"===e.conversationState||"WithAgent"===e.conversationState),j=y&&!e.handoffPause?_jsx(IconButton,{icon:"paperclip",accessibilityLabel:t.attach,variant:"ghost",tone:"neutral",onPress:()=>{s&&s().then(t=>e.attach(t))},testID:`${n}-attach`}):void 0,_=d?_jsx(Banner,{message:t.editing,accessibilityRole:"summary",actions:[{label:t.cancel,onPress:()=>e.cancelEdit()}],testID:`${n}-editing`}):null,S=g.length>0?_jsx(View,{style:l.tray,testID:`${n}-attachments`,children:_jsx(View,{style:l.row,children:g.map(s=>_jsxs(View,{style:l.item,children:[_jsx(Chip,{label:s.fileName,variant:"soft",onRemove:()=>{e.removeAttachment(s.key)},labels:{remove:t.removeAttachment},removeTestID:`${n}-remove-${s.key}`,testID:`${n}-chip-${s.key}`}),"Uploading"===s.status?_jsx(ProgressBar,{progress:s.progress??void 0,label:t.attachmentUploading,height:4,containerStyle:l.progress}):null,"Failed"===s.status?_jsx(Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:t.attachmentFailed}):null]},s.key))})}):null,w=null!==x&&x<=10?_jsx(Text,{variant:"caption",color:0===x?"danger":"secondary",accessibilityLiveRegion:"polite",testID:`${n}-allowance`,children:t.allowance(x)}):null,A=p?_jsx(Banner,{message:p.message,tone:"danger",dismissible:!0,onClose:()=>h(null),actions:p.openSettings?[{label:t.dictateOpenSettings,onPress:()=>{Permissions.openSettings()}}]:void 0,testID:`${n}-voice-notice`}):null,D=_||S||w||A?_jsxs(_Fragment,{children:[_,S,w,A]}):void 0,C=!u&&(!!f||void 0),T=c.length>0,L=!0===e.profile?.experience.motion;return _jsx(Composer,{onSend:t=>{e.submit(t)},value:c,onChangeText:t=>{m(t),v&&t.length>0&&e.notifyTyping()},loading:e.streaming,ring:L&&(T||e.streaming),sendReveal:L?"onText":"always",onStop:e.features.Stop?()=>e.stop():void 0,stopLabel:t.stop,disabled:0===x||e.handoffPause,maxLength:b,canSend:C,placeholder:e.handoffPause?t.handoffMoment:t.placeholder,accessibilityLabel:t.composer,labels:{send:t.send},leading:j,trailing:_jsx(ChatDictationButton,{chat:e,labels:t,disabled:0===x||e.handoffPause,onText:e=>m(t=>joinDictation(t,e,b)),onNotice:h}),above:D,below:_jsx(ChatFooter,{chat:e,labels:t}),keyboardAware:o,keyboardOffset:a,safeArea:i,testID:n})}const buildStyles=e=>StyleSheet.create({tray:{gap:e.space.xs},row:{flexDirection:"row",flexWrap:"wrap",gap:e.space.xs},item:{gap:e.space.xxs,maxWidth:"100%"},progress:{minWidth:120}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{IconButton,Text}from"@webority/mobile-ui";import useTranscriptActions from"./useTranscriptActions.js";import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";export function ChatConversationActions({chat:s,labels:t,testID:e}){const n=useTranscriptActions(s,t);return n.canShare&&s.messages.some(s=>!s.streaming)?_jsxs(_Fragment,{children:[_jsx(IconButton,{icon:"share",variant:"ghost",size:"sm",accessibilityLabel:t.shareConversation,disabled:s.streaming||s.thinking,onPress:()=>{n.shareConversation()},testID:e}),null!==n.notice?_jsx(Text,{variant:"caption",color:"danger",accessibilityLiveRegion:"polite",children:n.notice}):null]}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{Logger}from"@webority/mobile-core";import{announce,IconButton}from"@webority/mobile-ui";import{useEffect,useRef,useState}from"react";import{PhoneSpeechError}from"./speech/phoneSpeech.js";import{useChatSpeech}from"./useChatSpeech.js";import{jsx as _jsx}from"react/jsx-runtime";export function ChatDictationButton({chat:e,labels:t,disabled:n=!1,onText:i,onNotice:r,testID:o="chat-dictation"}){const c=useChatSpeech(e),[a,s]=useState("idle"),u=useRef(null),l=useRef(!0);if(useEffect(()=>(l.current=!0,()=>{l.current=!1,u.current?.abort()}),[]),!e.features.Dictation||null===c)return null;const d="transcribing"===a,g="listening"===a,p=g?t.dictateStop:d?t.dictateTranscribing:t.dictate;return _jsx(IconButton,{icon:g?"stop":"microphone",accessibilityLabel:p,variant:"ghost",tone:"neutral",active:g,loading:d,disabled:n||d,onPress:()=>{if("listening"===a)return s("transcribing"),void u.current?.abort();if("idle"!==a)return;r(null);const e=new AbortController;u.current=e,s("listening"),announce(t.dictateListening);let n=!1;(async()=>{try{await c.startDictation({signal:e.signal,onText:e=>{l.current&&(n=!0,i(e))},onEnd:()=>{l.current&&s("transcribing")}}),l.current&&!n&&r({message:t.dictationNotHeard,openSettings:!1})}catch(e){if(!l.current)return;e instanceof PhoneSpeechError?r(dictationFailure(e,t)):(Logger.error("[chat] dictation failed",e),r({message:t.dictationFailed,openSettings:!1}))}finally{l.current&&(u.current=null,s("idle"))}})()},testID:o})}const dictationFailure=(e,t)=>{switch(e.phoneCode){case"MicBlocked":return{message:t.dictationBlocked,openSettings:!0};case"MicDenied":return{message:t.dictationBlocked,openSettings:!1};case"MicUnavailable":return{message:t.dictationNoMicrophone,openSettings:!1};default:return{message:t.dictationFailed,openSettings:!1}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{mergeLabels}from"@webority/chat-core";import{radiusOf,useTheme}from"@webority/mobile-ui";import{View}from"react-native";import{ChatFrame}from"./ChatFrame.js";import{jsx as _jsx}from"react/jsx-runtime";export function ChatEmbed({chat:e,labels:t,renderers:r,layoutParts:o,loader:a="Steps",motion:s="On",pickAttachments:i,onOpenAttachment:n,onOpenTarget:m,onNavigate:l,openTicket:d,handoffHosts:h,keyboardOffset:c,title:f,headerActions:b,height:u=520,testID:p="chat-embed"}){const g=useTheme();return null===e.profile||e.features.VisitorChat?_jsx(View,{style:{height:u,overflow:"hidden",borderRadius:radiusOf(g,"lg"),borderWidth:1,borderColor:g.colors["border-subtle"],backgroundColor:g.colors.bg},testID:p,children:_jsx(ChatFrame,{chat:e,labels:mergeLabels(t),renderers:r,layoutParts:o,loader:a,motion:s,pickAttachments:i,onOpenAttachment:n,onOpenTarget:m,onNavigate:l,openTicket:d,handoffHosts:h,keyboardOffset:c,layout:"embedded",title:f,headerActions:b,testID:`${p}-frame`})}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{useReducedMotion}from"@webority/mobile-ui";import{useEffect,useState}from"react";import{Animated}from"react-native";import{jsx as _jsx}from"react/jsx-runtime";const ENTER_MS=260,STAGGER_MS=45,RISE_PX=8,START_SCALE=.98;export function ChatEntrance({index:t=0,animate:e=!0,children:n}){const i=useReducedMotion(),a=!e||i,[r]=useState(()=>new Animated.Value(0));return useEffect(()=>{if(a)return void r.setValue(1);const e=Animated.timing(r,{toValue:1,duration:260,delay:45*t,useNativeDriver:!0});return e.start(),()=>e.stop()},[t,a,r]),_jsx(Animated.View,{style:{opacity:r,transform:[{translateY:r.interpolate({inputRange:[0,1],outputRange:[8,0]})},{scale:r.interpolate({inputRange:[0,1],outputRange:[.98,1]})}]},children:n})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{showsCaptchaNote}from"@webority/chat-core";import{Text,useTheme}from"@webority/mobile-ui";import{Linking,View}from"react-native";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const GOOGLE_PRIVACY="https://policies.google.com/privacy",GOOGLE_TERMS="https://policies.google.com/terms",openLink=e=>{Linking.openURL(e).catch(()=>{})};export function ChatFooter({chat:e,labels:i}){const o=useTheme(),t=e.profile;if(!t)return null;const n=t.footer.disclaimer??i.disclaimer,r=t.footer.privacyUrl,a=t.footer.assuranceText,c=showsCaptchaNote(t);return Boolean(n)||Boolean(r)||Boolean(a)||c?_jsxs(View,{style:{gap:o.space.xxs,alignItems:"center"},children:[n?_jsx(Text,{variant:"caption",color:"tertiary",align:"center",children:n}):null,r?_jsx(Text,{variant:"caption",color:"link",accessibilityRole:"link",onPress:()=>openLink(r),children:i.footerPrivacy}):null,a?_jsx(Text,{variant:"caption",color:"tertiary",align:"center",children:a}):null,c?_jsxs(Text,{variant:"caption",color:"tertiary",align:"center",children:[i.captchaNote," ",_jsx(Text,{variant:"caption",color:"link",accessibilityRole:"link",onPress:()=>openLink(GOOGLE_PRIVACY),children:i.captchaPrivacy})," ",_jsx(Text,{variant:"caption",color:"link",accessibilityRole:"link",onPress:()=>openLink(GOOGLE_TERMS),children:i.captchaTerms})]}):null]}):null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{Banner,Button,Spinner,Text,useTheme}from"@webority/mobile-ui";import{useState}from"react";import{View}from"react-native";import{ChatComposer}from"./ChatComposer.js";import{ChatConversationActions}from"./ChatConversationActions.js";import{ChatHistory}from"./ChatHistory.js";import{ChatLiveBar}from"./ChatLiveBar.js";import{ChatStarters}from"./ChatStarters.js";import{ChatThread}from"./ChatThread.js";import{useChatHaptics}from"./useChatHaptics.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function ChatFrame({chat:e,labels:t,renderers:s,layoutParts:a,loader:r="Steps",motion:o="On",pickAttachments:n,onOpenAttachment:i,onOpenTarget:l,onNavigate:c,openTicket:m,handoffHosts:h,keyboardOffset:d,layout:p,title:u,headerActions:f,testID:C="chat-frame"}){const x=useTheme(),[j,b]=useState(!1);useChatHaptics(e);const y="sheet"!==p,g=null!==e.profile;if(g&&!e.features.VisitorChat)return null;const _=e.messages.length>0,v=!0===e.profile?.experience.sound.muteControl&&e.features.Sounds,I=_jsxs(View,{style:{flexDirection:"row",alignItems:"center",gap:x.space.sm,paddingHorizontal:x.space.md,paddingVertical:x.space.sm,borderBottomWidth:1,borderBottomColor:x.colors["border-subtle"]},children:[_jsxs(View,{style:{flex:1,minWidth:0},children:[_jsx(Text,{variant:"title",accessibilityRole:"header",numberOfLines:1,children:u??e.profile?.assistant.name??t.panelTitle}),_jsx(Text,{variant:"caption",color:"secondary",children:t.headerStatus})]}),f,j?null:_jsx(ChatConversationActions,{chat:e,labels:t,testID:`${C}-conversation-actions`}),v?_jsx(Button,{label:e.muted?t.unmuteSounds:t.muteSounds,variant:"link",size:"sm",accessibilityState:{checked:e.muted},onPress:()=>e.session.setMuted(!e.muted),testID:`${C}-mute`}):null,e.features.History?_jsx(Button,{label:j?t.backToChat:t.history,variant:"link",size:"sm",onPress:()=>b(e=>!e),testID:`${C}-history`}):null,j?null:_jsx(Button,{label:t.newChat,size:"sm",variant:"soft",leftIcon:"add",disabled:!_&&!e.loading,onPress:()=>e.newConversation(),testID:`${C}-new`})]});let k;return k=j?_jsx(ChatHistory,{chat:e,labels:t,onOpen:()=>b(!1),testID:`${C}-history-list`}):e.profileError?_jsx(Banner,{tone:"danger",message:e.profileError.message,accessibilityRole:"alert",testID:`${C}-profile-error`}):!g||e.loading?_jsx(View,{style:{flex:1,alignItems:"center",justifyContent:"center"},children:_jsx(Spinner,{message:t.loadingConversation,testID:`${C}-loading`})}):e.loadError?_jsx(Banner,{tone:"danger",message:e.loadError.message,accessibilityRole:"alert",testID:`${C}-load-error`}):_?_jsx(ChatThread,{chat:e,labels:t,renderers:s,layoutParts:a,loader:r,motion:o,pickAttachments:n,onOpenAttachment:i,onOpenTarget:l,onNavigate:c,openTicket:m,handoffHosts:h,keyboardAware:y,keyboardOffset:d,style:{flex:1},testID:`${C}-thread`}):_jsx(ChatStarters,{chat:e,labels:t,openTicket:m,testID:`${C}-starters`}),_jsxs(View,{style:{flex:1},testID:C,children:[I,j?null:_jsx(ChatLiveBar,{chat:e,labels:t,testID:`${C}-live`}),_jsx(View,{style:{flex:1},children:k}),j?null:_jsx(ChatComposer,{chat:e,labels:t,pickAttachments:n,keyboardOffset:d,keyboardAware:y,testID:`${C}-composer`})]})}
|