{"version":3,"sources":["webpack:///./app/javascript/dashboard/mixins/time.js","webpack:///./app/javascript/shared/helpers/markdownIt/link.js","webpack:///./app/javascript/shared/helpers/MessageFormatter.js","webpack:///./app/javascript/shared/mixins/messageFormatterMixin.js","webpack:///./app/javascript/dashboard/components/widgets/Avatar.vue?f06b","webpack:///./app/javascript/dashboard/components/widgets/Thumbnail.vue?f7f7","webpack:///./app/javascript/dashboard/assets/images/chatwoot_bot.png","webpack:///./app/javascript/widget/components/ChatInputWrap.vue?ef32","webpack:///./app/javascript/widget/components/ChatFooter.vue?7736","webpack:///./app/javascript/widget/components/UserMessageBubble.vue?2576","webpack:///./app/javascript/widget/components/ImageBubble.vue?bb91","webpack:///./app/javascript/widget/components/FileBubble.vue?5656","webpack:///./app/javascript/shared/components/CardButton.vue?f88c","webpack:///./app/javascript/shared/components/ChatCard.vue?a947","webpack:///./app/javascript/shared/components/ChatForm.vue?6a87","webpack:///./app/javascript/shared/components/ChatOption.vue?76c0","webpack:///./app/javascript/shared/components/ChatOptions.vue?41f0","webpack:///./app/javascript/shared/components/ChatOptions.vue?cbbb","webpack:///./app/javascript/widget/components/template/Article.vue?8582","webpack:///./app/javascript/widget/components/template/EmailInput.vue?9c50","webpack:///./app/javascript/shared/components/CustomerSatisfaction.vue?0eb4","webpack:///./app/javascript/widget/components/template/IntegrationCard.vue?e882","webpack:///./app/javascript/widget/components/ChatMessage.vue?6318","webpack:///./app/javascript/widget/components/ChatMessage.vue?528a","webpack:///./app/javascript/widget/assets/images/typing.gif","webpack:///./app/javascript/widget/components/AgentTypingBubble.vue?658a","webpack:///./app/javascript/shared/components/DateSeparator.vue?8417","webpack:///./app/javascript/widget/components/ConversationWrap.vue?4ab2","webpack:///./app/javascript/widget/views/Messages.vue?4fbe","webpack:///app/javascript/widget/components/ChatAttachment.vue","webpack:///./app/javascript/widget/components/ChatAttachment.vue?d672","webpack:///./app/javascript/widget/components/ChatAttachment.vue","webpack:///./app/javascript/widget/components/ChatAttachment.vue?1578","webpack:///./app/javascript/widget/components/ChatSendButton.vue?711c","webpack:///app/javascript/widget/components/ChatSendButton.vue","webpack:///./app/javascript/widget/components/ChatSendButton.vue","webpack:///./app/javascript/widget/components/ChatSendButton.vue?39ab","webpack:///app/javascript/widget/components/ChatInputWrap.vue","webpack:///./app/javascript/widget/components/ChatInputWrap.vue?4cd4","webpack:///./app/javascript/widget/components/ChatInputWrap.vue","webpack:///./app/javascript/widget/components/ChatInputWrap.vue?30f3","webpack:///app/javascript/widget/components/ChatFooter.vue","webpack:///./app/javascript/widget/components/ChatFooter.vue?8c6f","webpack:///./app/javascript/widget/components/ChatFooter.vue","webpack:///./app/javascript/widget/components/ChatFooter.vue?ab97","webpack:///./app/javascript/widget/components/UserMessageBubble.vue?0840","webpack:///app/javascript/widget/components/UserMessageBubble.vue","webpack:///./app/javascript/widget/components/UserMessageBubble.vue","webpack:///./app/javascript/widget/components/UserMessageBubble.vue?a528","webpack:///./app/javascript/widget/components/ImageBubble.vue?273c","webpack:///app/javascript/widget/components/ImageBubble.vue","webpack:///./app/javascript/widget/components/ImageBubble.vue","webpack:///./app/javascript/widget/components/ImageBubble.vue?b2bb","webpack:///./app/javascript/widget/components/FileBubble.vue?c1ef","webpack:///app/javascript/widget/components/FileBubble.vue","webpack:///./app/javascript/widget/components/FileBubble.vue","webpack:///./app/javascript/widget/components/FileBubble.vue?bc15","webpack:///./app/javascript/widget/mixins/messageMixin.js","webpack:///app/javascript/widget/components/UserMessage.vue","webpack:///./app/javascript/widget/components/UserMessage.vue?4cf0","webpack:///./app/javascript/widget/components/UserMessage.vue","webpack:///./app/javascript/widget/components/UserMessage.vue?3848","webpack:///app/javascript/shared/components/CardButton.vue","webpack:///./app/javascript/shared/components/CardButton.vue?2f9c","webpack:///./app/javascript/shared/components/ChatCard.vue?95f7","webpack:///app/javascript/shared/components/ChatCard.vue","webpack:///./app/javascript/shared/components/CardButton.vue","webpack:///./app/javascript/shared/components/CardButton.vue?79a4","webpack:///./app/javascript/shared/components/ChatCard.vue","webpack:///./app/javascript/shared/components/ChatCard.vue?fa82","webpack:///app/javascript/shared/components/ChatForm.vue","webpack:///./app/javascript/shared/components/ChatForm.vue?4553","webpack:///./app/javascript/shared/components/ChatForm.vue","webpack:///./app/javascript/shared/components/ChatForm.vue?2e1c","webpack:///app/javascript/shared/components/ChatOption.vue","webpack:///./app/javascript/shared/components/ChatOption.vue?240d","webpack:///./app/javascript/shared/components/ChatOptions.vue?22d1","webpack:///app/javascript/shared/components/ChatOptions.vue","webpack:///./app/javascript/shared/components/ChatOption.vue","webpack:///./app/javascript/shared/components/ChatOption.vue?ee1a","webpack:///./app/javascript/shared/components/ChatOptions.vue","webpack:///./app/javascript/shared/components/ChatOptions.vue?aa1d","webpack:///./app/javascript/widget/components/template/Article.vue?6f75","webpack:///app/javascript/widget/components/template/Article.vue","webpack:///./app/javascript/widget/components/template/Article.vue","webpack:///./app/javascript/widget/components/template/Article.vue?bfdd","webpack:///app/javascript/widget/components/template/EmailInput.vue","webpack:///./app/javascript/widget/components/template/EmailInput.vue?431d","webpack:///./app/javascript/widget/components/template/EmailInput.vue","webpack:///./app/javascript/widget/components/template/EmailInput.vue?382d","webpack:///app/javascript/shared/components/CustomerSatisfaction.vue","webpack:///./app/javascript/shared/components/CustomerSatisfaction.vue?6856","webpack:///./app/javascript/shared/components/CustomerSatisfaction.vue","webpack:///./app/javascript/shared/components/CustomerSatisfaction.vue?bea2","webpack:///./app/javascript/widget/api/integration.js","webpack:///app/javascript/widget/components/template/IntegrationCard.vue","webpack:///./app/javascript/widget/components/template/IntegrationCard.vue?bf68","webpack:///./app/javascript/widget/components/AgentMessageBubble.vue?c722","webpack:///app/javascript/widget/components/AgentMessageBubble.vue","webpack:///./app/javascript/widget/components/template/IntegrationCard.vue","webpack:///./app/javascript/widget/components/template/IntegrationCard.vue?e5b3","webpack:///./app/javascript/widget/components/AgentMessageBubble.vue","webpack:///./app/javascript/widget/components/AgentMessageBubble.vue?1814","webpack:///app/javascript/widget/components/AgentMessage.vue","webpack:///./app/javascript/widget/components/AgentMessage.vue?2dd5","webpack:///./app/javascript/widget/components/ChatMessage.vue?f3cf","webpack:///app/javascript/widget/components/ChatMessage.vue","webpack:///./app/javascript/widget/components/AgentMessage.vue","webpack:///./app/javascript/widget/components/AgentMessage.vue?5e53","webpack:///./app/javascript/widget/components/ChatMessage.vue","webpack:///./app/javascript/widget/components/ChatMessage.vue?78d4","webpack:///./app/javascript/widget/components/AgentTypingBubble.vue?0c33","webpack:///app/javascript/widget/components/AgentTypingBubble.vue","webpack:///./app/javascript/widget/components/AgentTypingBubble.vue","webpack:///./app/javascript/widget/components/AgentTypingBubble.vue?532f","webpack:///./app/javascript/shared/components/DateSeparator.vue?6fd3","webpack:///app/javascript/shared/components/DateSeparator.vue","webpack:///app/javascript/widget/components/ConversationWrap.vue","webpack:///./app/javascript/widget/components/ConversationWrap.vue?3b40","webpack:///./app/javascript/shared/components/DateSeparator.vue","webpack:///./app/javascript/shared/components/DateSeparator.vue?466c","webpack:///app/javascript/widget/views/Messages.vue","webpack:///./app/javascript/widget/components/ConversationWrap.vue","webpack:///./app/javascript/widget/components/ConversationWrap.vue?2d2f","webpack:///./app/javascript/widget/views/Messages.vue?f6df","webpack:///./app/javascript/widget/views/Messages.vue","webpack:///./app/javascript/shared/components/ResizableTextArea.vue?de34","webpack:///./app/javascript/shared/components/ResizableTextArea.vue?38b8","webpack:///app/javascript/shared/components/ResizableTextArea.vue","webpack:///./app/javascript/shared/components/ResizableTextArea.vue","webpack:///./app/javascript/shared/helpers/FileHelper.js","webpack:///./app/javascript/shared/helpers/emoji.js","webpack:///./app/javascript/dashboard/components/widgets/Thumbnail.vue?9bc8","webpack:///./app/javascript/dashboard/components/widgets/Avatar.vue?1562","webpack:///app/javascript/dashboard/components/widgets/Avatar.vue","webpack:///./app/javascript/dashboard/components/widgets/Avatar.vue","webpack:///./app/javascript/dashboard/components/widgets/Avatar.vue?c3bc","webpack:///./app/javascript/dashboard/components/widgets/Thumbnail.vue?8701","webpack:///app/javascript/dashboard/components/widgets/Thumbnail.vue","webpack:///./app/javascript/dashboard/components/widgets/Thumbnail.vue","webpack:///./app/javascript/shared/components/Button.vue?23f7","webpack:///./app/javascript/shared/components/Button.vue?26c2","webpack:///app/javascript/shared/components/Button.vue","webpack:///./app/javascript/shared/components/Button.vue","webpack:///./app/javascript/shared/helpers/IntegrationHelper.js"],"names":["methods","messageStamp","time","dateFormat","unixTime","fromUnixTime","format","dynamicTime","formatDistanceToNow","addSuffix","shortTimestamp","replace","USER_MENTIONS_REGEX","md","require","html","xhtmlOut","breaks","langPrefix","linkify","typographer","quotes","maxNesting","use","renderer","rules","mention","tokens","idx","content","inline","ruler","before","state","silent","label","labelEnd","labelStart","pos","res","token","href","max","posMax","src","charCodeAt","helpers","parseLinkLabel","slice","parseLinkDestination","ok","normalizeLink","str","validateLink","match","RegExp","push","mila","attrs","class","rel","target","TWITTER_USERNAME_REGEX","TWITTER_HASH_REGEX","MessageFormatter","message","isATweet","isAPrivateNote","this","updatedMessage","render","formatMessage","DOMParser","parseFromString","formattedMessage","body","textContent","isAgentView","getPlainText","plainText","truncateMessage","description","length","module","exports","_vm","_h","$createElement","_c","_self","ref","allowedFileTypes","direct_upload_url","direct_upload","on","onFileUpload","staticClass","isUploading","image","_e","_v","disabled","onClick","loading","style","color","$dm","$event","type","indexOf","_k","keyCode","key","hideEmojiPicker","inputColor","$t","onTypingOff","onTypingOn","onFocus","onBlur","model","value","callback","$$v","userInput","expression","onSendAttachment","toggleEmojiPicker","emojiIconColor","directives","name","rawName","emojiOnClick","handleButtonClick","widgetColor","hideReplyBox","textColor","startNewConversation","_s","sendTranscript","isWidgetStyleFlat","handleSendMessage","handleSendAttachment","background","url","thumb","onImgError","readableTime","titleColor","title","computed","messageContentAttributes","content_attributes","hasAttachments","attachments","isInProgress","isFailed","status","backgroundColor","_l","attachment","id","file_type","hasImageError","data_url","onImageLoadError","retrySendMessage","action","uri","borderColor","text","payload","mediaUrl","preventDefault","onSubmit","item","hasSubmitted","formValues","regex","required","placeholder","submittedValues","domProps","Array","isArray","_i","$$a","$$el","$$c","checked","$$i","$set","concat","_q","composing","pattern","$$selectedVal","prototype","filter","call","options","o","selected","map","_value","multiple","option","pattern_error","onSubmitClick","buttonLabel","isSelected","hideFields","items","link","modifiers","inputHasError","email","trim","$v","$touch","$forceUpdate","$invalid","isUpdating","rating","buttonClass","selectRating","emoji","isFeedbackSubmitted","feedback","isButtonDisabled","messageId","search","buildSearchParamsWithLocale","window","location","urlData","API","post","message_id","isLoading","joinTheCall","meetingLink","leaveTheRoom","isCards","isOptions","isForm","isArticle","isCSAT","data","submitted_values","onOptionSelect","button_label","onFormSubmit","media_url","actions","hasRecordedResponse","isASubmittedForm","showAvatar","avatarUrl","agentName","contentType","messageType","wrapClass","responseMessage","submittedValue","formattedDate","colorSchemeClass","isAgentTyping","groupedMessage","date","groupedMessages","component","onInput","onKeyup","formatBytes","bytes","decimals","k","dm","sizes","i","Math","floor","log","parseFloat","pow","toFixed","checkFileSizeLimit","file","maximumUploadLimit","fileSize","size","hasEmojiSupport","offset","devicePixelRatio","node","document","createElement","getContext","fillText","ctx","fillStyle","textBaseline","font","getImageData","removeEmoji","userInitial","thumbnailBoxClass","height","width","thumbnailClass","onImgLoad","shouldShowImage","userNameWithoutEmoji","avatarSize","badgeSrc","buttonClassName","_t","buildDyteURL","roomName","dyteAuthToken"],"mappings":"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","file":"js/18-e45b66c09853e2d06eb7.chunk.js","sourcesContent":["import fromUnixTime from 'date-fns/fromUnixTime';\nimport format from 'date-fns/format';\nimport formatDistanceToNow from 'date-fns/formatDistanceToNow';\n\nexport default {\n  methods: {\n    messageStamp(time, dateFormat = 'h:mm a') {\n      const unixTime = fromUnixTime(time);\n      return format(unixTime, dateFormat);\n    },\n    dynamicTime(time) {\n      const unixTime = fromUnixTime(time);\n      return formatDistanceToNow(unixTime, { addSuffix: true });\n    },\n    dateFormat(time, dateFormat = 'MMM d, yyyy') {\n      const unixTime = fromUnixTime(time);\n      return format(unixTime, dateFormat);\n    },\n    shortTimestamp(time) {\n      const convertToShortTime = time\n        .replace(/about|over|almost|/g, '')\n        .replace('less than a minute ago', 'now')\n        .replace(' minute ago', 'm')\n        .replace(' minutes ago', 'm')\n        .replace('a minute ago', 'm')\n        .replace('an hour ago', 'h')\n        .replace(' hour ago', 'h')\n        .replace(' hours ago', 'h')\n        .replace(' day ago', 'd')\n        .replace('a day ago', 'd')\n        .replace(' days ago', 'd')\n        .replace('a month ago', 'mo')\n        .replace(' months ago', 'mo')\n        .replace(' month ago', 'mo')\n        .replace('a year ago', 'y')\n        .replace(' year ago', 'y')\n        .replace(' years ago', 'y');\n      return convertToShortTime;\n    },\n  },\n};\n","// Process [@mention](mention://user/1/Pranav)\nconst USER_MENTIONS_REGEX = /mention:\\/\\/(user|team)\\/(\\d+)\\/(.+)/gm;\n\nconst buildMentionTokens = () => (state, silent) => {\n  var label;\n  var labelEnd;\n  var labelStart;\n  var pos;\n  var res;\n  var token;\n  var href = '';\n  var max = state.posMax;\n\n  if (state.src.charCodeAt(state.pos) !== 0x5b /* [ */) {\n    return false;\n  }\n\n  labelStart = state.pos + 1;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) {\n    return false;\n  }\n\n  label = state.src.slice(labelStart, labelEnd);\n  pos = labelEnd + 1;\n\n  if (pos < max && state.src.charCodeAt(pos) === 0x28 /* ( */) {\n    pos += 1;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n    pos += 1;\n  }\n\n  if (!href.match(new RegExp(USER_MENTIONS_REGEX))) {\n    return false;\n  }\n\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n\n    token = state.push('mention', '');\n    token.href = href;\n    token.content = label;\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n\n  return true;\n};\n\nconst renderMentions = () => (tokens, idx) => {\n  return `<span class=\"prosemirror-mention-node\">${tokens[idx].content}</span>`;\n};\n\nexport default function mentionPlugin(md) {\n  md.renderer.rules.mention = renderMentions(md);\n  md.inline.ruler.before('link', 'mention', buildMentionTokens(md));\n}\n","import mila from 'markdown-it-link-attributes';\nimport mentionPlugin from './markdownIt/link';\nconst md = require('markdown-it')({\n  html: false,\n  xhtmlOut: true,\n  breaks: true,\n  langPrefix: 'language-',\n  linkify: true,\n  typographer: true,\n  quotes: '\\u201c\\u201d\\u2018\\u2019',\n  maxNesting: 20,\n})\n  .use(mentionPlugin)\n  .use(mila, {\n    attrs: {\n      class: 'link',\n      rel: 'noreferrer noopener nofollow',\n      target: '_blank',\n    },\n  });\n\nconst TWITTER_USERNAME_REGEX = /(^|[^@\\w])@(\\w{1,15})\\b/g;\nconst TWITTER_USERNAME_REPLACEMENT = '$1[@$2](http://twitter.com/$2)';\nconst TWITTER_HASH_REGEX = /(^|\\s)#(\\w+)/g;\nconst TWITTER_HASH_REPLACEMENT = '$1[#$2](https://twitter.com/hashtag/$2)';\n\nclass MessageFormatter {\n  constructor(message, isATweet = false, isAPrivateNote = false) {\n    this.message = message || '';\n    this.isAPrivateNote = isAPrivateNote;\n    this.isATweet = isATweet;\n  }\n\n  formatMessage() {\n    let updatedMessage = this.message;\n    if (this.isATweet && !this.isAPrivateNote) {\n      updatedMessage = updatedMessage.replace(\n        TWITTER_USERNAME_REGEX,\n        TWITTER_USERNAME_REPLACEMENT\n      );\n      updatedMessage = updatedMessage.replace(\n        TWITTER_HASH_REGEX,\n        TWITTER_HASH_REPLACEMENT\n      );\n    }\n    return md.render(updatedMessage);\n  }\n\n  get formattedMessage() {\n    return this.formatMessage();\n  }\n\n  get plainText() {\n    const strippedOutHtml = new DOMParser().parseFromString(\n      this.formattedMessage,\n      'text/html'\n    );\n    return strippedOutHtml.body.textContent || '';\n  }\n}\n\nexport default MessageFormatter;\n","import MessageFormatter from '../helpers/MessageFormatter';\n\nexport default {\n  methods: {\n    formatMessage(message, isATweet, isAPrivateNote, isAgentView) {\n      const messageFormatter = new MessageFormatter(\n        message,\n        isATweet,\n        isAPrivateNote,\n        isAgentView\n      );\n      return messageFormatter.formattedMessage;\n    },\n    getPlainText(message, isATweet) {\n      const messageFormatter = new MessageFormatter(message, isATweet);\n      return messageFormatter.plainText;\n    },\n    truncateMessage(description = '') {\n      if (description.length < 100) {\n        return description;\n      }\n\n      return `${description.slice(0, 97)}...`;\n    },\n  },\n};\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Avatar.vue?vue&type=style&index=0&id=fce88f76&lang=scss&scoped=true&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Thumbnail.vue?vue&type=style&index=0&id=4240ad79&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"media/dashboard/assets/images/chatwoot_bot-905112376e6493b37e2cecea8f9dc50c.png\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatInputWrap.vue?vue&type=style&index=0&id=e0de16d4&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatFooter.vue?vue&type=style&index=0&id=39ce78de&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMessageBubble.vue?vue&type=style&index=0&id=a9cb5958&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageBubble.vue?vue&type=style&index=0&id=674f83bd&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileBubble.vue?vue&type=style&index=0&id=3fc1205c&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CardButton.vue?vue&type=style&index=0&id=4071c27e&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatCard.vue?vue&type=style&index=0&id=89f66a76&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatForm.vue?vue&type=style&index=0&id=28b9fbb6&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatOption.vue?vue&type=style&index=0&id=dddfa04c&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatOptions.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatOptions.vue?vue&type=style&index=1&id=d07851ae&scoped=true&lang=scss&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Article.vue?vue&type=style&index=0&id=feefd62e&lang=scss&scoped=true&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailInput.vue?vue&type=style&index=0&id=7b523820&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSatisfaction.vue?vue&type=style&index=0&id=1f91202a&lang=scss&scoped=true&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IntegrationCard.vue?vue&type=style&index=0&id=45604e1d&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatMessage.vue?vue&type=style&index=0&id=b5e457ba&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatMessage.vue?vue&type=style&index=1&lang=scss&\"","module.exports = __webpack_public_path__ + \"media/widget/assets/images/typing-6027d21b24f45e3377a729a55158f948.gif\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AgentTypingBubble.vue?vue&type=style&index=0&id=1877ef14&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateSeparator.vue?vue&type=style&index=0&id=0619d2c7&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/dist/cjs.js??ref--3-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--3-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--3-3!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConversationWrap.vue?vue&type=style&index=0&id=6158bb20&scoped=true&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"flex flex-col flex-1 overflow-hidden\"},[_c('div',{staticClass:\"flex flex-1 overflow-auto\"},[_c('conversation-wrap',{attrs:{\"grouped-messages\":_vm.groupedMessages}})],1),_vm._v(\" \"),_c('div',{staticClass:\"px-5\"},[_c('chat-footer')],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <file-upload\n    ref=\"upload\"\n    :size=\"4096 * 2048\"\n    :accept=\"allowedFileTypes\"\n    :data=\"{\n      direct_upload_url: '/api/v1/widget/direct_uploads',\n      direct_upload: true,\n    }\"\n    @input-file=\"onFileUpload\"\n  >\n    <button class=\"icon-button flex items-center justify-center\">\n      <fluent-icon v-if=\"!isUploading.image\" icon=\"attach\" />\n      <spinner v-if=\"isUploading\" size=\"small\" />\n    </button>\n  </file-upload>\n</template>\n\n<script>\nimport FileUpload from 'vue-upload-component';\nimport Spinner from 'shared/components/Spinner.vue';\nimport { checkFileSizeLimit } from 'shared/helpers/FileHelper';\nimport {\n  MAXIMUM_FILE_UPLOAD_SIZE,\n  ALLOWED_FILE_TYPES,\n} from 'shared/constants/messages';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\nimport { DirectUpload } from 'activestorage';\nimport { mapGetters } from 'vuex';\n\nexport default {\n  components: { FluentIcon, FileUpload, Spinner },\n  props: {\n    onAttach: {\n      type: Function,\n      default: () => {},\n    },\n  },\n  data() {\n    return { isUploading: false };\n  },\n  computed: {\n    ...mapGetters({ globalConfig: 'globalConfig/get' }),\n    fileUploadSizeLimit() {\n      return MAXIMUM_FILE_UPLOAD_SIZE;\n    },\n    allowedFileTypes() {\n      return ALLOWED_FILE_TYPES;\n    },\n  },\n  mounted() {\n    document.addEventListener('paste', this.handleClipboardPaste);\n  },\n  destroyed() {\n    document.removeEventListener('paste', this.handleClipboardPaste);\n  },\n  methods: {\n    handleClipboardPaste(e) {\n      const items = (e.clipboardData || e.originalEvent.clipboardData).items;\n      items.forEach(item => {\n        if (item.kind === 'file') {\n          e.preventDefault();\n          const file = item.getAsFile();\n          this.$refs.upload.add(file);\n        }\n      });\n    },\n    getFileType(fileType) {\n      return fileType.includes('image') ? 'image' : 'file';\n    },\n    async onFileUpload(file) {\n      if (this.globalConfig.directUploadsEnabled) {\n        await this.onDirectFileUpload(file);\n      } else {\n        await this.onIndirectFileUpload(file);\n      }\n    },\n    async onDirectFileUpload(file) {\n      if (!file) {\n        return;\n      }\n      this.isUploading = true;\n      try {\n        if (checkFileSizeLimit(file, MAXIMUM_FILE_UPLOAD_SIZE)) {\n          const { websiteToken } = window.chatwootWebChannel;\n          const upload = new DirectUpload(\n            file.file,\n            `/api/v1/widget/direct_uploads?website_token=${websiteToken}`,\n            {\n              directUploadWillCreateBlobWithXHR: xhr => {\n                xhr.setRequestHeader('X-Auth-Token', window.authToken);\n              },\n            }\n          );\n\n          upload.create((error, blob) => {\n            if (error) {\n              window.bus.$emit(BUS_EVENTS.SHOW_ALERT, {\n                message: error,\n              });\n            } else {\n              this.onAttach({\n                file: blob.signed_id,\n                ...this.getLocalFileAttributes(file),\n              });\n            }\n          });\n        } else {\n          window.bus.$emit(BUS_EVENTS.SHOW_ALERT, {\n            message: this.$t('FILE_SIZE_LIMIT', {\n              MAXIMUM_FILE_UPLOAD_SIZE: this.fileUploadSizeLimit,\n            }),\n          });\n        }\n      } catch (error) {\n        // Error\n      }\n      this.isUploading = false;\n    },\n    async onIndirectFileUpload(file) {\n      if (!file) {\n        return;\n      }\n      this.isUploading = true;\n      try {\n        if (checkFileSizeLimit(file, MAXIMUM_FILE_UPLOAD_SIZE)) {\n          await this.onAttach({\n            file: file.file,\n            ...this.getLocalFileAttributes(file),\n          });\n        } else {\n          window.bus.$emit(BUS_EVENTS.SHOW_ALERT, {\n            message: this.$t('FILE_SIZE_LIMIT', {\n              MAXIMUM_FILE_UPLOAD_SIZE: this.fileUploadSizeLimit,\n            }),\n          });\n        }\n      } catch (error) {\n        // Error\n      }\n      this.isUploading = false;\n    },\n    getLocalFileAttributes(file) {\n      return {\n        thumbUrl: window.URL.createObjectURL(file.file),\n        fileType: this.getFileType(file.type),\n      };\n    },\n  },\n};\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatAttachment.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatAttachment.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatAttachment.vue?vue&type=template&id=7f84e220&\"\nimport script from \"./ChatAttachment.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatAttachment.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('file-upload',{ref:\"upload\",attrs:{\"size\":4096 * 2048,\"accept\":_vm.allowedFileTypes,\"data\":{\n    direct_upload_url: '/api/v1/widget/direct_uploads',\n    direct_upload: true,\n  }},on:{\"input-file\":_vm.onFileUpload}},[_c('button',{staticClass:\"icon-button flex items-center justify-center\"},[(!_vm.isUploading.image)?_c('fluent-icon',{attrs:{\"icon\":\"attach\"}}):_vm._e(),_vm._v(\" \"),(_vm.isUploading)?_c('spinner',{attrs:{\"size\":\"small\"}}):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatSendButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatSendButton.vue?vue&type=script&lang=js&\"","<template>\n  <button\n    type=\"submit\"\n    :disabled=\"disabled\"\n    class=\"icon-button flex items-center justify-center ml-1\"\n    @click=\"onClick\"\n  >\n    <fluent-icon v-if=\"!loading\" icon=\"send\" :style=\"`color: ${color}`\" />\n    <spinner v-else size=\"small\" />\n  </button>\n</template>\n\n<script>\nimport Spinner from 'shared/components/Spinner.vue';\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\n\nexport default {\n  components: {\n    FluentIcon,\n    Spinner,\n  },\n  props: {\n    loading: {\n      type: Boolean,\n      default: false,\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    onClick: {\n      type: Function,\n      default: () => {},\n    },\n    color: {\n      type: String,\n      default: '#6e6f73',\n    },\n  },\n};\n</script>\n","import { render, staticRenderFns } from \"./ChatSendButton.vue?vue&type=template&id=34835494&\"\nimport script from \"./ChatSendButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatSendButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"icon-button flex items-center justify-center ml-1\",attrs:{\"type\":\"submit\",\"disabled\":_vm.disabled},on:{\"click\":_vm.onClick}},[(!_vm.loading)?_c('fluent-icon',{style:((\"color: \" + _vm.color)),attrs:{\"icon\":\"send\"}}):_c('spinner',{attrs:{\"size\":\"small\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div\n    class=\"chat-message--input is-focused\"\n    :class=\"$dm('bg-white ', 'dark:bg-slate-600')\"\n    @keydown.esc=\"hideEmojiPicker\"\n  >\n    <resizable-text-area\n      id=\"chat-input\"\n      ref=\"chatInput\"\n      v-model=\"userInput\"\n      dir=\"auto\"\n      :aria-label=\"$t('CHAT_PLACEHOLDER')\"\n      :placeholder=\"$t('CHAT_PLACEHOLDER')\"\n      class=\"form-input user-message-input is-focused\"\n      :class=\"inputColor\"\n      @typing-off=\"onTypingOff\"\n      @typing-on=\"onTypingOn\"\n      @focus=\"onFocus\"\n      @blur=\"onBlur\"\n    />\n    <div class=\"button-wrap\">\n      <chat-attachment-button\n        v-if=\"showAttachment\"\n        :class=\"$dm('text-black-900', 'dark:text-slate-100')\"\n        :on-attach=\"onSendAttachment\"\n      />\n      <button\n        v-if=\"hasEmojiPickerEnabled\"\n        class=\"icon-button flex justify-center items-center\"\n        aria-label=\"Emoji picker\"\n        @click=\"toggleEmojiPicker\"\n      >\n        <fluent-icon icon=\"emoji\" :class=\"emojiIconColor\" />\n      </button>\n      <emoji-input\n        v-if=\"showEmojiPicker\"\n        v-on-clickaway=\"hideEmojiPicker\"\n        :on-click=\"emojiOnClick\"\n        @keydown.esc=\"hideEmojiPicker\"\n      />\n      <chat-send-button\n        v-if=\"showSendButton\"\n        :on-click=\"handleButtonClick\"\n        :color=\"widgetColor\"\n      />\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex';\nimport { mixin as clickaway } from 'vue-clickaway';\n\nimport ChatAttachmentButton from 'widget/components/ChatAttachment.vue';\nimport ChatSendButton from 'widget/components/ChatSendButton.vue';\nimport configMixin from '../mixins/configMixin';\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\nimport ResizableTextArea from 'shared/components/ResizableTextArea';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\n\nconst EmojiInput = () => import('shared/components/emoji/EmojiInput');\n\nexport default {\n  name: 'ChatInputWrap',\n  components: {\n    ChatAttachmentButton,\n    ChatSendButton,\n    EmojiInput,\n    FluentIcon,\n    ResizableTextArea,\n  },\n  mixins: [clickaway, configMixin, darkModeMixin],\n  props: {\n    onSendMessage: {\n      type: Function,\n      default: () => {},\n    },\n    onSendAttachment: {\n      type: Function,\n      default: () => {},\n    },\n  },\n\n  data() {\n    return {\n      userInput: '',\n      showEmojiPicker: false,\n      isFocused: false,\n    };\n  },\n\n  computed: {\n    ...mapGetters({\n      widgetColor: 'appConfig/getWidgetColor',\n      isWidgetOpen: 'appConfig/getIsWidgetOpen',\n    }),\n    showAttachment() {\n      return this.hasAttachmentsEnabled && this.userInput.length === 0;\n    },\n    showSendButton() {\n      return this.userInput.length > 0;\n    },\n    inputColor() {\n      return `${this.$dm('bg-white', 'dark:bg-slate-600')}\n        ${this.$dm('text-black-900', 'dark:text-slate-50')}`;\n    },\n    emojiIconColor() {\n      return this.showEmojiPicker\n        ? `text-woot-500 ${this.$dm('text-black-900', 'dark:text-slate-100')}`\n        : `${this.$dm('text-black-900', 'dark:text-slate-100')}`;\n    },\n  },\n  watch: {\n    isWidgetOpen(isWidgetOpen) {\n      if (isWidgetOpen) {\n        this.focusInput();\n      }\n    },\n  },\n  destroyed() {\n    document.removeEventListener('keypress', this.handleEnterKeyPress);\n  },\n  mounted() {\n    document.addEventListener('keypress', this.handleEnterKeyPress);\n    if (this.isWidgetOpen) {\n      this.focusInput();\n    }\n  },\n\n  methods: {\n    onBlur() {\n      this.isFocused = false;\n    },\n    onFocus() {\n      this.isFocused = true;\n    },\n    handleButtonClick() {\n      if (this.userInput && this.userInput.trim()) {\n        this.onSendMessage(this.userInput);\n      }\n      this.userInput = '';\n      this.focusInput();\n    },\n    handleEnterKeyPress(e) {\n      if (e.keyCode === 13 && !e.shiftKey) {\n        e.preventDefault();\n        this.handleButtonClick();\n      }\n    },\n    toggleEmojiPicker() {\n      this.showEmojiPicker = !this.showEmojiPicker;\n    },\n    hideEmojiPicker(e) {\n      if (this.showEmojiPicker) {\n        e.stopPropagation();\n        this.toggleEmojiPicker();\n      }\n    },\n    emojiOnClick(emoji) {\n      this.userInput = `${this.userInput}${emoji} `;\n    },\n    onTypingOff() {\n      this.toggleTyping('off');\n    },\n    onTypingOn() {\n      this.toggleTyping('on');\n    },\n    toggleTyping(typingStatus) {\n      this.$store.dispatch('conversation/toggleUserTyping', { typingStatus });\n    },\n    focusInput() {\n      this.$refs.chatInput.focus();\n    },\n  },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n@import '~widget/assets/scss/mixins.scss';\n\n.chat-message--input {\n  align-items: center;\n  display: flex;\n  padding: 0 $space-small 0 $space-slab;\n  border-radius: 7px;\n\n  &.is-focused {\n    box-shadow: 0 0 0 1px $color-woot, 0 0 2px 3px $color-primary-light;\n  }\n}\n\n.emoji-dialog {\n  right: 0;\n  top: -302px;\n  max-width: 100%;\n\n  &::before {\n    right: $space-one;\n  }\n}\n\n.button-wrap {\n  display: flex;\n  align-items: center;\n  padding-left: $space-small;\n}\n\n.user-message-input {\n  border: 0;\n  height: $space-large;\n  min-height: $space-large;\n  max-height: 2.4 * $space-mega;\n  resize: none;\n  padding: $space-smaller 0;\n  margin-top: $space-small;\n  margin-bottom: $space-small;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatInputWrap.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatInputWrap.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatInputWrap.vue?vue&type=template&id=e0de16d4&scoped=true&\"\nimport script from \"./ChatInputWrap.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatInputWrap.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatInputWrap.vue?vue&type=style&index=0&id=e0de16d4&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e0de16d4\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"chat-message--input is-focused\",class:_vm.$dm('bg-white ', 'dark:bg-slate-600'),on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideEmojiPicker($event)}}},[_c('resizable-text-area',{ref:\"chatInput\",staticClass:\"form-input user-message-input is-focused\",class:_vm.inputColor,attrs:{\"id\":\"chat-input\",\"dir\":\"auto\",\"aria-label\":_vm.$t('CHAT_PLACEHOLDER'),\"placeholder\":_vm.$t('CHAT_PLACEHOLDER')},on:{\"typing-off\":_vm.onTypingOff,\"typing-on\":_vm.onTypingOn,\"focus\":_vm.onFocus,\"blur\":_vm.onBlur},model:{value:(_vm.userInput),callback:function ($$v) {_vm.userInput=$$v},expression:\"userInput\"}}),_vm._v(\" \"),_c('div',{staticClass:\"button-wrap\"},[(_vm.showAttachment)?_c('chat-attachment-button',{class:_vm.$dm('text-black-900', 'dark:text-slate-100'),attrs:{\"on-attach\":_vm.onSendAttachment}}):_vm._e(),_vm._v(\" \"),(_vm.hasEmojiPickerEnabled)?_c('button',{staticClass:\"icon-button flex justify-center items-center\",attrs:{\"aria-label\":\"Emoji picker\"},on:{\"click\":_vm.toggleEmojiPicker}},[_c('fluent-icon',{class:_vm.emojiIconColor,attrs:{\"icon\":\"emoji\"}})],1):_vm._e(),_vm._v(\" \"),(_vm.showEmojiPicker)?_c('emoji-input',{directives:[{name:\"on-clickaway\",rawName:\"v-on-clickaway\",value:(_vm.hideEmojiPicker),expression:\"hideEmojiPicker\"}],attrs:{\"on-click\":_vm.emojiOnClick},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideEmojiPicker($event)}}}):_vm._e(),_vm._v(\" \"),(_vm.showSendButton)?_c('chat-send-button',{attrs:{\"on-click\":_vm.handleButtonClick,\"color\":_vm.widgetColor}}):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <footer\n    v-if=\"!hideReplyBox\"\n    class=\"shadow-sm bg-white mb-1 z-50 relative\"\n    :class=\"{ 'rounded-lg': !isWidgetStyleFlat }\"\n  >\n    <chat-input-wrap\n      :on-send-message=\"handleSendMessage\"\n      :on-send-attachment=\"handleSendAttachment\"\n    />\n  </footer>\n  <div v-else>\n    <custom-button\n      class=\"font-medium\"\n      block\n      :bg-color=\"widgetColor\"\n      :text-color=\"textColor\"\n      @click=\"startNewConversation\"\n    >\n      {{ $t('START_NEW_CONVERSATION') }}\n    </custom-button>\n    <custom-button\n      v-if=\"showEmailTranscriptButton\"\n      type=\"clear\"\n      class=\"font-normal\"\n      @click=\"sendTranscript\"\n    >\n      {{ $t('EMAIL_TRANSCRIPT.BUTTON_TEXT') }}\n    </custom-button>\n  </div>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex';\nimport { getContrastingTextColor } from '@chatwoot/utils';\nimport CustomButton from 'shared/components/Button';\nimport ChatInputWrap from 'widget/components/ChatInputWrap.vue';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { sendEmailTranscript } from 'widget/api/conversation';\nimport routerMixin from 'widget/mixins/routerMixin';\nexport default {\n  components: {\n    ChatInputWrap,\n    CustomButton,\n  },\n  mixins: [routerMixin],\n  props: {\n    msg: {\n      type: String,\n      default: '',\n    },\n  },\n  computed: {\n    ...mapGetters({\n      conversationAttributes: 'conversationAttributes/getConversationParams',\n      widgetColor: 'appConfig/getWidgetColor',\n      conversationSize: 'conversation/getConversationSize',\n      currentUser: 'contacts/getCurrentUser',\n      isWidgetStyleFlat: 'appConfig/isWidgetStyleFlat',\n    }),\n    textColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n    hideReplyBox() {\n      const { allowMessagesAfterResolved } = window.chatwootWebChannel;\n      const { status } = this.conversationAttributes;\n      return !allowMessagesAfterResolved && status === 'resolved';\n    },\n    showEmailTranscriptButton() {\n      return this.currentUser && this.currentUser.email;\n    },\n  },\n  methods: {\n    ...mapActions('conversation', [\n      'sendMessage',\n      'sendAttachment',\n      'clearConversations',\n    ]),\n    ...mapActions('conversationAttributes', [\n      'getAttributes',\n      'clearConversationAttributes',\n    ]),\n    async handleSendMessage(content) {\n      await this.sendMessage({\n        content,\n      });\n      // Update conversation attributes on new conversation\n      if (this.conversationSize === 0) {\n        this.getAttributes();\n      }\n    },\n    handleSendAttachment(attachment) {\n      this.sendAttachment({ attachment });\n    },\n    startNewConversation() {\n      this.clearConversations();\n      this.clearConversationAttributes();\n\n      // To create a new conversation, we are redirecting\n      // the user to pre-chat with contact fields disabled\n      // Pass disableContactFields params to the route\n      // This would disable the contact fields in the pre-chat form\n      this.replaceRoute('prechat-form', { disableContactFields: true });\n    },\n    async sendTranscript() {\n      const { email } = this.currentUser;\n      if (email) {\n        try {\n          await sendEmailTranscript({\n            email,\n          });\n          window.bus.$emit(BUS_EVENTS.SHOW_ALERT, {\n            message: this.$t('EMAIL_TRANSCRIPT.SEND_EMAIL_SUCCESS'),\n            type: 'success',\n          });\n        } catch (error) {\n          window.bus.$emit(BUS_EVENTS.SHOW_ALERT, {\n            message: this.$t('EMAIL_TRANSCRIPT.SEND_EMAIL_ERROR'),\n          });\n        }\n      }\n    },\n  },\n};\n</script>\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n\n.branding {\n  align-items: center;\n  color: $color-body;\n  display: flex;\n  font-size: $font-size-default;\n  justify-content: center;\n  padding: $space-one;\n  text-align: center;\n  text-decoration: none;\n\n  img {\n    margin-right: $space-small;\n    max-width: $space-two;\n  }\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatFooter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatFooter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatFooter.vue?vue&type=template&id=39ce78de&scoped=true&\"\nimport script from \"./ChatFooter.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatFooter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatFooter.vue?vue&type=style&index=0&id=39ce78de&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"39ce78de\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.hideReplyBox)?_c('footer',{staticClass:\"shadow-sm bg-white mb-1 z-50 relative\",class:{ 'rounded-lg': !_vm.isWidgetStyleFlat }},[_c('chat-input-wrap',{attrs:{\"on-send-message\":_vm.handleSendMessage,\"on-send-attachment\":_vm.handleSendAttachment}})],1):_c('div',[_c('custom-button',{staticClass:\"font-medium\",attrs:{\"block\":\"\",\"bg-color\":_vm.widgetColor,\"text-color\":_vm.textColor},on:{\"click\":_vm.startNewConversation}},[_vm._v(\"\\n    \"+_vm._s(_vm.$t('START_NEW_CONVERSATION'))+\"\\n  \")]),_vm._v(\" \"),(_vm.showEmailTranscriptButton)?_c('custom-button',{staticClass:\"font-normal\",attrs:{\"type\":\"clear\"},on:{\"click\":_vm.sendTranscript}},[_vm._v(\"\\n    \"+_vm._s(_vm.$t('EMAIL_TRANSCRIPT.BUTTON_TEXT'))+\"\\n  \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMessageBubble.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMessageBubble.vue?vue&type=script&lang=js&\"","<template>\n  <bdi\n    v-dompurify-html=\"formatMessage(message, false)\"\n    class=\"chat-bubble user\"\n    :style=\"{ background: widgetColor, color: textColor }\"\n    dir=\"auto\"\n  />\n</template>\n\n<script>\nimport messageFormatterMixin from 'shared/mixins/messageFormatterMixin';\nimport { getContrastingTextColor } from '@chatwoot/utils';\n\nexport default {\n  name: 'UserMessageBubble',\n  mixins: [messageFormatterMixin],\n  props: {\n    message: {\n      type: String,\n      default: '',\n    },\n    status: {\n      type: String,\n      default: '',\n    },\n    widgetColor: {\n      type: String,\n      default: '',\n    },\n  },\n  computed: {\n    textColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n\n.chat-bubble.user::v-deep {\n  p code {\n    background-color: var(--w-600);\n    color: var(--white);\n  }\n\n  pre {\n    background-color: var(--w-800);\n    border-color: var(--w-700);\n    color: var(--white);\n\n    code {\n      background-color: transparent;\n      color: var(--white);\n    }\n  }\n\n  blockquote {\n    border-left: $space-micro solid var(--w-400);\n    background: var(--s-25);\n    border-color: var(--s-200);\n\n    p {\n      color: var(--s-800);\n    }\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./UserMessageBubble.vue?vue&type=template&id=a9cb5958&scoped=true&\"\nimport script from \"./UserMessageBubble.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMessageBubble.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMessageBubble.vue?vue&type=style&index=0&id=a9cb5958&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a9cb5958\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('bdi',{directives:[{name:\"dompurify-html\",rawName:\"v-dompurify-html\",value:(_vm.formatMessage(_vm.message, false)),expression:\"formatMessage(message, false)\"}],staticClass:\"chat-bubble user\",style:({ background: _vm.widgetColor, color: _vm.textColor }),attrs:{\"dir\":\"auto\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageBubble.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageBubble.vue?vue&type=script&lang=js&\"","<template>\n  <a\n    :href=\"url\"\n    target=\"_blank\"\n    rel=\"noreferrer noopener nofollow\"\n    class=\"image\"\n  >\n    <div class=\"wrap\">\n      <img\n        :src=\"thumb\"\n        alt=\"Picture message\"\n        @click=\"onClick\"\n        @error=\"onImgError\"\n      />\n      <span class=\"time\">{{ readableTime }}</span>\n    </div>\n  </a>\n</template>\n\n<script>\nexport default {\n  props: {\n    url: { type: String, default: '' },\n    thumb: { type: String, default: '' },\n    readableTime: { type: String, default: '' },\n  },\n  methods: {\n    onImgError() {\n      this.$emit('error');\n    },\n    onClick() {\n      this.$emit('click');\n    },\n  },\n};\n</script>\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n\n.image {\n  display: block;\n\n  .wrap {\n    position: relative;\n    display: flex;\n    max-width: 100%;\n\n    &::before {\n      background-image: linear-gradient(\n        -180deg,\n        transparent 3%,\n        $color-heading 130%\n      );\n      bottom: 0;\n      content: '';\n      height: 20%;\n      left: 0;\n      opacity: 0.8;\n      position: absolute;\n      width: 100%;\n    }\n  }\n\n  img {\n    width: 100%;\n    max-width: 250px;\n  }\n\n  .time {\n    font-size: $font-size-small;\n    bottom: $space-smaller;\n    color: $color-white;\n    position: absolute;\n    right: $space-slab;\n    white-space: nowrap;\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./ImageBubble.vue?vue&type=template&id=674f83bd&scoped=true&\"\nimport script from \"./ImageBubble.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageBubble.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageBubble.vue?vue&type=style&index=0&id=674f83bd&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"674f83bd\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"image\",attrs:{\"href\":_vm.url,\"target\":\"_blank\",\"rel\":\"noreferrer noopener nofollow\"}},[_c('div',{staticClass:\"wrap\"},[_c('img',{attrs:{\"src\":_vm.thumb,\"alt\":\"Picture message\"},on:{\"click\":_vm.onClick,\"error\":_vm.onImgError}}),_vm._v(\" \"),_c('span',{staticClass:\"time\"},[_vm._v(_vm._s(_vm.readableTime))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileBubble.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileBubble.vue?vue&type=script&lang=js&\"","<template>\n  <div class=\"file flex flex-row items-center p-3 cursor-pointer\">\n    <div class=\"icon-wrap\" :style=\"{ color: textColor }\">\n      <fluent-icon icon=\"document\" size=\"28\" />\n    </div>\n    <div class=\"meta\">\n      <div class=\"title\" :class=\"titleColor\" :style=\"{ color: textColor }\">\n        {{ title }}\n      </div>\n      <div class=\"link-wrap mb-1\">\n        <a\n          class=\"download\"\n          rel=\"noreferrer noopener nofollow\"\n          target=\"_blank\"\n          :style=\"{ color: textColor }\"\n          :href=\"url\"\n        >\n          {{ $t('COMPONENTS.FILE_BUBBLE.DOWNLOAD') }}\n        </a>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\nimport { getContrastingTextColor } from '@chatwoot/utils';\n\nexport default {\n  components: {\n    FluentIcon,\n  },\n  mixins: [darkModeMixin],\n  props: {\n    url: {\n      type: String,\n      default: '',\n    },\n    isInProgress: {\n      type: Boolean,\n      default: false,\n    },\n    widgetColor: {\n      type: String,\n      default: '',\n    },\n    isUserBubble: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  computed: {\n    title() {\n      return this.isInProgress\n        ? this.$t('COMPONENTS.FILE_BUBBLE.UPLOADING')\n        : decodeURI(this.fileName);\n    },\n    fileName() {\n      return this.url.substring(this.url.lastIndexOf('/') + 1);\n    },\n    contrastingTextColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n    textColor() {\n      return this.isUserBubble && this.widgetColor\n        ? this.contrastingTextColor\n        : '';\n    },\n    titleColor() {\n      return !this.isUserBubble\n        ? this.$dm('text-black-900', 'dark:text-slate-50')\n        : '';\n    },\n  },\n  methods: {\n    openLink() {\n      const win = window.open(this.url, '_blank');\n      win.focus();\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n\n.file {\n  .icon-wrap {\n    font-size: $font-size-mega;\n    color: $color-woot;\n    line-height: 1;\n    margin-left: $space-smaller;\n    margin-right: $space-small;\n  }\n\n  .title {\n    font-weight: $font-weight-medium;\n    font-size: $font-size-default;\n    margin: 0;\n  }\n\n  .download {\n    color: $color-woot;\n    font-weight: $font-weight-medium;\n    padding: 0;\n    margin: 0;\n    font-size: $font-size-small;\n    text-decoration: none;\n  }\n\n  .link-wrap {\n    line-height: 1;\n  }\n  .meta {\n    padding-right: $space-smaller;\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./FileBubble.vue?vue&type=template&id=3fc1205c&scoped=true&\"\nimport script from \"./FileBubble.vue?vue&type=script&lang=js&\"\nexport * from \"./FileBubble.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileBubble.vue?vue&type=style&index=0&id=3fc1205c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"3fc1205c\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"file flex flex-row items-center p-3 cursor-pointer\"},[_c('div',{staticClass:\"icon-wrap\",style:({ color: _vm.textColor })},[_c('fluent-icon',{attrs:{\"icon\":\"document\",\"size\":\"28\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"meta\"},[_c('div',{staticClass:\"title\",class:_vm.titleColor,style:({ color: _vm.textColor })},[_vm._v(\"\\n      \"+_vm._s(_vm.title)+\"\\n    \")]),_vm._v(\" \"),_c('div',{staticClass:\"link-wrap mb-1\"},[_c('a',{staticClass:\"download\",style:({ color: _vm.textColor }),attrs:{\"rel\":\"noreferrer noopener nofollow\",\"target\":\"_blank\",\"href\":_vm.url}},[_vm._v(\"\\n        \"+_vm._s(_vm.$t('COMPONENTS.FILE_BUBBLE.DOWNLOAD'))+\"\\n      \")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\n  computed: {\n    messageContentAttributes() {\n      const { content_attributes: attribute = {} } = this.message;\n      return attribute;\n    },\n    hasAttachments() {\n      return !!(\n        this.message.attachments && this.message.attachments.length > 0\n      );\n    },\n  },\n};\n","<template>\n  <div class=\"user-message-wrap\">\n    <div class=\"user-message\">\n      <div\n        class=\"message-wrap\"\n        :class=\"{ 'in-progress': isInProgress, 'is-failed': isFailed }\"\n      >\n        <user-message-bubble\n          v-if=\"showTextBubble\"\n          :message=\"message.content\"\n          :status=\"message.status\"\n          :widget-color=\"widgetColor\"\n        />\n        <div\n          v-if=\"hasAttachments\"\n          class=\"chat-bubble has-attachment user\"\n          :style=\"{ backgroundColor: widgetColor }\"\n        >\n          <div v-for=\"attachment in message.attachments\" :key=\"attachment.id\">\n            <image-bubble\n              v-if=\"attachment.file_type === 'image' && !hasImageError\"\n              :url=\"attachment.data_url\"\n              :thumb=\"attachment.data_url\"\n              :readable-time=\"readableTime\"\n              @error=\"onImageLoadError\"\n            />\n            <file-bubble\n              v-else\n              :url=\"attachment.data_url\"\n              :is-in-progress=\"isInProgress\"\n              :widget-color=\"widgetColor\"\n              is-user-bubble\n            />\n          </div>\n        </div>\n        <div\n          v-if=\"isFailed\"\n          class=\"flex justify-end align-middle px-4 py-2 text-red-700\"\n        >\n          <button\n            v-if=\"!hasAttachments\"\n            :title=\"$t('COMPONENTS.MESSAGE_BUBBLE.RETRY')\"\n            class=\"inline-flex justify-center items-center ml-2\"\n            @click=\"retrySendMessage\"\n          >\n            <fluent-icon icon=\"arrow-clockwise\" size=\"14\" />\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport UserMessageBubble from 'widget/components/UserMessageBubble';\nimport ImageBubble from 'widget/components/ImageBubble';\nimport FluentIcon from 'shared/components/FluentIcon/Index';\nimport FileBubble from 'widget/components/FileBubble';\nimport timeMixin from 'dashboard/mixins/time';\nimport messageMixin from '../mixins/messageMixin';\nimport { mapGetters } from 'vuex';\n\nexport default {\n  name: 'UserMessage',\n  components: {\n    UserMessageBubble,\n    ImageBubble,\n    FileBubble,\n    FluentIcon,\n  },\n  mixins: [timeMixin, messageMixin],\n  props: {\n    message: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  data() {\n    return {\n      hasImageError: false,\n    };\n  },\n  computed: {\n    ...mapGetters({\n      widgetColor: 'appConfig/getWidgetColor',\n    }),\n\n    isInProgress() {\n      const { status = '' } = this.message;\n      return status === 'in_progress';\n    },\n    showTextBubble() {\n      const { message } = this;\n      return !!message.content;\n    },\n    readableTime() {\n      const { created_at: createdAt = '' } = this.message;\n      return this.messageStamp(createdAt);\n    },\n    isFailed() {\n      const { status = '' } = this.message;\n      return status === 'failed';\n    },\n    errorMessage() {\n      const { meta } = this.message;\n      return meta\n        ? meta.error\n        : this.$t('COMPONENTS.MESSAGE_BUBBLE.ERROR_MESSAGE');\n    },\n  },\n  watch: {\n    message() {\n      this.hasImageError = false;\n    },\n  },\n  mounted() {\n    this.hasImageError = false;\n  },\n  methods: {\n    async retrySendMessage() {\n      await this.$store.dispatch(\n        'conversation/sendMessageWithData',\n        this.message\n      );\n    },\n    onImageLoadError() {\n      this.hasImageError = true;\n    },\n  },\n};\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMessage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMessage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserMessage.vue?vue&type=template&id=df13bb00&\"\nimport script from \"./UserMessage.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMessage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-message-wrap\"},[_c('div',{staticClass:\"user-message\"},[_c('div',{staticClass:\"message-wrap\",class:{ 'in-progress': _vm.isInProgress, 'is-failed': _vm.isFailed }},[(_vm.showTextBubble)?_c('user-message-bubble',{attrs:{\"message\":_vm.message.content,\"status\":_vm.message.status,\"widget-color\":_vm.widgetColor}}):_vm._e(),_vm._v(\" \"),(_vm.hasAttachments)?_c('div',{staticClass:\"chat-bubble has-attachment user\",style:({ backgroundColor: _vm.widgetColor })},_vm._l((_vm.message.attachments),function(attachment){return _c('div',{key:attachment.id},[(attachment.file_type === 'image' && !_vm.hasImageError)?_c('image-bubble',{attrs:{\"url\":attachment.data_url,\"thumb\":attachment.data_url,\"readable-time\":_vm.readableTime},on:{\"error\":_vm.onImageLoadError}}):_c('file-bubble',{attrs:{\"url\":attachment.data_url,\"is-in-progress\":_vm.isInProgress,\"widget-color\":_vm.widgetColor,\"is-user-bubble\":\"\"}})],1)}),0):_vm._e(),_vm._v(\" \"),(_vm.isFailed)?_c('div',{staticClass:\"flex justify-end align-middle px-4 py-2 text-red-700\"},[(!_vm.hasAttachments)?_c('button',{staticClass:\"inline-flex justify-center items-center ml-2\",attrs:{\"title\":_vm.$t('COMPONENTS.MESSAGE_BUBBLE.RETRY')},on:{\"click\":_vm.retrySendMessage}},[_c('fluent-icon',{attrs:{\"icon\":\"arrow-clockwise\",\"size\":\"14\"}})],1):_vm._e()]):_vm._e()],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <a\n    v-if=\"isLink\"\n    :key=\"action.uri\"\n    class=\"action-button button\"\n    :href=\"action.uri\"\n    :style=\"{\n      background: widgetColor,\n      borderColor: widgetColor,\n      color: textColor,\n    }\"\n    target=\"_blank\"\n    rel=\"noopener nofollow noreferrer\"\n  >\n    {{ action.text }}\n  </a>\n  <button\n    v-else\n    :key=\"action.payload\"\n    class=\"action-button button\"\n    :style=\"{ borderColor: widgetColor, color: widgetColor }\"\n    @click=\"onClick\"\n  >\n    {{ action.text }}\n  </button>\n</template>\n<script>\nimport { mapGetters } from 'vuex';\nimport { getContrastingTextColor } from '@chatwoot/utils';\nexport default {\n  components: {},\n  props: {\n    action: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  computed: {\n    ...mapGetters({\n      widgetColor: 'appConfig/getWidgetColor',\n    }),\n    textColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n    isLink() {\n      return this.action.type === 'link';\n    },\n  },\n  methods: {\n    onClick() {\n      // Do postback here\n    },\n  },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n@import '~dashboard/assets/scss/mixins.scss';\n\n.action-button {\n  align-items: center;\n  border-radius: $space-micro;\n  display: flex;\n  font-weight: $font-weight-medium;\n  justify-content: center;\n  margin-top: $space-smaller;\n  max-height: 34px;\n  padding: 0;\n  width: 100%;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CardButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CardButton.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatCard.vue?vue&type=script&lang=js&\"","<template>\n  <div\n    class=\"card-message chat-bubble agent\"\n    :class=\"$dm('bg-white', 'dark:bg-slate-700')\"\n  >\n    <img class=\"media\" :src=\"mediaUrl\" />\n    <div class=\"card-body\">\n      <h4 class=\"title\" :class=\"$dm('text-black-900', 'dark:text-slate-50')\">\n        {{ title }}\n      </h4>\n      <p class=\"body\" :class=\"$dm('text-black-700', 'dark:text-slate-100')\">\n        {{ description }}\n      </p>\n      <card-button\n        v-for=\"action in actions\"\n        :key=\"action.id\"\n        :action=\"action\"\n      />\n    </div>\n  </div>\n</template>\n\n<script>\nimport CardButton from 'shared/components/CardButton';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\n\nexport default {\n  components: {\n    CardButton,\n  },\n  mixins: [darkModeMixin],\n  props: {\n    title: {\n      type: String,\n      default: '',\n    },\n    description: {\n      type: String,\n      default: '',\n    },\n    mediaUrl: {\n      type: String,\n      default: '',\n    },\n    actions: {\n      type: Array,\n      default: () => [],\n    },\n    showAvatar: Boolean,\n  },\n  computed: {},\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n@import '~dashboard/assets/scss/mixins.scss';\n\n.card-message {\n  max-width: 220px;\n  padding: $space-small;\n  border-radius: $space-small;\n  overflow: hidden;\n\n  .title {\n    font-size: $font-size-default;\n    font-weight: $font-weight-medium;\n    margin-top: $space-smaller;\n    margin-bottom: $space-smaller;\n    line-height: 1.5;\n  }\n\n  .body {\n    margin-bottom: $space-smaller;\n  }\n\n  .media {\n    @include border-light;\n    width: 100%;\n    object-fit: contain;\n    max-height: 150px;\n    border-radius: 5px;\n  }\n\n  .action-button + .action-button {\n    background: $color-white;\n    @include thin-border($color-woot);\n    color: $color-woot;\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./CardButton.vue?vue&type=template&id=4071c27e&scoped=true&\"\nimport script from \"./CardButton.vue?vue&type=script&lang=js&\"\nexport * from \"./CardButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CardButton.vue?vue&type=style&index=0&id=4071c27e&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4071c27e\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isLink)?_c('a',{key:_vm.action.uri,staticClass:\"action-button button\",style:({\n    background: _vm.widgetColor,\n    borderColor: _vm.widgetColor,\n    color: _vm.textColor,\n  }),attrs:{\"href\":_vm.action.uri,\"target\":\"_blank\",\"rel\":\"noopener nofollow noreferrer\"}},[_vm._v(\"\\n  \"+_vm._s(_vm.action.text)+\"\\n\")]):_c('button',{key:_vm.action.payload,staticClass:\"action-button button\",style:({ borderColor: _vm.widgetColor, color: _vm.widgetColor }),on:{\"click\":_vm.onClick}},[_vm._v(\"\\n  \"+_vm._s(_vm.action.text)+\"\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./ChatCard.vue?vue&type=template&id=89f66a76&scoped=true&\"\nimport script from \"./ChatCard.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatCard.vue?vue&type=style&index=0&id=89f66a76&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"89f66a76\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"card-message chat-bubble agent\",class:_vm.$dm('bg-white', 'dark:bg-slate-700')},[_c('img',{staticClass:\"media\",attrs:{\"src\":_vm.mediaUrl}}),_vm._v(\" \"),_c('div',{staticClass:\"card-body\"},[_c('h4',{staticClass:\"title\",class:_vm.$dm('text-black-900', 'dark:text-slate-50')},[_vm._v(\"\\n      \"+_vm._s(_vm.title)+\"\\n    \")]),_vm._v(\" \"),_c('p',{staticClass:\"body\",class:_vm.$dm('text-black-700', 'dark:text-slate-100')},[_vm._v(\"\\n      \"+_vm._s(_vm.description)+\"\\n    \")]),_vm._v(\" \"),_vm._l((_vm.actions),function(action){return _c('card-button',{key:action.id,attrs:{\"action\":action}})})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div\n    class=\"form chat-bubble agent\"\n    :class=\"$dm('bg-white', 'dark:bg-slate-700')\"\n  >\n    <form @submit.prevent=\"onSubmit\">\n      <div\n        v-for=\"item in items\"\n        :key=\"item.key\"\n        class=\"form-block\"\n        :class=\"{\n          'has-submitted': hasSubmitted,\n        }\"\n      >\n        <label :class=\"$dm('text-black-900', 'dark:text-slate-50')\">{{\n          item.label\n        }}</label>\n        <input\n          v-if=\"item.type === 'email'\"\n          v-model=\"formValues[item.name]\"\n          :class=\"inputColor\"\n          :type=\"item.type\"\n          :pattern=\"item.regex\"\n          :title=\"item.title\"\n          :required=\"item.required && 'required'\"\n          :name=\"item.name\"\n          :placeholder=\"item.placeholder\"\n          :disabled=\"!!submittedValues.length\"\n        />\n        <input\n          v-else-if=\"item.type === 'text'\"\n          v-model=\"formValues[item.name]\"\n          :class=\"inputColor\"\n          :required=\"item.required && 'required'\"\n          :pattern=\"item.pattern\"\n          :title=\"item.title\"\n          :type=\"item.type\"\n          :name=\"item.name\"\n          :placeholder=\"item.placeholder\"\n          :disabled=\"!!submittedValues.length\"\n        />\n        <textarea\n          v-else-if=\"item.type === 'text_area'\"\n          v-model=\"formValues[item.name]\"\n          :class=\"inputColor\"\n          :required=\"item.required && 'required'\"\n          :title=\"item.title\"\n          :name=\"item.name\"\n          :placeholder=\"item.placeholder\"\n          :disabled=\"!!submittedValues.length\"\n        />\n        <select\n          v-else-if=\"item.type === 'select'\"\n          v-model=\"formValues[item.name]\"\n          :class=\"inputColor\"\n          :required=\"item.required && 'required'\"\n        >\n          <option\n            v-for=\"option in item.options\"\n            :key=\"option.key\"\n            :value=\"option.value\"\n          >\n            {{ option.label }}\n          </option>\n        </select>\n        <span class=\"error-message\">\n          {{ item.pattern_error || $t('CHAT_FORM.INVALID.FIELD') }}\n        </span>\n      </div>\n      <button\n        v-if=\"!submittedValues.length\"\n        class=\"button block\"\n        type=\"submit\"\n        :style=\"{\n          background: widgetColor,\n          borderColor: widgetColor,\n          color: textColor,\n        }\"\n        @click=\"onSubmitClick\"\n      >\n        {{ buttonLabel || $t('COMPONENTS.FORM_BUBBLE.SUBMIT') }}\n      </button>\n    </form>\n  </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex';\nimport { getContrastingTextColor } from '@chatwoot/utils';\nimport darkModeMixin from 'widget/mixins/darkModeMixin';\n\nexport default {\n  mixins: [darkModeMixin],\n  props: {\n    buttonLabel: {\n      type: String,\n      default: '',\n    },\n    items: {\n      type: Array,\n      default: () => [],\n    },\n    submittedValues: {\n      type: Array,\n      default: () => [],\n    },\n  },\n  data() {\n    return {\n      formValues: {},\n      hasSubmitted: false,\n    };\n  },\n  computed: {\n    ...mapGetters({\n      widgetColor: 'appConfig/getWidgetColor',\n    }),\n    textColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n    inputColor() {\n      return `${this.$dm('bg-white', 'dark:bg-slate-600')}\n        ${this.$dm('text-black-900', 'dark:text-slate-50')}`;\n    },\n    isFormValid() {\n      return this.items.reduce((acc, { name }) => {\n        return !!this.formValues[name] && acc;\n      }, true);\n    },\n  },\n  mounted() {\n    if (this.submittedValues.length) {\n      this.updateFormValues();\n    } else {\n      this.setFormDefaults();\n    }\n  },\n  methods: {\n    onSubmitClick() {\n      this.hasSubmitted = true;\n    },\n    onSubmit() {\n      if (!this.isFormValid) {\n        return;\n      }\n      this.$emit('submit', this.formValues);\n    },\n    buildFormObject(formObjectArray) {\n      return formObjectArray.reduce((acc, obj) => {\n        return {\n          ...acc,\n          [obj.name]: obj.value || obj.default,\n        };\n      }, {});\n    },\n    updateFormValues() {\n      this.formValues = this.buildFormObject(this.submittedValues);\n    },\n    setFormDefaults() {\n      this.formValues = this.buildFormObject(this.items);\n    },\n  },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n\n.form {\n  padding: $space-normal;\n  width: 80%;\n\n  .form-block {\n    width: 90%;\n    padding-bottom: $space-small;\n  }\n\n  label {\n    display: block;\n    font-weight: $font-weight-medium;\n    padding: $space-smaller 0;\n    text-transform: capitalize;\n  }\n\n  input,\n  textarea {\n    border-radius: $space-smaller;\n    border: 1px solid $color-border;\n    display: block;\n    font-family: inherit;\n    font-size: $font-size-default;\n    line-height: 1.5;\n    padding: $space-one;\n    width: 100%;\n\n    &:disabled {\n      background: $color-background-light;\n    }\n  }\n\n  textarea {\n    resize: none;\n  }\n\n  select {\n    width: 110%;\n    padding: $space-smaller;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    border: 1px solid $color-border;\n    border-radius: $space-smaller;\n    font-family: inherit;\n    font-size: $space-normal;\n    font-weight: normal;\n    line-height: 1.5;\n    background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='32' height='24' viewBox='0 0 32 24'><polygon points='0,0 32,0 16,24' style='fill: rgb%28110, 111, 115%29'></polygon></svg>\");\n    background-origin: content-box;\n    background-position: right -1.6rem center;\n    background-repeat: no-repeat;\n    background-size: 9px 6px;\n    padding-right: 2.4rem;\n  }\n\n  .button {\n    font-size: $font-size-default;\n  }\n\n  .error-message {\n    display: none;\n    margin-top: $space-smaller;\n    color: $color-error;\n  }\n\n  .has-submitted {\n    input:invalid {\n      border: 1px solid $color-error;\n    }\n\n    input:invalid + .error-message {\n      display: block;\n    }\n\n    textarea:invalid {\n      border: 1px solid $color-error;\n    }\n\n    textarea:invalid + .error-message {\n      display: block;\n    }\n  }\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatForm.vue?vue&type=template&id=28b9fbb6&scoped=true&\"\nimport script from \"./ChatForm.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatForm.vue?vue&type=style&index=0&id=28b9fbb6&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"28b9fbb6\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"form chat-bubble agent\",class:_vm.$dm('bg-white', 'dark:bg-slate-700')},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit($event)}}},[_vm._l((_vm.items),function(item){return _c('div',{key:item.key,staticClass:\"form-block\",class:{\n        'has-submitted': _vm.hasSubmitted,\n      }},[_c('label',{class:_vm.$dm('text-black-900', 'dark:text-slate-50')},[_vm._v(_vm._s(item.label))]),_vm._v(\" \"),((item.type)==='checkbox'&&(item.type === 'email'))?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"pattern\":item.regex,\"title\":item.title,\"required\":item.required && 'required',\"name\":item.name,\"placeholder\":item.placeholder,\"disabled\":!!_vm.submittedValues.length,\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.formValues[item.name])?_vm._i(_vm.formValues[item.name],null)>-1:(_vm.formValues[item.name])},on:{\"change\":function($event){var $$a=_vm.formValues[item.name],$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.formValues, item.name, $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.formValues, item.name, $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.formValues, item.name, $$c)}}}}):((item.type)==='radio'&&(item.type === 'email'))?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"pattern\":item.regex,\"title\":item.title,\"required\":item.required && 'required',\"name\":item.name,\"placeholder\":item.placeholder,\"disabled\":!!_vm.submittedValues.length,\"type\":\"radio\"},domProps:{\"checked\":_vm._q(_vm.formValues[item.name],null)},on:{\"change\":function($event){return _vm.$set(_vm.formValues, item.name, null)}}}):(item.type === 'email')?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"pattern\":item.regex,\"title\":item.title,\"required\":item.required && 'required',\"name\":item.name,\"placeholder\":item.placeholder,\"disabled\":!!_vm.submittedValues.length,\"type\":item.type},domProps:{\"value\":(_vm.formValues[item.name])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.formValues, item.name, $event.target.value)}}}):(item.type === 'text')?((item.type)==='checkbox')?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"required\":item.required && 'required',\"pattern\":item.pattern,\"title\":item.title,\"name\":item.name,\"placeholder\":item.placeholder,\"disabled\":!!_vm.submittedValues.length,\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.formValues[item.name])?_vm._i(_vm.formValues[item.name],null)>-1:(_vm.formValues[item.name])},on:{\"change\":function($event){var $$a=_vm.formValues[item.name],$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.formValues, item.name, $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.formValues, item.name, $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.formValues, item.name, $$c)}}}}):((item.type)==='radio')?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"required\":item.required && 'required',\"pattern\":item.pattern,\"title\":item.title,\"name\":item.name,\"placeholder\":item.placeholder,\"disabled\":!!_vm.submittedValues.length,\"type\":\"radio\"},domProps:{\"checked\":_vm._q(_vm.formValues[item.name],null)},on:{\"change\":function($event){return _vm.$set(_vm.formValues, item.name, null)}}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"required\":item.required && 'required',\"pattern\":item.pattern,\"title\":item.title,\"name\":item.name,\"placeholder\":item.placeholder,\"disabled\":!!_vm.submittedValues.length,\"type\":item.type},domProps:{\"value\":(_vm.formValues[item.name])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.formValues, item.name, $event.target.value)}}}):(item.type === 'text_area')?_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"required\":item.required && 'required',\"title\":item.title,\"name\":item.name,\"placeholder\":item.placeholder,\"disabled\":!!_vm.submittedValues.length},domProps:{\"value\":(_vm.formValues[item.name])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.formValues, item.name, $event.target.value)}}}):(item.type === 'select')?_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formValues[item.name]),expression:\"formValues[item.name]\"}],class:_vm.inputColor,attrs:{\"required\":item.required && 'required'},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.formValues, item.name, $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((item.options),function(option){return _c('option',{key:option.key,domProps:{\"value\":option.value}},[_vm._v(\"\\n          \"+_vm._s(option.label)+\"\\n        \")])}),0):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"error-message\"},[_vm._v(\"\\n        \"+_vm._s(item.pattern_error || _vm.$t('CHAT_FORM.INVALID.FIELD'))+\"\\n      \")])])}),_vm._v(\" \"),(!_vm.submittedValues.length)?_c('button',{staticClass:\"button block\",style:({\n        background: _vm.widgetColor,\n        borderColor: _vm.widgetColor,\n        color: _vm.textColor,\n      }),attrs:{\"type\":\"submit\"},on:{\"click\":_vm.onSubmitClick}},[_vm._v(\"\\n      \"+_vm._s(_vm.buttonLabel || _vm.$t('COMPONENTS.FORM_BUBBLE.SUBMIT'))+\"\\n    \")]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <li\n    class=\"option\"\n    :class=\"{ 'is-selected': isSelected }\"\n    :style=\"{ borderColor: widgetColor }\"\n  >\n    <button class=\"option-button button\" @click=\"onClick\">\n      <span :style=\"{ color: widgetColor }\">{{ action.title }}</span>\n    </button>\n  </li>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex';\n\nexport default {\n  components: {},\n  props: {\n    action: {\n      type: Object,\n      default: () => {},\n    },\n    isSelected: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  computed: {\n    ...mapGetters({\n      widgetColor: 'appConfig/getWidgetColor',\n    }),\n  },\n  methods: {\n    onClick() {\n      this.$emit('click', this.action);\n    },\n  },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n\n.option {\n  border-radius: $space-jumbo;\n  border: 1px solid $color-woot;\n  float: left;\n  margin: $space-smaller;\n  max-width: 100%;\n\n  .option-button {\n    background: transparent;\n    border-radius: $space-large;\n    border: 0;\n    cursor: pointer;\n    height: auto;\n    line-height: 1.5;\n    min-height: $space-two * 2;\n    text-align: left;\n    white-space: normal;\n\n    span {\n      display: inline-block;\n      vertical-align: middle;\n    }\n\n    > .icon {\n      margin-right: $space-smaller;\n      font-size: $font-size-medium;\n    }\n  }\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatOption.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatOption.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatOptions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatOptions.vue?vue&type=script&lang=js&\"","<template>\n  <div\n    class=\"options-message chat-bubble agent\"\n    :class=\"$dm('bg-white', 'dark:bg-slate-700')\"\n  >\n    <div class=\"card-body\">\n      <h4 class=\"title\" :class=\"$dm('text-black-900', 'dark:text-slate-50')\">\n        {{ title }}\n      </h4>\n      <ul\n        v-if=\"!hideFields\"\n        class=\"options\"\n        :class=\"{ 'has-selected': !!selected }\"\n      >\n        <chat-option\n          v-for=\"option in options\"\n          :key=\"option.id\"\n          :action=\"option\"\n          :is-selected=\"isSelected(option)\"\n          @click=\"onClick\"\n        />\n      </ul>\n    </div>\n  </div>\n</template>\n\n<script>\nimport ChatOption from 'shared/components/ChatOption';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\n\nexport default {\n  components: {\n    ChatOption,\n  },\n  mixins: [darkModeMixin],\n  props: {\n    title: {\n      type: String,\n      default: '',\n    },\n    options: {\n      type: Array,\n      default: () => [],\n    },\n    selected: {\n      type: String,\n      default: '',\n    },\n    hideFields: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  methods: {\n    isSelected(option) {\n      return this.selected === option.id;\n    },\n    onClick(selectedOption) {\n      this.$emit('click', selectedOption);\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\">\n@import '~dashboard/assets/scss/variables.scss';\n.has-selected {\n  .option-button:not(.is-selected) {\n    color: $color-light-gray;\n    cursor: initial;\n  }\n}\n</style>\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n\n.options-message {\n  max-width: 17rem;\n  padding: $space-small $space-normal;\n  border-radius: $space-small;\n  overflow: hidden;\n\n  .title {\n    font-size: $font-size-default;\n    font-weight: $font-weight-normal;\n    margin-top: $space-smaller;\n    margin-bottom: $space-smaller;\n    line-height: 1.5;\n  }\n\n  .options {\n    width: 100%;\n\n    > li {\n      list-style: none;\n      padding: 0;\n    }\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./ChatOption.vue?vue&type=template&id=dddfa04c&scoped=true&\"\nimport script from \"./ChatOption.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatOption.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatOption.vue?vue&type=style&index=0&id=dddfa04c&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"dddfa04c\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"option\",class:{ 'is-selected': _vm.isSelected },style:({ borderColor: _vm.widgetColor })},[_c('button',{staticClass:\"option-button button\",on:{\"click\":_vm.onClick}},[_c('span',{style:({ color: _vm.widgetColor })},[_vm._v(_vm._s(_vm.action.title))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./ChatOptions.vue?vue&type=template&id=d07851ae&scoped=true&\"\nimport script from \"./ChatOptions.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatOptions.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatOptions.vue?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"./ChatOptions.vue?vue&type=style&index=1&id=d07851ae&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"d07851ae\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"options-message chat-bubble agent\",class:_vm.$dm('bg-white', 'dark:bg-slate-700')},[_c('div',{staticClass:\"card-body\"},[_c('h4',{staticClass:\"title\",class:_vm.$dm('text-black-900', 'dark:text-slate-50')},[_vm._v(\"\\n      \"+_vm._s(_vm.title)+\"\\n    \")]),_vm._v(\" \"),(!_vm.hideFields)?_c('ul',{staticClass:\"options\",class:{ 'has-selected': !!_vm.selected }},_vm._l((_vm.options),function(option){return _c('chat-option',{key:option.id,attrs:{\"action\":option,\"is-selected\":_vm.isSelected(option)},on:{\"click\":_vm.onClick}})}),1):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Article.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Article.vue?vue&type=script&lang=js&\"","<template>\n  <div\n    v-if=\"!!items.length\"\n    class=\"chat-bubble agent\"\n    :class=\"$dm('bg-white', 'dark:bg-slate-700')\"\n  >\n    <div v-for=\"item in items\" :key=\"item.link\" class=\"article-item\">\n      <a :href=\"item.link\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">\n        <span class=\"title flex items-center text-black-900 font-medium\">\n          <fluent-icon\n            icon=\"link\"\n            class=\"mr-1\"\n            :class=\"$dm('text-black-900', 'dark:text-slate-50')\"\n          />\n          <span :class=\"$dm('text-slate-900', 'dark:text-slate-50')\">{{\n            item.title\n          }}</span>\n        </span>\n        <span\n          class=\"description\"\n          :class=\"$dm('text-slate-700', 'dark:text-slate-200')\"\n        >\n          {{ truncateMessage(item.description) }}\n        </span>\n      </a>\n    </div>\n  </div>\n</template>\n\n<script>\nimport messageFormatterMixin from 'shared/mixins/messageFormatterMixin';\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\n\nexport default {\n  components: {\n    FluentIcon,\n  },\n  mixins: [messageFormatterMixin, darkModeMixin],\n  props: {\n    items: {\n      type: Array,\n      default: () => [],\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n\n.article-item {\n  border-bottom: 1px solid $color-border;\n  font-size: $font-size-default;\n  padding: $space-small 0;\n\n  a {\n    color: $color-body;\n    text-decoration: none;\n  }\n\n  .description {\n    display: block;\n    margin-top: $space-smaller;\n  }\n\n  &:last-child {\n    border-bottom: 0;\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./Article.vue?vue&type=template&id=feefd62e&scoped=true&\"\nimport script from \"./Article.vue?vue&type=script&lang=js&\"\nexport * from \"./Article.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Article.vue?vue&type=style&index=0&id=feefd62e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"feefd62e\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!!_vm.items.length)?_c('div',{staticClass:\"chat-bubble agent\",class:_vm.$dm('bg-white', 'dark:bg-slate-700')},_vm._l((_vm.items),function(item){return _c('div',{key:item.link,staticClass:\"article-item\"},[_c('a',{attrs:{\"href\":item.link,\"target\":\"_blank\",\"rel\":\"noopener noreferrer nofollow\"}},[_c('span',{staticClass:\"title flex items-center text-black-900 font-medium\"},[_c('fluent-icon',{staticClass:\"mr-1\",class:_vm.$dm('text-black-900', 'dark:text-slate-50'),attrs:{\"icon\":\"link\"}}),_vm._v(\" \"),_c('span',{class:_vm.$dm('text-slate-900', 'dark:text-slate-50')},[_vm._v(_vm._s(item.title))])],1),_vm._v(\" \"),_c('span',{staticClass:\"description\",class:_vm.$dm('text-slate-700', 'dark:text-slate-200')},[_vm._v(\"\\n        \"+_vm._s(_vm.truncateMessage(item.description))+\"\\n      \")])])])}),0):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div>\n    <form\n      v-if=\"!hasSubmitted\"\n      class=\"email-input-group\"\n      @submit.prevent=\"onSubmit\"\n    >\n      <input\n        v-model.trim=\"email\"\n        class=\"form-input\"\n        :placeholder=\"$t('EMAIL_PLACEHOLDER')\"\n        :class=\"inputHasError\"\n        @input=\"$v.email.$touch\"\n        @keydown.enter=\"onSubmit\"\n      />\n      <button\n        class=\"button small\"\n        :disabled=\"$v.email.$invalid\"\n        :style=\"{\n          background: widgetColor,\n          borderColor: widgetColor,\n          color: textColor,\n        }\"\n      >\n        <fluent-icon v-if=\"!isUpdating\" icon=\"chevron-right\" />\n        <spinner v-else class=\"mx-2\" />\n      </button>\n    </form>\n  </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex';\nimport { required, email } from 'vuelidate/lib/validators';\nimport { getContrastingTextColor } from '@chatwoot/utils';\n\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\nimport Spinner from 'shared/components/Spinner';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\n\nexport default {\n  components: {\n    FluentIcon,\n    Spinner,\n  },\n  mixins: [darkModeMixin],\n  props: {\n    messageId: {\n      type: Number,\n      required: true,\n    },\n    messageContentAttributes: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  data() {\n    return {\n      email: '',\n      isUpdating: false,\n    };\n  },\n  computed: {\n    ...mapGetters({\n      widgetColor: 'appConfig/getWidgetColor',\n    }),\n    textColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n    hasSubmitted() {\n      return (\n        this.messageContentAttributes &&\n        this.messageContentAttributes.submitted_email\n      );\n    },\n    inputColor() {\n      return `${this.$dm('bg-white', 'dark:bg-slate-600')}\n        ${this.$dm('text-black-900', 'dark:text-slate-50')}`;\n    },\n    inputHasError() {\n      return this.$v.email.$error\n        ? `${this.inputColor} error`\n        : `${this.inputColor}`;\n    },\n  },\n  validations: {\n    email: {\n      required,\n      email,\n    },\n  },\n  methods: {\n    async onSubmit() {\n      if (this.$v.$invalid) {\n        return;\n      }\n      this.isUpdating = true;\n      try {\n        await this.$store.dispatch('message/update', {\n          email: this.email,\n          messageId: this.messageId,\n        });\n      } catch (error) {\n        // Ignore error\n      } finally {\n        this.isUpdating = false;\n      }\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n\n.email-input-group {\n  display: flex;\n  margin: $space-small 0;\n  min-width: 200px;\n\n  input {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0;\n    padding: $space-one;\n    width: 100%;\n\n    &::placeholder {\n      color: $color-light-gray;\n    }\n\n    &.error {\n      border-color: $color-error;\n    }\n  }\n\n  .button {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n    font-size: $font-size-large;\n    height: auto;\n    margin-left: -1px;\n\n    .spinner {\n      display: block;\n      padding: 0;\n      height: auto;\n      width: auto;\n    }\n  }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EmailInput.vue?vue&type=template&id=7b523820&scoped=true&\"\nimport script from \"./EmailInput.vue?vue&type=script&lang=js&\"\nexport * from \"./EmailInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmailInput.vue?vue&type=style&index=0&id=7b523820&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7b523820\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.hasSubmitted)?_c('form',{staticClass:\"email-input-group\",on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit($event)}}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.email),expression:\"email\",modifiers:{\"trim\":true}}],staticClass:\"form-input\",class:_vm.inputHasError,attrs:{\"placeholder\":_vm.$t('EMAIL_PLACEHOLDER')},domProps:{\"value\":(_vm.email)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.email=$event.target.value.trim()},_vm.$v.email.$touch],\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.onSubmit($event)},\"blur\":function($event){return _vm.$forceUpdate()}}}),_vm._v(\" \"),_c('button',{staticClass:\"button small\",style:({\n        background: _vm.widgetColor,\n        borderColor: _vm.widgetColor,\n        color: _vm.textColor,\n      }),attrs:{\"disabled\":_vm.$v.email.$invalid}},[(!_vm.isUpdating)?_c('fluent-icon',{attrs:{\"icon\":\"chevron-right\"}}):_c('spinner',{staticClass:\"mx-2\"})],1)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div\n    class=\"customer-satisfaction\"\n    :class=\"$dm('bg-white', 'dark:bg-slate-700')\"\n    :style=\"{ borderColor: widgetColor }\"\n  >\n    <h6 class=\"title\" :class=\"$dm('text-slate-900', 'dark:text-slate-50')\">\n      {{ title }}\n    </h6>\n    <div class=\"ratings\">\n      <button\n        v-for=\"rating in ratings\"\n        :key=\"rating.key\"\n        :class=\"buttonClass(rating)\"\n        @click=\"selectRating(rating)\"\n      >\n        {{ rating.emoji }}\n      </button>\n    </div>\n    <form\n      v-if=\"!isFeedbackSubmitted\"\n      class=\"feedback-form\"\n      @submit.prevent=\"onSubmit()\"\n    >\n      <input\n        v-model=\"feedback\"\n        class=\"form-input\"\n        :class=\"inputColor\"\n        :placeholder=\"$t('CSAT.PLACEHOLDER')\"\n        @keydown.enter=\"onSubmit\"\n      />\n      <button\n        class=\"button small\"\n        :disabled=\"isButtonDisabled\"\n        :style=\"{\n          background: widgetColor,\n          borderColor: widgetColor,\n          color: textColor,\n        }\"\n      >\n        <spinner v-if=\"isUpdating && feedback\" />\n        <fluent-icon v-else icon=\"chevron-right\" />\n      </button>\n    </form>\n  </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex';\nimport Spinner from 'shared/components/Spinner';\nimport { CSAT_RATINGS } from 'shared/constants/messages';\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\nimport darkModeMixin from 'widget/mixins/darkModeMixin';\nimport { getContrastingTextColor } from '@chatwoot/utils';\n\nexport default {\n  components: {\n    Spinner,\n    FluentIcon,\n  },\n  mixins: [darkModeMixin],\n  props: {\n    messageContentAttributes: {\n      type: Object,\n      default: () => {},\n    },\n    messageId: {\n      type: Number,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      email: '',\n      ratings: CSAT_RATINGS,\n      selectedRating: null,\n      isUpdating: false,\n      feedback: '',\n    };\n  },\n  computed: {\n    ...mapGetters({ widgetColor: 'appConfig/getWidgetColor' }),\n    isRatingSubmitted() {\n      return this.messageContentAttributes?.csat_survey_response?.rating;\n    },\n    isFeedbackSubmitted() {\n      return this.messageContentAttributes?.csat_survey_response\n        ?.feedback_message;\n    },\n    isButtonDisabled() {\n      return !(this.selectedRating && this.feedback);\n    },\n    inputColor() {\n      return `${this.$dm('bg-white', 'dark:bg-slate-600')}\n        ${this.$dm('text-black-900', 'dark:text-slate-50')}`;\n    },\n    textColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n    title() {\n      return this.isRatingSubmitted\n        ? this.$t('CSAT.SUBMITTED_TITLE')\n        : this.$t('CSAT.TITLE');\n    },\n  },\n\n  mounted() {\n    if (this.isRatingSubmitted) {\n      const {\n        csat_survey_response: { rating, feedback_message },\n      } = this.messageContentAttributes;\n      this.selectedRating = rating;\n      this.feedback = feedback_message;\n    }\n  },\n\n  methods: {\n    buttonClass(rating) {\n      return [\n        { selected: rating.value === this.selectedRating },\n        { disabled: this.isRatingSubmitted },\n        { hover: this.isRatingSubmitted },\n        'emoji-button',\n      ];\n    },\n    async onSubmit() {\n      this.isUpdating = true;\n      try {\n        await this.$store.dispatch('message/update', {\n          submittedValues: {\n            csat_survey_response: {\n              rating: this.selectedRating,\n              feedback_message: this.feedback,\n            },\n          },\n          messageId: this.messageId,\n        });\n      } catch (error) {\n        // Ignore error\n      } finally {\n        this.isUpdating = false;\n      }\n    },\n    selectRating(rating) {\n      this.selectedRating = rating.value;\n      this.onSubmit();\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n@import '~widget/assets/scss/mixins.scss';\n\n.customer-satisfaction {\n  @include light-shadow;\n\n  border-bottom-left-radius: $space-smaller;\n  border-radius: $space-small;\n  border-top: $space-micro solid $color-woot;\n  color: $color-body;\n  display: inline-block;\n  line-height: 1.5;\n  margin-top: $space-smaller;\n  width: 80%;\n\n  .title {\n    font-size: $font-size-default;\n    font-weight: $font-weight-medium;\n    padding: $space-two $space-one 0;\n    text-align: center;\n  }\n\n  .ratings {\n    display: flex;\n    justify-content: space-around;\n    padding: $space-two $space-normal;\n\n    .emoji-button {\n      box-shadow: none;\n      filter: grayscale(100%);\n      font-size: $font-size-big;\n      outline: none;\n\n      &.selected,\n      &:hover,\n      &:focus,\n      &:active {\n        filter: grayscale(0%);\n        transform: scale(1.32);\n      }\n\n      &.disabled {\n        cursor: default;\n        opacity: 0.5;\n        pointer-events: none;\n      }\n    }\n  }\n  .feedback-form {\n    display: flex;\n\n    input {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n      border-bottom-left-radius: $space-small;\n      border: 0;\n      border-top: 1px solid $color-border;\n      padding: $space-one;\n      width: 100%;\n\n      &::placeholder {\n        color: $color-light-gray;\n      }\n    }\n\n    .button {\n      appearance: none;\n      border-bottom-left-radius: 0;\n      border-top-left-radius: 0;\n      border-bottom-right-radius: $space-small;\n      font-size: $font-size-large;\n      height: auto;\n      margin-left: -1px;\n\n      .spinner {\n        display: block;\n        padding: 0;\n        height: auto;\n        width: auto;\n      }\n    }\n  }\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSatisfaction.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomerSatisfaction.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CustomerSatisfaction.vue?vue&type=template&id=1f91202a&scoped=true&\"\nimport script from \"./CustomerSatisfaction.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomerSatisfaction.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomerSatisfaction.vue?vue&type=style&index=0&id=1f91202a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1f91202a\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"customer-satisfaction\",class:_vm.$dm('bg-white', 'dark:bg-slate-700'),style:({ borderColor: _vm.widgetColor })},[_c('h6',{staticClass:\"title\",class:_vm.$dm('text-slate-900', 'dark:text-slate-50')},[_vm._v(\"\\n    \"+_vm._s(_vm.title)+\"\\n  \")]),_vm._v(\" \"),_c('div',{staticClass:\"ratings\"},_vm._l((_vm.ratings),function(rating){return _c('button',{key:rating.key,class:_vm.buttonClass(rating),on:{\"click\":function($event){return _vm.selectRating(rating)}}},[_vm._v(\"\\n      \"+_vm._s(rating.emoji)+\"\\n    \")])}),0),_vm._v(\" \"),(!_vm.isFeedbackSubmitted)?_c('form',{staticClass:\"feedback-form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit()}}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.feedback),expression:\"feedback\"}],staticClass:\"form-input\",class:_vm.inputColor,attrs:{\"placeholder\":_vm.$t('CSAT.PLACEHOLDER')},domProps:{\"value\":(_vm.feedback)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.onSubmit($event)},\"input\":function($event){if($event.target.composing){ return; }_vm.feedback=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"button small\",style:({\n        background: _vm.widgetColor,\n        borderColor: _vm.widgetColor,\n        color: _vm.textColor,\n      }),attrs:{\"disabled\":_vm.isButtonDisabled}},[(_vm.isUpdating && _vm.feedback)?_c('spinner'):_c('fluent-icon',{attrs:{\"icon\":\"chevron-right\"}})],1)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { API } from 'widget/helpers/axios';\nimport { buildSearchParamsWithLocale } from '../helpers/urlParamsHelper';\n\nexport default {\n  addParticipantToDyteMeeting: messageId => {\n    const search = buildSearchParamsWithLocale(window.location.search);\n    const urlData = {\n      url: `/api/v1/widget/integrations/dyte/add_participant_to_meeting${search}`,\n    };\n    return API.post(urlData.url, { message_id: messageId });\n  },\n};\n","<template>\n  <div>\n    <button\n      class=\"button join-call-button\"\n      color-scheme=\"secondary\"\n      :is-loading=\"isLoading\"\n      :style=\"{\n        background: widgetColor,\n        borderColor: widgetColor,\n        color: textColor,\n      }\"\n      @click=\"joinTheCall\"\n    >\n      <fluent-icon icon=\"video-add\" class=\"mr-2\" />\n      {{ $t('INTEGRATIONS.DYTE.CLICK_HERE_TO_JOIN') }}\n    </button>\n    <div v-if=\"dyteAuthToken\" class=\"video-call--container\">\n      <iframe\n        :src=\"meetingLink\"\n        allow=\"camera;microphone;fullscreen;display-capture;picture-in-picture;clipboard-write;\"\n      />\n      <button\n        class=\"button small join-call-button leave-room-button\"\n        @click=\"leaveTheRoom\"\n      >\n        {{ $t('INTEGRATIONS.DYTE.LEAVE_THE_ROOM') }}\n      </button>\n    </div>\n  </div>\n</template>\n<script>\nimport IntegrationAPIClient from 'widget/api/integration';\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\nimport { buildDyteURL } from 'shared/helpers/IntegrationHelper';\nimport { getContrastingTextColor } from '@chatwoot/utils';\nimport { mapGetters } from 'vuex';\n\nexport default {\n  components: {\n    FluentIcon,\n  },\n  props: {\n    messageId: {\n      type: Number,\n      required: true,\n    },\n    meetingData: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  data() {\n    return { isLoading: false, dyteAuthToken: '', isSDKMounted: false };\n  },\n  computed: {\n    ...mapGetters({ widgetColor: 'appConfig/getWidgetColor' }),\n    textColor() {\n      return getContrastingTextColor(this.widgetColor);\n    },\n    meetingLink() {\n      return buildDyteURL(this.meetingData.room_name, this.dyteAuthToken);\n    },\n  },\n  methods: {\n    async joinTheCall() {\n      this.isLoading = true;\n      try {\n        const {\n          data: { authResponse: { authToken = '' } = {} } = {},\n        } = await IntegrationAPIClient.addParticipantToDyteMeeting(\n          this.messageId\n        );\n        this.dyteAuthToken = authToken;\n      } catch (error) {\n        // Ignore Error for now\n      } finally {\n        this.isLoading = false;\n      }\n    },\n    leaveTheRoom() {\n      this.dyteAuthToken = '';\n    },\n  },\n};\n</script>\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n\n.video-call--container {\n  position: fixed;\n  top: 72px;\n  left: 0;\n  width: 100%;\n  height: 100%;\n\n  z-index: 100;\n\n  iframe {\n    width: 100%;\n    height: calc(100% - 72px);\n\n    border: 0;\n  }\n}\n\n.join-call-button {\n  margin: $space-small 0;\n  border-radius: 4px;\n  display: flex;\n  align-items: center;\n}\n\n.leave-room-button {\n  position: absolute;\n  top: 0;\n  right: $space-small;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IntegrationCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IntegrationCard.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AgentMessageBubble.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AgentMessageBubble.vue?vue&type=script&lang=js&\"","<template>\n  <div class=\"chat-bubble-wrap\">\n    <div\n      v-if=\"\n        !isCards && !isOptions && !isForm && !isArticle && !isCards && !isCSAT\n      \"\n      class=\"chat-bubble agent\"\n      :class=\"$dm('bg-white', 'dark:bg-slate-700 has-dark-mode')\"\n    >\n      <div\n        v-dompurify-html=\"formatMessage(message, false)\"\n        class=\"message-content\"\n        :class=\"$dm('text-black-900', 'dark:text-slate-50')\"\n        dir=\"auto\"\n      />\n      <email-input\n        v-if=\"isTemplateEmail\"\n        :message-id=\"messageId\"\n        :message-content-attributes=\"messageContentAttributes\"\n      />\n\n      <integration-card\n        v-if=\"isIntegrations\"\n        :message-id=\"messageId\"\n        :meeting-data=\"messageContentAttributes.data\"\n      />\n    </div>\n    <div v-if=\"isOptions\">\n      <chat-options\n        :title=\"message\"\n        :options=\"messageContentAttributes.items\"\n        :hide-fields=\"!!messageContentAttributes.submitted_values\"\n        @click=\"onOptionSelect\"\n      />\n    </div>\n    <chat-form\n      v-if=\"isForm && !messageContentAttributes.submitted_values\"\n      :items=\"messageContentAttributes.items\"\n      :button-label=\"messageContentAttributes.button_label\"\n      :submitted-values=\"messageContentAttributes.submitted_values\"\n      @submit=\"onFormSubmit\"\n    />\n    <div v-if=\"isCards\">\n      <chat-card\n        v-for=\"item in messageContentAttributes.items\"\n        :key=\"item.title\"\n        :media-url=\"item.media_url\"\n        :title=\"item.title\"\n        :description=\"item.description\"\n        :actions=\"item.actions\"\n      />\n    </div>\n    <div v-if=\"isArticle\">\n      <chat-article :items=\"messageContentAttributes.items\" />\n    </div>\n    <customer-satisfaction\n      v-if=\"isCSAT\"\n      :message-content-attributes=\"messageContentAttributes.submitted_values\"\n      :message-id=\"messageId\"\n    />\n  </div>\n</template>\n\n<script>\nimport messageFormatterMixin from 'shared/mixins/messageFormatterMixin';\nimport ChatCard from 'shared/components/ChatCard';\nimport ChatForm from 'shared/components/ChatForm';\nimport ChatOptions from 'shared/components/ChatOptions';\nimport ChatArticle from './template/Article';\nimport EmailInput from './template/EmailInput';\nimport CustomerSatisfaction from 'shared/components/CustomerSatisfaction';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\nimport IntegrationCard from './template/IntegrationCard';\n\nexport default {\n  name: 'AgentMessageBubble',\n  components: {\n    ChatArticle,\n    ChatCard,\n    ChatForm,\n    ChatOptions,\n    EmailInput,\n    CustomerSatisfaction,\n    IntegrationCard,\n  },\n  mixins: [messageFormatterMixin, darkModeMixin],\n  props: {\n    message: { type: String, default: null },\n    contentType: { type: String, default: null },\n    messageType: { type: Number, default: null },\n    messageId: { type: Number, default: null },\n    messageContentAttributes: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  computed: {\n    isTemplate() {\n      return this.messageType === 3;\n    },\n    isTemplateEmail() {\n      return this.contentType === 'input_email';\n    },\n    isCards() {\n      return this.contentType === 'cards';\n    },\n    isOptions() {\n      return this.contentType === 'input_select';\n    },\n    isForm() {\n      return this.contentType === 'form';\n    },\n    isArticle() {\n      return this.contentType === 'article';\n    },\n    isCSAT() {\n      return this.contentType === 'input_csat';\n    },\n    isIntegrations() {\n      return this.contentType === 'integrations';\n    },\n  },\n  methods: {\n    onResponse(messageResponse) {\n      this.$store.dispatch('message/update', messageResponse);\n    },\n    onOptionSelect(selectedOption) {\n      this.onResponse({\n        submittedValues: [selectedOption],\n        messageId: this.messageId,\n      });\n    },\n    onFormSubmit(formValues) {\n      const formValuesAsArray = Object.keys(formValues).map(key => ({\n        name: key,\n        value: formValues[key],\n      }));\n      this.onResponse({\n        submittedValues: formValuesAsArray,\n        messageId: this.messageId,\n      });\n    },\n  },\n};\n</script>\n","import { render, staticRenderFns } from \"./IntegrationCard.vue?vue&type=template&id=45604e1d&scoped=true&\"\nimport script from \"./IntegrationCard.vue?vue&type=script&lang=js&\"\nexport * from \"./IntegrationCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./IntegrationCard.vue?vue&type=style&index=0&id=45604e1d&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"45604e1d\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('button',{staticClass:\"button join-call-button\",style:({\n      background: _vm.widgetColor,\n      borderColor: _vm.widgetColor,\n      color: _vm.textColor,\n    }),attrs:{\"color-scheme\":\"secondary\",\"is-loading\":_vm.isLoading},on:{\"click\":_vm.joinTheCall}},[_c('fluent-icon',{staticClass:\"mr-2\",attrs:{\"icon\":\"video-add\"}}),_vm._v(\"\\n    \"+_vm._s(_vm.$t('INTEGRATIONS.DYTE.CLICK_HERE_TO_JOIN'))+\"\\n  \")],1),_vm._v(\" \"),(_vm.dyteAuthToken)?_c('div',{staticClass:\"video-call--container\"},[_c('iframe',{attrs:{\"src\":_vm.meetingLink,\"allow\":\"camera;microphone;fullscreen;display-capture;picture-in-picture;clipboard-write;\"}}),_vm._v(\" \"),_c('button',{staticClass:\"button small join-call-button leave-room-button\",on:{\"click\":_vm.leaveTheRoom}},[_vm._v(\"\\n      \"+_vm._s(_vm.$t('INTEGRATIONS.DYTE.LEAVE_THE_ROOM'))+\"\\n    \")])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./AgentMessageBubble.vue?vue&type=template&id=380beb66&\"\nimport script from \"./AgentMessageBubble.vue?vue&type=script&lang=js&\"\nexport * from \"./AgentMessageBubble.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"chat-bubble-wrap\"},[(\n      !_vm.isCards && !_vm.isOptions && !_vm.isForm && !_vm.isArticle && !_vm.isCards && !_vm.isCSAT\n    )?_c('div',{staticClass:\"chat-bubble agent\",class:_vm.$dm('bg-white', 'dark:bg-slate-700 has-dark-mode')},[_c('div',{directives:[{name:\"dompurify-html\",rawName:\"v-dompurify-html\",value:(_vm.formatMessage(_vm.message, false)),expression:\"formatMessage(message, false)\"}],staticClass:\"message-content\",class:_vm.$dm('text-black-900', 'dark:text-slate-50'),attrs:{\"dir\":\"auto\"}}),_vm._v(\" \"),(_vm.isTemplateEmail)?_c('email-input',{attrs:{\"message-id\":_vm.messageId,\"message-content-attributes\":_vm.messageContentAttributes}}):_vm._e(),_vm._v(\" \"),(_vm.isIntegrations)?_c('integration-card',{attrs:{\"message-id\":_vm.messageId,\"meeting-data\":_vm.messageContentAttributes.data}}):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.isOptions)?_c('div',[_c('chat-options',{attrs:{\"title\":_vm.message,\"options\":_vm.messageContentAttributes.items,\"hide-fields\":!!_vm.messageContentAttributes.submitted_values},on:{\"click\":_vm.onOptionSelect}})],1):_vm._e(),_vm._v(\" \"),(_vm.isForm && !_vm.messageContentAttributes.submitted_values)?_c('chat-form',{attrs:{\"items\":_vm.messageContentAttributes.items,\"button-label\":_vm.messageContentAttributes.button_label,\"submitted-values\":_vm.messageContentAttributes.submitted_values},on:{\"submit\":_vm.onFormSubmit}}):_vm._e(),_vm._v(\" \"),(_vm.isCards)?_c('div',_vm._l((_vm.messageContentAttributes.items),function(item){return _c('chat-card',{key:item.title,attrs:{\"media-url\":item.media_url,\"title\":item.title,\"description\":item.description,\"actions\":item.actions}})}),1):_vm._e(),_vm._v(\" \"),(_vm.isArticle)?_c('div',[_c('chat-article',{attrs:{\"items\":_vm.messageContentAttributes.items}})],1):_vm._e(),_vm._v(\" \"),(_vm.isCSAT)?_c('customer-satisfaction',{attrs:{\"message-content-attributes\":_vm.messageContentAttributes.submitted_values,\"message-id\":_vm.messageId}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div\n    class=\"agent-message-wrap\"\n    :class=\"{ 'has-response': hasRecordedResponse || isASubmittedForm }\"\n  >\n    <div v-if=\"!isASubmittedForm\" class=\"agent-message\">\n      <div class=\"avatar-wrap\">\n        <thumbnail\n          v-if=\"message.showAvatar || hasRecordedResponse\"\n          :src=\"avatarUrl\"\n          size=\"24px\"\n          :username=\"agentName\"\n        />\n      </div>\n      <div class=\"message-wrap\">\n        <AgentMessageBubble\n          v-if=\"shouldDisplayAgentMessage\"\n          :content-type=\"contentType\"\n          :message-content-attributes=\"messageContentAttributes\"\n          :message-id=\"message.id\"\n          :message-type=\"messageType\"\n          :message=\"message.content\"\n        />\n        <div\n          v-if=\"hasAttachments\"\n          class=\"chat-bubble has-attachment agent\"\n          :class=\"(wrapClass, $dm('bg-white', 'dark:bg-slate-700'))\"\n        >\n          <div v-for=\"attachment in message.attachments\" :key=\"attachment.id\">\n            <image-bubble\n              v-if=\"attachment.file_type === 'image' && !hasImageError\"\n              :url=\"attachment.data_url\"\n              :thumb=\"attachment.data_url\"\n              :readable-time=\"readableTime\"\n              @error=\"onImageLoadError\"\n            />\n            <audio v-else-if=\"attachment.file_type === 'audio'\" controls>\n              <source :src=\"attachment.data_url\" />\n            </audio>\n            <file-bubble v-else :url=\"attachment.data_url\" />\n          </div>\n        </div>\n        <p\n          v-if=\"message.showAvatar || hasRecordedResponse\"\n          class=\"agent-name\"\n          :class=\"$dm('text-slate-700', 'dark:text-slate-200')\"\n        >\n          {{ agentName }}\n        </p>\n      </div>\n    </div>\n\n    <UserMessage v-if=\"hasRecordedResponse\" :message=\"responseMessage\" />\n    <div v-if=\"isASubmittedForm\">\n      <UserMessage\n        v-for=\"submittedValue in submittedFormValues\"\n        :key=\"submittedValue.id\"\n        :message=\"submittedValue\"\n      />\n    </div>\n  </div>\n</template>\n\n<script>\nimport UserMessage from 'widget/components/UserMessage';\nimport AgentMessageBubble from 'widget/components/AgentMessageBubble';\nimport timeMixin from 'dashboard/mixins/time';\nimport ImageBubble from 'widget/components/ImageBubble';\nimport FileBubble from 'widget/components/FileBubble';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail';\nimport { MESSAGE_TYPE } from 'widget/helpers/constants';\nimport configMixin from '../mixins/configMixin';\nimport messageMixin from '../mixins/messageMixin';\nimport { isASubmittedFormMessage } from 'shared/helpers/MessageTypeHelper';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\n\nexport default {\n  name: 'AgentMessage',\n  components: {\n    AgentMessageBubble,\n    ImageBubble,\n    Thumbnail,\n    UserMessage,\n    FileBubble,\n  },\n  mixins: [timeMixin, configMixin, messageMixin, darkModeMixin],\n  props: {\n    message: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  data() {\n    return {\n      hasImageError: false,\n    };\n  },\n  computed: {\n    shouldDisplayAgentMessage() {\n      if (\n        this.contentType === 'input_select' &&\n        this.messageContentAttributes.submitted_values &&\n        !this.message.content\n      ) {\n        return false;\n      }\n      return this.message.content;\n    },\n    readableTime() {\n      const { created_at: createdAt = '' } = this.message;\n      return this.messageStamp(createdAt, 'LLL d yyyy, h:mm a');\n    },\n    messageType() {\n      const { message_type: type = 1 } = this.message;\n      return type;\n    },\n    contentType() {\n      const { content_type: type = '' } = this.message;\n      return type;\n    },\n    agentName() {\n      if (this.message.message_type === MESSAGE_TYPE.TEMPLATE) {\n        return this.botName || 'Bot';\n      }\n      if (this.message.sender) {\n        return this.message.sender.available_name || this.message.sender.name;\n      }\n      return this.botName || 'Bot';\n    },\n    avatarUrl() {\n      // eslint-disable-next-line\n      const BotImage = require('dashboard/assets/images/chatwoot_bot.png');\n      const displayImage = this.useInboxAvatarForBot\n        ? this.inboxAvatarUrl\n        : BotImage;\n\n      if (this.message.message_type === MESSAGE_TYPE.TEMPLATE) {\n        return displayImage;\n      }\n\n      return this.message.sender\n        ? this.message.sender.avatar_url\n        : displayImage;\n    },\n    hasRecordedResponse() {\n      return (\n        this.messageContentAttributes.submitted_email ||\n        (this.messageContentAttributes.submitted_values &&\n          !['form', 'input_csat'].includes(this.contentType))\n      );\n    },\n    responseMessage() {\n      if (this.messageContentAttributes.submitted_email) {\n        return { content: this.messageContentAttributes.submitted_email };\n      }\n\n      if (this.messageContentAttributes.submitted_values) {\n        if (this.contentType === 'input_select') {\n          const [\n            selectionOption = {},\n          ] = this.messageContentAttributes.submitted_values;\n          return { content: selectionOption.title || selectionOption.value };\n        }\n      }\n      return '';\n    },\n    isASubmittedForm() {\n      return isASubmittedFormMessage(this.message);\n    },\n    submittedFormValues() {\n      return this.messageContentAttributes.submitted_values.map(\n        submittedValue => ({\n          id: submittedValue.name,\n          content: submittedValue.value,\n        })\n      );\n    },\n    wrapClass() {\n      return {\n        'has-text': this.shouldDisplayAgentMessage,\n      };\n    },\n  },\n  watch: {\n    message() {\n      this.hasImageError = false;\n    },\n  },\n  mounted() {\n    this.hasImageError = false;\n  },\n  methods: {\n    onImageLoadError() {\n      this.hasImageError = true;\n    },\n  },\n};\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AgentMessage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AgentMessage.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatMessage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatMessage.vue?vue&type=script&lang=js&\"","<template>\n  <UserMessage v-if=\"isUserMessage\" :message=\"message\" />\n  <AgentMessage v-else :message=\"message\" />\n</template>\n\n<script>\nimport AgentMessage from 'widget/components/AgentMessage.vue';\nimport UserMessage from 'widget/components/UserMessage.vue';\nimport { MESSAGE_TYPE } from 'widget/helpers/constants';\n\nexport default {\n  components: {\n    AgentMessage,\n    UserMessage,\n  },\n  props: {\n    message: {\n      type: Object,\n      default: () => {},\n    },\n  },\n  computed: {\n    isUserMessage() {\n      return this.message.message_type === MESSAGE_TYPE.INCOMING;\n    },\n  },\n};\n</script>\n\n<style scoped lang=\"scss\">\n.message-wrap {\n  display: flex;\n  flex-direction: row;\n  align-items: flex-end;\n  max-width: 90%;\n}\n</style>\n\n<style lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n\n.chat-bubble .message-content,\n.chat-bubble.user {\n  p code {\n    background-color: var(--s-75);\n    display: inline-block;\n    line-height: 1;\n\n    border-radius: $border-radius-small;\n    padding: $space-smaller;\n  }\n\n  pre {\n    overflow-y: auto;\n    background-color: var(--s-75);\n    border-color: var(--s-75);\n    color: var(--s-800);\n    border-radius: $border-radius-normal;\n    padding: $space-small;\n    margin-top: $space-smaller;\n    margin-bottom: $space-small;\n    display: block;\n    line-height: 1.7;\n    white-space: pre-wrap;\n\n    code {\n      background-color: transparent;\n      color: var(--s-800);\n      padding: 0;\n    }\n  }\n\n  blockquote {\n    border-left: $space-micro solid var(--s-75);\n    color: var(--s-800);\n    padding: $space-smaller $space-small;\n    margin: $space-smaller 0;\n    padding: $space-small $space-small 0 $space-normal;\n  }\n}\n\n@media (prefers-color-scheme: dark) {\n  .chat-bubble.agent.has-dark-mode {\n    blockquote {\n      border-color: var(--s-200);\n      color: var(--s-50);\n    }\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./AgentMessage.vue?vue&type=template&id=10ef78b4&\"\nimport script from \"./AgentMessage.vue?vue&type=script&lang=js&\"\nexport * from \"./AgentMessage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"agent-message-wrap\",class:{ 'has-response': _vm.hasRecordedResponse || _vm.isASubmittedForm }},[(!_vm.isASubmittedForm)?_c('div',{staticClass:\"agent-message\"},[_c('div',{staticClass:\"avatar-wrap\"},[(_vm.message.showAvatar || _vm.hasRecordedResponse)?_c('thumbnail',{attrs:{\"src\":_vm.avatarUrl,\"size\":\"24px\",\"username\":_vm.agentName}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"message-wrap\"},[(_vm.shouldDisplayAgentMessage)?_c('AgentMessageBubble',{attrs:{\"content-type\":_vm.contentType,\"message-content-attributes\":_vm.messageContentAttributes,\"message-id\":_vm.message.id,\"message-type\":_vm.messageType,\"message\":_vm.message.content}}):_vm._e(),_vm._v(\" \"),(_vm.hasAttachments)?_c('div',{staticClass:\"chat-bubble has-attachment agent\",class:(_vm.wrapClass, _vm.$dm('bg-white', 'dark:bg-slate-700'))},_vm._l((_vm.message.attachments),function(attachment){return _c('div',{key:attachment.id},[(attachment.file_type === 'image' && !_vm.hasImageError)?_c('image-bubble',{attrs:{\"url\":attachment.data_url,\"thumb\":attachment.data_url,\"readable-time\":_vm.readableTime},on:{\"error\":_vm.onImageLoadError}}):(attachment.file_type === 'audio')?_c('audio',{attrs:{\"controls\":\"\"}},[_c('source',{attrs:{\"src\":attachment.data_url}})]):_c('file-bubble',{attrs:{\"url\":attachment.data_url}})],1)}),0):_vm._e(),_vm._v(\" \"),(_vm.message.showAvatar || _vm.hasRecordedResponse)?_c('p',{staticClass:\"agent-name\",class:_vm.$dm('text-slate-700', 'dark:text-slate-200')},[_vm._v(\"\\n        \"+_vm._s(_vm.agentName)+\"\\n      \")]):_vm._e()],1)]):_vm._e(),_vm._v(\" \"),(_vm.hasRecordedResponse)?_c('UserMessage',{attrs:{\"message\":_vm.responseMessage}}):_vm._e(),_vm._v(\" \"),(_vm.isASubmittedForm)?_c('div',_vm._l((_vm.submittedFormValues),function(submittedValue){return _c('UserMessage',{key:submittedValue.id,attrs:{\"message\":submittedValue}})}),1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./ChatMessage.vue?vue&type=template&id=b5e457ba&scoped=true&\"\nimport script from \"./ChatMessage.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatMessage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatMessage.vue?vue&type=style&index=0&id=b5e457ba&scoped=true&lang=scss&\"\nimport style1 from \"./ChatMessage.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"b5e457ba\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUserMessage)?_c('UserMessage',{attrs:{\"message\":_vm.message}}):_c('AgentMessage',{attrs:{\"message\":_vm.message}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AgentTypingBubble.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AgentTypingBubble.vue?vue&type=script&lang=js&\"","<template>\n  <div class=\"agent-message-wrap\">\n    <div class=\"agent-message\">\n      <div class=\"avatar-wrap\" />\n      <div class=\"message-wrap\">\n        <div\n          class=\"typing-bubble chat-bubble agent\"\n          :class=\"$dm('bg-white', 'dark:bg-slate-50')\"\n        >\n          <img\n            src=\"~widget/assets/images/typing.gif\"\n            alt=\"Agent is typing a message\"\n          />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport darkModeMixing from 'widget/mixins/darkModeMixin.js';\nexport default {\n  name: 'AgentTypingBubble',\n  mixins: [darkModeMixing],\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables.scss';\n.agent-message-wrap {\n  position: sticky;\n  bottom: $space-smaller;\n}\n\n.typing-bubble {\n  max-width: $space-normal * 2.4;\n  padding: $space-small;\n  border-bottom-left-radius: $space-two;\n  border-top-left-radius: $space-small;\n\n  img {\n    width: 100%;\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./AgentTypingBubble.vue?vue&type=template&id=1877ef14&scoped=true&\"\nimport script from \"./AgentTypingBubble.vue?vue&type=script&lang=js&\"\nexport * from \"./AgentTypingBubble.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AgentTypingBubble.vue?vue&type=style&index=0&id=1877ef14&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1877ef14\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"agent-message-wrap\"},[_c('div',{staticClass:\"agent-message\"},[_c('div',{staticClass:\"avatar-wrap\"}),_vm._v(\" \"),_c('div',{staticClass:\"message-wrap\"},[_c('div',{staticClass:\"typing-bubble chat-bubble agent\",class:_vm.$dm('bg-white', 'dark:bg-slate-50')},[_c('img',{attrs:{\"src\":require(\"widget/assets/images/typing.gif\"),\"alt\":\"Agent is typing a message\"}})])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateSeparator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateSeparator.vue?vue&type=script&lang=js&\"","<template>\n  <div\n    class=\"date--separator\"\n    :class=\"$dm('text-slate-700', 'dark:text-slate-200')\"\n  >\n    {{ formattedDate }}\n  </div>\n</template>\n\n<script>\nimport { formatDate } from 'shared/helpers/DateHelper';\nimport darkModeMixin from 'widget/mixins/darkModeMixin.js';\n\nexport default {\n  mixins: [darkModeMixin],\n  props: {\n    date: {\n      type: String,\n      required: true,\n    },\n  },\n  computed: {\n    formattedDate() {\n      return formatDate({\n        date: this.date,\n        todayText: this.$t('TODAY'),\n        yesterdayText: this.$t('YESTERDAY'),\n      });\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import '~widget/assets/scss/variables';\n\n.date--separator {\n  font-size: $font-size-default;\n  height: 50px;\n  line-height: 50px;\n  position: relative;\n  text-align: center;\n  width: 100%;\n}\n\n.date--separator::before,\n.date--separator::after {\n  background-color: $color-border;\n  content: '';\n  height: 1px;\n  position: absolute;\n  top: 24px;\n  width: calc((100% - 120px) / 2);\n}\n\n.date--separator::before {\n  left: 0;\n}\n\n.date--separator::after {\n  right: 0;\n}\n</style>\n","<template>\n  <div class=\"conversation--container\" :class=\"colorSchemeClass\">\n    <div class=\"conversation-wrap\" :class=\"{ 'is-typing': isAgentTyping }\">\n      <div v-if=\"isFetchingList\" class=\"message--loader\">\n        <spinner />\n      </div>\n      <div\n        v-for=\"groupedMessage in groupedMessages\"\n        :key=\"groupedMessage.date\"\n        class=\"messages-wrap\"\n      >\n        <date-separator :date=\"groupedMessage.date\" />\n        <chat-message\n          v-for=\"message in groupedMessage.messages\"\n          :key=\"message.id\"\n          :message=\"message\"\n        />\n      </div>\n      <agent-typing-bubble v-if=\"isAgentTyping\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport ChatMessage from 'widget/components/ChatMessage.vue';\nimport AgentTypingBubble from 'widget/components/AgentTypingBubble.vue';\nimport DateSeparator from 'shared/components/DateSeparator.vue';\nimport Spinner from 'shared/components/Spinner.vue';\nimport darkModeMixin from 'widget/mixins/darkModeMixin';\n\nimport { mapActions, mapGetters } from 'vuex';\n\nexport default {\n  name: 'ConversationWrap',\n  components: {\n    ChatMessage,\n    AgentTypingBubble,\n    DateSeparator,\n    Spinner,\n  },\n  mixins: [darkModeMixin],\n  props: {\n    groupedMessages: {\n      type: Array,\n      default: () => [],\n    },\n  },\n  data() {\n    return {\n      previousScrollHeight: 0,\n      previousConversationSize: 0,\n    };\n  },\n  computed: {\n    ...mapGetters({\n      earliestMessage: 'conversation/getEarliestMessage',\n      allMessagesLoaded: 'conversation/getAllMessagesLoaded',\n      isFetchingList: 'conversation/getIsFetchingList',\n      conversationSize: 'conversation/getConversationSize',\n      isAgentTyping: 'conversation/getIsAgentTyping',\n    }),\n    colorSchemeClass() {\n      return `${this.darkMode === 'light' ? 'light' : 'dark'}`;\n    },\n  },\n\n  watch: {\n    allMessagesLoaded() {\n      this.previousScrollHeight = 0;\n    },\n  },\n  mounted() {\n    this.$el.addEventListener('scroll', this.handleScroll);\n    this.scrollToBottom();\n  },\n  updated() {\n    if (this.previousConversationSize !== this.conversationSize) {\n      this.previousConversationSize = this.conversationSize;\n      this.scrollToBottom();\n    }\n  },\n  unmounted() {\n    this.$el.removeEventListener('scroll', this.handleScroll);\n  },\n  methods: {\n    ...mapActions('conversation', ['fetchOldConversations']),\n    scrollToBottom() {\n      const container = this.$el;\n      container.scrollTop = container.scrollHeight - this.previousScrollHeight;\n      this.previousScrollHeight = 0;\n    },\n    handleScroll() {\n      if (\n        this.isFetchingList ||\n        this.allMessagesLoaded ||\n        !this.conversationSize\n      ) {\n        return;\n      }\n\n      if (this.$el.scrollTop < 100) {\n        this.fetchOldConversations({ before: this.earliestMessage.id });\n        this.previousScrollHeight = this.$el.scrollHeight;\n      }\n    },\n  },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import '~widget/assets/scss/variables.scss';\n@import '~widget/assets/scss/mixins.scss';\n\n.conversation--container {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  overflow-y: auto;\n  color-scheme: light dark;\n\n  &.light {\n    color-scheme: light;\n  }\n  &.dark {\n    color-scheme: dark;\n  }\n}\n\n.conversation-wrap {\n  flex: 1;\n  padding: $space-large $space-small $space-small $space-small;\n}\n\n.message--loader {\n  text-align: center;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConversationWrap.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConversationWrap.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DateSeparator.vue?vue&type=template&id=0619d2c7&scoped=true&\"\nimport script from \"./DateSeparator.vue?vue&type=script&lang=js&\"\nexport * from \"./DateSeparator.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DateSeparator.vue?vue&type=style&index=0&id=0619d2c7&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0619d2c7\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"date--separator\",class:_vm.$dm('text-slate-700', 'dark:text-slate-200')},[_vm._v(\"\\n  \"+_vm._s(_vm.formattedDate)+\"\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"flex flex-col flex-1 overflow-hidden\">\n    <div class=\"flex flex-1 overflow-auto\">\n      <conversation-wrap :grouped-messages=\"groupedMessages\" />\n    </div>\n    <div class=\"px-5\">\n      <chat-footer />\n    </div>\n  </div>\n</template>\n<script>\nimport { mapGetters } from 'vuex';\nimport ChatFooter from '../components/ChatFooter.vue';\nimport ConversationWrap from '../components/ConversationWrap.vue';\n\nexport default {\n  components: { ChatFooter, ConversationWrap },\n  computed: {\n    ...mapGetters({\n      groupedMessages: 'conversation/getGroupedConversation',\n    }),\n  },\n  mounted() {\n    this.$store.dispatch('conversation/setUserLastSeen');\n  },\n};\n</script>\n","import { render, staticRenderFns } from \"./ConversationWrap.vue?vue&type=template&id=6158bb20&scoped=true&\"\nimport script from \"./ConversationWrap.vue?vue&type=script&lang=js&\"\nexport * from \"./ConversationWrap.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ConversationWrap.vue?vue&type=style&index=0&id=6158bb20&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6158bb20\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"conversation--container\",class:_vm.colorSchemeClass},[_c('div',{staticClass:\"conversation-wrap\",class:{ 'is-typing': _vm.isAgentTyping }},[(_vm.isFetchingList)?_c('div',{staticClass:\"message--loader\"},[_c('spinner')],1):_vm._e(),_vm._v(\" \"),_vm._l((_vm.groupedMessages),function(groupedMessage){return _c('div',{key:groupedMessage.date,staticClass:\"messages-wrap\"},[_c('date-separator',{attrs:{\"date\":groupedMessage.date}}),_vm._v(\" \"),_vm._l((groupedMessage.messages),function(message){return _c('chat-message',{key:message.id,attrs:{\"message\":message}})})],2)}),_vm._v(\" \"),(_vm.isAgentTyping)?_c('agent-typing-bubble'):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Messages.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Messages.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Messages.vue?vue&type=template&id=0caf55ae&\"\nimport script from \"./Messages.vue?vue&type=script&lang=js&\"\nexport * from \"./Messages.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('textarea',{ref:\"textarea\",attrs:{\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.value},on:{\"input\":_vm.onInput,\"focus\":_vm.onFocus,\"keyup\":_vm.onKeyup,\"blur\":_vm.onBlur}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResizableTextArea.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResizableTextArea.vue?vue&type=script&lang=js&\"","<template>\n  <textarea\n    ref=\"textarea\"\n    :placeholder=\"placeholder\"\n    :value=\"value\"\n    @input=\"onInput\"\n    @focus=\"onFocus\"\n    @keyup=\"onKeyup\"\n    @blur=\"onBlur\"\n  />\n</template>\n\n<script>\nconst TYPING_INDICATOR_IDLE_TIME = 4000;\nexport default {\n  props: {\n    placeholder: {\n      type: String,\n      default: '',\n    },\n    value: {\n      type: String,\n      default: '',\n    },\n    minHeight: {\n      type: Number,\n      default: 2,\n    },\n  },\n  data() {\n    return {\n      idleTimer: null,\n    };\n  },\n  watch: {\n    value() {\n      this.resizeTextarea();\n    },\n  },\n  mounted() {\n    this.$nextTick(() => {\n      if (this.value) {\n        this.resizeTextarea();\n      }\n    });\n  },\n  methods: {\n    resizeTextarea() {\n      if (!this.value) {\n        this.$el.style.height = `${this.minHeight}rem`;\n      } else {\n        this.$el.style.height = `${this.$el.scrollHeight}px`;\n      }\n    },\n    onInput(event) {\n      this.$emit('input', event.target.value);\n      this.resizeTextarea();\n    },\n    resetTyping() {\n      this.$emit('typing-off');\n      this.idleTimer = null;\n    },\n    turnOffIdleTimer() {\n      if (this.idleTimer) {\n        clearTimeout(this.idleTimer);\n      }\n    },\n    onKeyup() {\n      if (!this.idleTimer) {\n        this.$emit('typing-on');\n      }\n      this.turnOffIdleTimer();\n      this.idleTimer = setTimeout(\n        () => this.resetTyping(),\n        TYPING_INDICATOR_IDLE_TIME\n      );\n    },\n    onBlur() {\n      this.turnOffIdleTimer();\n      this.resetTyping();\n      this.$emit('blur');\n    },\n    onFocus() {\n      this.$emit('focus');\n    },\n    focus() {\n      this.$refs.textarea.focus();\n    },\n  },\n};\n</script>\n","import { render, staticRenderFns } from \"./ResizableTextArea.vue?vue&type=template&id=167e8581&\"\nimport script from \"./ResizableTextArea.vue?vue&type=script&lang=js&\"\nexport * from \"./ResizableTextArea.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","export const formatBytes = (bytes, decimals = 2) => {\n  if (bytes === 0) return '0 Bytes';\n\n  const k = 1024;\n  const dm = decimals < 0 ? 0 : decimals;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n\nexport const fileSizeInMegaBytes = bytes => {\n  return bytes / (1024 * 1024);\n};\n\nexport const checkFileSizeLimit = (file, maximumUploadLimit) => {\n  const fileSize = file?.file?.size || file?.size;\n  const fileSizeInMB = fileSizeInMegaBytes(fileSize);\n  return fileSizeInMB <= maximumUploadLimit;\n};\n","/**\n * Detects support for emoji character sets.\n *\n * Based on the Modernizr emoji detection.\n * https://github.com/Modernizr/Modernizr/blob/347ddb078116cee91b25b6e897e211b023f9dcb4/feature-detects/emoji.js\n *\n * @return {Boolean} true or false\n * @example\n *\n * hasEmojiSupport()\n * // => true|false\n */\nexport const hasEmojiSupport = () => {\n  const pixelRatio = window.devicePixelRatio || 1;\n  const offset = 12 * pixelRatio;\n  const node = document.createElement('canvas');\n\n  // canvastext support\n  if (\n    !node.getContext ||\n    !node.getContext('2d') ||\n    typeof node.getContext('2d').fillText !== 'function'\n  ) {\n    return false;\n  }\n\n  const ctx = node.getContext('2d');\n\n  ctx.fillStyle = '#f00';\n  ctx.textBaseline = 'top';\n  ctx.font = '32px Arial';\n  ctx.fillText('\\ud83d\\udc28', 0, 0); // U+1F428 KOALA\n  return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\n\nexport const removeEmoji = text => {\n  if (text) {\n    return text\n      .replace(\n        /([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g,\n        ''\n      )\n      .replace(/\\s+/g, ' ')\n      .trim();\n  }\n  return '';\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.thumbnailBoxClass,style:({ height: _vm.size, width: _vm.size }),attrs:{\"title\":_vm.title}},[_c('img',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shouldShowImage),expression:\"shouldShowImage\"}],class:_vm.thumbnailClass,attrs:{\"src\":_vm.src},on:{\"load\":_vm.onImgLoad,\"error\":_vm.onImgError}}),_vm._v(\" \"),_c('Avatar',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.shouldShowImage),expression:\"!shouldShowImage\"}],class:_vm.thumbnailClass,attrs:{\"username\":_vm.userNameWithoutEmoji,\"size\":_vm.avatarSize}}),_vm._v(\" \"),(_vm.badgeSrc)?_c('img',{staticClass:\"source-badge\",style:(_vm.badgeStyle),attrs:{\"src\":(\"/integrations/channels/badges/\" + _vm.badgeSrc + \".png\"),\"alt\":\"Badge\"}}):_vm._e(),_vm._v(\" \"),(_vm.showStatusIndicator)?_c('div',{class:(\"source-badge user-online-status user-online-status--\" + _vm.status),style:(_vm.statusStyle)}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Avatar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Avatar.vue?vue&type=script&lang=js&\"","<template>\n  <div class=\"avatar-container\" :style=\"style\" aria-hidden=\"true\">\n    {{ userInitial }}\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'Avatar',\n  props: {\n    username: {\n      type: String,\n      default: '',\n    },\n    size: {\n      type: Number,\n      default: 40,\n    },\n  },\n  computed: {\n    style() {\n      return {\n        fontSize: `${Math.floor(this.size / 2.5)}px`,\n      };\n    },\n    userInitial() {\n      const parts = this.username.split(/[ -]/);\n      let initials = parts.reduce((acc, curr) => acc + curr.charAt(0), '');\n\n      if (initials.length > 2 && initials.search(/[A-Z]/) !== -1) {\n        initials = initials.replace(/[a-z]+/g, '');\n      }\n      initials = initials.substring(0, 2).toUpperCase();\n\n      return initials;\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.avatar-container {\n  display: flex;\n  line-height: 100%;\n  font-weight: 500;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  background-image: linear-gradient(to top, var(--w-100) 0%, var(--w-75) 100%);\n  color: var(--w-600);\n  cursor: default;\n}\n</style>\n","import { render, staticRenderFns } from \"./Avatar.vue?vue&type=template&id=fce88f76&scoped=true&\"\nimport script from \"./Avatar.vue?vue&type=script&lang=js&\"\nexport * from \"./Avatar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Avatar.vue?vue&type=style&index=0&id=fce88f76&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"fce88f76\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"avatar-container\",style:(_vm.style),attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"\\n  \"+_vm._s(_vm.userInitial)+\"\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Thumbnail.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Thumbnail.vue?vue&type=script&lang=js&\"","<template>\n  <div\n    :class=\"thumbnailBoxClass\"\n    :style=\"{ height: size, width: size }\"\n    :title=\"title\"\n  >\n    <!-- Using v-show instead of v-if to avoid flickering as v-if removes dom elements.  -->\n    <img\n      v-show=\"shouldShowImage\"\n      :src=\"src\"\n      :class=\"thumbnailClass\"\n      @load=\"onImgLoad\"\n      @error=\"onImgError\"\n    />\n    <Avatar\n      v-show=\"!shouldShowImage\"\n      :username=\"userNameWithoutEmoji\"\n      :class=\"thumbnailClass\"\n      :size=\"avatarSize\"\n    />\n    <img\n      v-if=\"badgeSrc\"\n      class=\"source-badge\"\n      :style=\"badgeStyle\"\n      :src=\"`/integrations/channels/badges/${badgeSrc}.png`\"\n      alt=\"Badge\"\n    />\n    <div\n      v-if=\"showStatusIndicator\"\n      :class=\"`source-badge user-online-status user-online-status--${status}`\"\n      :style=\"statusStyle\"\n    />\n  </div>\n</template>\n<script>\n/**\n * Thumbnail Component\n * Src - source for round image\n * Size - Size of the thumbnail\n * Badge - Chat source indication { fb / telegram }\n * Username - Username for avatar\n */\nimport Avatar from './Avatar';\nimport { removeEmoji } from 'shared/helpers/emoji';\n\nexport default {\n  components: {\n    Avatar,\n  },\n  props: {\n    src: {\n      type: String,\n      default: '',\n    },\n    size: {\n      type: String,\n      default: '40px',\n    },\n    badge: {\n      type: String,\n      default: '',\n    },\n    username: {\n      type: String,\n      default: '',\n    },\n    status: {\n      type: String,\n      default: '',\n    },\n    hasBorder: {\n      type: Boolean,\n      default: false,\n    },\n    shouldShowStatusAlways: {\n      type: Boolean,\n      default: false,\n    },\n    title: {\n      type: String,\n      default: '',\n    },\n    variant: {\n      type: String,\n      default: 'circle',\n    },\n  },\n  data() {\n    return {\n      hasImageLoaded: false,\n      imgError: false,\n    };\n  },\n  computed: {\n    userNameWithoutEmoji() {\n      return removeEmoji(this.username);\n    },\n    showStatusIndicator() {\n      if (this.shouldShowStatusAlways) return true;\n      return this.status === 'online' || this.status === 'busy';\n    },\n    avatarSize() {\n      return Number(this.size.replace(/\\D+/g, ''));\n    },\n    badgeSrc() {\n      return {\n        instagram_direct_message: 'instagram-dm',\n        facebook: 'messenger',\n        'twitter-tweet': 'twitter-tweet',\n        'twitter-dm': 'twitter-dm',\n        whatsapp: 'whatsapp',\n        sms: 'sms',\n        'Channel::Line': 'line',\n        'Channel::Telegram': 'telegram',\n        'Channel::WebWidget': '',\n      }[this.badge];\n    },\n    badgeStyle() {\n      const size = Math.floor(this.avatarSize / 3);\n      const badgeSize = `${size + 2}px`;\n      const borderRadius = `${size / 2}px`;\n      return { width: badgeSize, height: badgeSize, borderRadius };\n    },\n    statusStyle() {\n      const statusSize = `${this.avatarSize / 4}px`;\n      return { width: statusSize, height: statusSize };\n    },\n    thumbnailClass() {\n      const classname = this.hasBorder ? 'border' : '';\n      const variant =\n        this.variant === 'circle' ? 'thumbnail-rounded' : 'thumbnail-square';\n      return `user-thumbnail ${classname} ${variant}`;\n    },\n    thumbnailBoxClass() {\n      const boxClass = this.variant === 'circle' ? 'is-rounded' : '';\n      return `user-thumbnail-box ${boxClass}`;\n    },\n    shouldShowImage() {\n      if (!this.src) {\n        return false;\n      }\n      if (this.hasImageLoaded) {\n        return !this.imgError;\n      }\n      return false;\n    },\n  },\n  watch: {\n    src(value, oldValue) {\n      if (value !== oldValue && this.imgError) {\n        this.imgError = false;\n      }\n    },\n  },\n  methods: {\n    onImgError() {\n      this.imgError = true;\n    },\n    onImgLoad() {\n      this.hasImageLoaded = true;\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.user-thumbnail-box {\n  flex: 0 0 auto;\n  max-width: 100%;\n  position: relative;\n\n  &.is-rounded {\n    border-radius: 50%;\n  }\n\n  .user-thumbnail {\n    border-radius: 50%;\n    &.thumbnail-square {\n      border-radius: var(--border-radius-large);\n    }\n    height: 100%;\n    width: 100%;\n    box-sizing: border-box;\n    object-fit: cover;\n    vertical-align: initial;\n\n    &.border {\n      border: 1px solid white;\n    }\n  }\n\n  .source-badge {\n    background: white;\n    border-radius: var(--border-radius-small);\n    bottom: var(--space-minus-micro);\n    box-shadow: var(--shadow-small);\n    height: var(--space-slab);\n    padding: var(--space-micro);\n    position: absolute;\n    right: 0;\n    width: var(--space-slab);\n  }\n\n  .user-online-status {\n    border-radius: 50%;\n    bottom: var(--space-micro);\n\n    &:after {\n      content: ' ';\n    }\n  }\n\n  .user-online-status--online {\n    background: var(--g-400);\n  }\n\n  .user-online-status--busy {\n    background: var(--y-500);\n  }\n\n  .user-online-status--offline {\n    background: var(--s-500);\n  }\n}\n</style>\n","import { render, staticRenderFns } from \"./Thumbnail.vue?vue&type=template&id=4240ad79&scoped=true&\"\nimport script from \"./Thumbnail.vue?vue&type=script&lang=js&\"\nexport * from \"./Thumbnail.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Thumbnail.vue?vue&type=style&index=0&id=4240ad79&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4240ad79\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.buttonClassName,style:(_vm.buttonStyles),attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.onClick}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Button.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??ref--7-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Button.vue?vue&type=script&lang=js&\"","<template>\n  <button\n    :class=\"buttonClassName\"\n    :style=\"buttonStyles\"\n    :disabled=\"disabled\"\n    @click=\"onClick\"\n  >\n    <slot />\n  </button>\n</template>\n<script>\nexport default {\n  props: {\n    block: {\n      type: Boolean,\n      default: false,\n    },\n    type: {\n      type: String,\n      default: 'blue',\n    },\n    bgColor: {\n      type: String,\n      default: '',\n    },\n    textColor: {\n      type: String,\n      default: '',\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  computed: {\n    buttonClassName() {\n      let className = 'text-white py-3 px-4 rounded shadow-sm';\n      if (this.type === 'clear') {\n        className = 'flex mx-auto mt-4 text-xs w-auto text-black-600';\n      }\n\n      if (this.type === 'blue' && !Object.keys(this.buttonStyles).length) {\n        className = `${className} bg-woot-500 hover:bg-woot-700`;\n      }\n      if (this.block) {\n        className = `${className} w-full`;\n      }\n      return className;\n    },\n    buttonStyles() {\n      const styles = {};\n      if (this.bgColor) {\n        styles.backgroundColor = this.bgColor;\n      }\n      if (this.textColor) {\n        styles.color = this.textColor;\n      }\n      return styles;\n    },\n  },\n  methods: {\n    onClick(e) {\n      this.$emit('click', e);\n    },\n  },\n};\n</script>\n","import { render, staticRenderFns } from \"./Button.vue?vue&type=template&id=4f2eb420&\"\nimport script from \"./Button.vue?vue&type=script&lang=js&\"\nexport * from \"./Button.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","const DYTE_MEETING_LINK = 'https://app.dyte.in/meeting/stage/';\n\nexport const buildDyteURL = (roomName, dyteAuthToken) => {\n  return `${DYTE_MEETING_LINK}${roomName}?authToken=${dyteAuthToken}&showSetupScreen=true&disableVideoBackground=true`;\n};\n"],"sourceRoot":""}