@webority/mobile-chat 0.88.1 → 0.89.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/components/ActionCard.js +1 -1
- package/lib/commonjs/components/ChatConversationList.js +1 -1
- package/lib/commonjs/components/ChatLauncher.js +1 -1
- package/lib/commonjs/components/ChatMarkdown.js +1 -1
- package/lib/commonjs/components/ChatMessage.js +1 -1
- package/lib/commonjs/components/ChatScreen.js +1 -1
- package/lib/commonjs/components/ChatThread.js +1 -1
- package/lib/commonjs/components/ReplyRating.js +1 -1
- package/lib/module/components/ActionCard.js +1 -1
- package/lib/module/components/ChatConversationList.js +1 -1
- package/lib/module/components/ChatLauncher.js +1 -1
- package/lib/module/components/ChatMarkdown.js +1 -1
- package/lib/module/components/ChatMessage.js +1 -1
- package/lib/module/components/ChatScreen.js +1 -1
- package/lib/module/components/ChatThread.js +1 -1
- package/lib/module/components/ReplyRating.js +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ActionCard=void 0;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const titleOf=(e,i)=>"Reply"===e.kind?i.actionReply(e.ticketNumber??""):"Reopen"===e.kind?i.actionReopen(e.ticketNumber??""):i.actionRaiseTicket,doneText=(e,i,t)=>"Reply"===e.kind?t.actionDoneReply(i):"Reopen"===e.kind?t.actionDoneReopen(i):t.actionDoneRaiseTicket(i),ActionCard=({action:e,confirmAction:i,onViewTicket:t,labels:n,testID:s="chat-action"})=>{const a=(0,_labels.mergeLabels)(n),o=(0,_mobileUi.useTheme)(),[r,l]=(0,_react.useState)("ready"),[c,d]=(0,_react.useState)(null),[m,x]=(0,_react.useState)("");if("dismissed"===r)return(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",testID:s,children:a.actionDismissed});if("done"===r&&c)return(0,_jsxRuntime.jsx)(_mobileUi.Banner,{variant:"success",message:doneText(e,c.number,a),actions:t?[{label:a.viewTicket,onPress:()=>t(c)}]:void 0,testID:s});const u="sending"===r,_=new Date(e.expiresDateTimeUtc).getTime()<=Date.now(),b="RaiseTicket"===e.kind?[e.category,e.subject].filter(Boolean).join(", "):"";return(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outlined",padding:"sm",testID:s,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:o.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ActionCard=void 0;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const titleOf=(e,i)=>"Reply"===e.kind?i.actionReply(e.ticketNumber??""):"Reopen"===e.kind?i.actionReopen(e.ticketNumber??""):i.actionRaiseTicket,doneText=(e,i,t)=>"Reply"===e.kind?t.actionDoneReply(i):"Reopen"===e.kind?t.actionDoneReopen(i):t.actionDoneRaiseTicket(i),ActionCard=({action:e,confirmAction:i,onViewTicket:t,labels:n,testID:s="chat-action"})=>{const a=(0,_labels.mergeLabels)(n),o=(0,_mobileUi.useTheme)(),[r,l]=(0,_react.useState)("ready"),[c,d]=(0,_react.useState)(null),[m,x]=(0,_react.useState)("");if("dismissed"===r)return(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",testID:s,children:a.actionDismissed});if("done"===r&&c)return(0,_jsxRuntime.jsx)(_mobileUi.Banner,{variant:"success",message:doneText(e,c.number,a),actions:t?[{label:a.viewTicket,onPress:()=>t(c)}]:void 0,testID:s});const u="sending"===r,_=new Date(e.expiresDateTimeUtc).getTime()<=Date.now(),b="RaiseTicket"===e.kind?[e.category,e.subject].filter(Boolean).join(", "):"";return(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outlined",padding:"sm",testID:s,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:o.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",children:titleOf(e,a)}),""!==b&&(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:b}),"Reopen"!==e.kind&&e.body?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",children:e.body}):null,_?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"secondary",children:a.actionExpired}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:a.actionNote}),""!==m&&(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:m}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",flexWrap:"wrap",gap:o.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:a.actionConfirm,size:"sm",loading:u,disabled:u,onPress:()=>{(async()=>{l("sending"),x("");try{d(await i(e.token)),l("done")}catch(e){const i=e?.message;x("string"==typeof i&&i?i:a.actionFailed),l("ready")}})()},testID:`${s}-confirm`}),(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:a.actionDismiss,size:"sm",variant:"outline",disabled:u,onPress:()=>l("dismissed"),testID:`${s}-dismiss`})]})]})]})})};exports.ActionCard=ActionCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatConversationList=void 0;var _mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const messageOf=(e,t)=>{const i=e?.message;return"string"==typeof i&&i?i:t},ChatConversationList=({client:e,onOpen:t,onDeleted:i,pageSize:s=20,labels:a,style:n,testID:l="chat-conversations"})=>{const r=(0,_labels.mergeLabels)(a),o=(0,_mobileUi.useTheme)(),[c,m]=(0,_react.useState)([]),[u,_]=(0,_react.useState)(!0),[b
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatConversationList=void 0;var _mobileCore=require("@webority/mobile-core"),_mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const messageOf=(e,t)=>{const i=e?.message;return"string"==typeof i&&i?i:t},ChatConversationList=({client:e,onOpen:t,onDeleted:i,pageSize:s=20,labels:a,style:n,testID:l="chat-conversations"})=>{const r=(0,_labels.mergeLabels)(a),o=(0,_mobileUi.useTheme)(),[c,m]=(0,_react.useState)([]),[u,_]=(0,_react.useState)(!0),[d,b]=(0,_react.useState)(!1),[x,j]=(0,_react.useState)(""),[g,h]=(0,_react.useState)(!1),[p,v]=(0,_react.useState)(null),[y,f]=(0,_react.useState)(!1),[C,R]=(0,_react.useState)(""),I=r.loadFailed,S=(0,_react.useCallback)(async t=>{_(!0),j("");try{const i=await e.listConversations({skip:t,take:s});m(e=>0===t?i:[...e,...i]),h(i.length===s)}catch(e){j(messageOf(e,I))}finally{_(!1)}},[e,s,I]);(0,_react.useEffect)(()=>{S(0)},[S]);const U=!u&&""===x&&0===c.length;return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:n,contentContainerStyle:{padding:o.space.md,gap:o.space.sm,flexGrow:1},refreshControl:(0,_jsxRuntime.jsx)(_reactNative.RefreshControl,{refreshing:d,onRefresh:()=>{(async()=>{b(!0),await S(0),b(!1)})()}}),accessibilityLabel:r.conversations,testID:l,children:[""!==x&&(0,_jsxRuntime.jsx)(_mobileUi.Banner,{variant:"danger",message:x,actions:[{label:r.retry,onPress:()=>{S(0)}}],testID:`${l}-error`}),U&&(0,_jsxRuntime.jsx)(_mobileUi.EmptyState,{size:"sm",title:r.conversationsEmptyTitle,description:r.conversationsEmptyText,testID:`${l}-empty`}),c.map(e=>(0,_jsxRuntime.jsx)(_mobileUi.Card,{variant:"outlined",padding:"sm",onPress:()=>t(e),accessibilityLabel:e.title||r.untitled,testID:`${l}-item-${e.publicId}`,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",gap:o.space.sm},children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1,minWidth:0},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"label",numberOfLines:1,children:e.title||r.untitled}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",children:(0,_mobileCore.formatDateTime)(e.lastMessageDateTimeUtc)})]}),(0,_jsxRuntime.jsx)(_mobileUi.IconButton,{icon:"trash",tone:"danger",variant:"ghost",accessibilityLabel:r.deleteConversation,onPress:()=>{R(""),v(e)},testID:`${l}-delete-${e.publicId}`})]})},e.publicId)),u&&!d&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:o.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})]}),!u&&g&&(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:r.loadMore,variant:"outline",onPress:()=>{S(c.length)},testID:`${l}-more`}),(0,_jsxRuntime.jsx)(_mobileUi.Dialog,{visible:null!==p,onClose:()=>{y||v(null)},variant:"warning",title:r.deleteConfirmTitle,message:C||r.deleteConfirmMessage,dismissOnAction:!1,actions:[{label:r.cancel,tone:"neutral",disabled:y,onPress:()=>v(null)},{label:r.deleteConfirm,tone:"danger",loading:y,onPress:()=>{(async()=>{if(p){f(!0),R("");try{await e.deleteConversation(p.publicId),m(e=>e.filter(e=>e.publicId!==p.publicId)),i?.(p.publicId),v(null)}catch(e){R(messageOf(e,r.deleteFailed))}finally{f(!1)}}})()}}],testID:`${l}-confirm`})]})};exports.ChatConversationList=ChatConversationList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatLauncher=void 0;var _mobileUi=require("@webority/mobile-ui"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const ChatLauncher=({onPress:e,position:t="end",bottomOffset:o,compact:s=!1,labels:i,testID:r="chat-launcher"})=>{const a=(0,_labels.mergeLabels)(i),n=(0,_mobileUi.useTheme)();return(0,_jsxRuntime.jsx)(_mobileUi.FloatingActionButton,{icon:(0,_jsxRuntime.jsx)(_mobileUi.AppIcon,{name:"messages",color:n.colors
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatLauncher=void 0;var _mobileUi=require("@webority/mobile-ui"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const ChatLauncher=({onPress:e,position:t="end",bottomOffset:o,compact:s=!1,labels:i,testID:r="chat-launcher"})=>{const a=(0,_labels.mergeLabels)(i),n=(0,_mobileUi.useTheme)();return(0,_jsxRuntime.jsx)(_mobileUi.FloatingActionButton,{icon:(0,_jsxRuntime.jsx)(_mobileUi.AppIcon,{name:"messages",color:n.colors["on-primary"]}),label:s?void 0:a.launcher,accessibilityLabel:a.launcher,position:"end"===t?"bottomRight":"bottomLeft",bottomOffset:o,onPress:e,testID:r})};exports.ChatLauncher=ChatLauncher;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatMarkdown=ChatMarkdown;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_markdownParse=require("../markdownParse.js"),_jsxRuntime=require("react/jsx-runtime");const MONO=_reactNative.Platform.select({ios:"Menlo",android:"monospace",default:"monospace"}),createStyles=e=>_reactNative.StyleSheet.create({root:{gap:e.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatMarkdown=ChatMarkdown;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_markdownParse=require("../markdownParse.js"),_jsxRuntime=require("react/jsx-runtime");const MONO=_reactNative.Platform.select({ios:"Menlo",android:"monospace",default:"monospace"}),createStyles=e=>_reactNative.StyleSheet.create({root:{gap:e.space.sm},listRow:{flexDirection:"row",gap:e.space.xs},marker:{minWidth:18},listText:{flex:1},code:{backgroundColor:e.colors["bg-subtle"],borderRadius:e.radius.sm,padding:e.space.sm},codeText:{fontFamily:MONO,fontSize:e.text.sm.size},inlineCode:{fontFamily:MONO,backgroundColor:e.colors["bg-subtle"],color:e.colors["text-body"]},link:{color:e.colors.link,textDecorationLine:"underline"},strong:{fontWeight:e.weight.bold},em:{fontStyle:"italic"},rule:{height:_reactNative.StyleSheet.hairlineWidth,backgroundColor:e.colors.border},table:{borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:e.colors.border},row:{flexDirection:"row"},headerRow:{backgroundColor:e.colors["bg-subtle"]},cell:{minWidth:96,maxWidth:220,padding:e.space.xs,borderRightWidth:_reactNative.StyleSheet.hairlineWidth,borderBottomWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:e.colors.border}});function Inline({tokens:e,styles:t,resolveLink:r,onLinkPress:i}){return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:e.map(e=>{switch(e.type){case"text":return(0,_jsxRuntime.jsx)(_reactNative.Text,{children:e.text},e.key);case"code":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:t.inlineCode,children:e.text},e.key);case"strong":case"em":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:"strong"===e.type?t.strong:t.em,children:(0,_jsxRuntime.jsx)(Inline,{tokens:e.children,styles:t,resolveLink:r,onLinkPress:i})},e.key);default:{const s=i?(0,_markdownParse.linkTarget)(e.href,r):null,n=(0,_jsxRuntime.jsx)(Inline,{tokens:e.children,styles:t});return null!==s&&i?(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityRole:"link",style:t.link,onPress:()=>i(s),children:n},e.key):(0,_jsxRuntime.jsx)(_reactNative.Text,{children:n},e.key)}}})})}function ChatMarkdown({text:e,resolveLink:t,onLinkPress:r,testID:i}){const s=(0,_mobileUi.useTheme)(),n=(0,_react.useMemo)(()=>createStyles(s),[s]),o=(0,_react.useMemo)(()=>(0,_markdownParse.parseBlocks)(e),[e]),inline=e=>(0,_jsxRuntime.jsx)(Inline,{tokens:(0,_markdownParse.parseInline)(e),styles:n,resolveLink:t,onLinkPress:r});return(0,_jsxRuntime.jsx)(_reactNative.View,{style:n.root,testID:i,children:o.map(e=>{switch(e.type){case"paragraph":return(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"body",children:inline(e.lines.join("\n"))},e.key);case"heading":return(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"body",weight:"bold",accessibilityRole:"header",children:inline(e.text)},e.key);case"list":return(0,_jsxRuntime.jsx)(_reactNative.View,{children:e.items.map((t,r)=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:n.listRow,children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"body",style:n.marker,children:e.ordered?`${e.start+r}.`:"•"}),(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"body",style:n.listText,children:inline(t)})]},r))},e.key);case"table":return(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:n.table,children:[e.header,...e.rows].map((t,r)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:[n.row,0===r&&n.headerRow],children:e.header.map((e,i)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:n.cell,children:(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",weight:0===r?"semibold":void 0,children:inline(t[i]??"")})},i))},r))})},e.key);case"code":return(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{horizontal:!0,style:n.code,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{selectable:!0,style:[n.codeText,{color:s.colors["text-body"]}],children:e.text})},e.key);default:return(0,_jsxRuntime.jsx)(_reactNative.View,{style:n.rule},e.key)}})})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatMessage=void 0;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_markdownParse=require("../markdownParse.js"),_ActionCard=require("./ActionCard.js"),_ChatMarkdown=require("./ChatMarkdown.js"),_ReplyRating=require("./ReplyRating.js"),_jsxRuntime=require("react/jsx-runtime");const inlineText=e=>e.map(e=>"text"===e.type||"code"===e.type?e.text:inlineText(e.children)).join(""),spokenText=e=>(0,_markdownParse.parseBlocks)(e).map(e=>{switch(e.type){case"paragraph":return inlineText((0,_markdownParse.parseInline)(e.lines.join(" ")));case"heading":return inlineText((0,_markdownParse.parseInline)(e.text));case"list":return e.items.map(e=>inlineText((0,_markdownParse.parseInline)(e))).join(". ");case"table":return[e.header,...e.rows].map(e=>e.join(", ")).join(". ");case"code":return e.text;default:return""}}).filter(Boolean).join("\n");function ChatMessageView({turn:e,onRate:t,resolveLink:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatMessage=void 0;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_markdownParse=require("../markdownParse.js"),_ActionCard=require("./ActionCard.js"),_ChatMarkdown=require("./ChatMarkdown.js"),_ReplyRating=require("./ReplyRating.js"),_jsxRuntime=require("react/jsx-runtime");const inlineText=e=>e.map(e=>"text"===e.type||"code"===e.type?e.text:inlineText(e.children)).join(""),spokenText=e=>(0,_markdownParse.parseBlocks)(e).map(e=>{switch(e.type){case"paragraph":return inlineText((0,_markdownParse.parseInline)(e.lines.join(" ")));case"heading":return inlineText((0,_markdownParse.parseInline)(e.text));case"list":return e.items.map(e=>inlineText((0,_markdownParse.parseInline)(e))).join(". ");case"table":return[e.header,...e.rows].map(e=>e.join(", ")).join(". ");case"code":return e.text;default:return""}}).filter(Boolean).join("\n");function ChatMessageView({turn:e,onRate:t,resolveLink:s,onLinkPress:i,confirmAction:n,onViewTicket:r,renderReply:a,labels:o,testID:l="chat-message"}){const m=(0,_labels.mergeLabels)(o),u=(0,_mobileUi.useTheme)(),c=e.streaming&&!e.answer,x=(0,_react.useMemo)(()=>e.streaming?e.answer:spokenText(e.answer),[e.streaming,e.answer]),_=(0,_react.useMemo)(()=>({you:m.you}),[m.you]);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:u.space.sm},testID:l,children:[""!==e.question&&(0,_jsxRuntime.jsx)(_mobileUi.MessageBubble,{side:"mine",text:e.question,labels:_,testID:`${l}-question`}),c?(0,_jsxRuntime.jsx)(_mobileUi.TypingIndicator,{label:m.thinking,testID:`${l}-thinking`}):null,""!==e.answer?(0,_jsxRuntime.jsx)(_mobileUi.MessageBubble,{side:"theirs",author:m.assistant,text:x,streaming:e.streaming,testID:`${l}-answer`,children:a?a(e,{streaming:e.streaming}):(0,_jsxRuntime.jsx)(_ChatMarkdown.ChatMarkdown,{text:e.answer,resolveLink:s,onLinkPress:i})}):null,e.error&&(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:e.error.message}),n&&!e.streaming&&e.actions.map(e=>(0,_jsxRuntime.jsx)(_ActionCard.ActionCard,{action:e,confirmAction:n,onViewTicket:r,labels:o},e.token)),t&&e.messageId&&!e.streaming&&(0,_jsxRuntime.jsx)(_ReplyRating.ReplyRating,{rating:e.rating,onRate:(s,i)=>t(e.id,s,i),labels:o})]})}const ChatMessage=exports.ChatMessage=(0,_react.memo)(ChatMessageView);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatScreen=ChatScreen;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_labels=require("../labels.js"),_ChatComposer=require("./ChatComposer.js"),_ChatThread=require("./ChatThread.js"),_jsxRuntime=require("react/jsx-runtime");function ChatScreen({chat:e,title:t,headerActions:i,empty:s,disclaimer:r,maxLength:a=4e3,allowanceThreshold:n=10,rating:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatScreen=ChatScreen;var _mobileUi=require("@webority/mobile-ui"),_reactNative=require("react-native"),_labels=require("../labels.js"),_ChatComposer=require("./ChatComposer.js"),_ChatThread=require("./ChatThread.js"),_jsxRuntime=require("react/jsx-runtime");function ChatScreen({chat:e,title:t,headerActions:i,empty:s,disclaimer:r,maxLength:a=4e3,allowanceThreshold:n=10,rating:l=!0,keyboardOffset:o,testID:m="chat-screen",...d}){const c=(0,_labels.mergeLabels)(d.labels),u=(0,_mobileUi.useTheme)(),x=e.messagesLeftToday,b=void 0===r?c.disclaimer:r;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1,backgroundColor:u.colors.bg},testID:m,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center",gap:u.space.sm,paddingHorizontal:u.space.md,paddingVertical:u.space.sm,borderBottomWidth:1,borderBottomColor:u.colors["border-subtle"]},children:[(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"title",accessibilityRole:"header",style:{flex:1},numberOfLines:1,children:t??c.panelTitle}),i,(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:c.newChat,size:"sm",variant:"soft",leftIcon:"add",disabled:0===e.turns.length&&!e.loading,onPress:e.newConversation,testID:`${m}-new`})]}),e.loading?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1,alignItems:"center",justifyContent:"center"},children:(0,_jsxRuntime.jsx)(_mobileUi.Spinner,{message:c.loadingConversation,testID:`${m}-loading`})}):(0,_jsxRuntime.jsx)(_ChatThread.ChatThread,{turns:e.turns,style:{flex:1},keyboardOffset:o,onRate:l?e.rate:void 0,empty:s??(0,_jsxRuntime.jsx)(_mobileUi.EmptyState,{fill:!0,size:"sm",title:c.emptyTitle,description:c.emptyText,testID:`${m}-empty`}),testID:`${m}-thread`,...d}),(0,_jsxRuntime.jsx)(_ChatComposer.ChatComposer,{onSubmit:t=>{e.submit(t)},busy:e.streaming,disabled:0===x||e.loading,maxLength:a,keyboardOffset:o,labels:d.labels,testID:`${m}-composer`,above:(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[e.loadError&&(0,_jsxRuntime.jsx)(_mobileUi.Banner,{variant:"danger",message:e.loadError.message,testID:`${m}-load-error`}),null!==x&&x<=n&&(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:0===x?"danger":"secondary",accessibilityLiveRegion:"polite",testID:`${m}-allowance`,children:c.allowance(x)})]}),below:b?(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"tertiary",testID:`${m}-disclaimer`,children:b}):null})]})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatThread=ChatThread;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_ChatMessage=require("./ChatMessage.js"),_jsxRuntime=require("react/jsx-runtime");const turnKey=e=>e.id,followTurn=()=>!0,TurnGap=()=>{const e=(0,_mobileUi.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:e.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChatThread=ChatThread;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_ChatMessage=require("./ChatMessage.js"),_jsxRuntime=require("react/jsx-runtime");const turnKey=e=>e.id,followTurn=()=>!0,TurnGap=()=>{const e=(0,_mobileUi.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:e.space.lg}})};function ChatThread({turns:e,empty:t,keyboardAware:r,keyboardOffset:s,style:a,testID:i="chat-thread",...o}){const u=(0,_labels.mergeLabels)(o.labels),l=(0,_react.useMemo)(()=>[...e].reverse(),[e]);return(0,_jsxRuntime.jsx)(_mobileUi.MessageList,{messages:l,keyExtractor:turnKey,renderMessage:({item:e})=>(0,_jsxRuntime.jsx)(_ChatMessage.ChatMessage,{turn:e,testID:`${i}-${e.id}`,...o}),followNew:followTurn,empty:t,ItemSeparatorComponent:TurnGap,keyboardAware:r,keyboardOffset:s,accessibilityLabel:u.thread,style:a,testID:i})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ReplyRating=void 0;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const ReplyRating=({rating:e=null,onRate:t,noteMaxLength:i=1e3,labels:s,testID:a="chat-rating"})=>{const n=(0,_labels.mergeLabels)(s),l=(0,_mobileUi.useTheme)(),[r,o]=(0,_react.useState)(!1),[c,d]=(0,_react.useState)(!1),[u,x]=(0,_react.useState)(""),[m,_]=(0,_react.useState)(""),[p,b]=(0,_react.useState)(!1),save=async(e,i)=>{o(!0),_("");try{await t(e,i),d("Down"===e&&void 0===i),b("Up"===e||void 0!==i),void 0!==i&&x("")}catch{_(n.ratingFailed)}finally{o(!1)}};return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:l.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ReplyRating=void 0;var _mobileUi=require("@webority/mobile-ui"),_react=require("react"),_reactNative=require("react-native"),_labels=require("../labels.js"),_jsxRuntime=require("react/jsx-runtime");const ReplyRating=({rating:e=null,onRate:t,noteMaxLength:i=1e3,labels:s,testID:a="chat-rating"})=>{const n=(0,_labels.mergeLabels)(s),l=(0,_mobileUi.useTheme)(),[r,o]=(0,_react.useState)(!1),[c,d]=(0,_react.useState)(!1),[u,x]=(0,_react.useState)(""),[m,_]=(0,_react.useState)(""),[p,b]=(0,_react.useState)(!1),save=async(e,i)=>{o(!0),_("");try{await t(e,i),d("Down"===e&&void 0===i),b("Up"===e||void 0!==i),void 0!==i&&x("")}catch{_(n.ratingFailed)}finally{o(!1)}};return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:l.space.sm},testID:a,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",flexWrap:"wrap",alignItems:"center",gap:l.space.xs},children:[(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:n.rateUp,size:"sm",leftIcon:"like",variant:"Up"===e?"soft":"ghost",accessibilityState:{selected:"Up"===e,disabled:r},"aria-selected":"Up"===e,"aria-disabled":r,disabled:r,onPress:()=>{save("Up")},testID:`${a}-up`}),(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:n.rateDown,size:"sm",leftIcon:"dislike",variant:"Down"===e?"soft":"ghost",accessibilityState:{selected:"Down"===e,disabled:r},"aria-selected":"Down"===e,"aria-disabled":r,disabled:r,onPress:()=>{save("Down")},testID:`${a}-down`}),p&&!c&&(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"caption",color:"secondary",accessibilityLiveRegion:"polite",children:n.rated})]}),""!==m&&(0,_jsxRuntime.jsx)(_mobileUi.Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:m}),c&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{gap:l.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Input,{label:n.ratingNote,helperText:n.ratingNoteHint,multiline:!0,maxLength:i,value:u,onChangeText:x,testID:`${a}-note`}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",gap:l.space.sm},children:[(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:n.ratingNoteSend,size:"sm",loading:r,disabled:r,onPress:()=>{save("Down",u)},testID:`${a}-note-send`}),(0,_jsxRuntime.jsx)(_mobileUi.Button,{title:n.ratingNoteSkip,size:"sm",variant:"outline",disabled:r,onPress:()=>{d(!1),b(!0)},testID:`${a}-note-skip`})]})]})]})};exports.ReplyRating=ReplyRating;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{Banner,Button,Card,Text,useTheme}from"@webority/mobile-ui";import{useState}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const titleOf=(e,t)=>"Reply"===e.kind?t.actionReply(e.ticketNumber??""):"Reopen"===e.kind?t.actionReopen(e.ticketNumber??""):t.actionRaiseTicket,doneText=(e,t,i)=>"Reply"===e.kind?i.actionDoneReply(t):"Reopen"===e.kind?i.actionDoneReopen(t):i.actionDoneRaiseTicket(t);export const ActionCard=({action:e,confirmAction:t,onViewTicket:i,labels:n,testID:s="chat-action"})=>{const a=mergeLabels(n),o=useTheme(),[r,c]=useState("ready"),[l,d]=useState(null),[m,x]=useState("");if("dismissed"===r)return _jsx(Text,{variant:"bodySmall",color:"secondary",testID:s,children:a.actionDismissed});if("done"===r&&l)return _jsx(Banner,{variant:"success",message:doneText(e,l.number,a),actions:i?[{label:a.viewTicket,onPress:()=>i(l)}]:void 0,testID:s});const p="sending"===r,y=new Date(e.expiresDateTimeUtc).getTime()<=Date.now(),u="RaiseTicket"===e.kind?[e.category,e.subject].filter(Boolean).join(", "):"";return _jsx(Card,{variant:"outlined",padding:"sm",testID:s,children:_jsxs(View,{style:{gap:o.
|
|
1
|
+
"use strict";import{Banner,Button,Card,Text,useTheme}from"@webority/mobile-ui";import{useState}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const titleOf=(e,t)=>"Reply"===e.kind?t.actionReply(e.ticketNumber??""):"Reopen"===e.kind?t.actionReopen(e.ticketNumber??""):t.actionRaiseTicket,doneText=(e,t,i)=>"Reply"===e.kind?i.actionDoneReply(t):"Reopen"===e.kind?i.actionDoneReopen(t):i.actionDoneRaiseTicket(t);export const ActionCard=({action:e,confirmAction:t,onViewTicket:i,labels:n,testID:s="chat-action"})=>{const a=mergeLabels(n),o=useTheme(),[r,c]=useState("ready"),[l,d]=useState(null),[m,x]=useState("");if("dismissed"===r)return _jsx(Text,{variant:"bodySmall",color:"secondary",testID:s,children:a.actionDismissed});if("done"===r&&l)return _jsx(Banner,{variant:"success",message:doneText(e,l.number,a),actions:i?[{label:a.viewTicket,onPress:()=>i(l)}]:void 0,testID:s});const p="sending"===r,y=new Date(e.expiresDateTimeUtc).getTime()<=Date.now(),u="RaiseTicket"===e.kind?[e.category,e.subject].filter(Boolean).join(", "):"";return _jsx(Card,{variant:"outlined",padding:"sm",testID:s,children:_jsxs(View,{style:{gap:o.space.sm},children:[_jsx(Text,{variant:"label",children:titleOf(e,a)}),""!==u&&_jsx(Text,{variant:"bodySmall",color:"secondary",children:u}),"Reopen"!==e.kind&&e.body?_jsx(Text,{variant:"bodySmall",children:e.body}):null,y?_jsx(Text,{variant:"bodySmall",color:"secondary",children:a.actionExpired}):_jsxs(_Fragment,{children:[_jsx(Text,{variant:"caption",color:"secondary",children:a.actionNote}),""!==m&&_jsx(Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:m}),_jsxs(View,{style:{flexDirection:"row",flexWrap:"wrap",gap:o.space.sm},children:[_jsx(Button,{title:a.actionConfirm,size:"sm",loading:p,disabled:p,onPress:()=>{(async()=>{c("sending"),x("");try{d(await t(e.token)),c("done")}catch(e){const t=e?.message;x("string"==typeof t&&t?t:a.actionFailed),c("ready")}})()},testID:`${s}-confirm`}),_jsx(Button,{title:a.actionDismiss,size:"sm",variant:"outline",disabled:p,onPress:()=>c("dismissed"),testID:`${s}-dismiss`})]})]})]})})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{formatDateTime}from"@webority/mobile-core";import{Banner,Button,Card,Dialog,EmptyState,IconButton,Skeleton,Text,useTheme}from"@webority/mobile-ui";import{useCallback,useEffect,useState}from"react";import{RefreshControl,ScrollView,View}from"react-native";import{mergeLabels}from"../labels.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const messageOf=(e,t)=>{const s=e?.message;return"string"==typeof s&&s?s:t};export const ChatConversationList=({client:e,onOpen:t,onDeleted:s,pageSize:i=20,labels:n,style:a,testID:l="chat-conversations"})=>{const
|
|
1
|
+
"use strict";import{formatDateTime}from"@webority/mobile-core";import{Banner,Button,Card,Dialog,EmptyState,IconButton,Skeleton,Text,useTheme}from"@webority/mobile-ui";import{useCallback,useEffect,useState}from"react";import{RefreshControl,ScrollView,View}from"react-native";import{mergeLabels}from"../labels.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const messageOf=(e,t)=>{const s=e?.message;return"string"==typeof s&&s?s:t};export const ChatConversationList=({client:e,onOpen:t,onDeleted:s,pageSize:i=20,labels:n,style:a,testID:l="chat-conversations"})=>{const o=mergeLabels(n),r=useTheme(),[c,m]=useState([]),[d,u]=useState(!0),[p,f]=useState(!1),[g,b]=useState(""),[h,x]=useState(!1),[y,j]=useState(null),[S,I]=useState(!1),[_,v]=useState(""),C=o.loadFailed,D=useCallback(async t=>{u(!0),b("");try{const s=await e.listConversations({skip:t,take:i});m(e=>0===t?s:[...e,...s]),x(s.length===i)}catch(e){b(messageOf(e,C))}finally{u(!1)}},[e,i,C]);useEffect(()=>{D(0)},[D]);const w=!d&&""===g&&0===c.length;return _jsxs(ScrollView,{style:a,contentContainerStyle:{padding:r.space.md,gap:r.space.sm,flexGrow:1},refreshControl:_jsx(RefreshControl,{refreshing:p,onRefresh:()=>{(async()=>{f(!0),await D(0),f(!1)})()}}),accessibilityLabel:o.conversations,testID:l,children:[""!==g&&_jsx(Banner,{variant:"danger",message:g,actions:[{label:o.retry,onPress:()=>{D(0)}}],testID:`${l}-error`}),w&&_jsx(EmptyState,{size:"sm",title:o.conversationsEmptyTitle,description:o.conversationsEmptyText,testID:`${l}-empty`}),c.map(e=>_jsx(Card,{variant:"outlined",padding:"sm",onPress:()=>t(e),accessibilityLabel:e.title||o.untitled,testID:`${l}-item-${e.publicId}`,children:_jsxs(View,{style:{flexDirection:"row",alignItems:"center",gap:r.space.sm},children:[_jsxs(View,{style:{flex:1,minWidth:0},children:[_jsx(Text,{variant:"label",numberOfLines:1,children:e.title||o.untitled}),_jsx(Text,{variant:"caption",color:"secondary",children:formatDateTime(e.lastMessageDateTimeUtc)})]}),_jsx(IconButton,{icon:"trash",tone:"danger",variant:"ghost",accessibilityLabel:o.deleteConversation,onPress:()=>{v(""),j(e)},testID:`${l}-delete-${e.publicId}`})]})},e.publicId)),d&&!p&&_jsxs(View,{style:{gap:r.space.sm},accessibilityElementsHidden:!0,children:[_jsx(Skeleton,{height:56}),_jsx(Skeleton,{height:56}),_jsx(Skeleton,{height:56})]}),!d&&h&&_jsx(Button,{title:o.loadMore,variant:"outline",onPress:()=>{D(c.length)},testID:`${l}-more`}),_jsx(Dialog,{visible:null!==y,onClose:()=>{S||j(null)},variant:"warning",title:o.deleteConfirmTitle,message:_||o.deleteConfirmMessage,dismissOnAction:!1,actions:[{label:o.cancel,tone:"neutral",disabled:S,onPress:()=>j(null)},{label:o.deleteConfirm,tone:"danger",loading:S,onPress:()=>{(async()=>{if(y){I(!0),v("");try{await e.deleteConversation(y.publicId),m(e=>e.filter(e=>e.publicId!==y.publicId)),s?.(y.publicId),j(null)}catch(e){v(messageOf(e,o.deleteFailed))}finally{I(!1)}}})()}}],testID:`${l}-confirm`})]})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{AppIcon,FloatingActionButton,useTheme}from"@webority/mobile-ui";import{mergeLabels}from"../labels.js";import{jsx as _jsx}from"react/jsx-runtime";export const ChatLauncher=({onPress:t,position:o="end",bottomOffset:e,compact:s=!1,labels:n,testID:r="chat-launcher"})=>{const i=mergeLabels(n),a=useTheme();return _jsx(FloatingActionButton,{icon:_jsx(AppIcon,{name:"messages",color:a.colors
|
|
1
|
+
"use strict";import{AppIcon,FloatingActionButton,useTheme}from"@webority/mobile-ui";import{mergeLabels}from"../labels.js";import{jsx as _jsx}from"react/jsx-runtime";export const ChatLauncher=({onPress:t,position:o="end",bottomOffset:e,compact:s=!1,labels:n,testID:r="chat-launcher"})=>{const i=mergeLabels(n),a=useTheme();return _jsx(FloatingActionButton,{icon:_jsx(AppIcon,{name:"messages",color:a.colors["on-primary"]}),label:s?void 0:i.launcher,accessibilityLabel:i.launcher,position:"end"===o?"bottomRight":"bottomLeft",bottomOffset:e,onPress:t,testID:r})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{Text,useTheme}from"@webority/mobile-ui";import{useMemo}from"react";import{Platform,Text as RNText,ScrollView,StyleSheet,View}from"react-native";import{linkTarget,parseBlocks,parseInline}from"../markdownParse.js";import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";const MONO=Platform.select({ios:"Menlo",android:"monospace",default:"monospace"}),createStyles=e=>StyleSheet.create({root:{gap:e.
|
|
1
|
+
"use strict";import{Text,useTheme}from"@webority/mobile-ui";import{useMemo}from"react";import{Platform,Text as RNText,ScrollView,StyleSheet,View}from"react-native";import{linkTarget,parseBlocks,parseInline}from"../markdownParse.js";import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";const MONO=Platform.select({ios:"Menlo",android:"monospace",default:"monospace"}),createStyles=e=>StyleSheet.create({root:{gap:e.space.sm},listRow:{flexDirection:"row",gap:e.space.xs},marker:{minWidth:18},listText:{flex:1},code:{backgroundColor:e.colors["bg-subtle"],borderRadius:e.radius.sm,padding:e.space.sm},codeText:{fontFamily:MONO,fontSize:e.text.sm.size},inlineCode:{fontFamily:MONO,backgroundColor:e.colors["bg-subtle"],color:e.colors["text-body"]},link:{color:e.colors.link,textDecorationLine:"underline"},strong:{fontWeight:e.weight.bold},em:{fontStyle:"italic"},rule:{height:StyleSheet.hairlineWidth,backgroundColor:e.colors.border},table:{borderWidth:StyleSheet.hairlineWidth,borderColor:e.colors.border},row:{flexDirection:"row"},headerRow:{backgroundColor:e.colors["bg-subtle"]},cell:{minWidth:96,maxWidth:220,padding:e.space.xs,borderRightWidth:StyleSheet.hairlineWidth,borderBottomWidth:StyleSheet.hairlineWidth,borderColor:e.colors.border}});function Inline({tokens:e,styles:t,resolveLink:r,onLinkPress:o}){return _jsx(_Fragment,{children:e.map(e=>{switch(e.type){case"text":return _jsx(RNText,{children:e.text},e.key);case"code":return _jsx(RNText,{style:t.inlineCode,children:e.text},e.key);case"strong":case"em":return _jsx(RNText,{style:"strong"===e.type?t.strong:t.em,children:_jsx(Inline,{tokens:e.children,styles:t,resolveLink:r,onLinkPress:o})},e.key);default:{const s=o?linkTarget(e.href,r):null,l=_jsx(Inline,{tokens:e.children,styles:t});return _jsx(RNText,null!==s&&o?{accessibilityRole:"link",style:t.link,onPress:()=>o(s),children:l}:{children:l},e.key)}}})})}export function ChatMarkdown({text:e,resolveLink:t,onLinkPress:r,testID:o}){const s=useTheme(),l=useMemo(()=>createStyles(s),[s]),i=useMemo(()=>parseBlocks(e),[e]),inline=e=>_jsx(Inline,{tokens:parseInline(e),styles:l,resolveLink:t,onLinkPress:r});return _jsx(View,{style:l.root,testID:o,children:i.map(e=>{switch(e.type){case"paragraph":return _jsx(Text,{variant:"body",children:inline(e.lines.join("\n"))},e.key);case"heading":return _jsx(Text,{variant:"body",weight:"bold",accessibilityRole:"header",children:inline(e.text)},e.key);case"list":return _jsx(View,{children:e.items.map((t,r)=>_jsxs(View,{style:l.listRow,children:[_jsx(Text,{variant:"body",style:l.marker,children:e.ordered?`${e.start+r}.`:"•"}),_jsx(Text,{variant:"body",style:l.listText,children:inline(t)})]},r))},e.key);case"table":return _jsx(ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,children:_jsx(View,{style:l.table,children:[e.header,...e.rows].map((t,r)=>_jsx(View,{style:[l.row,0===r&&l.headerRow],children:e.header.map((e,o)=>_jsx(View,{style:l.cell,children:_jsx(Text,{variant:"bodySmall",weight:0===r?"semibold":void 0,children:inline(t[o]??"")})},o))},r))})},e.key);case"code":return _jsx(ScrollView,{horizontal:!0,style:l.code,children:_jsx(RNText,{selectable:!0,style:[l.codeText,{color:s.colors["text-body"]}],children:e.text})},e.key);default:return _jsx(View,{style:l.rule},e.key)}})})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{MessageBubble,Text,TypingIndicator,useTheme}from"@webority/mobile-ui";import{memo,useMemo}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{parseBlocks,parseInline}from"../markdownParse.js";import{ActionCard}from"./ActionCard.js";import{ChatMarkdown}from"./ChatMarkdown.js";import{ReplyRating}from"./ReplyRating.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const inlineText=e=>e.map(e=>"text"===e.type||"code"===e.type?e.text:inlineText(e.children)).join(""),spokenText=e=>parseBlocks(e).map(e=>{switch(e.type){case"paragraph":return inlineText(parseInline(e.lines.join(" ")));case"heading":return inlineText(parseInline(e.text));case"list":return e.items.map(e=>inlineText(parseInline(e))).join(". ");case"table":return[e.header,...e.rows].map(e=>e.join(", ")).join(". ");case"code":return e.text;default:return""}}).filter(Boolean).join("\n");function ChatMessageView({turn:e,onRate:s,resolveLink:t,onLinkPress:n,confirmAction:i,onViewTicket:r,renderReply:a,labels:o,testID:l="chat-message"}){const m=mergeLabels(o),c=useTheme(),p=e.streaming&&!e.answer,g=useMemo(()=>e.streaming?e.answer:spokenText(e.answer),[e.streaming,e.answer]),u=useMemo(()=>({you:m.you}),[m.you]);return _jsxs(View,{style:{gap:c.
|
|
1
|
+
"use strict";import{MessageBubble,Text,TypingIndicator,useTheme}from"@webority/mobile-ui";import{memo,useMemo}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{parseBlocks,parseInline}from"../markdownParse.js";import{ActionCard}from"./ActionCard.js";import{ChatMarkdown}from"./ChatMarkdown.js";import{ReplyRating}from"./ReplyRating.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const inlineText=e=>e.map(e=>"text"===e.type||"code"===e.type?e.text:inlineText(e.children)).join(""),spokenText=e=>parseBlocks(e).map(e=>{switch(e.type){case"paragraph":return inlineText(parseInline(e.lines.join(" ")));case"heading":return inlineText(parseInline(e.text));case"list":return e.items.map(e=>inlineText(parseInline(e))).join(". ");case"table":return[e.header,...e.rows].map(e=>e.join(", ")).join(". ");case"code":return e.text;default:return""}}).filter(Boolean).join("\n");function ChatMessageView({turn:e,onRate:s,resolveLink:t,onLinkPress:n,confirmAction:i,onViewTicket:r,renderReply:a,labels:o,testID:l="chat-message"}){const m=mergeLabels(o),c=useTheme(),p=e.streaming&&!e.answer,g=useMemo(()=>e.streaming?e.answer:spokenText(e.answer),[e.streaming,e.answer]),u=useMemo(()=>({you:m.you}),[m.you]);return _jsxs(View,{style:{gap:c.space.sm},testID:l,children:[""!==e.question&&_jsx(MessageBubble,{side:"mine",text:e.question,labels:u,testID:`${l}-question`}),p?_jsx(TypingIndicator,{label:m.thinking,testID:`${l}-thinking`}):null,""!==e.answer?_jsx(MessageBubble,{side:"theirs",author:m.assistant,text:g,streaming:e.streaming,testID:`${l}-answer`,children:a?a(e,{streaming:e.streaming}):_jsx(ChatMarkdown,{text:e.answer,resolveLink:t,onLinkPress:n})}):null,e.error&&_jsx(Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:e.error.message}),i&&!e.streaming&&e.actions.map(e=>_jsx(ActionCard,{action:e,confirmAction:i,onViewTicket:r,labels:o},e.token)),s&&e.messageId&&!e.streaming&&_jsx(ReplyRating,{rating:e.rating,onRate:(t,n)=>s(e.id,t,n),labels:o})]})}export const ChatMessage=memo(ChatMessageView);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{Banner,Button,EmptyState,Spinner,Text,useTheme}from"@webority/mobile-ui";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{ChatComposer}from"./ChatComposer.js";import{ChatThread}from"./ChatThread.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";export function ChatScreen({chat:e,title:t,headerActions:
|
|
1
|
+
"use strict";import{Banner,Button,EmptyState,Spinner,Text,useTheme}from"@webority/mobile-ui";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{ChatComposer}from"./ChatComposer.js";import{ChatThread}from"./ChatThread.js";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";export function ChatScreen({chat:e,title:t,headerActions:s,empty:r,disclaimer:a,maxLength:o=4e3,allowanceThreshold:i=10,rating:n=!0,keyboardOffset:l,testID:m="chat-screen",...d}){const c=mergeLabels(d.labels),h=useTheme(),p=e.messagesLeftToday,x=void 0===a?c.disclaimer:a;return _jsxs(View,{style:{flex:1,backgroundColor:h.colors.bg},testID:m,children:[_jsxs(View,{style:{flexDirection:"row",alignItems:"center",gap:h.space.sm,paddingHorizontal:h.space.md,paddingVertical:h.space.sm,borderBottomWidth:1,borderBottomColor:h.colors["border-subtle"]},children:[_jsx(Text,{variant:"title",accessibilityRole:"header",style:{flex:1},numberOfLines:1,children:t??c.panelTitle}),s,_jsx(Button,{title:c.newChat,size:"sm",variant:"soft",leftIcon:"add",disabled:0===e.turns.length&&!e.loading,onPress:e.newConversation,testID:`${m}-new`})]}),e.loading?_jsx(View,{style:{flex:1,alignItems:"center",justifyContent:"center"},children:_jsx(Spinner,{message:c.loadingConversation,testID:`${m}-loading`})}):_jsx(ChatThread,{turns:e.turns,style:{flex:1},keyboardOffset:l,onRate:n?e.rate:void 0,empty:r??_jsx(EmptyState,{fill:!0,size:"sm",title:c.emptyTitle,description:c.emptyText,testID:`${m}-empty`}),testID:`${m}-thread`,...d}),_jsx(ChatComposer,{onSubmit:t=>{e.submit(t)},busy:e.streaming,disabled:0===p||e.loading,maxLength:o,keyboardOffset:l,labels:d.labels,testID:`${m}-composer`,above:_jsxs(_Fragment,{children:[e.loadError&&_jsx(Banner,{variant:"danger",message:e.loadError.message,testID:`${m}-load-error`}),null!==p&&p<=i&&_jsx(Text,{variant:"caption",color:0===p?"danger":"secondary",accessibilityLiveRegion:"polite",testID:`${m}-allowance`,children:c.allowance(p)})]}),below:x?_jsx(Text,{variant:"caption",color:"tertiary",testID:`${m}-disclaimer`,children:x}):null})]})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{MessageList,useTheme}from"@webority/mobile-ui";import{useMemo}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{ChatMessage}from"./ChatMessage.js";import{jsx as _jsx}from"react/jsx-runtime";const turnKey=e=>e.id,followTurn=()=>!0,TurnGap=()=>{const e=useTheme();return _jsx(View,{style:{height:e.
|
|
1
|
+
"use strict";import{MessageList,useTheme}from"@webority/mobile-ui";import{useMemo}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{ChatMessage}from"./ChatMessage.js";import{jsx as _jsx}from"react/jsx-runtime";const turnKey=e=>e.id,followTurn=()=>!0,TurnGap=()=>{const e=useTheme();return _jsx(View,{style:{height:e.space.lg}})};export function ChatThread({turns:e,empty:t,keyboardAware:s,keyboardOffset:r,style:a,testID:o="chat-thread",...m}){const i=mergeLabels(m.labels),n=useMemo(()=>[...e].reverse(),[e]);return _jsx(MessageList,{messages:n,keyExtractor:turnKey,renderMessage:({item:e})=>_jsx(ChatMessage,{turn:e,testID:`${o}-${e.id}`,...m}),followNew:followTurn,empty:t,ItemSeparatorComponent:TurnGap,keyboardAware:s,keyboardOffset:r,accessibilityLabel:i.thread,style:a,testID:o})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{Button,Input,Text,useTheme}from"@webority/mobile-ui";import{useState}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export const ReplyRating=({rating:e=null,onRate:t,noteMaxLength:s=1e3,labels:i,testID:a="chat-rating"})=>{const n=mergeLabels(i),o=useTheme(),[l,r]=useState(!1),[c,d]=useState(!1),[p,x]=useState(""),[g
|
|
1
|
+
"use strict";import{Button,Input,Text,useTheme}from"@webority/mobile-ui";import{useState}from"react";import{View}from"react-native";import{mergeLabels}from"../labels.js";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export const ReplyRating=({rating:e=null,onRate:t,noteMaxLength:s=1e3,labels:i,testID:a="chat-rating"})=>{const n=mergeLabels(i),o=useTheme(),[l,r]=useState(!1),[c,d]=useState(!1),[p,x]=useState(""),[m,g]=useState(""),[u,b]=useState(!1),save=async(e,s)=>{r(!0),g("");try{await t(e,s),d("Down"===e&&void 0===s),b("Up"===e||void 0!==s),void 0!==s&&x("")}catch{g(n.ratingFailed)}finally{r(!1)}};return _jsxs(View,{style:{gap:o.space.sm},testID:a,children:[_jsxs(View,{style:{flexDirection:"row",flexWrap:"wrap",alignItems:"center",gap:o.space.xs},children:[_jsx(Button,{title:n.rateUp,size:"sm",leftIcon:"like",variant:"Up"===e?"soft":"ghost",accessibilityState:{selected:"Up"===e,disabled:l},"aria-selected":"Up"===e,"aria-disabled":l,disabled:l,onPress:()=>{save("Up")},testID:`${a}-up`}),_jsx(Button,{title:n.rateDown,size:"sm",leftIcon:"dislike",variant:"Down"===e?"soft":"ghost",accessibilityState:{selected:"Down"===e,disabled:l},"aria-selected":"Down"===e,"aria-disabled":l,disabled:l,onPress:()=>{save("Down")},testID:`${a}-down`}),u&&!c&&_jsx(Text,{variant:"caption",color:"secondary",accessibilityLiveRegion:"polite",children:n.rated})]}),""!==m&&_jsx(Text,{variant:"bodySmall",color:"danger",accessibilityLiveRegion:"polite",children:m}),c&&_jsxs(View,{style:{gap:o.space.sm},children:[_jsx(Input,{label:n.ratingNote,helperText:n.ratingNoteHint,multiline:!0,maxLength:s,value:p,onChangeText:x,testID:`${a}-note`}),_jsxs(View,{style:{flexDirection:"row",gap:o.space.sm},children:[_jsx(Button,{title:n.ratingNoteSend,size:"sm",loading:l,disabled:l,onPress:()=>{save("Down",p)},testID:`${a}-note-send`}),_jsx(Button,{title:n.ratingNoteSkip,size:"sm",variant:"outline",disabled:l,onPress:()=>{d(!1),b(!0)},testID:`${a}-note-skip`})]})]})]})};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/mobile-chat",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.89.0",
|
|
4
4
|
"description": "AI assistant chat for Webority React Native apps: a streaming chat client, a store-agnostic chat hook, and the chat screen, thread, composer, past chats, reply rating and support action cards, built on @webority/mobile-ui.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"react-native": ">=0.81.0",
|
|
47
47
|
"react-native-keyboard-controller": ">=1.21.9",
|
|
48
48
|
"react-native-safe-area-context": ">=5.4.0",
|
|
49
|
-
"@webority/mobile-ui": "0.
|
|
50
|
-
"@webority/mobile-core": "0.
|
|
49
|
+
"@webority/mobile-ui": "0.89.0",
|
|
50
|
+
"@webority/mobile-core": "0.89.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependenciesMeta": {},
|
|
53
53
|
"publishConfig": {
|
|
@@ -93,9 +93,9 @@
|
|
|
93
93
|
"react-test-renderer": "19.2.8",
|
|
94
94
|
"rimraf": "6.1.3",
|
|
95
95
|
"typescript": "5.9.3",
|
|
96
|
-
"@webority/mobile-
|
|
97
|
-
"@webority/mobile-
|
|
98
|
-
"@webority/mobile-
|
|
96
|
+
"@webority/mobile-dev": "0.0.0",
|
|
97
|
+
"@webority/mobile-core": "0.89.0",
|
|
98
|
+
"@webority/mobile-ui": "0.89.0"
|
|
99
99
|
},
|
|
100
100
|
"scripts": {
|
|
101
101
|
"build": "bob build && node ../mobile-dev/scripts/minify-lib.mjs",
|