{"version":3,"file":"js/452-1f879fab819fe44dc162.js","mappings":"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","sources":["webpack://gumstack/./client/channels/ sync _channel\\.js$","webpack://gumstack/./client/channels/consumer.js","webpack://gumstack/./client/channels/index.js","webpack://gumstack/./client/channels/lead_queue_channel.js","webpack://gumstack/./client/channels/notifications_channel.js","webpack://gumstack/./client/channels/participant_session_room_channel.js","webpack://gumstack/./client/channels/session_queue_channel.js","webpack://gumstack/./client/channels/video_call_channel.js","webpack://gumstack/./client/channels/websocket_proxy_channel.js","webpack://gumstack/./client/controllers/action_panel_controller.js","webpack://gumstack/./client/controllers/call_invite_controller.js","webpack://gumstack/./client/controllers/cart_controller.js","webpack://gumstack/./client/lib/flash.js","webpack://gumstack/./client/controllers/clipboard_controller.js","webpack://gumstack/./client/controllers/date_slot_picker_controller.js","webpack://gumstack/./client/controllers/feedback_controller.js","webpack://gumstack/./client/controllers/google_analytics_controller.js","webpack://gumstack/./client/controllers/incoming_video_call_controller.js","webpack://gumstack/./client/controllers/share_controller.js","webpack://gumstack/./client/controllers/shopify_widget_overlay_controller.js","webpack://gumstack/./client/controllers/snack_controller.js","webpack://gumstack/./client/controllers/timezone_search_controller.js","webpack://gumstack/./client/helpers/sentry.js","webpack://gumstack/./client/controllers/video_call_controller.js","webpack://gumstack/./client/lib/device_exception_handler.js","webpack://gumstack/./client/controllers/video_call_participation_controller.js","webpack://gumstack/./client/controllers/widget/index.js","webpack://gumstack/./client/controllers/widget_preview_controller.js","webpack://gumstack/./client/controllers/widget_video_call_controller.js","webpack://gumstack/./client/helpers/index.js","webpack://gumstack/./client/lib/rails_common.js","webpack://gumstack/./client/lib/telephone_input.js","webpack://gumstack/./client/utils/getDeviceInfo.js","webpack://gumstack/./client/utils/localStorage.js"],"sourcesContent":["var map = {\n\t\"./lead_queue_channel.js\": 7682,\n\t\"./notifications_channel.js\": 3390,\n\t\"./participant_session_room_channel.js\": 9268,\n\t\"./session_queue_channel.js\": 9746,\n\t\"./video_call_channel.js\": 6216,\n\t\"./websocket_proxy_channel.js\": 2762,\n\t\"channels/lead_queue_channel.js\": 7682,\n\t\"channels/notifications_channel.js\": 3390,\n\t\"channels/participant_session_room_channel.js\": 9268,\n\t\"channels/session_queue_channel.js\": 9746,\n\t\"channels/video_call_channel.js\": 6216,\n\t\"channels/websocket_proxy_channel.js\": 2762\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7824;","// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `rails generate channel` command.\n\nimport { createConsumer } from '@rails/actioncable';\n\nexport default createConsumer();\n","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/);\nchannels.keys().forEach(channels);\n","// app/javascript/channels/chat_channel.js\nimport consumer from './consumer';\nimport CableReady from 'cable_ready';\n\ndocument.addEventListener('turbo:load', () => {\n let leadsQueueContainerEl = document.querySelector('#leads-queue-tbody');\n if (leadsQueueContainerEl) {\n consumer.subscriptions.create('LeadQueueChannel', {\n received(data) {\n if (data.cableReady) CableReady.perform(data.operations);\n },\n });\n }\n});\n","// app/javascript/channels/chat_channel.js\nimport consumer from './consumer';\nimport CableReady from 'cable_ready';\n\ndocument.addEventListener('turbo:load', () => {\n let notificationsContainerEl = document.querySelector(\n '[data-channel-subscription=notifications]'\n );\n if (notificationsContainerEl) {\n let channelName = notificationsContainerEl.dataset.channelUid;\n consumer.subscriptions.create(\n { channel: 'NotificationsChannel', room: channelName },\n {\n received(data) {\n let audio = new Audio('/notification-beep.mp3');\n audio.play();\n if (data.cableReady) CableReady.perform(data.operations);\n },\n }\n );\n }\n});\n","// app/javascript/channels/chat_channel.js\nimport consumer from './consumer';\nimport CableReady from 'cable_ready';\n\ndocument.addEventListener('turbo:load', () => {\n let roomContainerEl = document.querySelector('#session-room-container');\n if (roomContainerEl) {\n let channelName = roomContainerEl.dataset.channelName;\n let token = roomContainerEl.dataset.channelToken;\n consumer.subscriptions.create(\n { channel: 'SessionRoomChannel', room: channelName, token: token },\n {\n received(data) {\n if (data.cableReady) CableReady.perform(data.operations);\n },\n }\n );\n }\n});\n","// app/javascript/channels/chat_channel.js\nimport consumer from './consumer';\nimport CableReady from 'cable_ready';\n\ndocument.addEventListener('turbo:load', () => {\n let SessionQueueContainerEl = document.querySelector('#session-queue-body');\n if (SessionQueueContainerEl) {\n consumer.subscriptions.create('SessionQueueChannel', {\n received(data) {\n if (data.cableReady) CableReady.perform(data.operations);\n },\n });\n }\n});\n","import consumer from './consumer';\nimport CableReady from 'cable_ready';\n\nlet subscribeToVideoCallChannel = () => {\n let videoCallContainerEl = document.querySelector(\n '[data-video-call-channel-name]'\n );\n if (videoCallContainerEl) {\n let channelName = videoCallContainerEl.dataset.videoCallChannelName;\n let token = videoCallContainerEl.dataset.participationToken;\n let role = videoCallContainerEl.dataset.participationRole;\n consumer.subscriptions.create(\n {\n channel: 'VideoCallChannel',\n channel_name: channelName,\n token: token,\n role: role,\n },\n {\n received(data) {\n if (data.cableReady) CableReady.perform(data.operations);\n },\n }\n );\n }\n};\ndocument.addEventListener('turbo:load', () => {\n subscribeToVideoCallChannel();\n});\n\ndocument.addEventListener('turbo:render', () => {\n subscribeToVideoCallChannel();\n});\n","import consumer from \"./consumer\"\n\nexport function createWebsocketProxy(streamSessionId, onMessage, onError, onConnected, onClose) {\n let subscription;\n console.log(`Creating websocket proxy with ${streamSessionId}`);\n\n subscription = consumer.subscriptions.create(\n { channel: \"WebsocketProxyChannel\", stream_session_id: streamSessionId },\n {\n connected() {\n if (onConnected) onConnected();\n console.log(\"Connected to WebsocketProxyChannel\");\n },\n \n disconnected() {\n console.log(\"Disconnected from WebsocketProxyChannel\");\n if (onClose) onClose();\n },\n \n received(data) {\n if (data.error) {\n if (onError) onError(data.error);\n } else if (data.closed) {\n if (onClose) onClose(data.code, data.reason);\n } else {\n console.log(\"Received from Server:\", data);\n if (onMessage) onMessage(data);\n }\n },\n \n send_message(data) {\n // console.log(\"Sending data to server:\", data);\n this.perform('receive', data);\n }\n }\n );\n\n return {\n send: (data) => subscription.send_message(data),\n close: () => subscription.unsubscribe()\n };\n}","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['moreOptionToggleIcon', 'moreOptionToggle', 'moreOptions'];\n static values = { showPanel: Boolean };\n\n connect() {\n this.videoCallContainer = document.querySelector('#video-call-container');\n if (this.hasShowPanelValue && this.showPanelValue) {\n this.showActionPanel();\n }\n }\n\n disconnect() {\n document.onmouseup = null;\n document.ontouchend = null;\n }\n\n _setData(el, attrib, value) {\n el.dataset[attrib] = value;\n }\n\n _getData(el, attrib) {\n return el.dataset[attrib];\n }\n\n _reset(currentPanelID) {\n let panels = document.querySelectorAll('.action-panel-container');\n for (let el of panels) {\n if (currentPanelID != el.id) {\n this._setData(el, 'panelDisplay', 'false');\n this._resetActionPanel(el);\n }\n }\n }\n\n _resetActionPanel(el) {\n if (el) {\n el.style.cssText = '';\n if (el.classList.contains('show-mobile-actions'))\n el.classList.remove('show-mobile-actions');\n }\n }\n\n showActionPanel(e) {\n e && e.preventDefault();\n this.videoCallContainer.classList.add('hide-actions');\n let panelUid = this.element.dataset.panelUid;\n this.panelParent = document.querySelector(`#${panelUid}_app`);\n this._reset(this.panelParent.id);\n this._setData(this.panelParent, 'panelDisplay', 'true');\n\n // this.registerEvents(this.panelParent);\n }\n\n hideActionPanel(e) {\n e.preventDefault();\n this.videoCallContainer.classList.remove('hide-actions');\n let panelUid = this.element.dataset.panelUid;\n this.panelParent = document.querySelector(`#${panelUid}_app`);\n this._setData(this.panelParent, 'panelDisplay', 'false');\n\n this.deRegisterEvents(this.panelParent);\n this._resetActionPanel(this.panelParent);\n }\n\n registerEvents(el) {\n let is_touch = 'ontouchstart' in document.documentElement;\n // Register for touch listener if it is touch device\n if (is_touch) {\n el.ontouchstart = (e) => {\n this.handleTouchListener(e);\n };\n document.ontouchend = () => {\n document.ontouchmove = null;\n this.toggleSelectOnChannel(false);\n };\n }\n // Register for mouse events (desktop,non touch devices)\n el.onmousedown = (e) => {\n this.handleListener(e);\n };\n document.onmouseup = () => {\n document.onmousemove = null;\n this.toggleSelectOnChannel(false);\n };\n }\n\n deRegisterEvents(el) {\n el.onmousedown = null;\n el.ontouchmove = null;\n }\n\n resize(e, is_touch_event) {\n let allowed_width = parseInt(window.screen.width * 0.7);\n let allowed_height = parseInt(window.screen.height) + 2;\n let is_mobile = window.screen.width <= 1024;\n let dx = 0;\n let dy = 0;\n\n if (is_touch_event) {\n dx = this.t_pos_x - e.targetTouches[0].pageX;\n dy = this.t_pos_y - e.targetTouches[0].pageY;\n this.t_pos_x = e.targetTouches[0].pageX;\n this.t_pos_y = e.targetTouches[0].pageY;\n } else {\n dx = this.m_pos_x - e.x;\n dy = this.m_pos_y - e.y;\n this.m_pos_x = e.x;\n this.m_pos_y = e.y;\n }\n\n let computedWidth =\n parseInt(getComputedStyle(this.panelParent, '').width) + dx;\n let computedHeight =\n parseInt(getComputedStyle(this.panelParent, '').height) + dy;\n if (computedWidth < allowed_width && !is_mobile) {\n this.panelParent.style.width = parseInt(computedWidth) + 'px';\n } else if (is_mobile && computedHeight < allowed_height) {\n this.panelParent.style.height = parseInt(computedHeight) + 'px';\n }\n\n let is_mobile_actions_shown = this.panelParent.classList.contains(\n 'show-mobile-actions'\n );\n let difference =\n allowed_height - parseInt(getComputedStyle(this.panelParent, '').height);\n\n if (is_mobile && difference <= 10) {\n if (!is_mobile_actions_shown)\n this.panelParent.classList.add('show-mobile-actions');\n } else {\n if (is_mobile_actions_shown)\n this.panelParent.classList.remove('show-mobile-actions');\n }\n }\n\n handleTouchListener(e) {\n this.t_pos_x = e.targetTouches[0].pageX;\n this.t_pos_y = e.targetTouches[0].pageY;\n this.toggleSelectOnChannel(true);\n document.ontouchmove = (e) => {\n this.resize(e, true);\n };\n }\n\n handleListener(e) {\n this.m_pos_x = e.x;\n this.m_pos_y = e.y;\n this.toggleSelectOnChannel(true);\n document.onmousemove = (e) => {\n this.resize(e, false);\n };\n }\n\n toggleSelectOnChannel(addSelect) {\n if (addSelect && !this.videoCallContainer.classList.contains('no-select'))\n this.videoCallContainer.classList.add('no-select');\n else this.videoCallContainer.classList.remove('no-select');\n }\n\n handleVideoCallContainerClick(e) {\n if (\n e.target.closest('.action-panel-container') ||\n e.target.closest('#product-carousel')\n )\n return;\n if (this.videoCallContainer.classList.contains('hide-actions'))\n this.videoCallContainer.classList.remove('hide-actions');\n else this.videoCallContainer.classList.add('hide-actions');\n }\n\n notify() {\n let panelUid = this.element.dataset.panelUid;\n let panelParent = document.querySelector(`#${panelUid}_app`);\n let is_panel_shown = panelParent.dataset.panelDisplay == 'true';\n if (!is_panel_shown) {\n this.showBadge(this.element);\n }\n }\n\n showBadge(el) {\n let badgeEl = el.querySelector('.notification-badge');\n if (badgeEl) {\n let badgeCount =\n badgeEl.textContent == '' ? 0 : parseInt(badgeEl.textContent);\n badgeEl.textContent = badgeCount + 1;\n }\n }\n\n _resetBadge(el) {\n let badgeEl = el.querySelector('.notification-badge');\n if (badgeEl) badgeEl.textContent = '';\n }\n\n panelToggle(e) {\n let el = e.target;\n let data = el.dataset;\n let shouldHide = data.hide == 'false';\n let panel = document.getElementById(`${data.panelUid}_app`);\n panel.style.height = shouldHide ? '79px' : 'auto';\n el.innerText = shouldHide ? 'Expand' : 'Hide';\n el.dataset.hide = shouldHide;\n }\n\n toggleMoreOptions() {\n if (!this.hasMoreOptionsTarget || !this.hasMoreOptionToggleTarget) return;\n const active = this.moreOptionToggleTarget.dataset.active == 'true';\n this.moreOptionToggleTarget.dataset.active = !active;\n if (active) {\n this.moreOptionToggleTarget.innerText = 'More options';\n this.moreOptionToggleIconTarget.className = 'bi bi-caret-up-fill fs-12';\n this.moreOptionsTarget.classList.replace('d-flex', 'd-none');\n } else {\n this.moreOptionToggleTarget.innerText = 'Less options';\n this.moreOptionToggleIconTarget.className = 'bi bi-caret-down-fill fs-12';\n this.moreOptionsTarget.classList.replace('d-none', 'd-flex');\n }\n }\n}\n","import { Controller } from 'stimulus';\nimport { post, get, patch } from '@rails/request.js'\n\nexport default class extends Controller {\n static targets = [];\n static values = { url: String }\n\n connect() {\n\n }\n\n async refreshUsers() {\n const response = await get(this.urlValue, { responseKind: 'turbo-stream' });\n }\n\n async cancelInvite(e){\n const response = await patch(e.target.dataset.url, {\n responseKind: 'turbo-stream',\n body: JSON.stringify(\n {\n status:'canceled'\n }\n )\n });\n }\n\n async addAgent(e) {\n const response = await post(e.target.dataset.url, {\n responseKind: 'turbo-stream',\n body: JSON.stringify(\n {\n user_id: parseInt(e.target.dataset.userId)\n }\n )\n });\n }\n}\n","import { Controller } from 'stimulus';\nimport { post, get } from '@rails/request.js';\n\nexport default class extends Controller {\n static values = { createUrl: String };\n\n connect() {\n this._subscribeToCartEvents();\n window.parent.postMessage({ name: 'gs:get-cart' }, '*');\n }\n\n removeCartItem(e) {\n let cartEvent = {\n name: 'gs:remove-cart-data',\n data: {\n id: e.target.dataset.id,\n quantity: 0,\n },\n };\n window.parent.postMessage(cartEvent, '*');\n this.createEvent(\n 'product_removed',\n 'user',\n JSON.parse(e.target.dataset.data)\n );\n }\n\n async createEvent(event_name, event_type, data) {\n // eslint-disable-next-line\n const response = await post(this.createUrlValue, {\n responseKind: 'turbo-stream',\n body: JSON.stringify({\n event_name: event_name,\n event_type: event_type,\n data: data,\n }),\n });\n }\n\n async refresh() {\n // eslint-disable-next-line\n const response = await get(this.createUrlValue, {\n responseKind: 'turbo-stream',\n });\n }\n\n _subscribeToCartEvents() {\n window.addEventListener('message', (event) => {\n let eventData = event.data;\n if (eventData.name == 'gs:cart-data') {\n this.createEvent('cart_updated', 'system', eventData.data);\n eventData.data.items.forEach((item) => {\n this.createEvent('product_added', 'system', item);\n });\n } else if (eventData.name == 'gs:cart-data-added') {\n eventData.data.items.forEach((item) => {\n this.createEvent('product_added', 'user', item);\n });\n }\n });\n }\n}\n","export default function flash(message) {\n const FLASH_ROOT =\n document.querySelector('#flash-messages') ||\n document.querySelector('#flash-messages-peach');\n if (FLASH_ROOT) {\n FLASH_ROOT.querySelector('#flash-alert').classList.add('show');\n FLASH_ROOT.querySelector('#flash-alert').classList.remove('d-none');\n FLASH_ROOT.querySelector('#notice').innerHTML = message;\n\n $(\n '#flash-messages #flash-alert.show',\n '#flash-messages-peach #flash-alert.show'\n )\n .fadeTo(4000, 500)\n .slideUp(500, function () {\n this.classList.remove('show');\n this.classList.add('d-none');\n });\n }\n}\n","import { Controller } from 'stimulus';\nimport flash from '../lib/flash';\n\nexport default class extends Controller {\n static targets = ['source'];\n\n async copy() {\n let copyText = this.sourceTarget;\n copyText.select();\n copyText.setSelectionRange(0, 99999);\n await navigator.clipboard.writeText(copyText.value);\n console.log('Copied the text: ' + copyText.value);\n flash('Copied to clipboard');\n }\n\n copyHtml() {\n var r = document.createRange();\n r.selectNode(this.sourceTarget);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(r);\n document.execCommand('copy');\n flash('Copied to clipboard');\n }\n\n copyData() {\n let text = this.sourceTarget.dataset.text;\n var copyText = document.createElement('pre');\n copyText.innerHTML = text;\n document.body.appendChild(copyText);\n copyText.style = 'display: inline; width: 1px;';\n var r = document.createRange();\n r.selectNode(copyText);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(r);\n document.execCommand('copy');\n copyText.remove();\n flash('Copied to clipboard');\n }\n}\n","import moment from 'moment';\nimport { Controller } from 'stimulus';\nimport { lightOrDark } from '../helpers';\nimport ahoy from 'ahoy.js';\n\nconst SLOT_PICKER_CONTAINER_TEMPLATE = `\n
\n
\n
\n
\n`;\n\nconst DATE_PICKER_CONTAINER_TEMPLATE = `\n
\n chevron_left\n
\n chevron_right\n
\n`;\n\nconst SLOT_PICKER_DAY_SLOTS_TEMPLATE = `\n
\n
\n \n \n
\n\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n`;\n\nconst SLOT_CELL_TEMPLATE = `\ndate-slot-picker#selectSlot\">\n`;\n\nconst DATE_CELL_TEMPLATE = `\n\n`;\n\nclass DateSlotPickerController extends Controller {\n static targets = [\n 'input',\n 'toggleButton',\n 'dropdown',\n 'root',\n 'dates',\n 'slots',\n 'morningSlots',\n 'afternoonSlots',\n 'eveningSlots',\n 'nightSlots',\n 'currMonth',\n 'currDate',\n 'backToMonthBtn',\n 'submitBtn',\n 'previousBtn',\n 'nextBtn',\n ];\n static values = { brandColor: String };\n\n connect() {\n if (this.element.querySelector('#slot-picker--pickerButton')) {\n return;\n }\n this.element.classList.add('slot-picker');\n this.showToggleOfficeHours =\n this.element.dataset.showToggleOfficeHours === 'true';\n this.ignoreOfficeHours = this.element.dataset.ignoreOfficeHours === 'true';\n this.hideCalendar = this.element.dataset.hideCalendar === 'true';\n this.autoSubmit = this.element.dataset.autoSubmit === 'true';\n this.utcOffset = this.element.dataset.utc;\n let selected_date = this.element.dataset.selectedDate;\n if (!moment.isMoment(selected_date)) {\n selected_date = moment(selected_date);\n }\n this.selected_time = selected_date.format('h:mm A');\n this.selected_date = selected_date.toDate().toDateString();\n let tmpEl = document.createElement('div');\n tmpEl.innerHTML = SLOT_PICKER_CONTAINER_TEMPLATE;\n this.element.appendChild(tmpEl.firstElementChild);\n\n let dateEl = document.createElement('div');\n dateEl.innerHTML = DATE_PICKER_CONTAINER_TEMPLATE;\n this.element.prepend(dateEl.firstElementChild);\n\n this.availability =\n this.element.dataset.json != 'null'\n ? this.loadAvailability(this.element.dataset.json)\n : null;\n\n this.startIndex = 0;\n this.endIndex = 3;\n\n this.selectionTargetValue = this.element.dataset.selectionTargetValue;\n this.selectionTargetDisplay = this.element.dataset.selectionTargetDisplay;\n let startDate = moment();\n this.startDate = moment();\n this.data.set('month', startDate.date(1).format('YYYY-MM-DD'));\n this.endDate = moment().add(this.visibilityDays(), 'days');\n this.availability && this.renderDates();\n this.rootTarget.innerHTML = SLOT_PICKER_DAY_SLOTS_TEMPLATE;\n this.renderSlots(this.selected_date);\n\n if (this.hideCalendar) {\n this.hideWidget();\n } else {\n this.showWidget();\n }\n }\n\n disconnect() {\n console.log('Disconnecting Slot Picker Controller!');\n }\n\n toggleWidget(e) {\n e.preventDefault();\n if (this.element.dataset.widgetState == 'opened') {\n this.hideWidget();\n } else {\n this.showWidget();\n }\n }\n\n visibilityDays() {\n try {\n let vis = parseInt(this.element.dataset.visibilitydays);\n if (isNaN(vis)) {\n return 45;\n }\n return vis;\n } catch (e) {\n return 45;\n }\n }\n\n loadAvailability(json) {\n let slots = {};\n JSON.parse(json).forEach((slot) => {\n slots[new Date(slot.start).toDateString()] =\n slots[new Date(slot.start).toDateString()] || [];\n slots[new Date(slot.start).toDateString()].push(slot);\n });\n return slots;\n }\n\n showWidget() {\n // this.toggleButtonTarget.innerText = 'Close'\n this.element.dataset.widgetState = 'opened';\n this.dropdownTarget.classList.add('show');\n }\n\n hideWidget() {\n // this.toggleButtonTarget.innerText = 'Open'\n this.element.dataset.widgetState = 'closed';\n this.dropdownTarget.classList.remove('show');\n }\n\n previous(e) {\n e.preventDefault();\n this.startIndex -= 3;\n this.endIndex -= 3;\n this.renderDates();\n // this.hideWidget();\n }\n\n next(e) {\n e.preventDefault();\n this.startIndex += 3;\n this.endIndex += 3;\n this.renderDates();\n // this.hideWidget();\n }\n\n toggleOfficeHours() {\n let officeHourContainers = this.element\n .getRootNode()\n .querySelectorAll('.toggle-office-hours-container');\n if (this.showToggleOfficeHours) {\n officeHourContainers.forEach((item) => item.classList.remove('d-none'));\n }\n officeHourContainers.forEach(\n (item) =>\n (item.querySelector('.toggle_office_hours').checked =\n !this.ignoreOfficeHours)\n );\n }\n\n renderDates() {\n this.toggleOfficeHours();\n this.datesTarget.innerHTML = '';\n let keys = Object.keys(this.availability);\n let dates = keys.slice(this.startIndex, this.endIndex);\n let counter = 0;\n while (counter < dates.length) {\n let date = dates[counter];\n if (!moment.isMoment(date)) {\n date = moment(date);\n }\n let tmpEl = document.createElement('div');\n let date_string = date.toDate().toDateString();\n\n tmpEl.innerHTML = DATE_CELL_TEMPLATE;\n let btn = tmpEl.firstElementChild;\n btn.dataset.date = date_string;\n if (this.selected_date === date_string) {\n btn.classList.add('active');\n btn.classList.remove('btn-light');\n btn.classList.remove('border-secondary');\n console.log(this.brandColorValue);\n btn.style.backgroundColor = this.brandColorValue;\n btn.style.color =\n lightOrDark(this.brandColorValue) === 'light' ? '#333333' : '#ffffff';\n }\n let dayEl = btn.getElementsByClassName('day')[0];\n let dateEl = btn.getElementsByClassName('date')[0];\n dayEl.innerText = date.format('ddd');\n dateEl.innerText = date.format('MMM DD');\n btn.disabled = false;\n this.datesTarget.appendChild(btn);\n counter += 1;\n }\n\n if (this.startIndex <= 0) {\n this.previousBtnTarget.classList.add('penone', 'text-light');\n } else {\n this.previousBtnTarget.classList.remove('penone', 'text-light');\n }\n\n if (this.endIndex >= keys.length) {\n this.nextBtnTarget.classList.add('penone', 'text-light');\n } else {\n this.nextBtnTarget.classList.remove('penone', 'text-light');\n }\n }\n\n renderSlots(date) {\n if (!this.availability[date]) {\n return;\n }\n this.toggleOfficeHours();\n let slotsCount = [\n { slot: this.morningSlotsTarget, count: 0 },\n { slot: this.afternoonSlotsTarget, count: 0 },\n { slot: this.eveningSlotsTarget, count: 0 },\n { slot: this.nightSlotsTarget, count: 0 },\n ];\n this.availability[date].forEach((slot) => {\n let slotTime = moment(slot.start).utcOffset(this.utcOffset);\n let tmpEl = document.createElement('div');\n tmpEl.innerHTML = SLOT_CELL_TEMPLATE;\n let slotBtn = tmpEl.firstElementChild;\n slotBtn.innerHTML = slotTime.format('h:mm');\n slotBtn.dataset.slot = slot.start;\n if (slotTime.format('h:mm A') == this.selected_time) {\n slotBtn.classList.add('active');\n }\n if (slotTime.hour() < 12) {\n this.morningSlotsTarget.appendChild(slotBtn);\n slotsCount.find((item) => item.slot === this.morningSlotsTarget)\n .count++;\n }\n if (slotTime.hour() >= 12 && slotTime.hour() < 16) {\n this.afternoonSlotsTarget.appendChild(slotBtn);\n slotsCount.find((item) => item.slot === this.afternoonSlotsTarget)\n .count++;\n }\n if (slotTime.hour() >= 16 && slotTime.hour() < 19) {\n this.eveningSlotsTarget.appendChild(slotBtn);\n slotsCount.find((item) => item.slot === this.eveningSlotsTarget)\n .count++;\n }\n if (slotTime.hour() >= 19) {\n this.nightSlotsTarget.appendChild(slotBtn);\n slotsCount.find((item) => item.slot === this.nightSlotsTarget).count++;\n }\n // this.slotsGridTarget.appendChild(slotBtn);\n });\n slotsCount.forEach((item) => {\n if (item.count == 0) {\n item.slot.parentNode.classList.add('d-none');\n }\n });\n }\n\n selectDate(e) {\n e.preventDefault();\n let selected_date = e.target.dataset.date;\n if (!moment.isMoment(selected_date)) {\n selected_date = moment(selected_date);\n }\n this.selected_date = selected_date.toDate().toDateString();\n\n // let date = e.target.dataset.date;\n // console.log(date)\n // this.selected_date = date;\n this.rootTarget.innerHTML = SLOT_PICKER_DAY_SLOTS_TEMPLATE;\n this.renderDates();\n this.renderSlots(this.selected_date);\n this.showWidget();\n }\n\n selectSlot(e) {\n e.preventDefault();\n let slot = e.target.dataset.slot;\n let valueEl = document.querySelector(this.selectionTargetValue);\n if (valueEl) {\n valueEl.value = slot;\n }\n ahoy.track('selected_slot', {\n account_id: this.element.dataset.accountId,\n screen: 'complete_scheduling',\n slot: slot,\n });\n this.selected_time = moment(slot).format('h:mm A');\n Array.from(document.querySelectorAll('.slot-picker--cell.active')).forEach(\n function (el) {\n el.classList.remove('active');\n el.style.color = '';\n }\n );\n e.target.classList.add('active');\n e.target.style.color = this.brandColorValue;\n let displayEl = document.querySelector(this.selectionTargetDisplay);\n if (displayEl) {\n displayEl.value = moment(slot).format('h:mm A');\n displayEl.dispatchEvent(new Event('change'));\n }\n // this.hideWidget();\n\n if (this.autoSubmit) {\n this.submitBtnTarget.click();\n }\n const widgetVideoCallDom = document.getElementById('widget_video_call');\n if (widgetVideoCallDom) {\n const widgetVideoCallController =\n this.application.getControllerForElementAndIdentifier(\n widgetVideoCallDom,\n 'widget-video-call'\n );\n widgetVideoCallController.showRegistrationForm();\n }\n }\n\n get startDate() {\n return moment(this.data.get('startDate'));\n }\n\n get endDate() {\n return moment(this.data.get('endDate'));\n }\n\n set endDate(d) {\n if (!moment.isMoment(d)) {\n d = moment(d);\n }\n this.data.set('endDate', d);\n }\n\n set startDate(d) {\n if (!moment.isMoment(d)) {\n d = moment(d);\n }\n this.data.set('startDate', d);\n }\n\n diffMonths(d1, d2) {\n let diff = d1.month() - d2.month() + 12 * (d1.year() - d2.year());\n return diff;\n }\n}\n\nexport default DateSlotPickerController;\n","import { Controller } from 'stimulus';\nimport { closeWidget } from '../helpers';\n\nexport default class extends Controller {\n static targets = [\n 'submit',\n 'comment',\n 'feedbackSuccess',\n 'feedbackFormContainer',\n 'feedbackImgContainer',\n ];\n\n connect() {\n if (this.hasFeedbackSuccessTarget) {\n setTimeout(() => {\n closeWidget();\n }, 1500);\n }\n document\n .querySelectorAll('input[type=radio][name=\"feedback[rating]\"]')\n .forEach((el) => {\n el.addEventListener('change', (e) => this.changePlaceholder(e));\n });\n }\n\n enableFeedback() {\n this.submitTarget.disabled = false;\n this.feedbackFormContainerTarget.classList.remove('d-none');\n this.feedbackImgContainerTarget.classList.remove('flex-column');\n this.feedbackImgContainerTarget.firstElementChild.firstElementChild.style.width =\n '28px';\n this.feedbackImgContainerTarget.firstElementChild.firstElementChild.style.height =\n '28px';\n this.feedbackImgContainerTarget.parentElement.classList.remove(\n 'flex-grow-1'\n );\n this.feedbackImgContainerTarget.parentElement.nextElementSibling.classList.add(\n 'flex-fill'\n );\n }\n\n changePlaceholder(e) {\n if (e.target.value <= 4) {\n this.commentTarget.placeholder = 'Tell us what could we do better?';\n } else {\n this.commentTarget.placeholder = 'What did you like the most?';\n }\n }\n\n scrollToFilters() {\n let el = document.querySelector('#feedback_listing_container');\n if (el.scrollTop > 0) el.scrollTo(0, 0);\n }\n}\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = [];\n\n connect() {\n let postObject = {};\n postObject.event = this.element.getAttribute('data-analytics-event-name');\n if (this.element.getAttribute('data-analytics-event-args')) {\n postObject.data = JSON.parse(\n this.element.getAttribute('data-analytics-event-args')\n );\n }\n this.track(postObject);\n }\n\n track(data) {\n try {\n data.event = 'ga:' + data.event;\n parent.postMessage(data, '*');\n } catch (e) {\n window.console && window.console.log(e);\n }\n }\n}\n","import { Controller } from 'stimulus';\nimport { setWidgetVideoCallStatus } from '../helpers';\nimport storageAvailable from '../utils/localStorage';\nimport { patch } from '@rails/request.js';\nimport moment from 'moment';\nexport default class extends Controller {\n static targets = [\n 'incomingContainer',\n 'mic',\n 'camera',\n 'avatar',\n 'action',\n 'status',\n 'wrapper',\n 'delayedForm',\n 'submitBtn',\n 'scheduleCallBackBtn',\n 'timer',\n 'minute',\n 'second',\n 'timerText',\n 'timeoutText',\n 'purposeFormContainer',\n 'purposeSubmitBtn',\n 'purposeTextArea',\n 'purposeTextAreaContainer',\n 'purposeLabels',\n ];\n\n async connect() {\n this.audio_mode = this.data.get('audioMode') == 'true';\n if (this.hasIncomingContainerTarget) {\n try {\n await import('agora-rtc-sdk-ng');\n } catch (e) {\n if (e instanceof DOMException && e.code == 18) {\n console.log('local storage permission denied');\n } else {\n throw e;\n }\n }\n this.initVideo();\n }\n if (this.hasActionTarget && this.hasWrapperTarget)\n this.initTimeoutMessage();\n\n if (this.hasScheduleCallBackBtnTarget) this.initEndCallTimer();\n\n this._checkAndInitForm();\n this._setStatusLoop();\n\n if (this.hasSubmitBtnTarget) {\n this.element.addEventListener('turbo:submit-start', () => {\n this.submitBtnTarget.disabled = true;\n this.submitBtnTarget.innerText = 'Connecting...';\n });\n\n this.element.addEventListener('turbo:submit-end', () => {\n this.submitBtnTarget.disabled = false;\n this.submitBtnTarget.innerText = 'Done';\n });\n }\n this._handleEarlyTimer();\n if (this.hasPurposeFormContainerTarget) {\n this.purposeFormContainerTarget.classList.remove('d-none');\n }\n this.localStoragePresent = storageAvailable('localStorage');\n this.localStoragePresent && localStorage.setItem('camera_on', false);\n }\n\n initTimeoutMessage() {\n setTimeout(() => {\n this.actionTarget.classList.add('active');\n this.wrapperTarget.classList.add('active');\n }, 35000);\n }\n\n closePurposeFormContainer() {\n if (this.hasPurposeFormContainerTarget) {\n this.purposeFormContainerTarget.classList.add('d-none');\n }\n }\n\n onPurposeTextChange() {\n if (\n this.purposeTextAreaTarget.value === '' ||\n this.purposeTextAreaTarget.value === null\n ) {\n this.purposeSubmitBtnTarget.disabled = true;\n this.purposeLabelsTarget.classList.replace('d-none', 'd-flex');\n } else {\n this.purposeSubmitBtnTarget.disabled = false;\n this.purposeLabelsTarget.classList.replace('d-flex', 'd-none');\n }\n }\n\n onPurposeSelect(e) {\n if (e.target.dataset.showTextarea == 'true') {\n this.purposeTextAreaContainerTarget.classList.remove('d-none');\n this.purposeTextAreaTarget.value = '';\n } else {\n this.purposeTextAreaContainerTarget.classList.add('d-none');\n this.purposeTextAreaTarget.value = e.target.innerText;\n this.purposeSubmitBtnTarget.disabled = false;\n this.purposeSubmitBtnTarget.click();\n }\n }\n\n async submitPurpose(e) {\n console.log(this.purposeFormContainerTarget.firstElementChild);\n this.purposeFormContainerTarget.firstElementChild.style.minHeight = '100%';\n await patch(e.target.dataset.url, {\n responseKind: 'turbo-stream',\n body: JSON.stringify({\n purpose: this.purposeTextAreaTarget.value,\n }),\n });\n }\n\n initEndCallTimer() {\n setTimeout(() => {\n this.scheduleCallBackBtnTarget.click();\n }, 55000);\n }\n\n initVideo() {\n // let streamid = Math.floor(Math.random() * (9999 - 1000 + 1) + 1000);\n // const localAudio = await AgoraRTC.createMicrophoneAudioTrack();\n if (this.audio_mode) {\n this.avatarTarget.classList.add('show');\n return;\n }\n\n // this.videoStream = AgoraRTC.createStream({\n // streamID: streamid,\n // audio: true,\n // video: !this.audio_mode,\n // });\n // if (!this.audio_mode) {\n // this.videoStream.init(() => {\n // this.videoStream.play('user-video');\n // });\n // }\n this.checkLocalMicCamPrefs();\n }\n\n toggleAudio() {\n var is_mic_on = this.micTarget.innerText == 'mic';\n if (is_mic_on) {\n this.micTarget.innerText = 'mic_off';\n this.micTarget.parentElement.classList.add('active');\n } else {\n this.micTarget.innerText = 'mic';\n this.micTarget.parentElement.classList.remove('active');\n }\n this.localStoragePresent && localStorage.setItem('mic_on', !is_mic_on);\n }\n\n async toggleVideo() {\n var is_camera_on = this.cameraTarget.innerText == 'videocam';\n if (is_camera_on) {\n this.cameraTarget.innerText = 'videocam_off';\n this.cameraTarget.parentElement.classList.add('active');\n this.videoStream && this.videoStream.setEnabled(false);\n if (this.videoStream && this.videoStream.isPlaying)\n this.videoStream.stop();\n this.localStoragePresent && localStorage.setItem('camera_on', false);\n } else {\n this.cameraTarget.innerText = 'videocam';\n this.cameraTarget.parentElement.classList.remove('active');\n if (!this.videoStream) {\n // eslint-disable-next-line\n this.videoStream = await AgoraRTC.createCameraVideoTrack();\n }\n this.localStoragePresent && localStorage.setItem('camera_on', true);\n this.videoStream.setEnabled(true);\n if (!this.videoStream.isPlaying) this.videoStream.play('user-video');\n }\n this.avatarTarget.classList.replace(\n `${this.cameraTarget.innerText == 'videocam' ? 'show' : 'hide'}`,\n `${this.cameraTarget.innerText == 'videocam' ? 'hide' : 'show'}`\n );\n }\n\n checkLocalMicCamPrefs() {\n if (!this.hasMicTarget || !this.hasCameraTarget) return;\n var is_mic_on = this.localStoragePresent && localStorage.getItem('mic_on');\n var is_camera_on =\n this.localStoragePresent && localStorage.getItem('camera_on');\n if (is_mic_on !== null && is_mic_on == 'false') this.toggleAudio();\n if (is_camera_on !== null && is_camera_on == 'true') this.toggleVideo();\n }\n\n endCall() {\n this.statusTarget.innerText = 'Disconnecting';\n if (!this.audio_mode) {\n this.videoStream && this.videoStream.stop();\n this.videoStream && this.videoStream.close();\n }\n setWidgetVideoCallStatus(false);\n }\n\n _checkAndInitForm() {\n if (this.hasDelayedFormTarget) {\n // setTimeout(() => {\n this.element.classList.add('formActive');\n // }, 2000);\n }\n }\n\n _setStatusLoop() {\n if (this.hasStatusTarget)\n setInterval(() => {\n if (this.statusTarget.innerText != 'Disconnecting')\n this.statusTarget.innerText = 'Connecting';\n }, 10000);\n }\n\n _handleEarlyTimer() {\n if (!this.hasTimerTarget) return;\n let start_time = moment(\n this.timerTarget.dataset.startTime,\n 'YYYY-MM-DD hh:mm:ss'\n ).unix();\n let diff = start_time - moment().unix();\n let duration = moment.duration(diff * 1000, 'milliseconds');\n var intervalId = window.setInterval(() => {\n duration = moment.duration(duration - 1000, 'milliseconds');\n if (duration.seconds() <= 0 && duration.minutes() <= 0) {\n window.clearInterval(intervalId);\n return this._showWaitingMessage();\n }\n this.minuteTarget.innerText = duration.minutes();\n this.secondTarget.innerText = duration.seconds();\n }, 1000);\n }\n\n _showWaitingMessage() {\n if (\n !this.hasTimerTarget ||\n !this.hasTimerTextTarget ||\n !this.hasTimeoutTextTarget\n )\n return;\n this.timerTextTarget.classList.add('d-none');\n this.timeoutTextTarget.classList.remove('d-none');\n }\n}\n","import { Controller } from 'stimulus';\nimport { isSafariOnDesktop } from '../utils/getDeviceInfo';\n\nexport default class extends Controller {\n static targets = ['source'];\n share() {\n let is_safari_on_desktop = isSafariOnDesktop();\n if (navigator.share && !is_safari_on_desktop) {\n navigator\n .share({\n title: this.sourceTarget.dataset.title,\n text: this.sourceTarget.dataset.text,\n })\n .then(() => {\n console.log('Thanks for sharing!');\n })\n .catch(console.error);\n } else {\n let copyController =\n this.application.getControllerForElementAndIdentifier(\n this.element,\n 'clipboard'\n );\n if (copyController) {\n copyController.copy();\n }\n }\n }\n}\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'shareProduct',\n 'productCarousel',\n 'productCarouselWrapper',\n 'productSlider',\n 'notification',\n 'productPanel',\n 'activityForm',\n 'activityInput',\n 'activityListener',\n ];\n\n connect() {\n this._handleAgentProductSelection();\n this._handleAgentProductShare();\n this._handleProductAddedEvent();\n this._handleProductActivity();\n this.videoCallContainer = document.querySelector('#video-call-container');\n }\n\n openCarousel(e) {\n const image_id = e.target.dataset.imageId;\n const image_set_id = e.target.dataset.imageSetId;\n if (this.image_set_id == image_set_id) {\n this.handleCarouselImageChange(image_id);\n return;\n }\n const image_set = document.getElementById(image_set_id);\n const data = JSON.parse(image_set.dataset.images);\n this.image_set_id = image_set_id;\n const dom_images = data.map((e) => {\n return `\n
\n \"Product\n
\n `;\n });\n this.productCarouselTarget.innerHTML = dom_images;\n this.showCarousel();\n }\n\n handleCarouselImageChange(image_id) {\n const carousel_image = this.productCarouselTarget.querySelector(\n `[data-carousel-image-id=\"${image_id}\"]`\n );\n const active_carousel_image = this.productCarouselTarget.querySelector(\n '.carousel-item.active'\n );\n if (carousel_image) {\n if (!carousel_image.classList.contains('active')) {\n carousel_image.classList.add('active');\n if (active_carousel_image) {\n active_carousel_image.classList.remove('active');\n }\n }\n }\n this.showCarousel();\n }\n\n showCarousel() {\n this.productCarouselWrapperTarget.classList.replace('d-none', 'd-flex');\n }\n\n hideCarousel() {\n this.productCarouselWrapperTarget.classList.replace('d-flex', 'd-none');\n }\n\n showLatestProduct() {\n if (!this.hasProductSliderTarget) return;\n let scrollWidth = this.productSliderTarget.scrollWidth;\n this.productSliderTarget.scrollTo(scrollWidth, 0);\n }\n\n addToCart(e) {\n let cartEvent = {\n name: 'gs:add-cart',\n data: {\n items: [\n {\n quantity: 1,\n id: e.target.dataset.variantId,\n },\n ],\n },\n };\n window.parent.postMessage(cartEvent, '*');\n this.hideCarousel();\n this.notifyAddedToCart();\n this.updateCart();\n this.hideCarousel();\n this.videoCallContainer.classList.remove('hide-actions');\n }\n\n updateCart() {\n const cart = document.getElementById('shopify_cart');\n if (!cart) return;\n let badgeEl = cart.querySelector('.notification-badge');\n if (!badgeEl) return;\n const badgeCount =\n badgeEl.textContent == '' ? 0 : parseInt(badgeEl.textContent);\n badgeEl.textContent = badgeCount + 1;\n }\n\n notifyAddedToCart() {\n if (this.hasNotificationTarget) {\n this.notificationTarget.classList.replace('d-none', 'd-flex');\n setTimeout(() => {\n this.notificationTarget.classList.replace('d-flex', 'd-none');\n }, 2500);\n }\n }\n\n selectProduct(e) {\n e.dataset.active = true;\n let product_sharing_input = document.getElementById('product_sharing_id');\n product_sharing_input.value = e.dataset.productId;\n let product_cards = document.querySelectorAll('.product_card');\n product_cards.forEach((el) => {\n if (e != el) {\n el.dataset.active = false;\n }\n });\n }\n\n sendActivity(e) {\n if (!this.hasActivityFormTarget || !this.hasActivityInputTarget) return;\n const data = e.target.dataset;\n let activity_data = {\n type: 'view',\n product_id: data.productId,\n image_id: data.imageId,\n };\n this.activityInputTarget.value = JSON.stringify(activity_data);\n this.activityFormTarget.requestSubmit();\n }\n\n performActivity() {\n try {\n let activity = JSON.parse(this.activityListenerTarget.dataset.activity);\n switch (activity.type) {\n case 'view':\n return this.highlightImage(activity);\n default:\n return;\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n scrollToProduct(product_id) {\n let template = document.querySelector(`.template_${product_id}`);\n if (!template) return;\n template.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n });\n }\n\n highlightImage(activity) {\n if (this.activityListenerTarget.dataset.host != 'true') return;\n if(this.productPanelTarget.dataset.panelDisplay == 'true')\n this.scrollToProduct(activity.product_id);\n let active_image = document.querySelector('img.active');\n if (active_image) active_image.classList.remove('active');\n let image = document.querySelector(\n `[data-image-id=\"${activity.image_id}\"]`\n );\n image.classList.add('active');\n }\n\n _handleAgentProductSelection() {\n let product_cards = document.querySelectorAll('.product_card');\n product_cards.forEach((el) => {\n el.addEventListener('click', () => {\n this.selectProduct(el);\n });\n });\n }\n\n _handleAgentProductShare() {\n if (this.hasShareProductTarget) {\n this.element.addEventListener('turbo:submit-start', () => {\n this.shareProductTarget.disabled = true;\n this.shareProductTarget.value = 'Sharing...';\n });\n\n this.element.addEventListener('turbo:submit-end', () => {\n this.shareProductTarget.disabled = false;\n this.shareProductTarget.value = 'Share again';\n });\n }\n }\n\n _handleProductAddedEvent() {\n let product_panel = document.querySelector('.product_panel_container');\n if (!product_panel) return;\n var observer = new MutationObserver((mutations) => {\n var show = true;\n for (const record of mutations) {\n if (record.removedNodes.length) show = false;\n }\n if (show) this.showLatestProduct();\n });\n observer.observe(product_panel, { childList: true });\n }\n\n _handleProductActivity() {\n if (!this.hasActivityListenerTarget) return;\n var observer = new MutationObserver(() => {\n this.performActivity();\n });\n observer.observe(this.activityListenerTarget, { attributes: true });\n }\n}\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['bar'];\n connect() {\n const snackbar = this.barTarget;\n }\n\n show(message, expire = true) {\n this.barTarget.style.animation = 'fadeIn 0.5s forwards';\n this.barTarget.style.visibility = 'visible';\n this.barTarget.style.boxShadow = '0 0 5px rgba(0,0,0,0.3)';\n this.barTarget.textContent = message;\n\n if (expire && !this._timer) {\n this._timer = setTimeout(() => {\n console.log('Expired is working');\n this.hide();\n this._timer = null;\n }, 5000);\n }\n }\n\n hide() {\n this.barTarget.style.animation = 'fadeOut 0.5s 4.5s';\n this.barTarget.style.visibility = 'hidden';\n this.barTarget.textContent = '';\n }\n}\n","import { Controller } from 'stimulus';\nimport { useClickOutside } from 'stimulus-use';\nimport StimulusReflex from 'stimulus_reflex';\nimport { Turbo } from '@hotwired/turbo-rails';\nexport default class extends Controller {\n static targets = ['timezonePopup'];\n\n connect() {\n useClickOutside(this);\n StimulusReflex.register(this);\n }\n\n togglePopup() {\n let is_popup_open = this.timezonePopupTarget.dataset.display == 'true';\n this.timezonePopupTarget.dataset.display = is_popup_open ? 'false' : 'true';\n }\n\n clickOutside() {\n if (this.hasTimezonePopupTarget) {\n this.timezonePopupTarget.dataset.display = 'false';\n }\n }\n\n changeTimezone(e) {\n let timezone = '';\n if (e.target.nodeName == 'LI') {\n timezone = e.target.dataset.timezone;\n } else {\n timezone = e.target.parentElement.dataset.timezone;\n }\n if (timezone) {\n let url = new URLSearchParams(window.location.search);\n url.set('tz', timezone);\n history.pushState(null, null, '?' + url.toString());\n Turbo.visit(window.location.href);\n }\n }\n}\n","import * as Sentry from '@sentry/browser';\n\nexport const setTag = (key, value) => {\n Sentry.getCurrentScope().setTag(key, value);\n};\n","import { Controller } from 'stimulus';\nimport ahoy from 'ahoy.js';\n\nimport { setWidgetVideoCallStatus } from '../helpers';\nimport storageAvailable from '../utils/localStorage';\nimport { setTag } from '../helpers/sentry';\n\nconst hasOwnProperty = (obj, prop) =>\n obj && Object.prototype.hasOwnProperty.call(obj, prop);\n\nclass BaseLayout {\n constructor() {}\n\n childNodes() {\n return document.querySelector(this.layout_container_selector).children;\n }\n\n replaceNodes(nodes) {\n document\n .querySelector(this.layout_container_selector)\n .replaceChildren(...nodes);\n }\n\n appendChild(child) {\n document.querySelector(this.layout_container_selector).append(child);\n }\n\n show() {\n document\n .querySelector(this.layout_container_selector)\n .classList.remove('d-none');\n }\n\n hide() {\n document\n .querySelector(this.layout_container_selector)\n .classList.add('d-none');\n }\n}\n\nclass SpeakerViewLayout extends BaseLayout {\n constructor(nodes = []) {\n super();\n this.nodes = nodes;\n this.layout_container_selector = '.speaker';\n }\n\n renderStreams() {\n this.replaceNodes(this.nodes);\n this.handleSpeakerViewTransition();\n console.log('renderStream: speaker view', this.nodes);\n }\n\n handleSpeakerViewTransition() {\n let localVideo = document.querySelector('[data-type=\"local\"]');\n if (\n document.querySelector(this.layout_container_selector).children.length ==\n 2\n ) {\n let remoteVideo = document.querySelector('[data-type=\"remote\"]');\n if (remoteVideo && localVideo) {\n localVideo.className = 'popup_view';\n localVideo.ondblclick = () => {\n this.togglePopupView();\n };\n remoteVideo.className = 'full_screen_view';\n }\n } else if (localVideo) {\n localVideo.className = 'full_screen_view';\n localVideo.ondblclick = null;\n }\n }\n\n togglePopupView() {\n let localVideo = document.querySelector('[data-type=\"local\"]');\n let remoteVideo = document.querySelector('[data-type=\"remote\"]');\n if (remoteVideo && localVideo) {\n if (localVideo.className == 'popup_view') {\n remoteVideo.className = 'popup_view';\n localVideo.className = 'full_screen_view';\n this.toggleVideoSwitchingListeners(localVideo, remoteVideo);\n } else {\n localVideo.className = 'popup_view';\n remoteVideo.className = 'full_screen_view';\n this.toggleVideoSwitchingListeners(remoteVideo, localVideo);\n }\n }\n }\n\n toggleVideoSwitchingListeners(removeEl, addEl) {\n if (removeEl) removeEl.ondblclick = null;\n if (addEl)\n addEl.ondblclick = () => {\n this.togglePopupView();\n };\n }\n}\n\nclass GalleryViewLayout extends BaseLayout {\n constructor(nodes = []) {\n super();\n this.nodes = nodes;\n this.layout_container_selector = '.grid_view';\n }\n\n renderStreams() {\n let videoonlynodes = document.querySelectorAll('[data-mode=\"video\"]');\n let i = 0;\n while (\n videoonlynodes &&\n videoonlynodes.length &&\n i < videoonlynodes.length\n ) {\n videoonlynodes[i].className = 'video';\n i++;\n }\n this.replaceNodes(this.nodes);\n this.handleGalleryViewTransition();\n }\n\n handleGalleryViewTransition() {\n let gridList = document.querySelector(this.layout_container_selector);\n let remoteVideos = document.querySelectorAll('[data-type=\"remote\"]');\n let videoCount = document.querySelector(this.layout_container_selector)\n .children.length;\n if (videoCount > 2) {\n remoteVideos.forEach((element) => {\n if (element.classList.contains('full_screen_view')) {\n return;\n } else {\n element.className = 'popup_view';\n }\n });\n }\n\n gridList.childNodes.forEach((element) => {\n element.addEventListener('click', (e) => {\n gridList.childNodes.forEach((element) => {\n element.className = 'popup_view';\n });\n e.currentTarget.className = 'full_screen_view';\n });\n });\n }\n}\n\nclass ScreenShareLayout extends BaseLayout {\n constructor(nodes) {\n super();\n this.nodes = nodes;\n this.layout_container_selector = '.screenshare';\n }\n\n renderStreams() {\n document\n .querySelector('.screenshare-container')\n .replaceChildren(...document.querySelectorAll('[data-mode=\"screen\"]'));\n let videoonlynodes = document.querySelectorAll('[data-mode=\"video\"]');\n let i = 0;\n while (\n videoonlynodes &&\n videoonlynodes.length &&\n i < videoonlynodes.length\n ) {\n videoonlynodes[i].className = 'video';\n i++;\n }\n let nodes = document.querySelectorAll('video');\n let j = 0;\n while (nodes && nodes.length && j < nodes.length) {\n nodes[j].className = 'video-contain';\n j++;\n }\n document\n .querySelector('.videos-container')\n .replaceChildren(...document.querySelectorAll('[data-mode=\"video\"]'));\n }\n\n childNodes() {\n return document.querySelectorAll('[id^=\"user_\"]');\n }\n}\n\nclass LayoutManager {\n constructor(participant_data) {\n this.participant_data = participant_data;\n this.currentLayout = new SpeakerViewLayout();\n this.stream_ids = [];\n }\n\n resolveLayout() {\n let nodes = this.currentLayout.childNodes();\n this.currentLayout.hide();\n if (this.stream_ids.indexOf('5555') != -1) {\n this.currentLayout = new ScreenShareLayout(nodes);\n } else if (this.stream_ids.length > 2) {\n this.currentLayout = new GalleryViewLayout(nodes);\n } else {\n this.currentLayout = new SpeakerViewLayout(nodes);\n }\n this.currentLayout.renderStreams();\n this.currentLayout.show();\n }\n\n addStream(stream_id, type) {\n if (this.stream_ids.indexOf(stream_id) === -1)\n this.stream_ids.push(stream_id);\n let stream_dom = this.createStreamElement(stream_id, type);\n this.currentLayout.appendChild(stream_dom);\n this.resolveLayout();\n }\n\n removeUser(stream_id) {\n let ids = this.stream_ids.filter((id) => id !== stream_id);\n this.stream_ids = ids;\n let stream_dom_id = 'user_' + stream_id;\n let elem = document.querySelector('#' + stream_dom_id);\n elem.remove();\n this.resolveLayout();\n }\n\n removeStream(stream_id, mediaType) {\n let stream_dom_id = mediaType + '_track_' + stream_id;\n let elem = document.querySelector('#' + stream_dom_id);\n elem.remove();\n }\n\n createStreamElement(user_id, type) {\n let user_dom_id = 'user_' + user_id;\n let video_track_dom_id = 'video_track_' + user_id;\n let audio_track_dom_id = 'audio_track_' + user_id;\n let avatar_dom_id = 'avatar_' + user_id;\n let user_dom = document.getElementById(user_dom_id);\n let audio_track_dom = document.getElementById(audio_track_dom_id);\n let video_track_dom = document.getElementById(video_track_dom_id);\n let avatar_dom = document.getElementById(avatar_dom_id);\n let username = this.participant_data[user_id]?.username || 'NA';\n\n if (!user_dom) {\n user_dom = document.createElement('div');\n user_dom.id = user_dom_id;\n user_dom.dataset.type = type;\n }\n\n if (!avatar_dom) {\n avatar_dom = document.createElement('div');\n avatar_dom.id = avatar_dom_id;\n avatar_dom.classList.add('avatar_container', 'show');\n avatar_dom.innerHTML = `
${\n username ? username[0] : 'user'\n }
`;\n\n user_dom.appendChild(avatar_dom);\n }\n\n if (!video_track_dom) {\n video_track_dom = document.createElement('div');\n video_track_dom.dataset.mode = user_id == '5555' ? 'screen' : 'video';\n video_track_dom.id = video_track_dom_id;\n video_track_dom.className = 'video';\n video_track_dom.style.width = '100%';\n video_track_dom.style.height = '100%';\n\n user_dom.appendChild(video_track_dom);\n }\n\n if (!audio_track_dom) {\n audio_track_dom = document.createElement('div');\n audio_track_dom.dataset.mode = user_id == '5555' ? 'screen' : 'audio';\n audio_track_dom.id = audio_track_dom_id;\n\n user_dom.appendChild(audio_track_dom);\n }\n\n return user_dom;\n }\n}\n\nexport default class extends Controller {\n static targets = [\n 'audioInput',\n 'videoInput',\n 'audioOutput',\n 'audioIcon',\n 'videoIcon',\n 'localVideo',\n 'remoteVideo',\n 'gallery',\n 'speaker',\n 'screen',\n 'screenShare',\n 'screenContainer',\n ];\n connect() {\n this.agora_app_id = this.data.get('agoraAppId');\n this.optimization_mode = this.data.get('optimizationMode');\n this.video_profile = this.data.get('videoProfile');\n this.rtc_token = this.data.get('rtcToken');\n this.rtc_screen_token = this.data.get('rtcScreenToken');\n this.channel_name = this.data.get('channelName');\n this.video_call_id = this.data.get('id');\n this.uid = this.data.get('uid');\n this.participant_data = JSON.parse(this.data.get('participantData'));\n this.audio_mode = this.data.get('audioMode') == 'true';\n this.is_host = this.data.get('host') == 'true';\n this.localStoragePresent = storageAvailable('localStorage');\n setTag('call.id', this.video_call_id?.toString());\n setTag('call.uid', this.uid?.toString());\n import('../lib/channel')\n .then((channel) => this.join(channel.default))\n .then(() => {\n this.audioInputDevices = [];\n this.audioOutputDevices = [];\n this.videoInputDevices = [];\n this.layout = 'speaker';\n this.checkAndDisableTooltips();\n\n const params = new URLSearchParams(window.location.search);\n this.is_popup = params.has('popup') && params.get('popup') == 'true';\n this.pip_stream_id = null;\n if (this.is_popup) {\n window.addEventListener('focus', () => {\n if (this.pip_stream_id) {\n document.exitPictureInPicture();\n this.pip_stream_id = null;\n }\n });\n window.addEventListener('blur', () => {\n let stream_ids = this.channel.streams.ids;\n let remote_stream_id = stream_ids.find(\n (id) => id != this.local_stream_id\n );\n // let remote_stream_id = remote_stream_ids.length ? remote_stream_ids[0] : nil\n if (remote_stream_id) {\n this.pip_stream_id = remote_stream_id;\n document\n .getElementById('video' + this.pip_stream_id)\n .requestPictureInPicture();\n }\n });\n }\n });\n this.layoutManager = new LayoutManager(this.participant_data);\n }\n\n disconnect() {\n this.channel && this.channel.leaveMeeting();\n }\n\n join(Channel) {\n if (window.channel) {\n this.channel = window.channel;\n } else {\n this.channel = new Channel(\n this.agora_app_id,\n this.rtc_token,\n this.rtc_screen_token,\n this.channel_name,\n this.uid,\n this.participant_data,\n this.video_profile\n );\n window.channel = this.channel;\n this._subscribeChannelEvents();\n var is_camera_on =\n this.localStoragePresent && localStorage.getItem('camera_on');\n\n this.channel.joinMeeting({\n video: this.is_host ? true : is_camera_on == 'true',\n audio: true,\n optimizationMode: this.optimization_mode,\n });\n\n if (is_camera_on == 'false' && !this.is_host) {\n this.channel.is_video_mute = true;\n this.videoIconTarget.innerText = 'videocam_off';\n this.videoIconTarget.parentElement.classList.add('active');\n }\n }\n }\n\n toggleScreenShare() {\n if (this.channel.rtc_screen_client?.local_published) {\n this.channel.endScreenShare();\n this.screenShareTarget.innerText = 'screen_share';\n } else {\n this.channel.startScreenShare();\n this.screenShareTarget.innerText = 'stop_screen_share';\n }\n }\n\n toggleCamera() {\n this.channel.toggleCamera();\n }\n\n addUser() {\n $('#add-user-modal').modal('show');\n }\n\n getDevices() {\n $('#video-call-setting-modal').modal('show');\n this.channel.getDevices((devices) => {\n this.setAudioVideoInputsDOM(devices);\n });\n }\n\n changeAudioInput() {\n let deviceLabel =\n this.audioInputTarget.options[this.audioInputTarget.selectedIndex].text;\n let deviceId = this.audioInputTarget.value;\n this.channel.switchDevice('audio', deviceId, deviceLabel);\n }\n\n changeVideoInput() {\n let deviceLabel =\n this.videoInputTarget.options[this.videoInputTarget.selectedIndex].text;\n let deviceId = this.videoInputTarget.value;\n this.channel.switchDevice('video', deviceId, deviceLabel);\n }\n\n changeAudioOutput() {\n let deviceLabel =\n this.audioOutputTarget.options[this.audioOutputTarget.selectedIndex].text;\n let deviceId = this.audioOutputTarget.value;\n this.channel.setAudioOutput(deviceId, deviceLabel);\n }\n\n setAudioVideoInputsDOM = (devices) => {\n this.audioInputDevices = devices.filter(function (device) {\n return device.kind === 'audioinput';\n });\n this.videoInputDevices = devices.filter(function (device) {\n return device.kind === 'videoinput';\n });\n this.audioOutputDevices = devices.filter(function (device) {\n return device.kind === 'audiooutput';\n });\n let audioInputSelect = document.getElementById('audioInput');\n let audioOutputSelect = document.getElementById('audioOutput');\n let videoInputSelect = document.getElementById('videoInput');\n\n audioInputSelect.innerHTML = '';\n audioOutputSelect.innerHTML = '';\n videoInputSelect.innerHTML = '';\n\n this.audioInputDevices.forEach((audioDevice) => {\n let option = document.createElement('option');\n option.value = audioDevice.deviceId;\n option.selected = option.value == this.channel.rtc_client.audioDeviceId;\n option.innerText = audioDevice.label;\n audioInputSelect.appendChild(option);\n });\n\n this.audioOutputDevices.forEach((audioDevice) => {\n let option = document.createElement('option');\n option.value = audioDevice.deviceId;\n option.selected =\n option.value == this.channel.rtc_client.audioOutputDeviceId;\n option.innerText = audioDevice.label;\n audioOutputSelect.appendChild(option);\n });\n\n this.videoInputDevices.forEach((videoDevice) => {\n let option = document.createElement('option');\n option.value = videoDevice.deviceId;\n option.selected = option.value == this.channel.rtc_client.videoDeviceId;\n option.innerText = videoDevice.label;\n videoInputSelect.appendChild(option);\n });\n };\n\n _subscribeChannelEvents() {\n this.channel.on('stream-updated', (stream_id) => {\n this.renderStreamStatus(stream_id);\n });\n\n this.channel.on('user-published', (user_id, type, mediaType) => {\n this.onStreamAdded(user_id, type, mediaType);\n });\n\n this.channel.on('user-unpublished', (user_id) => {\n this.renderStreamStatus(user_id);\n });\n\n this.channel.on('user-left', (user_id) => {\n this.onUserRemoved(user_id);\n });\n\n this.channel.on('status-update', (message, expire) => {\n this.renderSnackBar(message, expire);\n });\n\n this.channel.on('screen-share-ended', () => {\n this.screenShareTarget.innerText = 'screen_share';\n });\n }\n\n onStreamAdded(user_id, type, mediaType) {\n if (type == 'local') {\n this.local_stream_id = user_id;\n } else {\n ahoy.track('stream_added', {\n vc_id: this.video_call_id,\n uid: user_id,\n });\n }\n\n this.layoutManager.addStream(user_id, type);\n\n let user_dom_id = mediaType + '_track_' + user_id;\n if (!(mediaType === 'audio' && type === 'local')) {\n this.channel.playStream(user_dom_id, user_id, mediaType, type);\n }\n\n this.renderStreamStatus(user_id);\n }\n\n onStreamRemoved(user_id) {\n this.layoutManager.removeStream(user_id);\n this.renderStreamStatus(user_id);\n ahoy.track('stream_removed', {\n vc_id: this.video_call_id,\n uid: user_id,\n });\n }\n\n onUserRemoved(user_id) {\n this.layoutManager.removeUser(user_id);\n ahoy.track('user_removed', {\n vc_id: this.video_call_id,\n uid: user_id,\n });\n }\n\n _renderAudioStatus(attributes) {\n let is_audio_on = hasOwnProperty(attributes, 'is_audio_on')\n ? attributes['is_audio_on']\n : true;\n return is_audio_on === 'yes'\n ? 'mic'\n : 'mic_off';\n }\n\n _renderVideoStatus(attributes) {\n let is_video_on = hasOwnProperty(attributes, 'is_video_on')\n ? attributes['is_video_on']\n : true;\n return is_video_on === 'yes'\n ? 'videocam'\n : 'videocam_off';\n }\n\n renderStreamStatus(user_id) {\n if (this.local_stream_id != user_id && !this.is_host) return;\n let stream = this.channel.users[user_id];\n let player = document.getElementById('player_' + user_id);\n if (stream && player) {\n let { attributes } = stream;\n let username = hasOwnProperty(attributes, 'username')\n ? attributes['username']\n : 'NA';\n let status = document.getElementById('status_' + user_id);\n if (!status) {\n status = document.createElement('div');\n status.id = 'status_' + user_id;\n status.classList.add('status_container');\n let status_text = document.createElement('span');\n status_text.innerHTML = `${\n this.local_stream_id == user_id ? '' : username\n }`;\n status.innerHTML = `${this._renderAudioStatus(attributes)}`;\n status.appendChild(status_text);\n player.appendChild(status);\n } else {\n status.innerHTML = `${this._renderAudioStatus(attributes)} ${\n this.local_stream_id == user_id ? '' : username\n }`;\n }\n }\n }\n\n toggleLocalAudio() {\n this.channel.toggleLocalAudio();\n if (this.channel && this.channel.is_audio_mute) {\n this.renderSnackBar('Microphone off', true);\n this.audioIconTarget.innerText = 'mic_off';\n this.audioIconTarget.parentElement.classList.add('active');\n } else {\n this.renderSnackBar('Microphone on', true);\n this.audioIconTarget.parentElement.classList.remove('active');\n this.audioIconTarget.innerText = 'mic';\n }\n }\n\n toggleLocalVideo() {\n this.channel.toggleLocalVideo();\n if (this.channel.is_video_mute) {\n this.renderSnackBar('Camera off', true);\n this.videoIconTarget.innerText = 'videocam_off';\n this.videoIconTarget.parentElement.classList.add('active');\n } else {\n this.renderSnackBar('Camera on', true);\n this.videoIconTarget.parentElement.classList.remove('active');\n this.videoIconTarget.innerText = 'videocam';\n }\n }\n\n renderSnackBar(message, expire) {\n const snackBarDom = document.getElementById('snackbar');\n if (snackBarDom) {\n const snackBarController =\n this.application.getControllerForElementAndIdentifier(\n snackBarDom,\n 'snack'\n );\n snackBarController && snackBarController.show(message, expire);\n }\n }\n\n setLocalStreamDefaultAttributes() {\n var is_mic_on = this.localStoragePresent && localStorage.getItem('mic_on');\n var is_camera_on =\n this.localStoragePresent && localStorage.getItem('camera_on');\n if (is_mic_on !== null && is_mic_on == 'false') this.toggleLocalAudio();\n if (is_camera_on !== null && is_camera_on == 'false' && !this.audio_mode)\n this.toggleLocalVideo();\n }\n\n endCall() {\n this.channel && this.channel.leaveMeeting();\n document.querySelector(this.element.dataset.leaveForm).submit();\n setWidgetVideoCallStatus(false);\n }\n\n onVideoCallEnded() {\n this.channel && this.channel.leaveMeeting();\n let completeForm = document.querySelector(\n '#complete_video_call_' + this.element.dataset.videoCallId\n );\n if (completeForm) {\n completeForm.submit();\n }\n }\n\n updateParticipantData(e) {\n if (!this.channel) return;\n this.channel.updateParticipantData(e.detail.data);\n }\n\n checkAndDisableTooltips() {\n if ('ontouchstart' in window && window.screen.width < 1024) {\n $('[data-toggle=\"tooltip\"]').tooltip('disable');\n }\n }\n}\n","import { UAParser } from 'ua-parser-js';\n\nexport function getErrorMessage(err) {\n var errorMessage,\n helpMessage = '';\n let audioPermissions, videoPermissions;\n switch (err.msg) {\n case 'AbortError':\n errorMessage = 'We\\'re unable to connect you!';\n helpMessage = 'Please try reloading the page.';\n break;\n case 'NotAllowedError':\n navigator.mediaDevices\n .getUserMedia({\n audio: true,\n })\n .then(() => (audioPermissions = true))\n .catch(() => {\n audioPermissions = false;\n errorMessage = 'Microphone permission denied.';\n });\n\n navigator.mediaDevices\n .getUserMedia({\n video: true,\n })\n .then(() => (videoPermissions = true))\n .catch(() => {\n videoPermissions = false;\n if (!audioPermissions && !videoPermissions) {\n errorMessage = 'Camera and Microphone permissions denied.';\n } else if (!videoPermissions) {\n errorMessage = 'Camera permission denied.';\n }\n });\n errorMessage = 'Camera (and/or) Microphone permissions denied.';\n helpMessage =\n 'Please click the lock icon in the address bar on your browser and select allow for camera and microphone permissions.';\n break;\n case 'NotReadableError':\n errorMessage = 'Faulty camera or microphone.';\n helpMessage =\n 'We\\'ve encountered a problem with your camera or microphone. Please try switching to another camera or microphone.';\n break;\n case 'OverconstrainedError':\n errorMessage =\n err.constraint || 'Unable to connect to your camera and microphone!';\n helpMessage =\n err.message ||\n 'We\\'ve encountered a problem connecting with your camera or microphone. Please try reloading the page and switching to another camera or microphone.';\n break;\n default:\n errorMessage = 'Unable to connect to your camera and microphone!';\n helpMessage =\n 'We\\'ve encountered a problem connecting with your camera or microphone. Please try reloading the page and switching to another camera or microphone.';\n }\n return { errorMessage, helpMessage };\n // errorWrapper.innerHTML = \"\";\n // errorWrapper.appendChild(errorMessage);\n // errorWrapper.appendChild(helpMessage);\n}\n\nexport class BrowserOSChecker {\n constructor() {\n let parser = new UAParser();\n this.browser = parser.getBrowser();\n this.os = parser.getOS();\n this.result = parser.getResult();\n\n this.chrome_icon = '';\n let playstore_icon = '';\n\n this.chrome_help_links = `\n
\n
\n Use Chrome ${this.chrome_icon}\n
\n
\n ${playstore_icon} Install Chrome\n
\n
\n `;\n }\n\n userAgent() {\n var result = this.result;\n let ua = result && result.ua;\n return ua;\n }\n\n browserOSVersions() {\n return { os: this.os, browser: this.browser };\n }\n\n testOS() {\n var os = this.os;\n var result = this.result;\n let ua = result && result.ua;\n\n os.version = parseFloat(os.version);\n if (\n ua == 'gumstack:android' ||\n ua == 'gumstack:ios' ||\n ua == 'gumstack:embed:ios' ||\n ua == 'gumstack:embed:android' ||\n (os.name == 'Windows' && os.version >= 7) ||\n (os.name == 'Mac OS' && os.version >= 10) ||\n (os.name == 'Android' && os.version >= 5) ||\n (os.name == 'iOS' && os.version >= 11) ||\n os.name == 'Linux'\n ) {\n return { isCompatible: true };\n } else {\n return {\n isCompatible: false,\n message:\n 'Your device OS is not compatible to join the session. Please use Windows 7+, Mac OS 10+, Android 5+ or iOS 11+.',\n };\n }\n }\n\n compatibilityTest() {\n var os = this.os;\n var browser = this.browser;\n var result = this.result;\n let ua = result && result.ua;\n browser.version = parseFloat(browser.version);\n os.version = parseFloat(os.version);\n let passedOS = this.testOS();\n if (ua.match(/gumstack:ios|gumstack:android/g)) {\n console.log('[GUMSTACK APP] ua check passed');\n return {\n isCompatible: true,\n };\n }\n\n if (passedOS.isCompatible) {\n switch (os.name) {\n case 'Windows':\n case 'Linux':\n case 'Mac OS':\n if (\n (browser.name == 'Chrome' && browser.version >= 58) ||\n (browser.name == 'Firefox' && browser.version >= 56) ||\n (browser.name == 'Edge' && browser.version >= 80) ||\n (browser.name == 'Opera' && browser.version >= 45) ||\n (os.name == 'Mac OS' &&\n browser.name == 'Safari' &&\n browser.version >= 11)\n ) {\n return {\n isCompatible: true,\n };\n } else {\n return {\n isCompatible: false,\n message: `${browser.name} does not support video/audio calling on ${os.name}. Please use Google Chrome on ${os.name} to join this call.`,\n };\n }\n case 'Android':\n if (\n (browser.name == 'Chrome' && browser.version >= 58) ||\n browser.name == 'Edge' ||\n browser.name == 'Chrome WebView' ||\n browser.name == 'Firefox' ||\n ua == 'gumstack:android' ||\n ua == 'gumstack:embed:android'\n ) {\n return {\n isCompatible: true,\n };\n } else {\n return {\n isCompatible: false,\n message: `${browser.name} does not support video/audio calling on ${os.name}. Please use Google Chrome on ${os.name} to join this call.`,\n };\n }\n case 'iOS':\n if (\n ((browser.name == 'Mobile Safari' || browser.name == 'Safari') &&\n browser.version >= 11) ||\n (browser.name == 'Chrome' && os.version > 14.4) ||\n browser.name == 'WebKit' ||\n (browser.name == 'GSA' && os.version > 14.4) ||\n (browser.name == 'CriOS' && os.version > 14.4) ||\n ua == 'gumstack:ios' ||\n ua == 'gumstack:embed:ios'\n ) {\n return {\n isCompatible: true,\n };\n } else {\n return {\n isCompatible: false,\n message: `${browser.name} does not support video/audio calling on ${os.name}. Please use Safari 11+ for iOS.`,\n };\n }\n }\n } else {\n return passedOS;\n }\n }\n}\n","import { Controller } from 'stimulus';\nimport StimulusReflex from 'stimulus_reflex';\nimport { BrowserOSChecker } from '../lib/device_exception_handler';\nimport { Turbo } from '@hotwired/turbo-rails';\nimport ahoy from 'ahoy.js';\nimport { setWidgetVideoCallStatus } from '../helpers/index';\nimport getDeviceInfo from '../utils/getDeviceInfo';\nexport default class extends Controller {\n static targets = [\n 'tryingToConnect',\n 'permissionWrapper',\n 'availableAgent',\n 'permissionButton',\n 'submitButton',\n 'participationForm',\n 'successMessage',\n 'failureMessage',\n 'browserErrorMessage',\n 'audioVideoSwitch',\n 'audioSwitch',\n 'audioHiddenInput',\n 'permissionSlotBtn',\n 'contentWrapper',\n 'incomingForm',\n ];\n\n connect() {\n StimulusReflex.register(this);\n this.joinMode = this.element.dataset.joinMode || 'default';\n this.next_url = this.element.dataset.joinUrl;\n this.enable_popup = this.element.dataset.enablePopup;\n this.account_id = this.element.dataset.accountId;\n\n const params = new URLSearchParams(window.location.search);\n let is_popup = params.has('popup') && params.get('popup') == 'true';\n\n if (this.next_url && !is_popup && this.enable_popup == 'true') {\n let url = new URL(this.next_url);\n url.searchParams.set('popup', true);\n window.open(\n url.toString(),\n '',\n 'toolbar=no,scrollbars=yes,resizable=yes,top=0,right=0,width=400px,height=768px'\n );\n window.parent.postMessage('gswidget:close', '*');\n }\n\n if (this.hasPermissionButtonTarget) {\n this.browserCheck();\n if (this.joinMode == 'default') this.checkPermissions();\n }\n if (this.hasTryingToConnectTarget) {\n this.setPageRefresh();\n }\n if (this.joinMode == 'new_incoming') {\n this.toggleNewIncoming();\n }\n this._handleSwitchListener();\n }\n\n disconnect() {\n if (this.pageRefreshId) window.clearInterval(this.pageRefreshId); // clearing interval when controller disconnects\n }\n\n pageReload() {\n window.location.reload();\n }\n\n setPageRefresh() {\n this.pageRefreshId = window.setInterval(this.pageReload, 5000); // 5secs\n }\n\n beforeShow() {\n document.querySelector('.loading-spinner').classList.remove('d-none');\n }\n\n afterShow(el) {\n document.querySelector('.loading-spinner').classList.add('d-none');\n const url = new URL(window.location);\n url.searchParams.set('vc_id', el.dataset.videoCallParticipationId);\n window.history.pushState({}, '', url);\n }\n\n beforeHide() {\n document.querySelector('.loading-spinner').classList.remove('d-none');\n }\n\n afterHide() {\n document.querySelector('.loading-spinner').classList.add('d-none');\n }\n\n showError() {\n document.querySelector('.loading-spinner').classList.add('d-none');\n }\n\n showHalted() {\n document.querySelector('.loading-spinner').classList.add('d-none');\n }\n\n hideError() {\n document.querySelector('.loading-spinner').classList.add('d-none');\n }\n\n hideHalted() {\n document.querySelector('.loading-spinner').classList.add('d-none');\n }\n\n show() {\n this.stimulate(\n 'VideoCallParticipation#show',\n this.element.dataset.videoCallParticipationId\n );\n }\n\n hide() {\n this.stimulate(\n 'VideoCallParticipation#hide',\n this.element.dataset.videoCallParticipationId\n );\n }\n\n onVideoCallChanged(e) {\n if (Object.prototype.hasOwnProperty.call(e.detail, 'status')) {\n if (e.detail.status == 'completed') setWidgetVideoCallStatus(false);\n }\n window.location.reload();\n }\n\n browserCheck() {\n const { isCompatible, message } =\n new BrowserOSChecker().compatibilityTest();\n this.is_compatible_browser = isCompatible;\n this.browser_error_message = message;\n if (!isCompatible) {\n this.permissionButtonTarget.disabled = true;\n this.permissionButtonTarget.style.display = 'none';\n }\n if (message) {\n this.browserErrorMessageTarget.style.display = 'block';\n this.browserErrorMessageTarget.innerText = message;\n }\n }\n\n checkPermissions() {\n if (!this.is_compatible_browser) return;\n let versions = new BrowserOSChecker().browserOSVersions();\n let ua = new BrowserOSChecker().userAgent();\n\n if (\n ua.match(\n /gumstack:ios|gumstack:android|gumstack:embed:android|gumstack:embed:ios/g\n )\n ) {\n console.log('[FLUTTER APP] UA: ', ua);\n console.log(\n '[FLUTTER APP] this.element.dataset',\n this.element.dataset,\n this.element.dataset.joinUrl\n );\n console.log('[FLUTTER APP] next_url: ', this.next_url);\n this.setPermissions(true);\n return;\n }\n var ignoreBrowserList = ['Safari', 'Mobile Safari', 'Chrome'];\n if (\n (ignoreBrowserList.includes(versions.browser.name) &&\n versions.os.name == 'iOS') ||\n (versions.browser.name == 'Safari' && versions.os.name == 'Mac OS')\n ) {\n return;\n } else {\n var audio = navigator.permissions.query({ name: 'microphone' });\n var video = navigator.permissions.query({ name: 'camera' });\n Promise.all([audio, video]).then((res) => {\n if (res[0].state == 'granted')\n this.setPermissions(\n true,\n this.hasAudioSwitchTarget ? res[1].state !== 'granted' : false\n );\n });\n }\n }\n\n showPermissions() {\n let gaController = this._googleAnalyticsController();\n if (gaController) {\n gaController.track({ event: 'granted_av_permissions' });\n }\n ahoy.track('begin_call', {\n account_id: this.account_id,\n screen: 'request_permission',\n });\n if (this.joinMode == 'new_incoming') {\n this.toggleNewIncoming();\n this.initPermissions();\n } else this.checkPermissions();\n if (this.hasPermissionWrapperTarget)\n this.permissionWrapperTarget.style.display = 'block';\n if (this.hasAvailableAgentTarget)\n this.availableAgentTarget.style.display = 'none';\n if (this.hasPermissionSlotBtnTarget) this.permissionSlotBtnTarget.remove();\n if (this.hasContentWrapperTarget) this.contentWrapperTarget.remove();\n if (this.hasSubmitButtonTarget) this.submitButtonTarget.remove();\n if (this.hasPermissionButtonTarget)\n this.permissionButtonTarget.style.display = 'block';\n }\n\n initPermissions() {\n let successCallback = () => {\n console.log('Permissions granted');\n this.setPermissions(true, this.audio_only());\n };\n let errorCallback = () => {\n console.log('Permissions denied');\n this.setPermissions(false);\n };\n\n if (this.hasPermissionButtonTarget) {\n this.permissionButtonTarget.disabled = true;\n this.permissionButtonTarget.innerText = 'Waiting for permissions...';\n }\n ahoy.track('grant_permission', {\n account_id: this.account_id,\n audio: true,\n video: !this.audio_only(),\n });\n navigator.mediaDevices\n .getUserMedia({ audio: true, video: !this.audio_only() })\n .then(successCallback)\n .catch(errorCallback);\n }\n\n setPermissions(bool, audio_only = false) {\n if (this.hasAudioHiddenInputTarget) {\n this.audioHiddenInputTarget.value = audio_only;\n }\n console.log('granted permissions?', bool);\n if (bool) {\n this.permissionSuccessCallback(audio_only);\n } else {\n this.failureMessageTarget.style.display = 'block';\n this.successMessageTarget.style.display = 'none';\n if (this.hasPermissionButtonTarget) {\n this.permissionButtonTarget.disabled = false;\n this.permissionButtonTarget.innerText = 'Grant Permissions';\n }\n }\n\n let { browser, os, infoString } = getDeviceInfo();\n if (!this.element.dataset?.isHost) {\n ahoy.track('granted_permission', {\n account_id: this.account_id,\n audio: true,\n video: !audio_only,\n success: bool,\n screen: 'waiting_room',\n os: os.name,\n os_version: os.version,\n browser: browser.name,\n browser_version: browser.version,\n device_info: infoString,\n });\n }\n this.is_permissions_granted = bool;\n }\n\n permissionSuccessCallback(audio_only) {\n if (this.hasPermissionButtonTarget)\n this.permissionButtonTarget.disabled = true;\n this.successMessageTarget.style.display = 'block';\n this.failureMessageTarget.style.display = 'none';\n if (this.hasAudioHiddenInputTarget)\n this.audioHiddenInputTarget.value = audio_only;\n if (this.joinMode == 'show')\n document.querySelector('form#join_schedule_call').submit();\n else if (this.element.dataset.isHost == 'true') {\n let url = new URL(this.element.dataset.joinUrl, window.origin);\n url.searchParams.append('audio_only', audio_only);\n Turbo.visit(url?.toString());\n } else this.incomingFormTarget.submit();\n setWidgetVideoCallStatus(true);\n }\n\n toggleSwitch(mode) {\n if (this.hasAudioSwitchTarget && this.hasAudioVideoSwitchTarget) {\n let audio_only = mode == 'audio';\n this.audioVideoSwitchTarget.dataset.active = !audio_only;\n this.audioSwitchTarget.dataset.active = audio_only;\n this.element.dataset.audioMode = audio_only;\n if (this.hasAudioHiddenInputTarget)\n this.audioHiddenInputTarget.value = audio_only;\n }\n }\n\n audio_only() {\n if (this.hasAudioSwitchTarget) {\n return this.audioSwitchTarget.dataset.active == 'true';\n } else return false;\n }\n\n reloadParent() {\n window.parent.postMessage('page:reload', '*');\n }\n\n toggleNewIncoming() {\n let body = document.querySelector('body');\n if (!body) return;\n if (body.classList.contains('new_incoming'))\n body.classList.remove('new_incoming');\n else body.classList.add('new_incoming');\n }\n\n _handleSwitchListener() {\n if (this.hasAudioSwitchTarget && this.hasAudioVideoSwitchTarget) {\n this.audioSwitchTarget.addEventListener('click', () => {\n this.toggleSwitch('audio');\n });\n this.audioVideoSwitchTarget.addEventListener('click', () => {\n this.toggleSwitch('video');\n });\n }\n }\n\n _googleAnalyticsController() {\n if (document.querySelector('[data-ga-tracking-enabled=\"true\"]') !== null) {\n return this.application.getControllerForElementAndIdentifier(\n this.element,\n 'google-analytics'\n );\n }\n }\n}\n","import { Application } from 'stimulus';\nimport StimulusReflex from 'stimulus_reflex';\nimport consumer from '../../channels/consumer';\n\nconst application = Application.start();\n\nimport ActionPanelController from '../action_panel_controller';\nimport FeedbackController from '../feedback_controller';\nimport IncomingVideoCallController from '../incoming_video_call_controller';\nimport SnackController from '../snack_controller';\nimport TimeZoneSearchController from '../timezone_search_controller';\nimport VideoCallController from '../video_call_controller';\nimport VideoCallParticipationController from '../video_call_participation_controller';\nimport WidgetVideoCallController from '../widget_video_call_controller';\nimport DateSlotPickerController from '../date_slot_picker_controller';\nimport ShopifyWidgetOverlayController from '../shopify_widget_overlay_controller';\nimport ClipboardController from '../clipboard_controller';\nimport WidgetPreviewController from '../widget_preview_controller';\nimport CallInviteController from '../call_invite_controller';\nimport CartController from '../cart_controller';\nimport ShareController from '../share_controller';\nimport GoogleAnalyticsController from '../google_analytics_controller';\n\napplication.register('action-panel', ActionPanelController);\napplication.register('feedback', FeedbackController);\napplication.register('incoming-video-call', IncomingVideoCallController);\napplication.register('snack', SnackController);\napplication.register('timezone-search', TimeZoneSearchController);\napplication.register('video-call', VideoCallController);\napplication.register(\n 'video-call-participation',\n VideoCallParticipationController\n);\napplication.register('widget-video-call', WidgetVideoCallController);\napplication.register('date-slot-picker', DateSlotPickerController);\napplication.register('shopify-widget-overlay', ShopifyWidgetOverlayController);\napplication.register('clipboard', ClipboardController);\napplication.register('widget-preview', WidgetPreviewController);\napplication.register('call-invite', CallInviteController);\napplication.register('cart', CartController);\napplication.register('share', ShareController);\napplication.register('google-analytics', GoogleAnalyticsController);\n\nStimulusReflex.initialize(application, { consumer, isolate: true });\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n connect() {}\n\n showPreview() {\n let previewEl = document.getElementById('widget_preview');\n if (!previewEl) return;\n previewEl.classList.replace('d-none', 'd-flex');\n }\n\n closePreview() {\n let previewEl = document.getElementById('widget_preview');\n if (!previewEl) return;\n previewEl.classList.replace('d-flex', 'd-none');\n }\n}\n","import { Controller } from 'stimulus';\nimport ahoy from 'ahoy.js';\n\nexport default class extends Controller {\n static targets = [\n 'dateSlotPicker',\n 'registrationForm',\n 'emailField',\n 'selectedTime',\n 'selectedTimeDisplay',\n 'submitBtn',\n 'emailSpinner',\n 'emailError',\n 'slot',\n 'miniSlot',\n 'formContainer',\n 'confirmText',\n 'otherPurposeContainer',\n 'purposeTextArea',\n ];\n\n connect() {\n this._setToken();\n this.checkEmail();\n this.setIdentity();\n this._handleSlotSelection();\n this.timezone = document.getElementById('timezone-target');\n this.banner = document.getElementById('widget-banner');\n this.momentTimezone = import('moment-timezone');\n if (this.element.dataset.scheduleMode === 'full') {\n this.showAllSlots();\n }\n }\n\n setIdentity() {\n let token = this.element.dataset.subscriberToken;\n let identityData = {\n name: 'gs:identify',\n data: { token: token },\n };\n\n if (token) {\n window.parent.postMessage(identityData, '*');\n }\n }\n\n checkEmail() {\n if (this.hasEmailFieldTarget) {\n if (this._validateEmail(this.emailFieldTarget.value)) {\n this._validateEmailRemote(\n this._extractDomain(this.emailFieldTarget.value)\n );\n } else {\n this.emailErrorTarget.innerText = '';\n this.submitBtnTarget.disabled = !(\n this.emailFieldTarget.value.trim() == ''\n );\n }\n }\n }\n\n toggleEmailSpinner(bool) {\n this.emailSpinnerTarget.style.display = bool ? 'block' : 'none';\n }\n\n requestPermissions() {\n console.log('Request Permissions');\n }\n\n showAllSlots() {\n this.miniSlotTarget.classList.replace('d-flex', 'd-none');\n this.formContainerTarget.classList.remove('d-none');\n this.toggleBanner(false);\n }\n\n showRegistrationForm() {\n this.showAllSlots();\n let gaController = this._googleAnalyticsController();\n if (gaController) {\n gaController.track({ event: 'selectedSlot' });\n }\n this.dateSlotPickerTarget.style.display = 'none';\n this.registrationFormTarget.style.display = 'block';\n this.toggleTimezone(false);\n this._renderTime();\n }\n\n hideRegistrationForm() {\n this.dateSlotPickerTarget.style.display = 'block';\n this.registrationFormTarget.style.display = 'none';\n this.toggleTimezone(true);\n this._renderTime();\n }\n\n toggleBanner(show) {\n if (this.banner) {\n this.banner.style.display = show ? 'block' : 'none';\n }\n }\n\n toggleTimezone(show) {\n if (this.timezone) {\n this.timezone.style.display = show ? 'inline-block' : 'none';\n }\n }\n\n _setToken() {\n let url = new URL(window.location.href);\n this.token = url.searchParams.get('token');\n }\n\n _validateEmail(email) {\n const re =\n /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/; // eslint-disable-line\n return re.test(email);\n }\n\n _renderTime() {\n let selected_date = this.selectedTimeTarget.value;\n this.momentTimezone.then((imprt) => {\n const moment = imprt.default;\n if (!moment.isMoment(selected_date)) {\n selected_date = moment(selected_date).tz(\n this.dateSlotPickerTarget.dataset.timezone\n );\n }\n\n this.selectedTimeDisplayTarget.innerText = selected_date.format(\n 'ddd, MMM DD | h:mm A z'\n );\n if (this.hasConfirmTextTarget) {\n this.confirmTextTarget.innerText = `Confirm for ${selected_date.format(\n 'h:mm A, MMM DD'\n )}`;\n }\n });\n }\n\n _validateEmailRemote(domain) {\n this.toggleEmailSpinner(true);\n this.submitBtnTarget.disabled = true;\n fetch(`/validate/email?token=${this.token}&domain=${domain}`, {\n method: 'POST',\n })\n .then((res) => {\n this._toggleEmailError(res.status == 200, domain);\n })\n .catch(() => {\n this._toggleEmailError(true, domain);\n });\n }\n\n _toggleEmailError(bool, domain) {\n this.emailErrorTarget.innerText = bool\n ? ''\n : `Please enter your work email address. This form does not accept addresses from ${domain}`;\n this.toggleEmailSpinner(false);\n this.submitBtnTarget.disabled = !bool;\n }\n\n toggleOtherPurposeContainer(e) {\n this.purposeTextAreaTarget.value = '';\n if (this.hasOtherPurposeContainerTarget) {\n this.otherPurposeContainerTarget.style.display =\n e.target.value == 'true' ? 'block' : 'none';\n }\n if (this.hasPurposeTextAreaTarget && e.target.value == 'false') {\n this.purposeTextAreaTarget.value =\n e.target.options[e.target.selectedIndex].text;\n }\n }\n\n _extractDomain(email) {\n return email.split('@').pop();\n }\n\n _resetSlotSelection() {\n if (!this.hasSlotTarget) return;\n this.slotTargets.forEach((slot) => {\n slot.classList.remove('active');\n });\n }\n\n _handleSlotSelection() {\n if (!this.hasSlotTarget) return;\n this.slotTargets.forEach((slot) => {\n slot.addEventListener('click', () => {\n this._resetSlotSelection();\n slot.classList.add('active');\n this.selectedTimeTarget.value = slot.dataset.time;\n this._renderTime();\n ahoy.track('selected_slot', {\n account_id: slot.dataset.accountId,\n slot: slot.dataset.time,\n });\n });\n });\n }\n\n _googleAnalyticsController() {\n if (document.querySelector('[data-ga-tracking-enabled=\"true\"]') !== null) {\n return this.application.getControllerForElementAndIdentifier(\n this.element.querySelector('[data-controller=\\'google-analytics\\']'),\n 'google-analytics'\n );\n }\n }\n}\n","export function getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute('content');\n }\n}\n\nexport function findElement(root, selector) {\n if (typeof root == 'string') {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n}\n\nexport function toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n}\n\nexport function removeElement(el) {\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n}\n\nexport function insertAfter(el, referenceNode) {\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\n}\n\nexport function setCookie(name, value, expiryInDays, path = '/') {\n if (typeof expiryInDays == 'number') {\n var cookie = `${name}=${encodeURIComponent(value)}; max-age=${\n expiryInDays * 24 * 60 * 60\n }; path=${path}`; // cookie string formation with max-age in days\n document.cookie = cookie; // adding cookie\n }\n}\n\nexport function getCookie(cookieName) {\n var cookies = document.cookie.split(';');\n for (const cookie of cookies) {\n var pair = cookie.split('=');\n if (cookieName == pair[0].trim()) return decodeURIComponent(pair[1]);\n }\n return null; // cookie not found\n}\n\nexport function isElementAvailable(dom_id) {\n var element = document.getElementById(dom_id);\n return typeof element != 'undefined' && element != null;\n}\n\nexport function lightOrDark(color) {\n // Variables for red, green, blue values\n var r, g, b, hsp;\n\n // Check the format of the color, HEX or RGB?\n if (color.match(/^rgb/)) {\n // If RGB --> store the red, green, blue values in separate variables\n color = color.match(\n /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/\n );\n\n r = color[1];\n g = color[2];\n b = color[3];\n } else {\n // If hex --> Convert it to RGB: http://gist.github.com/983661\n color = +('0x' + color.slice(1).replace(color.length < 5 && /./g, '$&$&'));\n\n r = color >> 16;\n g = (color >> 8) & 255;\n b = color & 255;\n }\n\n // HSP (Highly Sensitive Poo) equation from http://alienryderflex.com/hsp.html\n hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b));\n\n // Using the HSP value, determine whether the color is light or dark\n if (hsp > 127.5) {\n return 'light';\n } else {\n return 'dark';\n }\n}\n\nexport function setWidgetVideoCallStatus(started = false) {\n if (started) window.parent.postMessage('video_call:started', '*');\n else window.parent.postMessage('video_call:ended', '*');\n}\n\nexport function closeWidget() {\n window.parent.postMessage('gswidget:close', '*');\n}\n","require('channels');\nrequire('jquery');\n\nimport Rails from '@rails/ujs';\nRails.start();\n\nconst { delegate, disableElement, enableElement } = Rails;\n\ndelegate(\n document,\n Rails.linkDisableSelector,\n 'turbo:before-cache',\n enableElement\n);\ndelegate(\n document,\n Rails.buttonDisableSelector,\n 'turbo:before-cache',\n enableElement\n);\ndelegate(\n document,\n Rails.buttonDisableSelector,\n 'turbo:submit-end',\n enableElement\n);\n\ndelegate(\n document,\n Rails.formSubmitSelector,\n 'turbo:submit-start',\n disableElement\n);\ndelegate(document, Rails.formSubmitSelector, 'turbo:submit-end', enableElement);\ndelegate(\n document,\n Rails.formSubmitSelector,\n 'turbo:before-cache',\n enableElement\n);\n","import intlTelInput from 'intl-tel-input';\nimport 'intl-tel-input/build/js/utils';\n\ndocument.addEventListener('turbo:load', () => {\n initIntlTelephoneInput();\n});\n\ndocument.addEventListener('turbo:frame-render', () => {\n initIntlTelephoneInput();\n});\n\nexport default function initIntlTelephoneInput() {\n var inputs = document.querySelectorAll('input[type=\\'tel\\']');\n if (inputs.length) {\n inputs.forEach((input) => {\n if (input.dataset.intlTelInputId != undefined) {\n return;\n }\n var fieldName = input.dataset.formName;\n let iti = intlTelInput(input, {\n initialCountry: 'auto',\n hiddenInput: fieldName,\n autoPlaceholder: 'polite',\n preferredCountries: ['IN', 'US'],\n geoIpLookup: function (callback) {\n $.get(\n 'https://ipinfo.io?token=2790597761e5ab',\n function () {},\n 'jsonp'\n ).always(function (resp) {\n var countryCode = resp && resp.country ? resp.country : '';\n callback(countryCode);\n });\n },\n });\n\n var errorMap = [\n 'Invalid number',\n 'Invalid country code',\n 'Too short phone number for country code',\n 'Too long phone number for country code',\n 'Invalid number',\n ];\n\n var msgContainer = document.createElement('div');\n\n var validMsg = document.createElement('p');\n validMsg.setAttribute('id', 'valid-msg');\n validMsg.classList.add('d-none', 'text-success', 'fs-14');\n validMsg.innerText = 'Valid Phone Number';\n\n var errorMsg = document.createElement('p');\n errorMsg.setAttribute('id', 'error-msg');\n errorMsg.classList.add('d-none', 'text-danger', 'fs-14');\n\n input.parentElement.after(msgContainer);\n msgContainer.appendChild(validMsg);\n msgContainer.appendChild(errorMsg);\n\n var submitBtn = Array.from(input.form.elements).filter(function (\n element\n ) {\n return element.type == 'submit';\n })[0];\n\n var reset = function () {\n input.classList.remove('error');\n errorMsg.innerHTML = '';\n if (submitBtn) submitBtn.disabled = false;\n errorMsg.classList.add('d-none');\n validMsg.classList.add('d-none');\n };\n\n var checkPhoneNumber = function () {\n reset();\n if (input.value.trim()) {\n if (iti.isValidNumber()) {\n validMsg.classList.remove('d-none');\n if (submitBtn) submitBtn.disabled = false;\n $('input[type=\\'hidden\\'][name=\\'' + fieldName + '\\']').val(\n iti.getNumber()\n );\n } else {\n input.classList.add('error');\n if (submitBtn) submitBtn.disabled = true;\n var errorCode = iti.getValidationError();\n errorMsg.innerHTML = errorMap[errorCode];\n errorMsg.classList.remove('d-none');\n }\n }\n };\n\n if (input.required) {\n input.addEventListener('blur', function () {\n checkPhoneNumber();\n });\n }\n\n $('input[type=\\'tel\\']').on('keyup', () => {\n checkPhoneNumber();\n });\n\n input.addEventListener('countrychange', function () {\n checkPhoneNumber();\n });\n });\n }\n}\n","import { UAParser } from 'ua-parser-js';\n\nexport default function getDeviceInfo() {\n const parser = new UAParser();\n const browser = parser.getBrowser();\n const os = parser.getOS();\n const device = parser.getDevice();\n let infoString = `${browser.name} ${browser.version.split('.')[0]}`;\n\n if (device.vendor) {\n infoString += ` on ${device.vendor} ${device.model} - ${os.name} ${\n os.version.split('.')[0]\n }`;\n } else {\n infoString += ` on ${os.name} ${os.version.split('.')[0]}`;\n }\n\n return { browser, os, device, infoString };\n}\n\nexport function isSafariOnDesktop() {\n let userAgent = navigator.userAgent;\n let is_mobile =\n /Android|iPhone|iPad|Windows Phone|Opera Mobi|Kindle|BackBerry|PlayBook/i.test(\n userAgent\n );\n let chrome = userAgent.indexOf('Chrome') > -1;\n let safari = userAgent.indexOf('Safari') > -1;\n // Chrome user agent will also include safari agent so the below check is needed\n if (chrome && safari) safari = false;\n return !is_mobile && safari;\n}\n","export default function storageAvailable(type) {\n var storage;\n try {\n storage = window[type];\n var x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return true;\n } catch (e) {\n return (\n e instanceof DOMException &&\n // everything except Firefox\n (e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n storage &&\n storage.length !== 0\n );\n }\n}\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","createConsumer","channels","require","forEach","document","addEventListener","querySelector","consumer","subscriptions","create","received","data","cableReady","CableReady","perform","operations","notificationsContainerEl","channelName","dataset","channelUid","channel","room","Audio","play","roomContainerEl","token","channelToken","subscribeToVideoCallChannel","videoCallContainerEl","videoCallChannelName","participationToken","role","participationRole","channel_name","createWebsocketProxy","streamSessionId","onMessage","onError","onConnected","onClose","subscription","console","log","stream_session_id","connected","disconnected","error","closed","reason","send_message","this","send","close","unsubscribe","Controller","static","showPanel","Boolean","connect","videoCallContainer","hasShowPanelValue","showPanelValue","showActionPanel","disconnect","onmouseup","ontouchend","_setData","el","attrib","value","_getData","_reset","currentPanelID","panels","querySelectorAll","_resetActionPanel","style","cssText","classList","contains","remove","preventDefault","add","panelUid","element","panelParent","hideActionPanel","deRegisterEvents","registerEvents","documentElement","ontouchstart","handleTouchListener","ontouchmove","toggleSelectOnChannel","onmousedown","handleListener","onmousemove","resize","is_touch_event","allowed_width","parseInt","window","screen","width","allowed_height","height","is_mobile","dx","dy","t_pos_x","targetTouches","pageX","t_pos_y","pageY","m_pos_x","x","m_pos_y","y","computedWidth","getComputedStyle","computedHeight","is_mobile_actions_shown","difference","addSelect","handleVideoCallContainerClick","target","closest","notify","panelDisplay","showBadge","badgeEl","badgeCount","textContent","_resetBadge","panelToggle","shouldHide","hide","getElementById","innerText","toggleMoreOptions","hasMoreOptionsTarget","hasMoreOptionToggleTarget","active","moreOptionToggleTarget","moreOptionToggleIconTarget","className","moreOptionsTarget","replace","url","String","refreshUsers","get","urlValue","responseKind","cancelInvite","patch","body","JSON","stringify","status","addAgent","post","user_id","userId","createUrl","_subscribeToCartEvents","parent","postMessage","name","removeCartItem","cartEvent","quantity","createEvent","parse","event_name","event_type","createUrlValue","refresh","event","eventData","items","item","flash","message","FLASH_ROOT","innerHTML","$","fadeTo","slideUp","copy","copyText","sourceTarget","select","setSelectionRange","navigator","clipboard","writeText","copyHtml","r","createRange","selectNode","getSelection","removeAllRanges","addRange","execCommand","copyData","text","createElement","appendChild","SLOT_PICKER_DAY_SLOTS_TEMPLATE","DateSlotPickerController","brandColor","showToggleOfficeHours","ignoreOfficeHours","hideCalendar","autoSubmit","utcOffset","utc","selected_date","selectedDate","moment","selected_time","format","toDate","toDateString","tmpEl","firstElementChild","dateEl","prepend","availability","json","loadAvailability","startIndex","endIndex","selectionTargetValue","selectionTargetDisplay","startDate","set","date","endDate","visibilityDays","renderDates","rootTarget","renderSlots","hideWidget","showWidget","toggleWidget","widgetState","vis","visibilitydays","isNaN","slots","slot","Date","start","push","dropdownTarget","previous","next","toggleOfficeHours","officeHourContainers","getRootNode","checked","datesTarget","dates","slice","counter","length","date_string","btn","brandColorValue","backgroundColor","color","lightOrDark","dayEl","getElementsByClassName","disabled","previousBtnTarget","nextBtnTarget","slotsCount","morningSlotsTarget","count","afternoonSlotsTarget","eveningSlotsTarget","nightSlotsTarget","slotTime","slotBtn","hour","find","parentNode","selectDate","selectSlot","valueEl","ahoy","track","account_id","accountId","Array","from","displayEl","dispatchEvent","Event","submitBtnTarget","click","widgetVideoCallDom","application","getControllerForElementAndIdentifier","showRegistrationForm","d","diffMonths","d1","d2","month","year","hasFeedbackSuccessTarget","setTimeout","closeWidget","changePlaceholder","enableFeedback","submitTarget","feedbackFormContainerTarget","feedbackImgContainerTarget","parentElement","nextElementSibling","commentTarget","placeholder","scrollToFilters","scrollTop","scrollTo","postObject","getAttribute","audio_mode","hasIncomingContainerTarget","DOMException","initVideo","hasActionTarget","hasWrapperTarget","initTimeoutMessage","hasScheduleCallBackBtnTarget","initEndCallTimer","_checkAndInitForm","_setStatusLoop","hasSubmitBtnTarget","_handleEarlyTimer","hasPurposeFormContainerTarget","purposeFormContainerTarget","localStoragePresent","storageAvailable","localStorage","setItem","actionTarget","wrapperTarget","closePurposeFormContainer","onPurposeTextChange","purposeTextAreaTarget","purposeSubmitBtnTarget","purposeLabelsTarget","onPurposeSelect","showTextarea","purposeTextAreaContainerTarget","submitPurpose","minHeight","purpose","scheduleCallBackBtnTarget","avatarTarget","checkLocalMicCamPrefs","toggleAudio","is_mic_on","micTarget","toggleVideo","cameraTarget","videoStream","setEnabled","isPlaying","stop","AgoraRTC","createCameraVideoTrack","hasMicTarget","hasCameraTarget","getItem","is_camera_on","endCall","statusTarget","setWidgetVideoCallStatus","hasDelayedFormTarget","hasStatusTarget","setInterval","hasTimerTarget","diff","timerTarget","startTime","unix","duration","intervalId","seconds","minutes","clearInterval","_showWaitingMessage","minuteTarget","secondTarget","hasTimerTextTarget","hasTimeoutTextTarget","timerTextTarget","timeoutTextTarget","share","is_safari_on_desktop","isSafariOnDesktop","title","then","catch","copyController","_handleAgentProductSelection","_handleAgentProductShare","_handleProductAddedEvent","_handleProductActivity","openCarousel","image_id","imageId","image_set_id","imageSetId","handleCarouselImageChange","image_set","images","dom_images","productCarouselTarget","showCarousel","carousel_image","active_carousel_image","productCarouselWrapperTarget","hideCarousel","showLatestProduct","hasProductSliderTarget","scrollWidth","productSliderTarget","addToCart","variantId","notifyAddedToCart","updateCart","cart","hasNotificationTarget","notificationTarget","selectProduct","productId","sendActivity","hasActivityFormTarget","hasActivityInputTarget","activity_data","type","product_id","activityInputTarget","activityFormTarget","requestSubmit","performActivity","activity","activityListenerTarget","highlightImage","scrollToProduct","template","scrollIntoView","behavior","block","inline","host","productPanelTarget","active_image","hasShareProductTarget","shareProductTarget","product_panel","MutationObserver","mutations","show","record","removedNodes","observe","childList","hasActivityListenerTarget","attributes","barTarget","expire","animation","visibility","boxShadow","_timer","useClickOutside","StimulusReflex","togglePopup","is_popup_open","timezonePopupTarget","display","clickOutside","hasTimezonePopupTarget","changeTimezone","timezone","nodeName","URLSearchParams","location","search","history","pushState","toString","Turbo","href","setTag","key","Sentry","hasOwnProperty","obj","prop","prototype","call","BaseLayout","constructor","childNodes","layout_container_selector","children","replaceNodes","nodes","replaceChildren","child","append","SpeakerViewLayout","super","renderStreams","handleSpeakerViewTransition","localVideo","remoteVideo","ondblclick","togglePopupView","toggleVideoSwitchingListeners","removeEl","addEl","GalleryViewLayout","videoonlynodes","i","handleGalleryViewTransition","gridList","remoteVideos","currentTarget","ScreenShareLayout","j","LayoutManager","participant_data","currentLayout","stream_ids","resolveLayout","indexOf","addStream","stream_id","stream_dom","createStreamElement","removeUser","ids","filter","stream_dom_id","removeStream","mediaType","user_dom_id","video_track_dom_id","audio_track_dom_id","avatar_dom_id","user_dom","audio_track_dom","video_track_dom","avatar_dom","username","mode","agora_app_id","optimization_mode","video_profile","rtc_token","rtc_screen_token","video_call_id","uid","is_host","join","default","audioInputDevices","audioOutputDevices","videoInputDevices","layout","checkAndDisableTooltips","params","is_popup","has","pip_stream_id","exitPictureInPicture","remote_stream_id","streams","local_stream_id","requestPictureInPicture","layoutManager","leaveMeeting","Channel","_subscribeChannelEvents","joinMeeting","video","audio","optimizationMode","is_video_mute","videoIconTarget","toggleScreenShare","rtc_screen_client","local_published","endScreenShare","screenShareTarget","startScreenShare","toggleCamera","addUser","modal","getDevices","devices","setAudioVideoInputsDOM","changeAudioInput","deviceLabel","audioInputTarget","options","selectedIndex","deviceId","switchDevice","changeVideoInput","videoInputTarget","changeAudioOutput","audioOutputTarget","setAudioOutput","device","kind","audioInputSelect","audioOutputSelect","videoInputSelect","audioDevice","option","selected","rtc_client","audioDeviceId","label","audioOutputDeviceId","videoDevice","videoDeviceId","on","renderStreamStatus","onStreamAdded","onUserRemoved","renderSnackBar","vc_id","playStream","onStreamRemoved","_renderAudioStatus","_renderVideoStatus","stream","users","player","status_text","toggleLocalAudio","is_audio_mute","audioIconTarget","toggleLocalVideo","snackBarDom","snackBarController","setLocalStreamDefaultAttributes","leaveForm","submit","onVideoCallEnded","completeForm","videoCallId","updateParticipantData","detail","tooltip","BrowserOSChecker","parser","UAParser","browser","getBrowser","os","getOS","result","getResult","chrome_icon","chrome_help_links","userAgent","ua","browserOSVersions","testOS","version","parseFloat","isCompatible","compatibilityTest","passedOS","match","joinMode","next_url","joinUrl","enable_popup","enablePopup","URL","searchParams","open","hasPermissionButtonTarget","browserCheck","checkPermissions","hasTryingToConnectTarget","setPageRefresh","toggleNewIncoming","_handleSwitchListener","pageRefreshId","pageReload","reload","beforeShow","afterShow","videoCallParticipationId","beforeHide","afterHide","showError","showHalted","hideError","hideHalted","stimulate","onVideoCallChanged","is_compatible_browser","browser_error_message","permissionButtonTarget","browserErrorMessageTarget","versions","setPermissions","includes","permissions","query","Promise","all","res","state","hasAudioSwitchTarget","showPermissions","gaController","_googleAnalyticsController","initPermissions","hasPermissionWrapperTarget","permissionWrapperTarget","hasAvailableAgentTarget","availableAgentTarget","hasPermissionSlotBtnTarget","permissionSlotBtnTarget","hasContentWrapperTarget","contentWrapperTarget","hasSubmitButtonTarget","submitButtonTarget","audio_only","mediaDevices","getUserMedia","successCallback","errorCallback","bool","hasAudioHiddenInputTarget","audioHiddenInputTarget","permissionSuccessCallback","failureMessageTarget","successMessageTarget","infoString","getDeviceInfo","isHost","success","os_version","browser_version","device_info","is_permissions_granted","origin","incomingFormTarget","toggleSwitch","hasAudioVideoSwitchTarget","audioVideoSwitchTarget","audioSwitchTarget","audioMode","reloadParent","Application","register","ActionPanelController","FeedbackController","IncomingVideoCallController","SnackController","TimeZoneSearchController","VideoCallController","VideoCallParticipationController","WidgetVideoCallController","ShopifyWidgetOverlayController","ClipboardController","WidgetPreviewController","CallInviteController","CartController","ShareController","GoogleAnalyticsController","isolate","showPreview","previewEl","closePreview","_setToken","checkEmail","setIdentity","_handleSlotSelection","banner","momentTimezone","scheduleMode","showAllSlots","subscriberToken","identityData","hasEmailFieldTarget","_validateEmail","emailFieldTarget","_validateEmailRemote","_extractDomain","emailErrorTarget","trim","toggleEmailSpinner","emailSpinnerTarget","requestPermissions","miniSlotTarget","formContainerTarget","toggleBanner","dateSlotPickerTarget","registrationFormTarget","toggleTimezone","_renderTime","hideRegistrationForm","email","test","selectedTimeTarget","imprt","isMoment","tz","selectedTimeDisplayTarget","hasConfirmTextTarget","confirmTextTarget","domain","fetch","method","_toggleEmailError","toggleOtherPurposeContainer","hasOtherPurposeContainerTarget","otherPurposeContainerTarget","hasPurposeTextAreaTarget","split","pop","_resetSlotSelection","hasSlotTarget","slotTargets","time","getMetaValue","findElement","head","root","selector","removeElement","removeChild","insertAfter","referenceNode","insertBefore","nextSibling","isElementAvailable","dom_id","g","b","Math","sqrt","started","Rails","delegate","disableElement","enableElement","initIntlTelephoneInput","inputs","input","undefined","intlTelInputId","fieldName","formName","iti","intlTelInput","initialCountry","hiddenInput","autoPlaceholder","preferredCountries","geoIpLookup","callback","always","resp","countryCode","country","errorMap","msgContainer","validMsg","setAttribute","errorMsg","after","submitBtn","form","elements","checkPhoneNumber","isValidNumber","val","getNumber","errorCode","getValidationError","required","getDevice","vendor","model","chrome","safari","storage","removeItem"],"sourceRoot":""}