diff --git a/__tests__/controllers/webchat_controller_test.js b/__tests__/controllers/webchat_controller_test.js index 858ab377..224f23eb 100644 --- a/__tests__/controllers/webchat_controller_test.js +++ b/__tests__/controllers/webchat_controller_test.js @@ -3,6 +3,7 @@ */ import WebchatController from '../../src/controllers/webchat_controller' +import webchatCarousel from '../../test/fixtures/webchat_carousel' import Hellotext from '../../src/hellotext' import { Locale } from '../../src/core/configuration/locale' import { Webchat as WebchatConfiguration, modes } from '../../src/core/configuration/webchat' @@ -527,6 +528,25 @@ describe('WebchatController', () => { ) }) + it('sanitizes executable content in message body', () => { + controller.onMessageReceived({ + body: ` +

Safe content

+ Unsafe link + + + `, + id: 'msg-unsafe-html', + }) + + const body = mockMessagesContainer.children[0].querySelector('[data-body]') + + expect(body.querySelector('strong').textContent).toBe('Safe content') + expect(body.querySelector('a').hasAttribute('href')).toBe(false) + expect(body.querySelector('img').hasAttribute('onerror')).toBe(false) + expect(body.querySelector('script')).toBeNull() + }) + it('inserts catch-up messages before newer messages that arrived after reconnect', async () => { const loadedMessage = document.createElement('article') loadedMessage.className = 'hellotext--webchat-message' @@ -798,13 +818,13 @@ describe('WebchatController', () => { controller.onMessageReceived({ body: 'Closed chat message', id: 'msg-closed-teaser', - teaser: 'Message teaser', + teaser: 'Message teaser', }) expect(firstConfiguredTeaser.classList.contains('hidden')).toBe(true) expect(secondConfiguredTeaser.classList.contains('hidden')).toBe(true) expect(inboundMessageTeaser.classList.contains('hidden')).toBe(false) - expect(inboundMessageTeaserBody.innerHTML).toBe('Message teaser') + expect(inboundMessageTeaserBody.textContent).toBe('Message teaser') expect(mockTeaser.classList.contains('invisible')).toBe(false) }) @@ -821,7 +841,7 @@ describe('WebchatController', () => { controller.onMessageReceived({ body: 'Closed chat message', id: 'msg-inbound-target-teaser', - teaser: 'Inbound message teaser', + teaser: 'Inbound message teaser', }) expect(mockTeaser.children).toHaveLength(3) @@ -832,7 +852,7 @@ describe('WebchatController', () => { expect(secondConfiguredTeaser.classList.contains('hidden')).toBe(true) expect(inboundMessageTeaser.classList.contains('hidden')).toBe(false) expect(inboundMessageTeaserBody.className).toBe('hellotext--webchat-teaser-message') - expect(inboundMessageTeaserBody.innerHTML).toBe('Inbound message teaser') + expect(inboundMessageTeaserBody.textContent).toBe('Inbound message teaser') expect(mockTeaser.classList.contains('invisible')).toBe(false) }) @@ -844,7 +864,7 @@ describe('WebchatController', () => { controller.onMessageReceived({ body: 'Closed chat message', id: 'msg-missing-inbound-teaser-targets', - teaser: 'Unsupported teaser', + teaser: 'Unsupported teaser', }) }).not.toThrow() @@ -866,7 +886,7 @@ describe('WebchatController', () => { controller.onMessageReceived({ body: 'Closed chat message', id: 'msg-without-teaser-surface', - teaser: 'Unsupported teaser', + teaser: 'Unsupported teaser', }) }).not.toThrow() @@ -883,10 +903,10 @@ describe('WebchatController', () => { controller.onMessageReceived({ body: 'Closed chat message', id: 'msg-ephemeral-teaser', - teaser: 'Ephemeral teaser', + teaser: 'Ephemeral teaser', }) - expect(inboundMessageTeaserBody.innerHTML).toBe('Ephemeral teaser') + expect(inboundMessageTeaserBody.textContent).toBe('Ephemeral teaser') expect(mockTeaser.classList.contains('invisible')).toBe(false) expect(mockSessionStorage.setItem).not.toHaveBeenCalledWith( 'hellotext:webchat:test-webchat-id:teaser-seen', @@ -901,11 +921,11 @@ describe('WebchatController', () => { controller.onMessageReceived({ body: 'Open chat message', id: 'msg-open-teaser', - teaser: 'Open message teaser', + teaser: 'Open message teaser', }) expect(inboundMessageTeaser.classList.contains('hidden')).toBe(false) - expect(inboundMessageTeaserBody.innerHTML).toBe('Open message teaser') + expect(inboundMessageTeaserBody.textContent).toBe('Open message teaser') expect(mockTeaser.classList.contains('invisible')).toBe(true) expect(mockMessagesAPI.markAsSeen).toHaveBeenCalledWith('msg-open-teaser') }) @@ -922,6 +942,22 @@ describe('WebchatController', () => { expect(mockTeaser.innerHTML).toBe('Configured teaser') expect(mockTeaser.classList.contains('invisible')).toBe(true) }) + + it('renders message teaser markup as text', () => { + controller.openValue = false + const { inboundMessageTeaserBody } = setupInboundMessageTeaserTargets() + + controller.onMessageReceived({ + body: 'Closed chat message', + id: 'msg-unsafe-teaser', + teaser: '', + }) + + expect(inboundMessageTeaserBody.textContent).toBe( + '', + ) + expect(inboundMessageTeaserBody.querySelector('img')).toBeNull() + }) }) describe('typing indicator timeout clearance', () => { @@ -1111,7 +1147,7 @@ describe('WebchatController', () => { expect(() => controller.onMessageReceived(message)).not.toThrow() const addedElement = mockMessagesContainer.children[0] - expect(addedElement.querySelector('[data-body]').innerHTML).toBe('undefined') + expect(addedElement.querySelector('[data-body]').innerHTML).toBe('') }) it('handles null/undefined message', () => { @@ -1579,6 +1615,28 @@ describe('WebchatController', () => { expect(attachmentContainer.children).toHaveLength(1) expect(attachmentContainer.children[0].src).toBe('https://example.com/older.jpg') }) + + it('sanitizes executable content in paginated message bodies', async () => { + mockMessagesAPI.index.mockResolvedValue({ + json: jest.fn().mockResolvedValue({ + next: null, + messages: [ + { + body: '

Older message

', + state: 'sent', + }, + ], + }), + }) + + await controller.onScroll() + + const body = mockMessagesContainer.children[0].querySelector('[data-body]') + + expect(body.querySelector('strong').textContent).toBe('Older message') + expect(body.querySelector('img').hasAttribute('onerror')).toBe(false) + expect(body.querySelector('script')).toBeNull() + }) }) describe('connect', () => { @@ -3662,6 +3720,81 @@ describe('WebchatController', () => { }) }) + it('preserves the Rails-rendered carousel contract', () => { + controller.openValue = true + controller.messagesAPI = { + markAsSeen: jest.fn(), + } + + controller.onMessageReceived({ + id: 'carousel-contract', + html: webchatCarousel, + carousel: {}, + }) + + const carousel = mockMessagesContainer.children[0] + const carouselContainer = carousel.querySelector( + '[data-hellotext--message-target="carouselContainer"]', + ) + const productCard = carousel.querySelector('.message__carousel_card') + const productLink = carousel.querySelector('.message__carousel_card--image-wrapper') + const addToCartButton = carousel.querySelector('[data-id="button-123"]') + + expect(carousel.dataset.controller).toBe('hellotext--message') + expect(carousel.querySelector('[data-body] strong').textContent).toBe( + 'Product recommendations', + ) + expect(carouselContainer.dataset.action).toBe('scroll->hellotext--message#onScroll') + expect(productCard.dataset.id).toBe('product-123') + expect(productCard.dataset.reference).toBe('sku-123') + expect(productCard.dataset.source).toBe('shopify') + expect(productLink.getAttribute('href')).toBe( + 'https://example.com/products/product-123', + ) + expect(productLink.getAttribute('target')).toBe('_blank') + expect(productLink.getAttribute('rel')).toBe('noopener noreferrer') + expect(addToCartButton.dataset.action).toBe( + 'click->hellotext--message#addToCart', + ) + expect(carousel.querySelectorAll('hellotext-icon')).toHaveLength(3) + expect(carousel.querySelectorAll('hellotext-icon svg')).toHaveLength(3) + expect(carousel.querySelectorAll('hellotext-icon path')).toHaveLength(3) + expect( + carousel.querySelector('[data-hellotext--message-target="leftFade"]').dataset.action, + ).toBe('click->hellotext--message#moveToLeft') + expect( + carousel.querySelector('[data-hellotext--message-target="rightFade"]').dataset.action, + ).toBe('click->hellotext--message#moveToRight') + }) + + it('sanitizes carousel HTML while preserving its controller attributes', () => { + controller.openValue = true + controller.messagesAPI = { + markAsSeen: jest.fn(), + } + + controller.onMessageReceived({ + id: 'carousel-unsafe-html', + html: ` +
+ + + +
+ `, + carousel: {}, + }) + + const carousel = mockMessagesContainer.children[0] + + expect(carousel.dataset.controller).toBe('hellotext--message') + expect(carousel.querySelector('button').dataset.action).toBe( + 'click->hellotext--message#quickReply', + ) + expect(carousel.querySelector('img').hasAttribute('onerror')).toBe(false) + expect(carousel.querySelector('script')).toBeNull() + }) + it('silently drops a duplicate carousel message that was already claimed in memory', () => { controller.openValue = true const mockMessagesAPI = { @@ -3749,7 +3882,7 @@ describe('WebchatController', () => { id: 'carousel-teaser-closed', html: '
Carousel
', carousel: {}, - teaser: 'Carousel teaser', + teaser: 'Carousel teaser', } controller.onMessageReceived(message) @@ -3757,7 +3890,7 @@ describe('WebchatController', () => { expect(mockUnreadCounter.style.display).toBe('flex') expect(configuredTeaser.classList.contains('hidden')).toBe(true) expect(inboundMessageTeaser.classList.contains('hidden')).toBe(false) - expect(inboundMessageTeaserBody.innerHTML).toBe('Carousel teaser') + expect(inboundMessageTeaserBody.textContent).toBe('Carousel teaser') expect(teaser.classList.contains('invisible')).toBe(false) }) @@ -3774,13 +3907,13 @@ describe('WebchatController', () => { id: 'carousel-teaser-open', html: '
Carousel
', carousel: {}, - teaser: 'Carousel teaser', + teaser: 'Carousel teaser', } controller.onMessageReceived(message) expect(inboundMessageTeaser.classList.contains('hidden')).toBe(false) - expect(inboundMessageTeaserBody.innerHTML).toBe('Carousel teaser') + expect(inboundMessageTeaserBody.textContent).toBe('Carousel teaser') expect(teaser.classList.contains('invisible')).toBe(true) expect(mockMessagesAPI.markAsSeen).toHaveBeenCalledWith('carousel-teaser-open') }) diff --git a/__tests__/core/sanitize_html_test.js b/__tests__/core/sanitize_html_test.js new file mode 100644 index 00000000..97512051 --- /dev/null +++ b/__tests__/core/sanitize_html_test.js @@ -0,0 +1,75 @@ +/** + * @jest-environment jsdom + */ + +import { + sanitizedRichTextFragment, + sanitizedWebchatComponentFragment, + setSanitizedRichText, +} from '../../src/core/sanitize_html' + +describe('sanitizedRichTextFragment', () => { + it('preserves rich text while removing executable markup', () => { + const fragment = sanitizedRichTextFragment(` +

Safe content

+ Safe link + Unsafe link +
Image
+ + + `) + + expect(fragment.querySelector('p').className).toBe('copy') + expect(fragment.querySelector('p').style.color).toBe('red') + expect(fragment.querySelector('strong').textContent).toBe('Safe content') + expect(fragment.querySelector('a').getAttribute('href')).toBe('https://example.com') + expect(fragment.querySelector('a').getAttribute('target')).toBe('_blank') + expect(fragment.querySelector('a').getAttribute('rel')).toBe('noopener noreferrer') + expect(fragment.querySelectorAll('a')[1].hasAttribute('href')).toBe(false) + expect(fragment.querySelector('figure figcaption').textContent).toBe('Image') + expect(fragment.querySelector('img').hasAttribute('onerror')).toBe(false) + expect(fragment.querySelector('button').hasAttribute('data-controller')).toBe(false) + expect(fragment.querySelector('button').hasAttribute('data-action')).toBe(false) + expect(fragment.querySelector('script')).toBeNull() + }) +}) + +describe('sanitizedWebchatComponentFragment', () => { + it('preserves Webchat SVG and custom elements while removing executable markup', () => { + const fragment = sanitizedWebchatComponentFragment(` +
+ + + + + + + + + Unsafe link +
+ `) + + expect(fragment.querySelector('article').dataset.controller).toBe('hellotext--message') + expect(fragment.querySelector('hellotext-icon svg path').getAttribute('d')).toBe('M1 1h2v2z') + expect(fragment.querySelector('button').dataset.action).toBe( + 'click->hellotext--message#quickReply', + ) + expect(fragment.querySelector('button').hasAttribute('onclick')).toBe(false) + expect(fragment.querySelector('a').hasAttribute('href')).toBe(false) + expect(fragment.querySelector('script')).toBeNull() + expect(fragment.querySelector('foreignObject')).toBeNull() + expect(fragment.querySelector('iframe')).toBeNull() + }) +}) + +describe('setSanitizedRichText', () => { + it('replaces existing content with sanitized HTML', () => { + const element = document.createElement('div') + element.textContent = 'Old content' + + setSanitizedRichText(element, 'New content') + + expect(element.innerHTML).toBe('New content') + }) +}) diff --git a/__tests__/models/form_test.js b/__tests__/models/form_test.js index 519b608f..dfaa385b 100644 --- a/__tests__/models/form_test.js +++ b/__tests__/models/form_test.js @@ -47,6 +47,36 @@ describe('mount', () => { expect(document.body.querySelector('form')).not.toBeNull() }) + it('sanitizes rich text in the header and footer', () => { + const richTextForm = new Form({ + id: 2, + steps: [ + { + header: { + content: + '

Header

', + }, + inputs: [], + button: { content: 'Button' }, + footer: { + content: '

FooterUnsafe link

', + }, + }, + ], + }) + + richTextForm.mount() + + const header = document.querySelector('[data-form-header]') + const footer = document.querySelector('[data-form-footer]') + + expect(header.querySelector('strong').textContent).toBe('Header') + expect(header.querySelector('img').hasAttribute('onerror')).toBe(false) + expect(header.querySelector('script')).toBeNull() + expect(footer.querySelector('em').textContent).toBe('Footer') + expect(footer.querySelector('a').hasAttribute('href')).toBe(false) + }) + describe('when form has been completed', () => { beforeEach(() => { localStorage.setItem('hello-form-1', 'true') diff --git a/dist/hellotext.js b/dist/hellotext.js index 933e5c4f..2ad238d9 100644 --- a/dist/hellotext.js +++ b/dist/hellotext.js @@ -1 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Hellotext=t():e.Hellotext=t()}(Object("undefined"!=typeof self?self:this),()=>(()=>{"use strict";var e={891(e,t,n){n.d(t,{lg:()=>J,xI:()=>ie});class r{constructor(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}connect(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)}disconnect(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)}bindingConnected(e){this.unorderedBindings.add(e)}bindingDisconnected(e){this.unorderedBindings.delete(e)}handleEvent(e){const t=function(e){if("immediatePropagationStopped"in e)return e;{const{stopImmediatePropagation:t}=e;return Object.assign(e,{immediatePropagationStopped:!1,stopImmediatePropagation(){this.immediatePropagationStopped=!0,t.call(this)}})}}(e);for(const e of this.bindings){if(t.immediatePropagationStopped)break;e.handleEvent(t)}}hasBindings(){return this.unorderedBindings.size>0}get bindings(){return Array.from(this.unorderedBindings).sort((e,t)=>{const n=e.index,r=t.index;return nr?1:0})}}class i{constructor(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}start(){this.started||(this.started=!0,this.eventListeners.forEach(e=>e.connect()))}stop(){this.started&&(this.started=!1,this.eventListeners.forEach(e=>e.disconnect()))}get eventListeners(){return Array.from(this.eventListenerMaps.values()).reduce((e,t)=>e.concat(Array.from(t.values())),[])}bindingConnected(e){this.fetchEventListenerForBinding(e).bindingConnected(e)}bindingDisconnected(e,t=!1){this.fetchEventListenerForBinding(e).bindingDisconnected(e),t&&this.clearEventListenersForBinding(e)}handleError(e,t,n={}){this.application.handleError(e,`Error ${t}`,n)}clearEventListenersForBinding(e){const t=this.fetchEventListenerForBinding(e);t.hasBindings()||(t.disconnect(),this.removeMappedEventListenerFor(e))}removeMappedEventListenerFor(e){const{eventTarget:t,eventName:n,eventOptions:r}=e,i=this.fetchEventListenerMapForEventTarget(t),o=this.cacheKey(n,r);i.delete(o),0==i.size&&this.eventListenerMaps.delete(t)}fetchEventListenerForBinding(e){const{eventTarget:t,eventName:n,eventOptions:r}=e;return this.fetchEventListener(t,n,r)}fetchEventListener(e,t,n){const r=this.fetchEventListenerMapForEventTarget(e),i=this.cacheKey(t,n);let o=r.get(i);return o||(o=this.createEventListener(e,t,n),r.set(i,o)),o}createEventListener(e,t,n){const i=new r(e,t,n);return this.started&&i.connect(),i}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t}cacheKey(e,t){const n=[e];return Object.keys(t).sort().forEach(e=>{n.push(`${t[e]?"":"!"}${e}`)}),n.join(":")}}const o={stop:({event:e,value:t})=>(t&&e.stopPropagation(),!0),prevent:({event:e,value:t})=>(t&&e.preventDefault(),!0),self:({event:e,value:t,element:n})=>!t||n===e.target},s=/^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;function a(e){return e.replace(/(?:[_-])([a-z0-9])/g,(e,t)=>t.toUpperCase())}function c(e){return a(e.replace(/--/g,"-").replace(/__/g,"_"))}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function u(e){return e.replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`)}function h(e){return null!=e}function d(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const f=["meta","ctrl","alt","shift"];class p{constructor(e,t,n,r){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||function(e){const t=e.tagName.toLowerCase();if(t in m)return m[t](e)}(e)||g("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||g("missing identifier"),this.methodName=n.methodName||g("missing method name"),this.keyFilter=n.keyFilter||"",this.schema=r}static forToken(e,t){return new this(e.element,e.index,function(e){const t=e.trim().match(s)||[];let n=t[2],r=t[3];return r&&!["keydown","keyup","keypress"].includes(n)&&(n+=`.${r}`,r=""),{eventTarget:(i=t[4],"window"==i?window:"document"==i?document:void 0),eventName:n,eventOptions:t[7]?(o=t[7],o.split(":").reduce((e,t)=>Object.assign(e,{[t.replace(/^!/,"")]:!/^!/.test(t)}),{})):{},identifier:t[5],methodName:t[6],keyFilter:t[1]||r};var i,o}(e.content),t)}toString(){const e=this.keyFilter?`.${this.keyFilter}`:"",t=this.eventTargetName?`@${this.eventTargetName}`:"";return`${this.eventName}${e}${t}->${this.identifier}#${this.methodName}`}shouldIgnoreKeyboardEvent(e){if(!this.keyFilter)return!1;const t=this.keyFilter.split("+");if(this.keyFilterDissatisfied(e,t))return!0;const n=t.filter(e=>!f.includes(e))[0];return!!n&&(d(this.keyMappings,n)||g(`contains unknown key filter: ${this.keyFilter}`),this.keyMappings[n].toLowerCase()!==e.key.toLowerCase())}shouldIgnoreMouseEvent(e){if(!this.keyFilter)return!1;const t=[this.keyFilter];return!!this.keyFilterDissatisfied(e,t)}get params(){const e={},t=new RegExp(`^data-${this.identifier}-(.+)-param$`,"i");for(const{name:n,value:r}of Array.from(this.element.attributes)){const i=n.match(t),o=i&&i[1];o&&(e[a(o)]=y(r))}return e}get eventTargetName(){return(e=this.eventTarget)==window?"window":e==document?"document":void 0;var e}get keyMappings(){return this.schema.keyMappings}keyFilterDissatisfied(e,t){const[n,r,i,o]=f.map(e=>t.includes(e));return e.metaKey!==n||e.ctrlKey!==r||e.altKey!==i||e.shiftKey!==o}}const m={a:()=>"click",button:()=>"click",form:()=>"submit",details:()=>"toggle",input:e=>"submit"==e.getAttribute("type")?"click":"input",select:()=>"change",textarea:()=>"input"};function g(e){throw new Error(e)}function y(e){try{return JSON.parse(e)}catch(t){return e}}class v{constructor(e,t){this.context=e,this.action=t}get index(){return this.action.index}get eventTarget(){return this.action.eventTarget}get eventOptions(){return this.action.eventOptions}get identifier(){return this.context.identifier}handleEvent(e){const t=this.prepareActionEvent(e);this.willBeInvokedByEvent(e)&&this.applyEventModifiers(t)&&this.invokeWithEvent(t)}get eventName(){return this.action.eventName}get method(){const e=this.controller[this.methodName];if("function"==typeof e)return e;throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`)}applyEventModifiers(e){const{element:t}=this.action,{actionDescriptorFilters:n}=this.context.application,{controller:r}=this.context;let i=!0;for(const[o,s]of Object.entries(this.eventOptions))if(o in n){const a=n[o];i=i&&a({name:o,value:s,event:e,element:t,controller:r})}return i}prepareActionEvent(e){return Object.assign(e,{params:this.action.params})}invokeWithEvent(e){const{target:t,currentTarget:n}=e;try{this.method.call(this.controller,e),this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:n,action:this.methodName})}catch(t){const{identifier:n,controller:r,element:i,index:o}=this,s={identifier:n,controller:r,element:i,index:o,event:e};this.context.handleError(t,`invoking action "${this.action}"`,s)}}willBeInvokedByEvent(e){const t=e.target;return!(e instanceof KeyboardEvent&&this.action.shouldIgnoreKeyboardEvent(e))&&!(e instanceof MouseEvent&&this.action.shouldIgnoreMouseEvent(e))&&(this.element===t||(t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)))}get controller(){return this.context.controller}get methodName(){return this.action.methodName}get element(){return this.scope.element}get scope(){return this.context.scope}}class b{constructor(e,t){this.mutationObserverInit={attributes:!0,childList:!0,subtree:!0},this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver(e=>this.processMutations(e))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,this.mutationObserverInit),this.refresh())}pause(e){this.started&&(this.mutationObserver.disconnect(),this.started=!1),e(),this.started||(this.mutationObserver.observe(this.element,this.mutationObserverInit),this.started=!0)}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started){const e=new Set(this.matchElementsInTree());for(const t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(const t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){"attributes"==e.type?this.processAttributeChange(e.target,e.attributeName):"childList"==e.type&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))}processAttributeChange(e,t){this.elements.has(e)?this.delegate.elementAttributeChanged&&this.matchElement(e)?this.delegate.elementAttributeChanged(e,t):this.removeElement(e):this.matchElement(e)&&this.addElement(e)}processRemovedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.processTree(e,this.removeElement)}}processAddedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.elementIsActive(e)&&this.processTree(e,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(const n of this.matchElementsInTree(e))t.call(this,n)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected==this.element.isConnected&&this.element.contains(e)}addElement(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))}removeElement(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))}}class w{constructor(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new b(e,this)}get element(){return this.elementObserver.element}get selector(){return`[${this.attributeName}]`}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get started(){return this.elementObserver.started}matchElement(e){return e.hasAttribute(this.attributeName)}matchElementsInTree(e){const t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)}elementMatched(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)}elementUnmatched(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)}elementAttributeChanged(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)}}function O(e,t){let n=e.get(t);return n||(n=new Set,e.set(t,n)),n}class T{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){return Array.from(this.valuesByKey.values()).reduce((e,t)=>e.concat(Array.from(t)),[])}get size(){return Array.from(this.valuesByKey.values()).reduce((e,t)=>e+t.size,0)}add(e,t){!function(e,t,n){O(e,t).add(n)}(this.valuesByKey,e,t)}delete(e,t){!function(e,t,n){O(e,t).delete(n),function(e,t){const n=e.get(t);null!=n&&0==n.size&&e.delete(t)}(e,t)}(this.valuesByKey,e,t)}has(e,t){const n=this.valuesByKey.get(e);return null!=n&&n.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){return Array.from(this.valuesByKey.values()).some(t=>t.has(e))}getValuesForKey(e){const t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter(([t,n])=>n.has(e)).map(([e,t])=>e)}}class k{constructor(e,t,n,r){this._selector=t,this.details=r,this.elementObserver=new b(e,this),this.delegate=n,this.matchesByElement=new T}get started(){return this.elementObserver.started}get selector(){return this._selector}set selector(e){this._selector=e,this.refresh()}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get element(){return this.elementObserver.element}matchElement(e){const{selector:t}=this;if(t){const n=e.matches(t);return this.delegate.selectorMatchElement?n&&this.delegate.selectorMatchElement(e,this.details):n}return!1}matchElementsInTree(e){const{selector:t}=this;if(t){const n=this.matchElement(e)?[e]:[],r=Array.from(e.querySelectorAll(t)).filter(e=>this.matchElement(e));return n.concat(r)}return[]}elementMatched(e){const{selector:t}=this;t&&this.selectorMatched(e,t)}elementUnmatched(e){const t=this.matchesByElement.getKeysForValue(e);for(const n of t)this.selectorUnmatched(e,n)}elementAttributeChanged(e,t){const{selector:n}=this;if(n){const t=this.matchElement(e),r=this.matchesByElement.has(n,e);t&&!r?this.selectorMatched(e,n):!t&&r&&this.selectorUnmatched(e,n)}}selectorMatched(e,t){this.delegate.selectorMatched(e,t,this.details),this.matchesByElement.add(t,e)}selectorUnmatched(e,t){this.delegate.selectorUnmatched(e,t,this.details),this.matchesByElement.delete(t,e)}}class S{constructor(e,t){this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(e=>this.processMutations(e))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,attributeOldValue:!0}),this.refresh())}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started)for(const e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){const t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){const n=this.delegate.getStringMapKeyForAttribute(e);if(null!=n){this.stringMap.has(e)||this.stringMapKeyAdded(n,e);const r=this.element.getAttribute(e);if(this.stringMap.get(e)!=r&&this.stringMapValueChanged(r,n,t),null==r){const t=this.stringMap.get(e);this.stringMap.delete(e),t&&this.stringMapKeyRemoved(n,e,t)}else this.stringMap.set(e,r)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,n){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,n)}stringMapKeyRemoved(e,t,n){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,n)}get knownAttributeNames(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))}get currentAttributeNames(){return Array.from(this.element.attributes).map(e=>e.name)}get recordedAttributeNames(){return Array.from(this.stringMap.keys())}}class P{constructor(e,t,n){this.attributeObserver=new w(e,t,this),this.delegate=n,this.tokensByElement=new T}get started(){return this.attributeObserver.started}start(){this.attributeObserver.start()}pause(e){this.attributeObserver.pause(e)}stop(){this.attributeObserver.stop()}refresh(){this.attributeObserver.refresh()}get element(){return this.attributeObserver.element}get attributeName(){return this.attributeObserver.attributeName}elementMatchedAttribute(e){this.tokensMatched(this.readTokensForElement(e))}elementAttributeValueChanged(e){const[t,n]=this.refreshTokensForElement(e);this.tokensUnmatched(t),this.tokensMatched(n)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach(e=>this.tokenMatched(e))}tokensUnmatched(e){e.forEach(e=>this.tokenUnmatched(e))}tokenMatched(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)}tokenUnmatched(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)}refreshTokensForElement(e){const t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),r=function(e,t){const n=Math.max(e.length,t.length);return Array.from({length:n},(n,r)=>[e[r],t[r]])}(t,n).findIndex(([e,t])=>{return r=t,!((n=e)&&r&&n.index==r.index&&n.content==r.content);var n,r});return-1==r?[[],[]]:[t.slice(r),n.slice(r)]}readTokensForElement(e){const t=this.attributeName;return function(e,t,n){return e.trim().split(/\s+/).filter(e=>e.length).map((e,r)=>({element:t,attributeName:n,content:e,index:r}))}(e.getAttribute(t)||"",e,t)}}class C{constructor(e,t,n){this.tokenListObserver=new P(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}get started(){return this.tokenListObserver.started}start(){this.tokenListObserver.start()}stop(){this.tokenListObserver.stop()}refresh(){this.tokenListObserver.refresh()}get element(){return this.tokenListObserver.element}get attributeName(){return this.tokenListObserver.attributeName}tokenMatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))}tokenUnmatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))}fetchParseResultForToken(e){let t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t}fetchValuesByTokenForElement(e){let t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t}parseToken(e){try{return{value:this.delegate.parseValueForToken(e)}}catch(e){return{error:e}}}}class E{constructor(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}start(){this.valueListObserver||(this.valueListObserver=new C(this.element,this.actionAttribute,this),this.valueListObserver.start())}stop(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())}get element(){return this.context.element}get identifier(){return this.context.identifier}get actionAttribute(){return this.schema.actionAttribute}get schema(){return this.context.schema}get bindings(){return Array.from(this.bindingsByAction.values())}connectAction(e){const t=new v(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)}disconnectAction(e){const t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))}disconnectAllActions(){this.bindings.forEach(e=>this.delegate.bindingDisconnected(e,!0)),this.bindingsByAction.clear()}parseValueForToken(e){const t=p.forToken(e,this.schema);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}}class j{constructor(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new S(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap}start(){this.stringMapObserver.start(),this.invokeChangedCallbacksForDefaultValues()}stop(){this.stringMapObserver.stop()}get element(){return this.context.element}get controller(){return this.context.controller}getStringMapKeyForAttribute(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name}stringMapKeyAdded(e,t){const n=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,n.writer(this.receiver[e]),n.writer(n.defaultValue))}stringMapValueChanged(e,t,n){const r=this.valueDescriptorNameMap[t];null!==e&&(null===n&&(n=r.writer(r.defaultValue)),this.invokeChangedCallback(t,e,n))}stringMapKeyRemoved(e,t,n){const r=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,r.writer(this.receiver[e]),n):this.invokeChangedCallback(e,r.writer(r.defaultValue),n)}invokeChangedCallbacksForDefaultValues(){for(const{key:e,name:t,defaultValue:n,writer:r}of this.valueDescriptors)null==n||this.controller.data.has(e)||this.invokeChangedCallback(t,r(n),void 0)}invokeChangedCallback(e,t,n){const r=`${e}Changed`,i=this.receiver[r];if("function"==typeof i){const r=this.valueDescriptorNameMap[e];try{const e=r.reader(t);let o=n;n&&(o=r.reader(n)),i.call(this.receiver,e,o)}catch(e){throw e instanceof TypeError&&(e.message=`Stimulus Value "${this.context.identifier}.${r.name}" - ${e.message}`),e}}}get valueDescriptors(){const{valueDescriptorMap:e}=this;return Object.keys(e).map(t=>e[t])}get valueDescriptorNameMap(){const e={};return Object.keys(this.valueDescriptorMap).forEach(t=>{const n=this.valueDescriptorMap[t];e[n.name]=n}),e}hasValue(e){const t=`has${l(this.valueDescriptorNameMap[e].name)}`;return this.receiver[t]}}class A{constructor(e,t){this.context=e,this.delegate=t,this.targetsByName=new T}start(){this.tokenListObserver||(this.tokenListObserver=new P(this.element,this.attributeName,this),this.tokenListObserver.start())}stop(){this.tokenListObserver&&(this.disconnectAllTargets(),this.tokenListObserver.stop(),delete this.tokenListObserver)}tokenMatched({element:e,content:t}){this.scope.containsElement(e)&&this.connectTarget(e,t)}tokenUnmatched({element:e,content:t}){this.disconnectTarget(e,t)}connectTarget(e,t){var n;this.targetsByName.has(t,e)||(this.targetsByName.add(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause(()=>this.delegate.targetConnected(e,t)))}disconnectTarget(e,t){var n;this.targetsByName.has(t,e)&&(this.targetsByName.delete(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause(()=>this.delegate.targetDisconnected(e,t)))}disconnectAllTargets(){for(const e of this.targetsByName.keys)for(const t of this.targetsByName.getValuesForKey(e))this.disconnectTarget(t,e)}get attributeName(){return`data-${this.context.identifier}-target`}get element(){return this.context.element}get scope(){return this.context.scope}}function x(e,t){const n=M(e);return Array.from(n.reduce((e,n)=>(function(e,t){const n=e[t];return Array.isArray(n)?n:[]}(n,t).forEach(t=>e.add(t)),e),new Set))}function M(e){const t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}class L{constructor(e,t){this.started=!1,this.context=e,this.delegate=t,this.outletsByName=new T,this.outletElementsByName=new T,this.selectorObserverMap=new Map,this.attributeObserverMap=new Map}start(){this.started||(this.outletDefinitions.forEach(e=>{this.setupSelectorObserverForOutlet(e),this.setupAttributeObserverForOutlet(e)}),this.started=!0,this.dependentContexts.forEach(e=>e.refresh()))}refresh(){this.selectorObserverMap.forEach(e=>e.refresh()),this.attributeObserverMap.forEach(e=>e.refresh())}stop(){this.started&&(this.started=!1,this.disconnectAllOutlets(),this.stopSelectorObservers(),this.stopAttributeObservers())}stopSelectorObservers(){this.selectorObserverMap.size>0&&(this.selectorObserverMap.forEach(e=>e.stop()),this.selectorObserverMap.clear())}stopAttributeObservers(){this.attributeObserverMap.size>0&&(this.attributeObserverMap.forEach(e=>e.stop()),this.attributeObserverMap.clear())}selectorMatched(e,t,{outletName:n}){const r=this.getOutlet(e,n);r&&this.connectOutlet(r,e,n)}selectorUnmatched(e,t,{outletName:n}){const r=this.getOutletFromMap(e,n);r&&this.disconnectOutlet(r,e,n)}selectorMatchElement(e,{outletName:t}){const n=this.selector(t),r=this.hasOutlet(e,t),i=e.matches(`[${this.schema.controllerAttribute}~=${t}]`);return!!n&&r&&i&&e.matches(n)}elementMatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementAttributeValueChanged(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementUnmatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}connectOutlet(e,t,n){var r;this.outletElementsByName.has(n,t)||(this.outletsByName.add(n,e),this.outletElementsByName.add(n,t),null===(r=this.selectorObserverMap.get(n))||void 0===r||r.pause(()=>this.delegate.outletConnected(e,t,n)))}disconnectOutlet(e,t,n){var r;this.outletElementsByName.has(n,t)&&(this.outletsByName.delete(n,e),this.outletElementsByName.delete(n,t),null===(r=this.selectorObserverMap.get(n))||void 0===r||r.pause(()=>this.delegate.outletDisconnected(e,t,n)))}disconnectAllOutlets(){for(const e of this.outletElementsByName.keys)for(const t of this.outletElementsByName.getValuesForKey(e))for(const n of this.outletsByName.getValuesForKey(e))this.disconnectOutlet(n,t,e)}updateSelectorObserverForOutlet(e){const t=this.selectorObserverMap.get(e);t&&(t.selector=this.selector(e))}setupSelectorObserverForOutlet(e){const t=this.selector(e),n=new k(document.body,t,this,{outletName:e});this.selectorObserverMap.set(e,n),n.start()}setupAttributeObserverForOutlet(e){const t=this.attributeNameForOutletName(e),n=new w(this.scope.element,t,this);this.attributeObserverMap.set(e,n),n.start()}selector(e){return this.scope.outlets.getSelectorForOutletName(e)}attributeNameForOutletName(e){return this.scope.schema.outletAttributeForScope(this.identifier,e)}getOutletNameFromOutletAttributeName(e){return this.outletDefinitions.find(t=>this.attributeNameForOutletName(t)===e)}get outletDependencies(){const e=new T;return this.router.modules.forEach(t=>{x(t.definition.controllerConstructor,"outlets").forEach(n=>e.add(n,t.identifier))}),e}get outletDefinitions(){return this.outletDependencies.getKeysForValue(this.identifier)}get dependentControllerIdentifiers(){return this.outletDependencies.getValuesForKey(this.identifier)}get dependentContexts(){const e=this.dependentControllerIdentifiers;return this.router.contexts.filter(t=>e.includes(t.identifier))}hasOutlet(e,t){return!!this.getOutlet(e,t)||!!this.getOutletFromMap(e,t)}getOutlet(e,t){return this.application.getControllerForElementAndIdentifier(e,t)}getOutletFromMap(e,t){return this.outletsByName.getValuesForKey(t).find(t=>t.element===e)}get scope(){return this.context.scope}get schema(){return this.context.schema}get identifier(){return this.context.identifier}get application(){return this.context.application}get router(){return this.application.router}}class I{constructor(e,t){this.logDebugActivity=(e,t={})=>{const{identifier:n,controller:r,element:i}=this;t=Object.assign({identifier:n,controller:r,element:i},t),this.application.logDebugActivity(this.identifier,e,t)},this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new E(this,this.dispatcher),this.valueObserver=new j(this,this.controller),this.targetObserver=new A(this,this),this.outletObserver=new L(this,this);try{this.controller.initialize(),this.logDebugActivity("initialize")}catch(e){this.handleError(e,"initializing controller")}}connect(){this.bindingObserver.start(),this.valueObserver.start(),this.targetObserver.start(),this.outletObserver.start();try{this.controller.connect(),this.logDebugActivity("connect")}catch(e){this.handleError(e,"connecting controller")}}refresh(){this.outletObserver.refresh()}disconnect(){try{this.controller.disconnect(),this.logDebugActivity("disconnect")}catch(e){this.handleError(e,"disconnecting controller")}this.outletObserver.stop(),this.targetObserver.stop(),this.valueObserver.stop(),this.bindingObserver.stop()}get application(){return this.module.application}get identifier(){return this.module.identifier}get schema(){return this.application.schema}get dispatcher(){return this.application.dispatcher}get element(){return this.scope.element}get parentElement(){return this.element.parentElement}handleError(e,t,n={}){const{identifier:r,controller:i,element:o}=this;n=Object.assign({identifier:r,controller:i,element:o},n),this.application.handleError(e,`Error ${t}`,n)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}outletConnected(e,t,n){this.invokeControllerMethod(`${c(n)}OutletConnected`,e,t)}outletDisconnected(e,t,n){this.invokeControllerMethod(`${c(n)}OutletDisconnected`,e,t)}invokeControllerMethod(e,...t){const n=this.controller;"function"==typeof n[e]&&n[e](...t)}}const _="function"==typeof Object.getOwnPropertySymbols?e=>[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)]:Object.getOwnPropertyNames,F=(()=>{function e(e){function t(){return Reflect.construct(e,arguments,new.target)}return t.prototype=Object.create(e.prototype,{constructor:{value:t}}),Reflect.setPrototypeOf(t,e),t}try{return function(){const t=e(function(){this.a.call(this)});t.prototype.a=function(){},new t}(),e}catch(e){return e=>class extends e{}}})();class N{constructor(e,t){this.application=e,this.definition=function(e){return{identifier:e.identifier,controllerConstructor:(t=e.controllerConstructor,function(e,t){const n=F(e),r=function(e,t){return _(t).reduce((n,r)=>{const i=function(e,t,n){const r=Object.getOwnPropertyDescriptor(e,n);if(!r||!("value"in r)){const e=Object.getOwnPropertyDescriptor(t,n).value;return r&&(e.get=r.get||e.get,e.set=r.set||e.set),e}}(e,t,r);return i&&Object.assign(n,{[r]:i}),n},{})}(e.prototype,t);return Object.defineProperties(n.prototype,r),n}(t,function(e){return x(e,"blessings").reduce((t,n)=>{const r=n(e);for(const e in r){const n=t[e]||{};t[e]=Object.assign(n,r[e])}return t},{})}(t)))};var t}(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}get identifier(){return this.definition.identifier}get controllerConstructor(){return this.definition.controllerConstructor}get contexts(){return Array.from(this.connectedContexts)}connectContextForScope(e){const t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()}disconnectContextForScope(e){const t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())}fetchContextForScope(e){let t=this.contextsByScope.get(e);return t||(t=new I(this,e),this.contextsByScope.set(e,t)),t}}class R{constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){return(this.data.get(this.getDataKey(e))||"").match(/[^\s]+/g)||[]}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}}class D{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){const t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){const n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)}has(e){const t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){const t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}return!1}getAttributeNameForKey(e){return`data-${this.identifier}-${u(e)}`}}class B{constructor(e){this.warnedKeysByObject=new WeakMap,this.logger=e}warn(e,t,n){let r=this.warnedKeysByObject.get(e);r||(r=new Set,this.warnedKeysByObject.set(e,r)),r.has(t)||(r.add(t),this.logger.warn(n,e))}}function V(e,t){return`[${e}~="${t}"]`}class q{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce((e,t)=>e||this.findTarget(t)||this.findLegacyTarget(t),void 0)}findAll(...e){return e.reduce((e,t)=>[...e,...this.findAllTargets(t),...this.findAllLegacyTargets(t)],[])}findTarget(e){const t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){const t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){return V(this.schema.targetAttributeForScope(this.identifier),e)}findLegacyTarget(e){const t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){const t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map(t=>this.deprecate(t,e))}getLegacySelectorForTargetName(e){const t=`${this.identifier}.${e}`;return V(this.schema.targetAttribute,t)}deprecate(e,t){if(e){const{identifier:n}=this,r=this.schema.targetAttribute,i=this.schema.targetAttributeForScope(n);this.guide.warn(e,`target:${t}`,`Please replace ${r}="${n}.${t}" with ${i}="${t}". The ${r} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}}class ${constructor(e,t){this.scope=e,this.controllerElement=t}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce((e,t)=>e||this.findOutlet(t),void 0)}findAll(...e){return e.reduce((e,t)=>[...e,...this.findAllOutlets(t)],[])}getSelectorForOutletName(e){const t=this.schema.outletAttributeForScope(this.identifier,e);return this.controllerElement.getAttribute(t)}findOutlet(e){const t=this.getSelectorForOutletName(e);if(t)return this.findElement(t,e)}findAllOutlets(e){const t=this.getSelectorForOutletName(e);return t?this.findAllElements(t,e):[]}findElement(e,t){return this.scope.queryElements(e).filter(n=>this.matchesElement(n,e,t))[0]}findAllElements(e,t){return this.scope.queryElements(e).filter(n=>this.matchesElement(n,e,t))}matchesElement(e,t,n){const r=e.getAttribute(this.scope.schema.controllerAttribute)||"";return e.matches(t)&&r.split(" ").includes(n)}}class U{constructor(e,t,n,r){this.targets=new q(this),this.classes=new R(this),this.data=new D(this),this.containsElement=e=>e.closest(this.controllerSelector)===this.element,this.schema=e,this.element=t,this.identifier=n,this.guide=new B(r),this.outlets=new $(this.documentScope,t)}findElement(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)}findAllElements(e){return[...this.element.matches(e)?[this.element]:[],...this.queryElements(e).filter(this.containsElement)]}queryElements(e){return Array.from(this.element.querySelectorAll(e))}get controllerSelector(){return V(this.schema.controllerAttribute,this.identifier)}get isDocumentScope(){return this.element===document.documentElement}get documentScope(){return this.isDocumentScope?this:new U(this.schema,document.documentElement,this.identifier,this.guide.logger)}}class H{constructor(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new C(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}start(){this.valueListObserver.start()}stop(){this.valueListObserver.stop()}get controllerAttribute(){return this.schema.controllerAttribute}parseValueForToken(e){const{element:t,content:n}=e;return this.parseValueForElementAndIdentifier(t,n)}parseValueForElementAndIdentifier(e,t){const n=this.fetchScopesByIdentifierForElement(e);let r=n.get(t);return r||(r=this.delegate.createScopeForElementAndIdentifier(e,t),n.set(t,r)),r}elementMatchedValue(e,t){const n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),1==n&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){const n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),1==n&&this.delegate.scopeDisconnected(t))}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t}}class W{constructor(e){this.application=e,this.scopeObserver=new H(this.element,this.schema,this),this.scopesByIdentifier=new T,this.modulesByIdentifier=new Map}get element(){return this.application.element}get schema(){return this.application.schema}get logger(){return this.application.logger}get controllerAttribute(){return this.schema.controllerAttribute}get modules(){return Array.from(this.modulesByIdentifier.values())}get contexts(){return this.modules.reduce((e,t)=>e.concat(t.contexts),[])}start(){this.scopeObserver.start()}stop(){this.scopeObserver.stop()}loadDefinition(e){this.unloadIdentifier(e.identifier);const t=new N(this.application,e);this.connectModule(t);const n=e.controllerConstructor.afterLoad;n&&n.call(e.controllerConstructor,e.identifier,this.application)}unloadIdentifier(e){const t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){const n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find(t=>t.element==e)}proposeToConnectScopeForElementAndIdentifier(e,t){const n=this.scopeObserver.parseValueForElementAndIdentifier(e,t);n?this.scopeObserver.elementMatchedValue(n.element,n):console.error(`Couldn't find or create scope for identifier: "${t}" and element:`,e)}handleError(e,t,n){this.application.handleError(e,t,n)}createScopeForElementAndIdentifier(e,t){return new U(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach(t=>e.connectContextForScope(t))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach(t=>e.disconnectContextForScope(t))}}const z={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:e=>`data-${e}-target`,outletAttributeForScope:(e,t)=>`data-${e}-${t}-outlet`,keyMappings:Object.assign(Object.assign({enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"},K("abcdefghijklmnopqrstuvwxyz".split("").map(e=>[e,e]))),K("0123456789".split("").map(e=>[e,e])))};function K(e){return e.reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n}),{})}class J{constructor(e=document.documentElement,t=z){this.logger=console,this.debug=!1,this.logDebugActivity=(e,t,n={})=>{this.debug&&this.logFormattedMessage(e,t,n)},this.element=e,this.schema=t,this.dispatcher=new i(this),this.router=new W(this),this.actionDescriptorFilters=Object.assign({},o)}static start(e,t){const n=new this(e,t);return n.start(),n}async start(){await new Promise(e=>{"loading"==document.readyState?document.addEventListener("DOMContentLoaded",()=>e()):e()}),this.logDebugActivity("application","starting"),this.dispatcher.start(),this.router.start(),this.logDebugActivity("application","start")}stop(){this.logDebugActivity("application","stopping"),this.dispatcher.stop(),this.router.stop(),this.logDebugActivity("application","stop")}register(e,t){this.load({identifier:e,controllerConstructor:t})}registerActionOption(e,t){this.actionDescriptorFilters[e]=t}load(e,...t){(Array.isArray(e)?e:[e,...t]).forEach(e=>{e.controllerConstructor.shouldLoad&&this.router.loadDefinition(e)})}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach(e=>this.router.unloadIdentifier(e))}get controllers(){return this.router.contexts.map(e=>e.controller)}getControllerForElementAndIdentifier(e,t){const n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null}handleError(e,t,n){var r;this.logger.error("%s\n\n%o\n\n%o",t,e,n),null===(r=window.onerror)||void 0===r||r.call(window,t,"",0,0,e)}logFormattedMessage(e,t,n={}){n=Object.assign({application:this},n),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},n)),this.logger.groupEnd()}}function G(e,t,n){return e.application.getControllerForElementAndIdentifier(t,n)}function Z(e,t,n){let r=G(e,t,n);return r||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,n),r=G(e,t,n),r||void 0)}function X([e,t],n){return function(e){const{token:t,typeDefinition:n}=e,r=`${u(t)}-value`,i=function(e){const{controller:t,token:n,typeDefinition:r}=e,i=function(e){const{controller:t,token:n,typeObject:r}=e,i=h(r.type),o=h(r.default),s=i&&o,a=i&&!o,c=!i&&o,l=Y(r.type),u=Q(e.typeObject.default);if(a)return l;if(c)return u;if(l!==u)throw new Error(`The specified default value for the Stimulus Value "${t?`${t}.${n}`:n}" must match the defined type "${l}". The provided default value of "${r.default}" is of type "${u}".`);return s?l:void 0}({controller:t,token:n,typeObject:r}),o=Q(r),s=Y(r),a=i||o||s;if(a)return a;throw new Error(`Unknown value type "${t?`${t}.${r}`:n}" for "${n}" value`)}(e);return{type:i,key:r,name:a(r),get defaultValue(){return function(e){const t=Y(e);if(t)return ee[t];const n=d(e,"default"),r=d(e,"type"),i=e;if(n)return i.default;if(r){const{type:e}=i,t=Y(e);if(t)return ee[t]}return e}(n)},get hasCustomDefaultValue(){return void 0!==Q(n)},reader:te[i],writer:ne[i]||ne.default}}({controller:n,token:e,typeDefinition:t})}function Y(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function Q(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}return Array.isArray(e)?"array":"[object Object]"===Object.prototype.toString.call(e)?"object":void 0}const ee={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},te={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${e}" of type "${Q(t)}"`);return t},boolean:e=>!("0"==e||"false"==String(e).toLowerCase()),number:e=>Number(e.replace(/_/g,"")),object(e){const t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${e}" of type "${Q(t)}"`);return t},string:e=>e},ne={default:function(e){return`${e}`},array:re,object:re};function re(e){return JSON.stringify(e)}class ie{constructor(e){this.context=e}static get shouldLoad(){return!0}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:r=this.identifier,bubbles:i=!0,cancelable:o=!0}={}){const s=new CustomEvent(r?`${r}:${e}`:e,{detail:n,bubbles:i,cancelable:o});return t.dispatchEvent(s),s}}ie.blessings=[function(e){return x(e,"classes").reduce((e,t)=>{return Object.assign(e,(n=t,{[`${n}Class`]:{get(){const{classes:e}=this;if(e.has(n))return e.get(n);{const t=e.getAttributeName(n);throw new Error(`Missing attribute "${t}"`)}}},[`${n}Classes`]:{get(){return this.classes.getAll(n)}},[`has${l(n)}Class`]:{get(){return this.classes.has(n)}}}));var n},{})},function(e){return x(e,"targets").reduce((e,t)=>{return Object.assign(e,(n=t,{[`${n}Target`]:{get(){const e=this.targets.find(n);if(e)return e;throw new Error(`Missing target element "${n}" for "${this.identifier}" controller`)}},[`${n}Targets`]:{get(){return this.targets.findAll(n)}},[`has${l(n)}Target`]:{get(){return this.targets.has(n)}}}));var n},{})},function(e){const t=function(e,t){return M(e).reduce((e,n)=>(e.push(...function(e,t){const n=e[t];return n?Object.keys(n).map(e=>[e,n[e]]):[]}(n,t)),e),[])}(e,"values"),n={valueDescriptorMap:{get(){return t.reduce((e,t)=>{const n=X(t,this.identifier),r=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[r]:n})},{})}}};return t.reduce((e,t)=>Object.assign(e,function(e){const t=X(e,void 0),{key:n,name:r,reader:i,writer:o}=t;return{[r]:{get(){const e=this.data.get(n);return null!==e?i(e):t.defaultValue},set(e){void 0===e?this.data.delete(n):this.data.set(n,o(e))}},[`has${l(r)}`]:{get(){return this.data.has(n)||t.hasCustomDefaultValue}}}}(t)),n)},function(e){return x(e,"outlets").reduce((e,t)=>Object.assign(e,function(e){const t=c(e);return{[`${t}Outlet`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t){const n=Z(this,t,e);if(n)return n;throw new Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}Outlets`]:{get(){const t=this.outlets.findAll(e);return t.length>0?t.map(t=>{const n=Z(this,t,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,t)}).filter(e=>e):[]}},[`${t}OutletElement`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t)return t;throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${l(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}(t)),{})}],ie.targets=[],ie.outlets=[],ie.values={}},504(e,t,n){n.d(t,{default:()=>go});var r=n(72),i=n.n(r),o=n(825),s=n.n(o),a=n(659),c=n.n(a),l=n(56),u=n.n(l),h=n(540),d=n.n(h),f=n(113),p=n.n(f),m=n(109),g={};g.styleTagTransform=p(),g.setAttributes=u(),g.insert=c().bind(null,"head"),g.domAPI=s(),g.insertStyleElement=d(),i()(m.A,g),m.A&&m.A.locals&&m.A.locals;var y=n(891);function v(e,t){for(var n=0;n{var[t,n]=e;this[t]=n}),this}},{key:"shouldShowSuccessMessage",get:function(){return this.successMessage}}],null&&v(t.prototype,null),n&&v(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function O(e,t){for(var n=0;n{var[t,n]=e;if(!["primaryColor","secondaryColor","typography"].includes(t))throw new Error("Invalid style property: ".concat(t));if("typography"!==t&&!this.isHexOrRgba(n))throw new Error("Invalid color value: ".concat(n," for ").concat(t,". Colors must be hex or rgb/a."))}),this._style=e}},{key:"appearance",get:function(){return this._appearance},set:function(e){if(!this.isPlainObject(e))throw new Error("Appearance must be an object");Object.entries(e).forEach(e=>{var[t,n]=e;if(!["header","launcher"].includes(t))throw new Error("Invalid appearance property: ".concat(t));if(!this.isPlainObject(n))throw new Error("Appearance ".concat(t," must be an object"));Object.entries(n).forEach(e=>{var[n,r]=e;if("header"===t&&"name"!==n)throw new Error("Invalid appearance header property: ".concat(n));if("launcher"===t&&"iconUrl"!==n)throw new Error("Invalid appearance launcher property: ".concat(n));if(null!=r&&"string"!=typeof r)throw new Error("Invalid appearance ".concat(t,".").concat(n," value: ").concat(r))})}),this._appearance=e}},{key:"whatsapp",get:function(){return this._whatsapp},set:function(e){if(!this.isPlainObject(e))throw new Error("WhatsApp must be an object");Object.entries(e).forEach(e=>{var[t,n]=e;if(!["number","restrictToChannel"].includes(t))throw new Error("Invalid WhatsApp property: ".concat(t));if(null!=n){if("number"===t&&"string"!=typeof n)throw new Error("Invalid WhatsApp number value: ".concat(n));if("restrictToChannel"===t&&"boolean"!=typeof n)throw new Error("Invalid WhatsApp restrictToChannel value: ".concat(n))}}),this._whatsapp=e}},{key:"mode",get:function(){return this._mode},set:function(e){if(!Object.values(_).includes(e))throw new Error("Invalid mode value: ".concat(e));this._mode=e}},{key:"behaviour",get:function(){return this._behaviour},set:function(e){if(null!=e){if("object"!=typeof e||Array.isArray(e))throw new Error("Invalid behaviour value: ".concat(e));this._behaviour=e}else this._behaviour=e}},{key:"hasBehaviourOverride",get:function(){return this._hasBehaviourOverride}},{key:"behaviourOverride",set:function(e){this._hasBehaviourOverride=!!e}},{key:"strategy",get:function(){return this._strategy?this._strategy:"body"==this.container?I.FIXED:I.ABSOLUTE},set:function(e){if(e&&!Object.values(I).includes(e))throw new Error("Invalid strategy value: ".concat(e));this._strategy=e}},{key:"assign",value:function(e){return e&&Object.entries(e).forEach(e=>{var[t,n]=e;this[t]=n}),this}},{key:"isHexOrRgba",value:function(e){return/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(e)||/^rgba?\(\s*\d{1,3},\s*\d{1,3},\s*\d{1,3},?\s*(0|1|0?\.\d+)?\s*\)$/.test(e)}},{key:"isPlainObject",value:function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}}],null&&x(t.prototype,null),n&&x(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function N(e,t){for(var n=0;n{var[t,n]=e;if("launcher"!==t)throw new Error("Invalid appearance property: ".concat(t));if(!this.isPlainObject(n))throw new Error("Appearance ".concat(t," must be an object"));Object.entries(n).forEach(e=>{var[n,r]=e;if("iconUrl"!==n)throw new Error("Invalid appearance launcher property: ".concat(n));if(null!=r&&"string"!=typeof r)throw new Error("Invalid appearance ".concat(t,".").concat(n," value: ").concat(r))})}),this._appearance=e}},{key:"number",get:function(){return this._number},set:function(e){if(null!=e&&"string"!=typeof e)throw new Error("Invalid number value: ".concat(e));this._number=e}},{key:"body",get:function(){return this._body},set:function(e){if(null!=e&&"string"!=typeof e)throw new Error("Invalid body value: ".concat(e));this._body=e}},{key:"assign",value:function(e){return e&&Object.entries(e).forEach(e=>{var[t,n]=e;this[t]=n}),this}},{key:"isPlainObject",value:function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}}],null&&N(t.prototype,null),n&&N(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function V(e,t){for(var n=0;n{var[t,n]=e;"forms"===t?this.forms=w.assign(n):"webchat"===t?this.webchat=F.assign(n):"whatsappWidget"===t?this.whatsapp=B.assign(n):this[t]=n}),t&&(this.actionCableUrl=this.actionCableUrlForApiRoot(this.apiRoot))}return this}},{key:"locale",get:function(){return A.toString()},set:function(e){A.identifier=e}},{key:"endpoint",value:function(e){return"".concat(this.apiRoot,"/").concat(e)}},{key:"actionCableUrlForApiRoot",value:function(e){try{var t=new URL(e),n="https:"===t.protocol?"wss:":"ws:";return t.protocol=n,t.pathname="/cable",t.search="",t.hash="",t.toString()}catch(e){return this.actionCableUrl}}}],null&&V(t.prototype,null),n&&V(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function U(e){var t="function"==typeof Map?new Map:void 0;return U=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return H(e,arguments,K(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),z(r,e)},U(e)}function H(e,t,n){return H=W()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&z(i,n.prototype),i},H.apply(null,arguments)}function W(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function z(e,t){return z=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},z(e,t)}function K(e){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},K(e)}$.apiRoot="https://api.hellotext.com/v1",$.actionCableUrl="wss://www.hellotext.com/cable",$.autoGenerateSession=!0,$.session=null,$.forms=w,$.webchat=F,$.whatsapp=B;var J=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&z(e,t)}(o,e);var t,n,r,i=(n=o,r=W(),function(){var e,t=K(n);if(r){var i=K(this).constructor;e=Reflect.construct(t,arguments,i)}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function o(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),(t=i.call(this,"".concat(e," is not valid. Please provide a valid event name"))).name="InvalidEvent",t}return t=o,Object.defineProperty(t,"prototype",{writable:!1}),t}(U(Error));function G(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Z(e){for(var t=1;tt===e)}}],(n=[{key:"addSubscriber",value:function(t,n){if(e.invalid(t))throw new J(t);this.subscribers=Z(Z({},this.subscribers),{},{[t]:this.subscribers[t]?[...this.subscribers[t],n]:[n]})}},{key:"removeSubscriber",value:function(t,n){if(e.invalid(t))throw new J(t);this.subscribers[t]&&(this.subscribers[t]=this.subscribers[t].filter(e=>e!==n))}},{key:"dispatch",value:function(e,t){var n;null===(n=this.subscribers[e])||void 0===n||n.forEach(e=>{e(t)})}},{key:"listeners",get:function(){return 0!==Object.keys(this.subscribers).length}}])&&Y(t.prototype,n),r&&Y(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function te(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function ne(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=yield fetch(this.endpoint,{method:"POST",headers:qn.headers,body:JSON.stringify(Ae({session:qn.session},e))});return new me(t.ok,t)},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function s(e){Me(o,n,i,s,a,"next",e)}function a(e){Me(o,n,i,s,a,"throw",e)}s(void 0)})},function(){return i.apply(this,arguments)})}],null&&Le(t.prototype,null),n&&Le(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const Fe=_e;function Ne(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function Re(e,t){for(var n=0;n{var[n,r]=e;t.searchParams.append("style[".concat(n,"]"),r)}),this.appendWebchatOverrides(t),t.searchParams.append("placement",$.webchat.placement);var n=yield fetch(t,{method:"GET",headers:qn.headers}),r=yield n.json();return qn.business.data||(qn.business.setData(r.business),qn.business.setLocale(r.locale)),(new DOMParser).parseFromString(r.html,"text/html").querySelector("article")},function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){Ne(o,r,i,s,a,"next",e)}function a(e){Ne(o,r,i,s,a,"throw",e)}s(void 0)})});return function(e){return t.apply(this,arguments)}}()},{key:"appendWebchatOverrides",value:function(e){var t,n,{appearance:r,whatsapp:i}=$.webchat;this.appendIfSupplied(e,"webchat[appearance][header][name]",null===(t=r.header)||void 0===t?void 0:t.name),this.appendIfSupplied(e,"webchat[appearance][launcher][icon_url]",null===(n=r.launcher)||void 0===n?void 0:n.iconUrl),this.appendIfSupplied(e,"webchat[handoff][identifier]",i.number),this.appendIfSupplied(e,"webchat[handoff][restrict_to_channel]",i.restrictToChannel)}},{key:"appendIfSupplied",value:function(e,t,n){null!=n&&e.searchParams.append(t,String(n))}}],n&&Re(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const Ve=Be;function qe(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function $e(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){qe(o,r,i,s,a,"next",e)}function a(e){qe(o,r,i,s,a,"throw",e)}s(void 0)})}}function Ue(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{}),{},{session:qn.session,at:(new Date).toISOString()});fetch(this.endpoint,{method:"POST",headers:qn.headers,body:JSON.stringify(e),keepalive:!0})},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function s(e){Ze(o,n,i,s,a,"next",e)}function a(e){Ze(o,n,i,s,a,"throw",e)}s(void 0)})},function(){return i.apply(this,arguments)})}],null&&Xe(t.prototype,null),n&&Xe(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const et=Qe;function tt(e,t){for(var n=0;ne.href===t);if(n)return n.setAttribute(lt,"true"),n;var r=document.createElement("link");return r.rel="stylesheet",r.href=e,r.setAttribute(lt,"true"),this.waitForStylesheet(r),document.head.append(r),r}},{key:"stylesheetLinks",get:function(){return"undefined"==typeof document?[]:Array.from(document.querySelectorAll(this.stylesheetSelector))}},{key:"latestStylesheet",get:function(){return this.stylesheetLinks[this.stylesheetLinks.length-1]}},{key:"normalizedStylesheetUrl",value:function(e){try{return new URL(e,document.baseURI).href}catch(t){return e}}},{key:"waitForStylesheet",value:function(e){return e?this.stylesheetIsLoaded(e)?Promise.resolve(!0):"false"===e.dataset.hellotextStylesheetLoaded?Promise.resolve(!1):(e._hellotextStylesheetLoaded||(e._hellotextStylesheetLoaded=new Promise(t=>{var n,r=r=>{clearTimeout(n),e.removeEventListener("load",i),e.removeEventListener("error",o),e.dataset.hellotextStylesheetLoaded=r?"true":"false",t(r)},i=()=>r(this.stylesheetIsLoaded(e)),o=()=>r(!1);e.addEventListener("load",i),e.addEventListener("error",o),(n=setTimeout(()=>r(this.stylesheetIsLoaded(e)),1e4)).unref&&n.unref()})),e._hellotextStylesheetLoaded):Promise.resolve(!1)}},{key:"stylesheetIsLoaded",value:function(e){return"true"===e.dataset.hellotextStylesheetLoaded||!!e.sheet}}],n&&at(t.prototype,n),r&&at(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function ht(e,t){for(var n=0;n{var[t,n]=e;return n}));ft.set("hello_utm",JSON.stringify(r))}}var t,n;return t=e,(n=[{key:"current",get:function(){try{return JSON.parse(ft.get("hello_utm"))||{}}catch(e){return{}}}}])&&pt(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function yt(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.utm=new gt,this._url=t}var t,n,r;return t=e,r=[{key:"getRootDomain",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;try{if(!e){var t;if("undefined"==typeof window||null===(t=window.location)||void 0===t||!t.hostname)return null;e=window.location.hostname}var n=e.split(".");if(n.length<=1)return e;for(var r of["myshopify.com","vtexcommercestable.com.br","myvtex.com","wixsite.com"]){var i=r.split(".");if(n.slice(-i.length).join(".")===r&&n.length>i.length)return".".concat(n.slice(-(i.length+1)).join("."))}var o=n[n.length-1],s=n[n.length-2];return n.length>2&&2===o.length&&s.length<=3?".".concat(n.slice(-3).join(".")):".".concat(n.slice(-2).join("."))}catch(e){return null}}}],(n=[{key:"url",get:function(){return null!==this._url&&void 0!==this._url?this._url:window.location.href}},{key:"title",get:function(){return document.title}},{key:"path",get:function(){if(this._url)try{return new URL(this._url).pathname}catch(e){return"/"}return window.location.pathname}},{key:"utmParams",get:function(){return this.utm.current}},{key:"trackingData",get:function(){return{page:{url:this.url,title:this.title,path:this.path},utm_params:this.utmParams}}},{key:"domain",get:function(){try{var t=this.url;if(!t)return null;var n=new URL(t).hostname;return e.getRootDomain(n)}catch(e){return null}}}])&&yt(t.prototype,n),r&&yt(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function wt(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:new bt;Tt(this,Et)[Et]=e,Tt(this,Ct)[Ct]=new ae,this.session=Tt(this,Ct)[Ct].session||$.session||ft.get("hello_session"),!this.session&&$.autoGenerateSession&&(this.session=crypto.randomUUID())}}],null&&wt(t.prototype,null),n&&wt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function At(e,t){for(var n=0;n\n ".concat(qn.business.locale.white_label.powered_by,'\n\n \n \n Hellotext\n \n \n \n \n ')}});var Ht=0;function Wt(e){return"__private_"+Ht+++"_"+e}var zt=Wt("findOrCreateComponent"),Kt=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Object.defineProperty(this,zt,{value:Jt}),this.data=t,this.element=n||document.querySelector('[data-hello-form="'.concat(this.id,'"]'))||document.createElement("form")}var t,n,r,i;return t=e,n=[{key:"mount",value:(r=function*(){var e,{ifCompleted:t=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t&&this.hasBeenCompleted)return null===(e=this.element)||void 0===e||e.remove(),qn.eventEmitter.dispatch("form:completed",function(e){for(var t=1;t{this.element.setAttribute(e.name,e.value)}),document.contains(this.element)||document.body.appendChild(this.element),qn.business.features.white_label||this.element.prepend(Rt.build())},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function s(e){Vt(o,n,i,s,a,"next",e)}function a(e){Vt(o,n,i,s,a,"throw",e)}s(void 0)})},function(){return i.apply(this,arguments)})},{key:"buildHeader",value:function(e){var t=Ut(this,zt)[zt]("[data-form-header]","header");t.innerHTML=e.content,this.element.querySelector("[data-form-header]")?this.element.querySelector("[data-form-header]").replaceWith(t):this.element.prepend(t)}},{key:"buildInputs",value:function(e){var t=Ut(this,zt)[zt]("[data-form-inputs]","main");e.map(e=>Mt.build(e)).forEach(e=>t.appendChild(e)),this.element.querySelector("[data-form-inputs]")?this.element.querySelector("[data-form-inputs]").replaceWith(t):this.element.querySelector("[data-form-header]").insertAdjacentHTML("afterend",t.outerHTML)}},{key:"buildButton",value:function(e){var t=Ut(this,zt)[zt]("[data-form-button]","button");t.innerText=e.text,t.setAttribute("data-action","click->hellotext--form#submit"),t.setAttribute("data-hellotext--form-target","button"),this.element.querySelector("[data-form-button]")?this.element.querySelector("[data-form-button]").replaceWith(t):this.element.querySelector("[data-form-inputs]").insertAdjacentHTML("afterend",t.outerHTML)}},{key:"buildFooter",value:function(e){var t=Ut(this,zt)[zt]("[data-form-footer]","footer");t.innerHTML=e.content,this.element.querySelector("[data-form-footer]")?this.element.querySelector("[data-form-footer]").replaceWith(t):this.element.appendChild(t)}},{key:"markAsCompleted",value:function(e){var t={state:"completed",id:this.id,data:e,completedAt:(new Date).getTime()};localStorage.setItem("hello-form-".concat(this.id),JSON.stringify(t)),qn.eventEmitter.dispatch("form:completed",t)}},{key:"hasBeenCompleted",get:function(){return null!==localStorage.getItem("hello-form-".concat(this.id))}},{key:"id",get:function(){return this.data.id}},{key:"localeAuthKey",get:function(){var e=this.data.steps[0];return e.inputs.some(e=>"email"===e.kind)&&e.inputs.some(e=>"phone"===e.kind)?"phone_and_email":e.inputs.some(e=>"email"===e.kind)?"email":e.inputs.some(e=>"phone"===e.kind)?"phone":"none"}},{key:"elementAttributes",get:function(){return[{name:"data-controller",value:"hellotext--form"},{name:"data-hello-form",value:this.id},{name:"data-hellotext--form-data-value",value:JSON.stringify(this.data)}]}}],n&&qt(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Jt(e,t){var n=this.element.querySelector(e);if(n)return n.cloneNode(!0);var r=document.createElement(t);return r.setAttribute(e.replace("[","").replace("]",""),""),r}function Gt(e){var t="function"==typeof Map?new Map:void 0;return Gt=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return Zt(e,arguments,Qt(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),Yt(r,e)},Gt(e)}function Zt(e,t,n){return Zt=Xt()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&Yt(i,n.prototype),i},Zt.apply(null,arguments)}function Xt(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function Yt(e,t){return Yt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Yt(e,t)}function Qt(e){return Qt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Qt(e)}var en=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Yt(e,t)}(o,e);var t,n,r,i=(n=o,r=Xt(),function(){var e,t=Qt(n);if(r){var i=Qt(this).constructor;e=Reflect.construct(t,arguments,i)}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function o(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),(e=i.call(this,"You need to initialize before tracking events. Call Hellotext.initialize and pass your public business id")).name="NotInitializedError",e}return t=o,Object.defineProperty(t,"prototype",{writable:!1}),t}(Gt(Error));function tn(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function nn(e,t){for(var n=0;n0&&this.collect()}},{key:"formMutationObserver",value:function(e){e.find(e=>"childList"===e.type&&e.addedNodes.length>0)&&Array.from(document.querySelectorAll("[data-hello-form]")).length>0&&this.collect()}},{key:"collect",value:(r=function*(){if(qn.notInitialized)throw new en;if(!this.fetching){if("undefined"==typeof document||!("querySelectorAll"in document))return console.warn("Document is not defined, collection is not possible. Please make sure to initialize the library after the document is loaded.");var e=function(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}(this,an)[an];if(0!==e.length){var t=e.map(e=>Ee.get(e).then(e=>e.json()));this.fetching=!0,yield Promise.all(t).then(e=>e.forEach(this.add)).then(()=>qn.eventEmitter.dispatch("forms:collected",this)).then(()=>this.fetching=!1),$.forms.autoMount&&this.forms.forEach(e=>e.mount())}}},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function s(e){tn(o,n,i,s,a,"next",e)}function a(e){tn(o,n,i,s,a,"throw",e)}s(void 0)})},function(){return i.apply(this,arguments)})},{key:"forEach",value:function(e){this.forms.forEach(e)}},{key:"map",value:function(e){return this.forms.map(e)}},{key:"add",value:function(e){this.includes(e.id)||(qn.business.data||(qn.business.setData(e.business),qn.business.setLocale(A.toString())),qn.business.enabledWhitelist||console.warn("No whitelist has been configured. It is advised to whitelist the domain to avoid bots from submitting forms."),this.forms.push(new Kt(e)))}},{key:"getById",value:function(e){return this.forms.find(t=>t.id===e)}},{key:"getByIndex",value:function(e){return this.forms[e]}},{key:"includes",value:function(e){return this.forms.some(t=>t.id===e)}},{key:"excludes",value:function(e){return!this.includes(e)}},{key:"length",get:function(){return this.forms.length}}],n&&nn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function ln(){return Array.from(document.querySelectorAll("[data-hello-form]")).map(e=>e.dataset.helloForm).filter(this.excludes)}function un(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function hn(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){un(o,r,i,s,a,"next",e)}function a(e){un(o,r,i,s,a,"throw",e)}s(void 0)})}}function dn(e,t){for(var n=0;nAn(e)).filter(e=>void 0!==e);if(e instanceof Date)return e.toISOString();if("object"==typeof e){var n=Object.keys(e).sort((e,t)=>e.localeCompare(t)).reduce((t,n)=>{var r=An(e[n]);return void 0!==r&&(t[n]=r),t},{});return Object.keys(n).length>0?n:void 0}return"number"==typeof e||"boolean"==typeof e?e:void 0}}function xn(e,t){var n=An(function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{}))||{};return JSON.stringify(n)}function Mn(){return(Mn=Pn(function*(e){var t;if(null===(t=globalThis.crypto)||void 0===t||!t.subtle||"undefined"==typeof TextEncoder)return function(e){for(var t=5381,n=0;n>>0).toString(16))}(e);var n=yield globalThis.crypto.subtle.digest("SHA-256",(new TextEncoder).encode(e)),r=Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,"0")).join("");return"v1:".concat(r)})).apply(this,arguments)}var Ln=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}var t,n,r;return t=e,n=[{key:"matches",value:function(e,t){return!!e&&e===t}},{key:"generate",value:(r=Pn(function*(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return yield function(e){return Mn.apply(this,arguments)}(xn(e,t,n))}),function(e,t){return r.apply(this,arguments)})}],n&&kn(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function _n(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};this.business=new ut(e),this.page=new bt,$.assign(t),jt.initialize(this.page),this.forms=new cn,this.query=new ae;var n=yield this.business.hydrate(),r=!1!==t.webchat&&this.mergeWebchatConfig(n&&n.webchat||{},t.webchat||{}),i=!1!==t.whatsappWidget&&this.mergeWhatsAppConfig(n&&n.whatsapp||{},t.whatsappWidget||{}),o=t.webchat&&!1!==t.webchat&&Object.prototype.hasOwnProperty.call(t.webchat,"behaviour");$.webchat.behaviourOverride=o,r&&r.id&&($.webchat.assign(r),this.webchat=yield pn.load(r.id)),i&&i.id&&($.whatsapp.assign(i),this.whatsapp=yield bn.load(i.id)),"undefined"!=typeof MutationObserver&&this.forms.collectExistingFormsOnPage()}),function(e){return o.apply(this,arguments)})},{key:"mergeWebchatConfig",value:function(e,t){return this.deepMergePlainObjects(e,t)}},{key:"mergeWhatsAppConfig",value:function(e,t){return this.deepMergePlainObjects(e,t)}},{key:"deepMergePlainObjects",value:function(e,t){var n=_n({},e);return Object.entries(t).forEach(e=>{var[t,r]=e;this.isPlainObject(r)&&this.isPlainObject(n[t])?n[t]=this.deepMergePlainObjects(n[t],r):n[t]=r}),n}},{key:"isPlainObject",value:function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}},{key:"track",value:(i=Rn(function*(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.notInitialized)throw new en;var n=_n(_n({},t&&t.headers||{}),this.headers),r=_n(_n({},Tn.identificationData),t.user_parameters||{}),i=t&&t.url?new bt(t.url):this.page,o=_n(_n({session:this.session,user_parameters:r,action:e},t),i.trackingData);return delete o.headers,yield it.events.create({headers:n,body:o,keepalive:rt(o)})}),function(e){return i.apply(this,arguments)})},{key:"identify",value:(r=Rn(function*(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=yield Ln.generate(this.session,e,n);if(Ln.matches(Tn.fingerprint,r))return new me(!0,{json:(t=Rn(function*(){return{already_identified:!0}}),function(){return t.apply(this,arguments)})});var i=yield it.identifications.create(_n({user_id:e},n));return i.succeeded&&Tn.remember(e,n.source,r),i}),function(e){return r.apply(this,arguments)})},{key:"forget",value:function(){Tn.forget()}},{key:"on",value:function(e,t){this.eventEmitter.addSubscriber(e,t)}},{key:"removeEventListener",value:function(e,t){this.eventEmitter.removeSubscriber(e,t)}},{key:"session",get:function(){return jt.session}},{key:"isInitialized",get:function(){return void 0!==jt.session}},{key:"notInitialized",get:function(){return!this.business||void 0===this.business.id}},{key:"headers",get:function(){if(this.notInitialized)throw new en;return{Authorization:"Bearer ".concat(this.business.id),Accept:"application/json","Content-Type":"application/json"}}}],n&&Dn(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();Vn.eventEmitter=new ee,Vn.forms=void 0,Vn.business=void 0,Vn.webchat=void 0,Vn.whatsapp=void 0;const qn=Vn;function $n(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function Un(e,t){for(var n=0;n{var{type:t,parameter:n}=e,r=this.inputTargets.find(e=>e.name===n);r.setCustomValidity(qn.business.locale.errors[t]),r.reportValidity(),r.addEventListener("input",()=>{r.setCustomValidity(""),r.reportValidity()})}),this.showErrorMessages();this.buttonTarget.style.display="none",this.element.querySelectorAll("input").forEach(e=>e.disabled=!0),this.completed()},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function s(e){$n(o,n,i,s,a,"next",e)}function a(e){$n(o,n,i,s,a,"throw",e)}s(void 0)})},function(e){return i.apply(this,arguments)})},{key:"completed",value:function(){if(this.form.markAsCompleted(this.formData),!$.forms.shouldShowSuccessMessage)return this.element.remove();"string"==typeof $.forms.successMessage?this.element.innerHTML=$.forms.successMessage:this.element.innerHTML=qn.business.locale.forms[this.form.localeAuthKey]}},{key:"showErrorMessages",value:function(){this.inputTargets.forEach(e=>{var t=e.closest("article").querySelector("[data-error-container]");e.validity.valid?t.innerText="":t.innerText=e.validationMessage})}},{key:"clearErrorMessages",value:function(){this.inputTargets.forEach(e=>{e.setCustomValidity(""),e.closest("article").querySelector("[data-error-container]").innerText=""})}},{key:"inputTargetConnected",value:function(e){e.getAttribute("data-default-value")&&(e.value=e.getAttribute("data-default-value"))}},{key:"requiredInputs",get:function(){return this.inputTargets.filter(e=>e.required)}},{key:"invalid",get:function(){return!this.element.checkValidity()}}],n&&Un(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),c}(y.xI);function Gn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Zn(e){for(var t=1;t0?e:this.getCardScrollAmount()}},{key:"getNextPageScrollLeft",value:function(){var e=this.getCurrentScrollLeft(),t=e+this.carouselContainerTarget.clientWidth,n=this.getCardMetrics().find(e=>e.end>t+1),r=n?this.getPageAlignedScrollLeft(n.start):e+this.getPageScrollAmount(),i=e+this.getPageScrollAmount();return this.clampScrollLeft(r>e+1?r:i)}},{key:"getPreviousPageScrollLeft",value:function(){var e,t,n=this.getCurrentScrollLeft();if(n<=1)return 0;var r=Math.max(n-this.getPageScrollAmount(),0);if(r<=1)return 0;var i=this.getCardMetrics(),o=i.find(e=>e.start>=r-1&&e.starte.start{var t=this.getCardScrollLeft(e);return{start:t,end:t+e.offsetWidth}})}},{key:"getCardScrollLeft",value:function(e){var t=e.getBoundingClientRect(),n=this.carouselContainerTarget.getBoundingClientRect();return t.left||t.width||n.left||n.width?t.left-n.left+this.carouselContainerTarget.scrollLeft:e.offsetLeft||0}},{key:"getCurrentScrollLeft",value:function(){return this.clampScrollLeft(this.carouselContainerTarget.scrollLeft)}},{key:"clampScrollLeft",value:function(e){var t=Math.max(this.carouselContainerTarget.scrollWidth-this.carouselContainerTarget.clientWidth,0);return Math.min(Math.max(e,0),t)}},{key:"getGap",value:function(){var e=window.getComputedStyle(this.carouselContainerTarget),t=Number.parseFloat(e.columnGap||e.gap);return Number.isFinite(t)?t:16}},{key:"getFadeDistance",value:function(){return Number.isFinite(this.fadeDistanceValue)?this.fadeDistanceValue:64}},{key:"getPageStartOffset",value:function(){return Number.isFinite(this.pageStartOffsetValue)?this.pageStartOffsetValue:0}},{key:"observeContainerSize",value:function(){this.hasCarouselContainerTarget&&window.ResizeObserver&&(this.resizeObserver=new ResizeObserver(()=>this.updateFades()),this.resizeObserver.observe(this.carouselContainerTarget))}},{key:"updateFades",value:function(){if(this.hasCarouselContainerTarget){var e=Math.max(this.carouselContainerTarget.scrollWidth-this.carouselContainerTarget.clientWidth,0);if(e<=1)return this.hideFade(this.leftFadeTarget),void this.hideFade(this.rightFadeTarget);var t=Math.min(Math.max(this.carouselContainerTarget.scrollLeft,0),e),n=this.getFadeDistance();this.setFadeOpacity(this.leftFadeTarget,t/n),this.setFadeOpacity(this.rightFadeTarget,(e-t)/n)}}},{key:"setFadeOpacity",value:function(e,t){var n=Math.min(Math.max(t,0),1);n<=.05?this.hideFade(e):(e.classList.remove("hidden"),e.removeAttribute("disabled"),e.removeAttribute("tabindex"),e.setAttribute("aria-hidden","false"),e.style.opacity=n.toFixed(3),e.style.pointerEvents="auto")}},{key:"hideFade",value:function(e){e.style.opacity="0",e.style.pointerEvents="none",e.setAttribute("aria-hidden","true"),e.setAttribute("tabindex","-1"),"disabled"in e&&(e.disabled=!0),e.classList.add("hidden")}}],n&&Yn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),s}(y.xI);nr.values={fadeDistance:{type:Number,default:64},id:String,pageStartOffset:{type:Number,default:0}},nr.targets=["carouselContainer","leftFade","rightFade","carouselCard"];const rr=["start","end"],ir=["top","right","bottom","left"].reduce((e,t)=>e.concat(t,t+"-"+rr[0],t+"-"+rr[1]),[]),or=Math.min,sr=Math.max,ar=Math.round,cr=Math.floor,lr=e=>({x:e,y:e}),ur={left:"right",right:"left",bottom:"top",top:"bottom"},hr={start:"end",end:"start"};function dr(e,t,n){return sr(e,or(t,n))}function fr(e,t){return"function"==typeof e?e(t):e}function pr(e){return e.split("-")[0]}function mr(e){return e.split("-")[1]}function gr(e){return"x"===e?"y":"x"}function yr(e){return"y"===e?"height":"width"}const vr=new Set(["top","bottom"]);function br(e){return vr.has(pr(e))?"y":"x"}function wr(e){return gr(br(e))}function Or(e,t,n){void 0===n&&(n=!1);const r=mr(e),i=wr(e),o=yr(i);let s="x"===i?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[o]>t.floating[o]&&(s=Er(s)),[s,Er(s)]}function Tr(e){return e.replace(/start|end/g,e=>hr[e])}const kr=["left","right"],Sr=["right","left"],Pr=["top","bottom"],Cr=["bottom","top"];function Er(e){return e.replace(/left|right|bottom|top/g,e=>ur[e])}function jr(e){const{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function Ar(e,t,n){let{reference:r,floating:i}=e;const o=br(t),s=wr(t),a=yr(s),c=pr(t),l="y"===o,u=r.x+r.width/2-i.width/2,h=r.y+r.height/2-i.height/2,d=r[a]/2-i[a]/2;let f;switch(c){case"top":f={x:u,y:r.y-i.height};break;case"bottom":f={x:u,y:r.y+r.height};break;case"right":f={x:r.x+r.width,y:h};break;case"left":f={x:r.x-i.width,y:h};break;default:f={x:r.x,y:r.y}}switch(mr(t)){case"start":f[s]-=d*(n&&l?-1:1);break;case"end":f[s]+=d*(n&&l?-1:1)}return f}async function xr(e,t){var n;void 0===t&&(t={});const{x:r,y:i,platform:o,rects:s,elements:a,strategy:c}=e,{boundary:l="clippingAncestors",rootBoundary:u="viewport",elementContext:h="floating",altBoundary:d=!1,padding:f=0}=fr(t,e),p=function(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}(f),m=a[d?"floating"===h?"reference":"floating":h],g=jr(await o.getClippingRect({element:null==(n=await(null==o.isElement?void 0:o.isElement(m)))||n?m:m.contextElement||await(null==o.getDocumentElement?void 0:o.getDocumentElement(a.floating)),boundary:l,rootBoundary:u,strategy:c})),y="floating"===h?{x:r,y:i,width:s.floating.width,height:s.floating.height}:s.reference,v=await(null==o.getOffsetParent?void 0:o.getOffsetParent(a.floating)),b=await(null==o.isElement?void 0:o.isElement(v))&&await(null==o.getScale?void 0:o.getScale(v))||{x:1,y:1},w=jr(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:y,offsetParent:v,strategy:c}):y);return{top:(g.top-w.top+p.top)/b.y,bottom:(w.bottom-g.bottom+p.bottom)/b.y,left:(g.left-w.left+p.left)/b.x,right:(w.right-g.right+p.right)/b.x}}const Mr=new Set(["left","top"]);function Lr(){return"undefined"!=typeof window}function Ir(e){return Nr(e)?(e.nodeName||"").toLowerCase():"#document"}function _r(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Fr(e){var t;return null==(t=(Nr(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function Nr(e){return!!Lr()&&(e instanceof Node||e instanceof _r(e).Node)}function Rr(e){return!!Lr()&&(e instanceof Element||e instanceof _r(e).Element)}function Dr(e){return!!Lr()&&(e instanceof HTMLElement||e instanceof _r(e).HTMLElement)}function Br(e){return!(!Lr()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof _r(e).ShadowRoot)}const Vr=new Set(["inline","contents"]);function qr(e){const{overflow:t,overflowX:n,overflowY:r,display:i}=Qr(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!Vr.has(i)}const $r=new Set(["table","td","th"]);function Ur(e){return $r.has(Ir(e))}const Hr=[":popover-open",":modal"];function Wr(e){return Hr.some(t=>{try{return e.matches(t)}catch(e){return!1}})}const zr=["transform","translate","scale","rotate","perspective"],Kr=["transform","translate","scale","rotate","perspective","filter"],Jr=["paint","layout","strict","content"];function Gr(e){const t=Zr(),n=Rr(e)?Qr(e):e;return zr.some(e=>!!n[e]&&"none"!==n[e])||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||Kr.some(e=>(n.willChange||"").includes(e))||Jr.some(e=>(n.contain||"").includes(e))}function Zr(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}const Xr=new Set(["html","body","#document"]);function Yr(e){return Xr.has(Ir(e))}function Qr(e){return _r(e).getComputedStyle(e)}function ei(e){return Rr(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ti(e){if("html"===Ir(e))return e;const t=e.assignedSlot||e.parentNode||Br(e)&&e.host||Fr(e);return Br(t)?t.host:t}function ni(e){const t=ti(e);return Yr(t)?e.ownerDocument?e.ownerDocument.body:e.body:Dr(t)&&qr(t)?t:ni(t)}function ri(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const i=ni(e),o=i===(null==(r=e.ownerDocument)?void 0:r.body),s=_r(i);if(o){const e=ii(s);return t.concat(s,s.visualViewport||[],qr(i)?i:[],e&&n?ri(e):[])}return t.concat(i,ri(i,[],n))}function ii(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function oi(e){const t=Qr(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const i=Dr(e),o=i?e.offsetWidth:n,s=i?e.offsetHeight:r,a=ar(n)!==o||ar(r)!==s;return a&&(n=o,r=s),{width:n,height:r,$:a}}function si(e){return Rr(e)?e:e.contextElement}function ai(e){const t=si(e);if(!Dr(t))return lr(1);const n=t.getBoundingClientRect(),{width:r,height:i,$:o}=oi(t);let s=(o?ar(n.width):n.width)/r,a=(o?ar(n.height):n.height)/i;return s&&Number.isFinite(s)||(s=1),a&&Number.isFinite(a)||(a=1),{x:s,y:a}}const ci=lr(0);function li(e){const t=_r(e);return Zr()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:ci}function ui(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const i=e.getBoundingClientRect(),o=si(e);let s=lr(1);t&&(r?Rr(r)&&(s=ai(r)):s=ai(e));const a=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==_r(e))&&t}(o,n,r)?li(o):lr(0);let c=(i.left+a.x)/s.x,l=(i.top+a.y)/s.y,u=i.width/s.x,h=i.height/s.y;if(o){const e=_r(o),t=r&&Rr(r)?_r(r):r;let n=e,i=ii(n);for(;i&&r&&t!==n;){const e=ai(i),t=i.getBoundingClientRect(),r=Qr(i),o=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,s=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,h*=e.y,c+=o,l+=s,n=_r(i),i=ii(n)}}return jr({width:u,height:h,x:c,y:l})}function hi(e,t){const n=ei(e).scrollLeft;return t?t.left+n:ui(Fr(e)).left+n}function di(e,t,n){void 0===n&&(n=!1);const r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-(n?0:hi(e,r)),y:r.top+t.scrollTop}}const fi=new Set(["absolute","fixed"]);function pi(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=_r(e),r=Fr(e),i=n.visualViewport;let o=r.clientWidth,s=r.clientHeight,a=0,c=0;if(i){o=i.width,s=i.height;const e=Zr();(!e||e&&"fixed"===t)&&(a=i.offsetLeft,c=i.offsetTop)}return{width:o,height:s,x:a,y:c}}(e,n);else if("document"===t)r=function(e){const t=Fr(e),n=ei(e),r=e.ownerDocument.body,i=sr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=sr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let s=-n.scrollLeft+hi(e);const a=-n.scrollTop;return"rtl"===Qr(r).direction&&(s+=sr(t.clientWidth,r.clientWidth)-i),{width:i,height:o,x:s,y:a}}(Fr(e));else if(Rr(t))r=function(e,t){const n=ui(e,!0,"fixed"===t),r=n.top+e.clientTop,i=n.left+e.clientLeft,o=Dr(e)?ai(e):lr(1);return{width:e.clientWidth*o.x,height:e.clientHeight*o.y,x:i*o.x,y:r*o.y}}(t,n);else{const n=li(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return jr(r)}function mi(e,t){const n=ti(e);return!(n===t||!Rr(n)||Yr(n))&&("fixed"===Qr(n).position||mi(n,t))}function gi(e,t,n){const r=Dr(t),i=Fr(t),o="fixed"===n,s=ui(e,!0,o,t);let a={scrollLeft:0,scrollTop:0};const c=lr(0);function l(){c.x=hi(i)}if(r||!r&&!o)if(("body"!==Ir(t)||qr(i))&&(a=ei(t)),r){const e=ui(t,!0,o,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}else i&&l();o&&!r&&i&&l();const u=!i||r||o?lr(0):di(i,a);return{x:s.left+a.scrollLeft-c.x-u.x,y:s.top+a.scrollTop-c.y-u.y,width:s.width,height:s.height}}function yi(e){return"static"===Qr(e).position}function vi(e,t){if(!Dr(e)||"fixed"===Qr(e).position)return null;if(t)return t(e);let n=e.offsetParent;return Fr(e)===n&&(n=n.ownerDocument.body),n}function bi(e,t){const n=_r(e);if(Wr(e))return n;if(!Dr(e)){let t=ti(e);for(;t&&!Yr(t);){if(Rr(t)&&!yi(t))return t;t=ti(t)}return n}let r=vi(e,t);for(;r&&Ur(r)&&yi(r);)r=vi(r,t);return r&&Yr(r)&&yi(r)&&!Gr(r)?n:r||function(e){let t=ti(e);for(;Dr(t)&&!Yr(t);){if(Gr(t))return t;if(Wr(t))return null;t=ti(t)}return null}(e)||n}const wi={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e;const o="fixed"===i,s=Fr(r),a=!!t&&Wr(t.floating);if(r===s||a&&o)return n;let c={scrollLeft:0,scrollTop:0},l=lr(1);const u=lr(0),h=Dr(r);if((h||!h&&!o)&&(("body"!==Ir(r)||qr(s))&&(c=ei(r)),Dr(r))){const e=ui(r);l=ai(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}const d=!s||h||o?lr(0):di(s,c,!0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+d.x,y:n.y*l.y-c.scrollTop*l.y+u.y+d.y}},getDocumentElement:Fr,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e;const o=[..."clippingAncestors"===n?Wr(t)?[]:function(e,t){const n=t.get(e);if(n)return n;let r=ri(e,[],!1).filter(e=>Rr(e)&&"body"!==Ir(e)),i=null;const o="fixed"===Qr(e).position;let s=o?ti(e):e;for(;Rr(s)&&!Yr(s);){const t=Qr(s),n=Gr(s);n||"fixed"!==t.position||(i=null),(o?!n&&!i:!n&&"static"===t.position&&i&&fi.has(i.position)||qr(s)&&!n&&mi(e,s))?r=r.filter(e=>e!==s):i=t,s=ti(s)}return t.set(e,r),r}(t,this._c):[].concat(n),r],s=o[0],a=o.reduce((e,n)=>{const r=pi(t,n,i);return e.top=sr(r.top,e.top),e.right=or(r.right,e.right),e.bottom=or(r.bottom,e.bottom),e.left=sr(r.left,e.left),e},pi(t,s,i));return{width:a.right-a.left,height:a.bottom-a.top,x:a.left,y:a.top}},getOffsetParent:bi,getElementRects:async function(e){const t=this.getOffsetParent||bi,n=this.getDimensions,r=await n(e.floating);return{reference:gi(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:n}=oi(e);return{width:t,height:n}},getScale:ai,isElement:Rr,isRTL:function(e){return"rtl"===Qr(e).direction}};function Oi(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}const Ti=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:i,y:o,placement:s,middlewareData:a}=t,c=await async function(e,t){const{placement:n,platform:r,elements:i}=e,o=await(null==r.isRTL?void 0:r.isRTL(i.floating)),s=pr(n),a=mr(n),c="y"===br(n),l=Mr.has(s)?-1:1,u=o&&c?-1:1,h=fr(t,e);let{mainAxis:d,crossAxis:f,alignmentAxis:p}="number"==typeof h?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return a&&"number"==typeof p&&(f="end"===a?-1*p:p),c?{x:f*u,y:d*l}:{x:d*l,y:f*u}}(t,e);return s===(null==(n=a.offset)?void 0:n.placement)&&null!=(r=a.arrow)&&r.alignmentOffset?{}:{x:i+c.x,y:o+c.y,data:{...c,placement:s}}}}},ki=function(e){return void 0===e&&(e={}),{name:"autoPlacement",options:e,async fn(t){var n,r,i;const{rects:o,middlewareData:s,placement:a,platform:c,elements:l}=t,{crossAxis:u=!1,alignment:h,allowedPlacements:d=ir,autoAlignment:f=!0,...p}=fr(e,t),m=void 0!==h||d===ir?function(e,t,n){return(e?[...n.filter(t=>mr(t)===e),...n.filter(t=>mr(t)!==e)]:n.filter(e=>pr(e)===e)).filter(n=>!e||mr(n)===e||!!t&&Tr(n)!==n)}(h||null,f,d):d,g=await xr(t,p),y=(null==(n=s.autoPlacement)?void 0:n.index)||0,v=m[y];if(null==v)return{};const b=Or(v,o,await(null==c.isRTL?void 0:c.isRTL(l.floating)));if(a!==v)return{reset:{placement:m[0]}};const w=[g[pr(v)],g[b[0]],g[b[1]]],O=[...(null==(r=s.autoPlacement)?void 0:r.overflows)||[],{placement:v,overflows:w}],T=m[y+1];if(T)return{data:{index:y+1,overflows:O},reset:{placement:T}};const k=O.map(e=>{const t=mr(e.placement);return[e.placement,t&&u?e.overflows.slice(0,2).reduce((e,t)=>e+t,0):e.overflows[0],e.overflows]}).sort((e,t)=>e[1]-t[1]),S=(null==(i=k.filter(e=>e[2].slice(0,mr(e[0])?2:3).every(e=>e<=0))[0])?void 0:i[0])||k[0][0];return S!==a?{data:{index:y+1,overflows:O},reset:{placement:S}}:{}}}},Si=function(e){return void 0===e&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:i}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:a={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...c}=fr(e,t),l={x:n,y:r},u=await xr(t,c),h=br(pr(i)),d=gr(h);let f=l[d],p=l[h];if(o){const e="y"===d?"bottom":"right";f=dr(f+u["y"===d?"top":"left"],f,f-u[e])}if(s){const e="y"===h?"bottom":"right";p=dr(p+u["y"===h?"top":"left"],p,p-u[e])}const m=a.fn({...t,[d]:f,[h]:p});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[d]:o,[h]:s}}}}}},Pi=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:i,middlewareData:o,rects:s,initialPlacement:a,platform:c,elements:l}=t,{mainAxis:u=!0,crossAxis:h=!0,fallbackPlacements:d,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:m=!0,...g}=fr(e,t);if(null!=(n=o.arrow)&&n.alignmentOffset)return{};const y=pr(i),v=br(a),b=pr(a)===a,w=await(null==c.isRTL?void 0:c.isRTL(l.floating)),O=d||(b||!m?[Er(a)]:function(e){const t=Er(e);return[Tr(e),t,Tr(t)]}(a)),T="none"!==p;!d&&T&&O.push(...function(e,t,n,r){const i=mr(e);let o=function(e,t,n){switch(e){case"top":case"bottom":return n?t?Sr:kr:t?kr:Sr;case"left":case"right":return t?Pr:Cr;default:return[]}}(pr(e),"start"===n,r);return i&&(o=o.map(e=>e+"-"+i),t&&(o=o.concat(o.map(Tr)))),o}(a,m,p,w));const k=[a,...O],S=await xr(t,g),P=[];let C=(null==(r=o.flip)?void 0:r.overflows)||[];if(u&&P.push(S[y]),h){const e=Or(i,s,w);P.push(S[e[0]],S[e[1]])}if(C=[...C,{placement:i,overflows:P}],!P.every(e=>e<=0)){var E,j;const e=((null==(E=o.flip)?void 0:E.index)||0)+1,t=k[e];if(t&&("alignment"!==h||v===br(t)||C.every(e=>br(e.placement)!==v||e.overflows[0]>0)))return{data:{index:e,overflows:C},reset:{placement:t}};let n=null==(j=C.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:j.placement;if(!n)switch(f){case"bestFit":{var A;const e=null==(A=C.filter(e=>{if(T){const t=br(e.placement);return t===v||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:A[0];e&&(n=e);break}case"initialPlacement":n=a}if(i!==n)return{reset:{placement:n}}}return{}}}};var Ci=e=>{Object.assign(e,{show(){var e;null===(e=this.cancelBehaviourOpen)||void 0===e||e.call(this),this.openValue=!0},hide(){this.openValue=!1},toggle(){var e;null===(e=this.cancelBehaviourOpen)||void 0===e||e.call(this),this.openValue=!this.openValue},setupFloatingUI(e){var{trigger:t,popover:n,strategy:r}=e;this.floatingUICleanup=function(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:s="function"==typeof ResizeObserver,layoutShift:a="function"==typeof IntersectionObserver,animationFrame:c=!1}=r,l=si(e),u=i||o?[...l?ri(l):[],...ri(t)]:[];u.forEach(e=>{i&&e.addEventListener("scroll",n,{passive:!0}),o&&e.addEventListener("resize",n)});const h=l&&a?function(e,t){let n,r=null;const i=Fr(e);function o(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return function s(a,c){void 0===a&&(a=!1),void 0===c&&(c=1),o();const l=e.getBoundingClientRect(),{left:u,top:h,width:d,height:f}=l;if(a||t(),!d||!f)return;const p={rootMargin:-cr(h)+"px "+-cr(i.clientWidth-(u+d))+"px "+-cr(i.clientHeight-(h+f))+"px "+-cr(u)+"px",threshold:sr(0,or(1,c))||1};let m=!0;function g(t){const r=t[0].intersectionRatio;if(r!==c){if(!m)return s();r?s(!1,r):n=setTimeout(()=>{s(!1,1e-7)},1e3)}1!==r||Oi(l,e.getBoundingClientRect())||s(),m=!1}try{r=new IntersectionObserver(g,{...p,root:i.ownerDocument})}catch(e){r=new IntersectionObserver(g,p)}r.observe(e)}(!0),o}(l,n):null;let d,f=-1,p=null;s&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;null==(e=p)||e.observe(t)})),n()}),l&&!c&&p.observe(l),p.observe(t));let m=c?ui(e):null;return c&&function t(){const r=ui(e);m&&!Oi(m,r)&&n(),m=r,d=requestAnimationFrame(t)}(),n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener("scroll",n),o&&e.removeEventListener("resize",n)}),null==h||h(),null==(e=p)||e.disconnect(),p=null,c&&cancelAnimationFrame(d)}}(t,n,()=>{((e,t,n)=>{const r=new Map,i={platform:wi,...n},o={...i.platform,_c:r};return(async(e,t,n)=>{const{placement:r="bottom",strategy:i="absolute",middleware:o=[],platform:s}=n,a=o.filter(Boolean),c=await(null==s.isRTL?void 0:s.isRTL(t));let l=await s.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:h}=Ar(l,r,c),d=r,f={},p=0;for(let n=0;n{var{x:t,y:r,strategy:i}=e,o={left:"".concat(t,"px"),top:"".concat(r,"px"),position:i};Object.assign(n.style,o)})})},openValueChanged(){var e;this.disabledValue||(this.openValue?(null===(e=this.preparePopoverOpenAnimation)||void 0===e||e.call(this),this.popoverTarget.showPopover(),this.popoverTarget.setAttribute("aria-expanded","true"),this.onPopoverOpened&&this.onPopoverOpened()):(this.popoverTarget.hidePopover(),this.popoverTarget.removeAttribute("aria-expanded"),this.onPopoverClosed&&this.onPopoverClosed()))}})};function Ei(e,t,n,r,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(r,i)}function ji(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(e){Ei(o,r,i,s,a,"next",e)}function a(e){Ei(o,r,i,s,a,"throw",e)}s(void 0)})}}function Ai(e,t){for(var n=0;n{var[n,r]=e;t.searchParams.append(n,r)}),yield fetch(t,{method:"GET",headers:qn.headers})}),function(e){return o.apply(this,arguments)})},{key:"catchUp",value:function(e){return this.index({after_id:e,session:qn.session})}},{key:"create",value:(i=Ni(function*(e){var t=yield fetch(this.url,{method:"POST",headers:{Authorization:"Bearer ".concat(qn.business.id)},body:e});return new me(t.ok,t)}),function(e){return i.apply(this,arguments)})},{key:"markAsSeen",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=e?this.url+"/".concat(e):this.url+"/seen";fetch(t,{method:"PATCH",headers:qn.headers,body:JSON.stringify({session:qn.session})})}},{key:"url",get:function(){return e.endpoint.replace(":id",this.webchatId)}}],r=[{key:"endpoint",get:function(){return $.endpoint("public/webchats/:id/messages")}}],n&&Ri(t.prototype,n),r&&Ri(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const Vi=Bi;function qi(e,t){for(var n=0;nthis.handleOpen(e)),e.addEventListener("close",()=>this.handleDisconnect(e)),e.addEventListener("error",()=>this.handleDisconnect(e)),e.addEventListener("message",e=>this.handleControlMessage(e)),this.messageHandlers.forEach(t=>{e.addEventListener("message",t)})}},{key:"handleOpen",value:function(e){e===this.webSocket&&(this.reconnectAttempts=0,this.needsResubscribe&&(this.needsResubscribe=!1,this.resubscribeChannels()))}},{key:"handleControlMessage",value:function(e){var t;try{t=JSON.parse(e.data)}catch(e){return}"confirm_subscription"===t.type&&this.subscriptionConfirmHandlers.forEach(e=>e(t.identifier))}},{key:"handleDisconnect",value:function(e){e===this.webSocket&&(this.disconnectHandlers.forEach(e=>e()),this.webSocket=null,this.needsResubscribe=!0,this.scheduleReconnect())}},{key:"scheduleReconnect",value:function(){this.reconnectTimeout||(this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,this.reconnectAttempts+=1,this.openWebSocket()},this.reconnectDelay))}},{key:"clearReconnectTimeout",value:function(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null)}},{key:"resubscribeChannels",value:function(){this.channels.forEach(e=>{var t=e.resubscribe||e.subscribe;"function"==typeof t&&t.call(e)})}},{key:"closedWebSocket",value:function(e){return e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING}},{key:"reconnectDelay",get:function(){var e=Math.min(this.reconnectMaxDelay,this.reconnectBaseDelay*2**this.reconnectAttempts);return e+Math.round(e*this.reconnectJitter*Math.random())}}],(n=[{key:"send",value:function(t){var{command:n,identifier:r,data:i}=t,o={command:n,identifier:JSON.stringify(r),data:JSON.stringify(i||{})},s=e.ensureWebSocket(),a=JSON.stringify(o);s.readyState===WebSocket.OPEN?s.send(a):s.addEventListener("open",()=>{s.send(a)})}},{key:"onMessage",value:function(t){var n=e=>{var n=JSON.parse(e.data),{type:r,message:i}=n;this.ignoredEvents.includes(r)||t(i)};e.messageHandlers.add(n),e.ensureWebSocket().addEventListener("message",n)}},{key:"onDisconnect",value:function(t){e.disconnectHandlers.add(t)}},{key:"onSubscriptionConfirmed",value:function(t){e.subscriptionConfirmHandlers.add(t)}},{key:"webSocket",get:function(){return e.ensureWebSocket()}},{key:"ignoredEvents",get:function(){return["ping","confirm_subscription","welcome"]}}])&&qi(t.prototype,n),r&&qi(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Hi(e,t){for(var n=0;nr.handleSubscriptionConfirmed(e)),r.subscribe(),r}return t=s,(n=[{key:"subscribe",value:function(){this.subscribed=!0;var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"subscribe",identifier:e})}},{key:"unsubscribe",value:function(){this.subscribed=!1;var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"unsubscribe",identifier:e})}},{key:"resubscribe",value:function(){!1!==this.subscribed&&(this.awaitingReconnectConfirmation=!0,this.subscribe())}},{key:"onReconnect",value:function(e){this.reconnectCallbacks.add(e)}},{key:"handleSubscriptionConfirmed",value:function(e){this.awaitingReconnectConfirmation&&this.matchesIdentifier(e)&&(this.awaitingReconnectConfirmation=!1,this.reconnectCallbacks.forEach(e=>e()))}},{key:"matchesIdentifier",value:function(e){var t;try{t="string"==typeof e?JSON.parse(e):e}catch(e){return!1}return"WebchatChannel"===t.channel&&t.id===this.id&&t.session===this.session&&t.conversation===this.conversation}},{key:"startTypingIndicator",value:function(){var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"message",identifier:e,data:{action:"started_typing"}})}},{key:"stopTypingIndicator",value:function(){var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"typing:stop",identifier:e,data:{action:"stopped_typing"}})}},{key:"onMessage",value:function(e){zi(Ji(s.prototype),"onMessage",this).call(this,t=>{"message"===t.type&&e(t)})}},{key:"onReaction",value:function(e){zi(Ji(s.prototype),"onMessage",this).call(this,t=>{"reaction.create"!==t.type&&"reaction.destroy"!==t.type||e(t)})}},{key:"onTypingStart",value:function(e){zi(Ji(s.prototype),"onMessage",this).call(this,t=>{"started_typing"===t.type&&e(t)})}},{key:"updateSubscriptionWith",value:function(e){this.unsubscribe(),setTimeout(()=>{this.conversation=e,this.subscribe()},1e3)}}])&&Hi(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),s}(Ui);const Zi=Gi;var Xi=e=>{Object.assign(e,{scheduleBehaviourOpen(){if(this.shouldAutoOpenFromBehaviour()){var e=1e3*Number(this.behaviourValue.delay_seconds||0);this.behaviourOpenTimeout=window.setTimeout(()=>{this.behaviourOpenTimeout=null,this.openValue||(this.openValue=!0,this.markBehaviourAutoOpened())},e)}},cancelBehaviourOpen(){window.clearTimeout(this.behaviourOpenTimeout),this.behaviourOpenTimeout=null},shouldAutoOpenFromBehaviour(){var e=this.behaviourValue;return!(!e||"on_load"!==e.trigger||e.first_visit_only&&localStorage.getItem(this.firstVisitKey())||e.once_per_session&&sessionStorage.getItem(this.sessionKey()))},markBehaviourAutoOpened(){this.behaviourValue.first_visit_only&&localStorage.setItem(this.firstVisitKey(),"1"),this.behaviourValue.once_per_session&&sessionStorage.setItem(this.sessionKey(),"1")},firstVisitKey(){return"hellotext--webchat--".concat(this.idValue,"--auto-opened")},sessionKey(){return"hellotext--webchat--".concat(this.idValue,"--auto-opened-session")}})},Yi=e=>{Object.assign(e,{setupOpeningSequence(){this.openingSequenceStarted=!1,this.openingSequenceCancelled=!1,this.openingSequenceTimeout=null,this.openingSequenceMessages=[],this.revealedOpeningSequenceMessageIds=[]},teardownOpeningSequence(){this.cancelOpeningSequence()},startOpeningSequence(){this.openingSequenceMessages=Array.from(this.openingSequenceMessageTargets||[]),this.openingSequenceCanStart()&&(this.openingSequenceStarted=!0,this.openingSequenceCancelled=!1,this.revealedOpeningSequenceMessageIds=[],this.playOpeningSequenceMessageAt(0))},openingSequenceCanStart(){return!this.conversationIdValue&&this.hasOpeningSequenceTarget&&this.openingSequenceMessages.length>0&&!this.openingSequenceStarted},playOpeningSequenceMessageAt(e){var t=this.openingSequenceMessages[e];if(t){var n=1e3*this.openingSequenceMessageDelay(t);this.openingSequenceTimeout=window.setTimeout(()=>{this.openingSequenceTimeout=null,this.openingSequenceCancelled||(this.revealOpeningSequenceMessage(t),this.playOpeningSequenceMessageAt(e+1))},n)}},revealOpeningSequenceMessage(e){this.messagesContainerTarget.insertBefore(e,this.messageTemplateTarget),e.hidden=!1,this.recordOpeningSequenceMessage(e),this.scrollOpeningSequenceToBottom()},recordOpeningSequenceMessage(e){var t=e.dataset.openingSequenceMessageId;t&&!this.revealedOpeningSequenceMessageIds.includes(t)&&this.revealedOpeningSequenceMessageIds.push(t)},openingSequenceMessageDelay(e){var t=Number(e.dataset.delaySeconds||0);return Number.isFinite(t)?t:0},scrollOpeningSequenceToBottom(){this.messagesContainerTarget.scroll&&this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight,behavior:"smooth"})},cancelOpeningSequence(){this.openingSequenceCancelled=!0,null!==this.openingSequenceTimeout&&void 0!==this.openingSequenceTimeout&&(window.clearTimeout(this.openingSequenceTimeout),this.openingSequenceTimeout=null)},appendOpeningSequenceMessageIds(e){this.cancelOpeningSequence(),(this.revealedOpeningSequenceMessageIds||[]).forEach(t=>{e.append("message[opening_sequence_message_ids][]",t)})},clearRevealedOpeningSequenceMessageIds(){this.revealedOpeningSequenceMessageIds=[]}})},Qi=e=>{Object.assign(e,{setupTeaser(){this.teaserCycleTimeout=null,this.teaserMessages=[],this.boundOnTeaserClick=this.boundOnTeaserClick||this.onTeaserClick.bind(this),this.hasTeaserTarget&&(this.teaserTarget.addEventListener("click",this.boundOnTeaserClick),this.startTeaserPresentation())},teardownTeaser(){this.stopTeaserCycle(),this.hasTeaserTarget&&this.boundOnTeaserClick&&this.teaserTarget.removeEventListener("click",this.boundOnTeaserClick)},collectTeaserMessages(){return this.hasTeaserTarget?Array.from(this.teaserTarget.querySelectorAll("[data-teaser-message]")):[]},startTeaserPresentation(){this.stopTeaserCycle(),this.teaserMessages=this.collectTeaserMessages(),this.hasTeaserTarget&&(0!==this.teaserMessages.length?this.openValue||this.conversationIdValue||this.hasRenderedConversationMessages()?this.dismissTeaserForSession():this.teaserSeenForSession()?this.hideTeaser():(this.teaserTarget.classList.remove("invisible"),this.showTeaserMessage(0),this.teaserMessages.length<2||this.scheduleNextTeaserMessage(0)):this.hideTeaser())},scheduleNextTeaserMessage(e){var t=e+1;if(!(t>=this.teaserMessages.length)){var n=this.teaserMessages[e],r=this.teaserPresentationDelay(n);this.teaserCycleTimeout=window.setTimeout(()=>{this.teaserCycleTimeout=null,this.showTeaserMessage(t),this.scheduleNextTeaserMessage(t)},r)}},showTeaserMessage(e){this.teaserMessages.forEach((t,n)=>{t.classList.toggle("hidden",n!==e)})},stopTeaserCycle(){null!==this.teaserCycleTimeout&&void 0!==this.teaserCycleTimeout&&(window.clearTimeout(this.teaserCycleTimeout),this.teaserCycleTimeout=null)},teaserMessageDelay(e){var t=Number(e.dataset.delaySeconds||0);return Number.isFinite(t)?t:0},teaserPresentationDelay(e){return Math.max(1e3*this.teaserMessageDelay(e),250)},hasRenderedConversationMessages(){var e=[];try{e=Array.from(this.messageTargets||[])}catch(t){e=[]}return e.some(e=>e!==this.messageTemplateTarget)},teaserSeenKey(){var e=this.hasTeaserTarget?this.teaserTarget.dataset.teaserVersion:"",t=e?":".concat(e):"";return"hellotext:webchat:".concat(this.idValue||this.element.id,":teaser-seen").concat(t)},teaserSeenForSession(){try{return"true"===window.sessionStorage.getItem(this.teaserSeenKey())}catch(e){return!1}},markTeaserSeenForSession(){try{window.sessionStorage.setItem(this.teaserSeenKey(),"true")}catch(e){}},dismissTeaserForSession(){this.markTeaserSeenForSession(),this.hideTeaser()},hideTeaser(){this.stopTeaserCycle(),this.hasTeaserTarget&&this.teaserTarget.classList.add("invisible")},onTeaserClick(e){e.target.closest("a")||(this.dismissTeaserForSession(),this.show())}})};function eo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function to(e){for(var t=1;t{this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight,behavior:"instant"})});var t=this.typingIndicatorKeepAliveValue;this.incomingTypingIndicatorTimeout=setTimeout(()=>{this.clearTypingIndicator()},t)}},{key:"resetTypingIndicatorTimer",value:function(){if(this.typingIndicatorVisible){clearTimeout(this.incomingTypingIndicatorTimeout),clearTimeout(this.optimisticTypingTimeout);var e=this.typingIndicatorKeepAliveValue;this.incomingTypingIndicatorTimeout=setTimeout(()=>{this.clearTypingIndicator()},e)}}},{key:"clearTypingIndicator",value:function(){this.hasTypingIndicatorTarget&&this.typingIndicatorTarget.remove(),this.typingIndicatorVisible=!1,clearTimeout(this.incomingTypingIndicatorTimeout),clearTimeout(this.optimisticTypingTimeout)}},{key:"onMessageInputChange",value:function(){this.resizeInput(),clearTimeout(this.typingIndicatorTimeout),this.hasSentTypingIndicator||(this.webChatChannel.startTypingIndicator(),this.hasSentTypingIndicator=!0),this.typingIndicatorTimeout=setTimeout(()=>{this.hasSentTypingIndicator=!1},3e3)}},{key:"onOutboundMessageSent",value:function(e){var{data:t}=e,n={"message:sent":e=>{var t=(new DOMParser).parseFromString(e.element,"text/html").body.firstElementChild;this.localizeMessageTimestamps(t),this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(t,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(t),t.scrollIntoView({behavior:"instant"})},"message:failed":e=>{var t=this.messagesContainerTarget.querySelector("#".concat(e.id));this.markMessageFailed(t,e.reason)}};n[t.type]?n[t.type](t):console.log("Unhandled message event: ".concat(t.type))}},{key:"onScroll",value:(u=io(function*(){if(!(this.messagesContainerTarget.scrollTop>300||!this.nextPageValue||this.fetchingNextPage)){this.fetchingNextPage=!0;var e=yield this.messagesAPI.index({page:this.nextPageValue,session:qn.session}),{next:t,messages:n}=yield e.json();this.nextPageValue=t,this.oldScrollHeight=this.messagesContainerTarget.scrollHeight,n.forEach(e=>{var{body:t,attachments:n}=e,r=e.created_at||e.createdAt,i=document.createElement("div");i.innerHTML=t;var o=this.messageTemplateTarget.cloneNode(!0);o.classList.add("hellotext--webchat-message"),o.setAttribute("data-hellotext--webchat-target","message"),o.setAttribute("data-id",e.id),r&&o.setAttribute("data-created-at",r),o.style.removeProperty("display"),o.querySelector("[data-body]").innerHTML=i.innerHTML,"received"===e.state?o.classList.add("received"):o.classList.remove("received"),n&&n.forEach(e=>{var t,n=this.attachmentImageTarget.cloneNode(!0);n.removeAttribute("data-hellotext--webchat-target"),n.src=e,n.style.display="block",null===(t=this.messageAttachmentsContainer(o))||void 0===t||t.appendChild(n)}),o.setAttribute("data-body",t),this.localizeMessageTimestamp(o.querySelector("[data-message-timestamp]"),r),this.messagesContainerTarget.prepend(o)}),this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight-this.oldScrollHeight,behavior:"instant"}),this.fetchingNextPage=!1}}),function(){return u.apply(this,arguments)})},{key:"onClickOutside",value:function(e){F.mode===_.POPOVER&&this.openValue&&e.target.nodeType&&!1===this.element.contains(e.target)&&(this.openValue=!1)}},{key:"closePopover",value:function(){this.clearPopoverOpenAnimation(),this.popoverTarget.classList.remove(...this.fadeOutClasses),this.openValue=!1}},{key:"preparePopoverOpenAnimation",value:function(){this.clearPopoverOpenAnimation(),this.popoverTarget.classList.remove(...this.fadeOutClasses),this.popoverTarget.classList.add("hellotext--webchat-popover-opening"),this.popoverOpenAnimationTimeout=setTimeout(()=>{this.popoverTarget.classList.remove("hellotext--webchat-popover-opening"),this.popoverOpenAnimationTimeout=null},120)}},{key:"clearPopoverOpenAnimation",value:function(){var e;this.popoverOpenAnimationTimeout&&(clearTimeout(this.popoverOpenAnimationTimeout),this.popoverOpenAnimationTimeout=null),null===(e=this.popoverTarget)||void 0===e||e.classList.remove("hellotext--webchat-popover-opening")}},{key:"onPopoverOpened",value:function(){var e;this.popoverTarget.classList.remove(...this.fadeOutClasses),null===(e=this.dismissTeaserForSession)||void 0===e||e.call(this),this.onMobile||this.focusComposeInput(),this.scrolled||(requestAnimationFrame(()=>{this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight,behavior:"instant"})}),this.scrolled=!0),qn.eventEmitter.dispatch("webchat:opened"),localStorage.setItem("hellotext--webchat--".concat(this.idValue),"opened"),this.messageTeaserValue&&(this.messageTeaserValue=null),this.startOpeningSequence(),"none"!==this.unreadCounterTarget.style.display&&(this.unreadCounterTarget.style.display="none",this.unreadCounterTarget.innerText="0",this.messagesAPI.markAsSeen())}},{key:"onPopoverClosed",value:function(){this.clearPopoverOpenAnimation(),qn.eventEmitter.dispatch("webchat:closed"),localStorage.setItem("hellotext--webchat--".concat(this.idValue),"closed")}},{key:"onMessageReaction",value:function(e){var{message:t,reaction:n,type:r}=e,i=this.messageTargets.find(e=>e.dataset.id===t).querySelector("[data-reactions]");if("reaction.destroy"===r)return i.querySelector('[data-id="'.concat(n.id,'"]')).remove();if(i.querySelector('[data-id="'.concat(n.id,'"]')))i.querySelector('[data-id="'.concat(n.id,'"]')).innerText=n.emoji;else{var o=document.createElement("span");o.innerText=n.emoji,o.setAttribute("data-id",n.id),i.appendChild(o)}}},{key:"onMessageReceived",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{id:r,body:i,attachments:o,teaser:s}=e,a=e.created_at||e.createdAt;if(this.claimMessageId(r)){if(null===(t=this.hideTeaser)||void 0===t||t.call(this),e.carousel)return this.insertCarouselMessage(e,n);var c=document.createElement("div");c.innerHTML=i;var l=this.messageTemplateTarget.cloneNode(!0);l.classList.add("hellotext--webchat-message"),l.style.display="flex",l.querySelector("[data-body]").innerHTML=c.innerHTML,l.setAttribute("data-id",r),l.setAttribute("data-hellotext--webchat-target","message"),this.setMessageCreatedAt(l,a),this.localizeMessageTimestamp(l.querySelector("[data-message-timestamp]"),a),o&&o.forEach(e=>{var t,n=this.attachmentImageTarget.cloneNode(!0);n.src=e,n.style.display="block",null===(t=this.messageAttachmentsContainer(l))||void 0===t||t.appendChild(n)}),this.clearTypingIndicator(),this.insertMessageElement(l),qn.eventEmitter.dispatch("webchat:message:received",to(to({},e),{},{body:l.querySelector("[data-body]").innerText})),!1!==n.scroll&&l.scrollIntoView({behavior:"smooth"}),this.updateMessageTeaser(s),this.openValue?this.messagesAPI.markAsSeen(r):this.incrementUnreadCounter()}}},{key:"claimMessageId",value:function(e){var t=this.messageTargets||[];return!this.messageIds.has(e)&&(this.messageIds.add(e),!t.some(t=>t.dataset.id===e))}},{key:"captureCatchUpCursor",value:function(){this.catchUpAfterMessageId=this.lastRenderedMessageId}},{key:"catchUpMessages",value:(l=io(function*(){var e=this.catchUpAfterMessageId;if(e&&!this.fetchingCatchUpMessages){this.fetchingCatchUpMessages=!0;try{var t=yield this.messagesAPI.catchUp(e),{messages:n=[]}=yield t.json();n.forEach(e=>this.onMessageReceived(e,{scroll:!1})),this.catchUpAfterMessageId=this.lastRenderedMessageId}finally{this.fetchingCatchUpMessages=!1}}}),function(){return l.apply(this,arguments)})},{key:"lastRenderedMessageId",get:function(){var e,t=this.persistedMessageElements;return(null===(e=t[t.length-1])||void 0===e?void 0:e.dataset.id)||null}},{key:"persistedMessageElements",get:function(){return Array.from(this.messagesContainerTarget.querySelectorAll(".hellotext--webchat-message[data-id]"))}},{key:"setMessageCreatedAt",value:function(e,t){t&&e.setAttribute("data-created-at",t)}},{key:"insertMessageElement",value:function(e){var t=this.nextMessageElementFor(e);t?this.messagesContainerTarget.insertBefore(e,t):this.messagesContainerTarget.appendChild(e)}},{key:"nextMessageElementFor",value:function(e){var t=Date.parse(e.dataset.createdAt);return Number.isNaN(t)?null:this.persistedMessageElements.find(n=>{if(n===e)return!1;var r=Date.parse(n.dataset.createdAt);return!Number.isNaN(r)&&r>t})}},{key:"updateMessageTeaser",value:function(e){this.messageTeaserValue=e,this.messageTeaserValue&&this.hasTeaserTarget&&this.hasInboundMessageTeaserTarget&&this.hasInboundMessageTeaserBodyTarget&&(this.teaserMessageTargets.forEach(e=>e.classList.add("hidden")),this.inboundMessageTeaserBodyTarget.innerHTML=this.messageTeaserValue,this.inboundMessageTeaserTarget.classList.remove("hidden"),this.teaserTarget.classList.toggle("invisible",this.openValue))}},{key:"insertCarouselMessage",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.html,i=e.created_at||e.createdAt,o=(new DOMParser).parseFromString(r,"text/html").body.firstElementChild;o.classList.add("hellotext--webchat-message"),o.setAttribute("data-id",e.id),o.setAttribute("data-hellotext--webchat-target","message"),this.setMessageCreatedAt(o,i),this.localizeMessageTimestamps(o),this.clearTypingIndicator(),this.insertMessageElement(o),!1!==n.scroll&&o.scrollIntoView({behavior:"smooth"}),qn.eventEmitter.dispatch("webchat:message:received",to(to({},e),{},{body:(null===(t=o.querySelector("[data-body]"))||void 0===t?void 0:t.innerText)||""})),this.updateMessageTeaser(e.teaser),this.openValue?this.messagesAPI.markAsSeen(e.id):this.incrementUnreadCounter()}},{key:"resizeInput",value:function(){this.inputTarget.style.height="auto";var e=this.inputTarget.scrollHeight;this.inputTarget.style.height="".concat(Math.min(e,96),"px")}},{key:"sendQuickReplyMessage",value:(c=io(function*(e){var t,n,{detail:{id:r,product:i,buttonId:o,body:s,cardElement:a}}=e;null===(t=this.dismissTeaserForSession)||void 0===t||t.call(this);var c=new FormData;c.append("message[body]",s),r&&c.append("message[replied_to]",r),i&&c.append("message[product]",i),o&&c.append("message[button]",o),c.append("session",qn.session),c.append("locale",A.toString()),this.appendOpeningSequenceMessageIds(c);var l,u=this.buildMessageElement(),h=null==a||null===(n=a.querySelector("img"))||void 0===n?void 0:n.cloneNode(!0);u.querySelector("[data-body]").innerText=s,h&&(h.removeAttribute("width"),h.removeAttribute("height"),null===(l=this.messageAttachmentsContainer(u))||void 0===l||l.appendChild(h)),this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(u,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(u),u.scrollIntoView({behavior:"smooth"}),this.broadcastChannel.postMessage({type:"message:sent",element:u.outerHTML});var d=yield this.messagesAPI.create(c);if(d.failed)return clearTimeout(this.optimisticTypingTimeout),this.markMessageFailedFromResponse(d,u);var f=yield d.json();this.dispatch("set:id",{target:u,detail:f.id}),this.localizeMessageTimestamp(u.querySelector("[data-message-timestamp]"),f.created_at||f.createdAt),this.clearRevealedOpeningSequenceMessageIds();var p={id:f.id,body:s,attachments:h?[h.src]:[],replied_to:r,product:i,button:o,type:"quick_reply"};qn.eventEmitter.dispatch("webchat:message:sent",p)}),function(e){return c.apply(this,arguments)})},{key:"sendTeaserQuickReply",value:(a=io(function*(e){var t;e.preventDefault(),e.stopPropagation();var n=e.currentTarget,r=(n.dataset.value||"").trim(),i=[n.dataset.text,n.textContent].map(e=>(e||"").trim()).find(e=>e.length>0),o=r||i;if(o){null===(t=this.dismissTeaserForSession)||void 0===t||t.call(this),this.show();var s=(n.dataset.type||"").trim()||"quick_reply",a=new FormData;a.append("message[body]",o),a.append("session",qn.session),a.append("locale",A.toString()),this.appendOpeningSequenceMessageIds(a);var c=this.buildMessageElement();c.querySelector("[data-body]").innerText=o,this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(c,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(c),c.scrollIntoView({behavior:"smooth"}),this.broadcastChannel.postMessage({type:"message:sent",element:c.outerHTML}),this.typingIndicatorVisible||(clearTimeout(this.optimisticTypingTimeout),this.optimisticTypingTimeout=setTimeout(()=>{this.showOptimisticTypingIndicator()},this.optimisticTypingIndicatorWaitValue));var l=yield this.messagesAPI.create(a);if(l.failed)return clearTimeout(this.optimisticTypingTimeout),this.markMessageFailedFromResponse(l,c);var u=yield l.json();c.setAttribute("data-id",u.id),this.localizeMessageTimestamp(c.querySelector("[data-message-timestamp]"),u.created_at||u.createdAt),this.clearRevealedOpeningSequenceMessageIds(),qn.eventEmitter.dispatch("webchat:message:sent",{id:u.id,body:o,attachments:[],type:"quick_reply",teaser:{text:i||o,value:r||o,type:s}}),u.conversation&&u.conversation!==this.conversationIdValue&&(this.conversationIdValue=u.conversation,this.webChatChannel.updateSubscriptionWith(this.conversationIdValue)),this.typingIndicatorVisible&&this.resetTypingIndicatorTimer()}}),function(e){return a.apply(this,arguments)})},{key:"sendMessage",value:(s=io(function*(e){var t,n={body:this.inputTarget.value,attachments:this.files};if(0!==this.inputTarget.value.trim().length||0!==this.files.length){null===(t=this.dismissTeaserForSession)||void 0===t||t.call(this);var r=new FormData;this.inputTarget.value.trim().length>0?r.append("message[body]",this.inputTarget.value):delete n.body,this.files.forEach(e=>{r.append("message[attachments][]",e)}),r.append("session",qn.session),r.append("locale",A.toString()),this.appendOpeningSequenceMessageIds(r);var i=this.buildMessageElement();this.inputTarget.value.trim().length>0?i.querySelector("[data-body]").innerText=this.inputTarget.value:i.querySelector("[data-message-bubble]").remove();var o=this.attachmentContainerTarget.querySelectorAll("img");o.length>0&&o.forEach(e=>{var t;null===(t=this.messageAttachmentsContainer(i))||void 0===t||t.appendChild(e.cloneNode(!0))}),this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(i,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(i),i.scrollIntoView({behavior:"smooth"}),this.broadcastChannel.postMessage({type:"message:sent",element:i.outerHTML}),this.inputTarget.value="",this.resizeInput(),this.files=[],this.attachmentInputTarget.value="",this.attachmentContainerTarget.innerHTML="",this.attachmentContainerTarget.style.display="none",this.errorMessageContainerTarget.style.display="none",this.focusComposeInput(),this.typingIndicatorVisible||(clearTimeout(this.optimisticTypingTimeout),this.optimisticTypingTimeout=setTimeout(()=>{this.showOptimisticTypingIndicator()},this.optimisticTypingIndicatorWaitValue));var s=yield this.messagesAPI.create(r);if(s.failed)return clearTimeout(this.optimisticTypingTimeout),this.markMessageFailedFromResponse(s,i);var a=yield s.json();i.setAttribute("data-id",a.id),n.id=a.id,this.localizeMessageTimestamp(i.querySelector("[data-message-timestamp]"),a.created_at||a.createdAt),this.clearRevealedOpeningSequenceMessageIds(),qn.eventEmitter.dispatch("webchat:message:sent",n),a.conversation!==this.conversationIdValue&&(this.conversationIdValue=a.conversation,this.webChatChannel.updateSubscriptionWith(this.conversationIdValue)),this.typingIndicatorVisible&&this.resetTypingIndicatorTimer(),this.attachmentContainerTarget.style.display=""}else e&&e.target&&e.preventDefault()}),function(e){return s.apply(this,arguments)})},{key:"buildMessageElement",value:function(){var e=this.messageTemplateTarget.cloneNode(!0);return e.id="hellotext--webchat--".concat(this.idValue,"--message--").concat(Date.now()),e.classList.add("received"),e.style.removeProperty("display"),e.setAttribute("data-controller","hellotext--message"),e.setAttribute("data-hellotext--webchat-target","message"),this.localizeMessageTimestamp(e.querySelector("[data-message-timestamp]"),new Date),e}},{key:"focusCompose",value:function(e){var{target:t}=e,n=["button","a","input","textarea","select","label",'[role="button"]',"em-emoji-picker",'[data-hellotext--webchat--emoji-target~="popover"]','[data-controller~="hellotext--webchat--emoji"]'].join(", ");this.hasInputTarget&&!t.closest(n)&&this.focusComposeInput({moveCursorToEnd:!0})&&e.preventDefault()}},{key:"closePopoverFromHeader",value:function(e){var{target:t}=e;t.closest(".hellotext--webchat-header-channel-button, .hellotext--webchat-close-button")||(e.preventDefault(),this.closePopover())}},{key:"closePopoverOnEscape",value:function(e){var t,n;"Escape"===e.key&&this.openValue&&(e.preventDefault(),e.stopPropagation(),this.closePopover(),null===(t=this.triggerTarget)||void 0===t||null===(n=t.focus)||void 0===n||n.call(t))}},{key:"markMessageFailedFromResponse",value:(o=io(function*(e,t){var n=yield this.messageFailureReason(e);this.markMessageFailed(t,n),this.broadcastChannel.postMessage({type:"message:failed",id:t.id,reason:n})}),function(e,t){return o.apply(this,arguments)})},{key:"markMessageFailed",value:function(e,t){if(e&&(e.classList.add("failed"),t)){var n=e.querySelector("[data-message-timestamp]");n&&(n.textContent=t)}}},{key:"localizeMessageTimestamps",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.element;n&&(null!==(e=n.matches)&&void 0!==e&&e.call(n,"time[datetime][data-message-timestamp]")?[n]:Array.from((null===(t=n.querySelectorAll)||void 0===t?void 0:t.call(n,"time[datetime][data-message-timestamp]"))||[])).forEach(e=>this.localizeMessageTimestamp(e))}},{key:"localizeMessageTimestamp",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null==e?void 0:e.getAttribute("datetime");if(e&&t){var n=t instanceof Date?t:new Date(t);Number.isNaN(n.getTime())||(e.setAttribute("datetime",n.toISOString()),e.textContent=this.formatMessageTimestamp(n))}}},{key:"formatMessageTimestamp",value:function(e){return this.constructor.messageTimestampFormatterFor(A.toString()).format(e)}},{key:"messageFailureReason",value:(i=io(function*(e){var t=(null==e?void 0:e.data)||(null==e?void 0:e.response),n=(null==t?void 0:t.statusText)||"Message failed";try{var r,i=null!=t&&t.clone?t.clone():t,o=yield null==i||null===(r=i.json)||void 0===r?void 0:r.call(i),s=this.messageFailureReasonFromPayload(o);if(s)return s}catch(e){}try{var a,c=null!=t&&t.clone?t.clone():t,l=yield null==c||null===(a=c.text)||void 0===a?void 0:a.call(c);return this.messageFailureReasonFromText(l)||n}catch(e){return n}}),function(e){return i.apply(this,arguments)})},{key:"messageFailureReasonFromText",value:function(e){if("string"!=typeof e)return null;var t=e.trim();if(!t||t.startsWith("<"))return null;try{return this.messageFailureReasonFromPayload(JSON.parse(t))||t}catch(e){return t}}},{key:"messageFailureReasonFromPayload",value:function(e){var t,n,r,i,o,s;return e?[null===(t=e.error)||void 0===t?void 0:t.message,e.message,null===(n=e.errors)||void 0===n?void 0:n.message,null===(r=e.errors)||void 0===r||null===(i=r[0])||void 0===i?void 0:i.message,null===(o=e.errors)||void 0===o||null===(s=o[0])||void 0===s?void 0:s.description].find(e=>"string"==typeof e&&e.trim().length>0):null}},{key:"messageAttachmentsContainer",value:function(e){return e.querySelector("[data-attachments-container], [data-attachment-container]")}},{key:"incrementUnreadCounter",value:function(){this.unreadCounterTarget.style.display="flex";var e=(parseInt(this.unreadCounterTarget.innerText)||0)+1;this.unreadCounterTarget.innerText=Math.min(e,9)}},{key:"openAttachment",value:function(){this.attachmentInputTarget.click()}},{key:"onFileInputChange",value:function(){this.errorMessageContainerTarget.style.display="none";var e=Array.from(this.attachmentInputTarget.files);this.attachmentInputTarget.value="";var t=e.find(e=>{var t=e.type.split("/")[0];return["image","video","audio"].includes(t)?this.mediaValue[t].max_sizethis.createAttachmentElement(e)),this.focusComposeInput()}},{key:"createAttachmentElement",value:function(e){var t=this.attachmentElement();if(this.attachmentContainerTarget.style.display="",t.setAttribute("data-name",e.name),e.type.startsWith("image/")){var n=this.attachmentImageTarget.cloneNode(!0);n.src=URL.createObjectURL(e),n.style.display="block",t.appendChild(n),this.attachmentContainerTarget.appendChild(t),this.attachmentContainerTarget.style.display="flex"}else{var r=t.querySelector("main");r.style.height="5rem",r.style.borderRadius="0.375rem",r.style.backgroundColor="#e5e7eb",r.style.padding="0.25rem",t.querySelector("p[data-attachment-name]").innerText=e.name,this.attachmentContainerTarget.appendChild(t),this.attachmentContainerTarget.style.display="flex"}}},{key:"removeAttachment",value:function(e){var{currentTarget:t}=e,n=t.closest("[data-hellotext--webchat-target='attachment']");this.files=this.files.filter(e=>e.name!==n.dataset.name),this.attachmentInputTarget.value="",n.remove(),this.focusComposeInput()}},{key:"attachmentTargetDisconnected",value:function(){0===this.attachmentTargets.length&&(this.attachmentContainerTarget.innerHTML="",this.attachmentContainerTarget.style.display="none")}},{key:"attachmentElement",value:function(){var e=this.attachmentTemplateTarget.cloneNode(!0);return e.removeAttribute("hidden"),e.style.display="flex",e.setAttribute("data-hellotext--webchat-target","attachment"),e}},{key:"onEmojiSelect",value:function(e){var{detail:t}=e,n=this.inputTarget.value,r=this.inputTarget.selectionStart,i=this.inputTarget.selectionEnd;this.inputTarget.value=n.slice(0,r)+t+n.slice(i),this.inputTarget.selectionStart=this.inputTarget.selectionEnd=r+t.length,this.focusComposeInput()}},{key:"focusComposeInput",value:function(){var{moveCursorToEnd:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.shouldAutofocusCompose)return!1;if(!1===this.hasInputTarget)return!1;if(void 0===this.hasInputTarget&&!this.inputTarget)return!1;if(this.inputTarget.focus(),e&&"number"==typeof this.inputTarget.selectionStart){var t=this.inputTarget.value.length;this.inputTarget.setSelectionRange(t,t)}return!0}},{key:"byteToMegabyte",value:function(e){return Math.ceil(e/1024/1024)}},{key:"middlewares",get:function(){return[Ti(this.offsetValue),Si({padding:this.paddingValue}),Pi()]}},{key:"shouldOpenOnMount",get:function(){return"opened"===localStorage.getItem("hellotext--webchat--".concat(this.idValue))&&!this.onMobile}},{key:"shouldAutofocusCompose",get:function(){return!this.usesVirtualKeyboard}},{key:"usesVirtualKeyboard",get:function(){var e;if("undefined"==typeof navigator)return!1;var t=navigator.userAgent||"",n="MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,r=ho.test(t),i=!0===(null===(e=navigator.userAgentData)||void 0===e?void 0:e.mobile);return r||n||i||this.hasTouchOnlyPointer}},{key:"hasTouchOnlyPointer",get:function(){return"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(pointer: coarse)").matches&&window.matchMedia("(hover: none)").matches}},{key:"onMobile",get:function(){return"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(max-width: ".concat(this.fullScreenThresholdValue,"px)")).matches}}],r=[{key:"messageTimestampFormatterFor",value:function(e){var t=e||"default";return this.messageTimestampFormatters[t]||(this.messageTimestampFormatters[t]=this.buildMessageTimestampFormatter(e)),this.messageTimestampFormatters[t]}},{key:"buildMessageTimestampFormatter",value:function(e){try{return new Intl.DateTimeFormat(e||void 0,uo)}catch(e){return new Intl.DateTimeFormat(void 0,uo)}}}],n&&oo(t.prototype,n),r&&oo(t,r),Object.defineProperty(t,"prototype",{writable:!1}),p}(y.xI);po.messageTimestampFormatters={},po.values={id:String,conversationId:String,media:Object,fileSizeErrorMessage:String,placement:{type:String,default:"bottom-end"},open:{type:Boolean,default:!1},autoPlacement:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},nextPage:{type:Number,default:void 0},fullScreenThreshold:{type:Number,default:1024},typingIndicatorKeepAlive:{type:Number,default:3e4},offset:{type:Number,default:24},padding:{type:Number,default:24},optimisticTypingIndicatorWait:{type:Number,default:1e3},teaser:Object,messageTeaser:String,behaviour:Object},po.classes=["fadeOut"],po.targets=["trigger","popover","input","attachmentInput","attachmentButton","errorMessageContainer","attachmentTemplate","attachmentContainer","attachment","messageTemplate","messagesContainer","title","attachmentImage","footer","toolbar","message","unreadCounter","typingIndicator","typingIndicatorTemplate","teaser","teaserMessage","inboundMessageTeaser","inboundMessageTeaserBody","openingSequence","openingSequenceMessage"];var mo=y.lg.start();mo.register("hellotext--form",Jn),mo.register("hellotext--webchat",po),mo.register("hellotext--webchat--emoji",_i),mo.register("hellotext--message",nr),window.Hellotext=qn;const go=qn},109(e,t,n){var r=n(601),i=n.n(r),o=n(314),s=n.n(o)()(i());s.push([e.id,"form[data-hello-form] {\n position: relative;\n}\n\nform[data-hello-form] article [data-error-container] {\n font-size: 0.875rem;\n line-height: 1.25rem;\n display: none;\n}\n\nform[data-hello-form] article:has(input:invalid) [data-error-container] {\n display: block;\n}\n\nform[data-hello-form] [data-logo-container] {\n display: flex;\n justify-content: center;\n align-items: flex-end;\n position: absolute;\n right: 1rem;\n bottom: 1rem;\n}\n\nform[data-hello-form] [data-logo-container] small {\n margin: 0 0.3rem;\n}\n\nform[data-hello-form] [data-logo-container] [data-hello-brand] {\n width: 4rem;\n}\n",""]);const a=s;n.d(t,["A",0,a])},314(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,r,i,o){"string"==typeof e&&(e=[[null,e,void 0]]);var s={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),i&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=i):u[4]="".concat(i)),t.push(u))}},t}},601(e){e.exports=function(e){return e[1]}},72(e){var t=[];function n(e){for(var n=-1,r=0;r0?" ".concat(n.layer):""," {")),r+=n.css,i&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113(e){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}}};const t={};function n(r){const i=t[r];if(void 0!==i)return i.exports;const o=t[r]={id:r,exports:{}};return e[r](o,o.exports,n),o.exports}n.m=e,n.n=e=>{const t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},(()=>{const e=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;let t;n.t=function(r,i){if(1&i&&(r=this(r)),8&i)return r;if("object"==typeof r&&r){if(4&i&&r.__esModule)return r;if(16&i&&"function"==typeof r.then)return r}const o=Object.create(null);n.r(o);const s={};t=t||[null,e({}),e([]),e(e)];for(var a=2&i&&r;("object"==typeof a||"function"==typeof a)&&!~t.indexOf(a);a=e(a))Object.getOwnPropertyNames(a).forEach(e=>s[e]=()=>r[e]);return s.default=()=>r,n.d(o,s),o}})(),n.d=(e,t)=>{if(Array.isArray(t))for(var r=0;rPromise.all(Object.keys(n.f).reduce((t,r)=>(n.f[r](e,t),t),[])),n.u=e=>({160:"webchat-emoji",200:"webchat-emoji-en",437:"webchat-emoji-es"}[e]+".js"),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="Hellotext:";n.l=(r,i,o,s)=>{if(e[r])return void e[r].push(i);let a,c;if(void 0!==o){const e=document.getElementsByTagName("script");for(var l=0;l{a.onerror=a.onload=null,clearTimeout(h);const i=e[r];if(delete e[r],a.parentNode?.removeChild(a),i?.forEach(e=>e(n)),t)return t(n)},h=setTimeout(u.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=u.bind(null,a.onerror),a.onload=u.bind(null,a.onload),c&&document.head.appendChild(a)}})(),n.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{let e;n.g.importScripts&&(e=n.g.location+"");const t=n.g.document;if(!e&&t&&("SCRIPT"===t.currentScript?.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){const n=t.getElementsByTagName("script");if(n.length){let t=n.length-1;for(;t>-1&&(!e||!/^http(s?):/.test(e));)e=n[t--].src}}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{const e={792:0};n.f.j=(t,r)=>{let i=n.o(e,t)?e[t]:void 0;if(0!==i)if(i)r.push(i[2]);else{const o=new Promise((n,r)=>i=e[t]=[n,r]);r.push(i[2]=o);const s=n.p+n.u(t),a=new Error,c=r=>{if(n.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;a.message="Loading chunk "+t+" failed.\n("+e+": "+n+")",a.name="ChunkLoadError",a.type=e,a.request=n,i[1](a)}};n.l(s,c,"chunk-"+t,t)}};const t=(t,r)=>{let[i,o,s]=r;var a,c,l=0;if(i.some(t=>0!==e[t])){for(a in o)n.o(o,a)&&(n.m[a]=o[a]);s&&s(n)}for(t&&t(r);l(()=>{"use strict";var e={891(e,t,n){n.d(t,{lg:()=>G,xI:()=>ie});class r{constructor(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}connect(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)}disconnect(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)}bindingConnected(e){this.unorderedBindings.add(e)}bindingDisconnected(e){this.unorderedBindings.delete(e)}handleEvent(e){const t=function(e){if("immediatePropagationStopped"in e)return e;{const{stopImmediatePropagation:t}=e;return Object.assign(e,{immediatePropagationStopped:!1,stopImmediatePropagation(){this.immediatePropagationStopped=!0,t.call(this)}})}}(e);for(const e of this.bindings){if(t.immediatePropagationStopped)break;e.handleEvent(t)}}hasBindings(){return this.unorderedBindings.size>0}get bindings(){return Array.from(this.unorderedBindings).sort((e,t)=>{const n=e.index,r=t.index;return nr?1:0})}}class i{constructor(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}start(){this.started||(this.started=!0,this.eventListeners.forEach(e=>e.connect()))}stop(){this.started&&(this.started=!1,this.eventListeners.forEach(e=>e.disconnect()))}get eventListeners(){return Array.from(this.eventListenerMaps.values()).reduce((e,t)=>e.concat(Array.from(t.values())),[])}bindingConnected(e){this.fetchEventListenerForBinding(e).bindingConnected(e)}bindingDisconnected(e,t=!1){this.fetchEventListenerForBinding(e).bindingDisconnected(e),t&&this.clearEventListenersForBinding(e)}handleError(e,t,n={}){this.application.handleError(e,`Error ${t}`,n)}clearEventListenersForBinding(e){const t=this.fetchEventListenerForBinding(e);t.hasBindings()||(t.disconnect(),this.removeMappedEventListenerFor(e))}removeMappedEventListenerFor(e){const{eventTarget:t,eventName:n,eventOptions:r}=e,i=this.fetchEventListenerMapForEventTarget(t),o=this.cacheKey(n,r);i.delete(o),0==i.size&&this.eventListenerMaps.delete(t)}fetchEventListenerForBinding(e){const{eventTarget:t,eventName:n,eventOptions:r}=e;return this.fetchEventListener(t,n,r)}fetchEventListener(e,t,n){const r=this.fetchEventListenerMapForEventTarget(e),i=this.cacheKey(t,n);let o=r.get(i);return o||(o=this.createEventListener(e,t,n),r.set(i,o)),o}createEventListener(e,t,n){const i=new r(e,t,n);return this.started&&i.connect(),i}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t}cacheKey(e,t){const n=[e];return Object.keys(t).sort().forEach(e=>{n.push(`${t[e]?"":"!"}${e}`)}),n.join(":")}}const o={stop:({event:e,value:t})=>(t&&e.stopPropagation(),!0),prevent:({event:e,value:t})=>(t&&e.preventDefault(),!0),self:({event:e,value:t,element:n})=>!t||n===e.target},a=/^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;function s(e){return e.replace(/(?:[_-])([a-z0-9])/g,(e,t)=>t.toUpperCase())}function c(e){return s(e.replace(/--/g,"-").replace(/__/g,"_"))}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function u(e){return e.replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`)}function h(e){return null!=e}function f(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const d=["meta","ctrl","alt","shift"];class p{constructor(e,t,n,r){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||function(e){const t=e.tagName.toLowerCase();if(t in m)return m[t](e)}(e)||g("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||g("missing identifier"),this.methodName=n.methodName||g("missing method name"),this.keyFilter=n.keyFilter||"",this.schema=r}static forToken(e,t){return new this(e.element,e.index,function(e){const t=e.trim().match(a)||[];let n=t[2],r=t[3];return r&&!["keydown","keyup","keypress"].includes(n)&&(n+=`.${r}`,r=""),{eventTarget:(i=t[4],"window"==i?window:"document"==i?document:void 0),eventName:n,eventOptions:t[7]?(o=t[7],o.split(":").reduce((e,t)=>Object.assign(e,{[t.replace(/^!/,"")]:!/^!/.test(t)}),{})):{},identifier:t[5],methodName:t[6],keyFilter:t[1]||r};var i,o}(e.content),t)}toString(){const e=this.keyFilter?`.${this.keyFilter}`:"",t=this.eventTargetName?`@${this.eventTargetName}`:"";return`${this.eventName}${e}${t}->${this.identifier}#${this.methodName}`}shouldIgnoreKeyboardEvent(e){if(!this.keyFilter)return!1;const t=this.keyFilter.split("+");if(this.keyFilterDissatisfied(e,t))return!0;const n=t.filter(e=>!d.includes(e))[0];return!!n&&(f(this.keyMappings,n)||g(`contains unknown key filter: ${this.keyFilter}`),this.keyMappings[n].toLowerCase()!==e.key.toLowerCase())}shouldIgnoreMouseEvent(e){if(!this.keyFilter)return!1;const t=[this.keyFilter];return!!this.keyFilterDissatisfied(e,t)}get params(){const e={},t=new RegExp(`^data-${this.identifier}-(.+)-param$`,"i");for(const{name:n,value:r}of Array.from(this.element.attributes)){const i=n.match(t),o=i&&i[1];o&&(e[s(o)]=y(r))}return e}get eventTargetName(){return(e=this.eventTarget)==window?"window":e==document?"document":void 0;var e}get keyMappings(){return this.schema.keyMappings}keyFilterDissatisfied(e,t){const[n,r,i,o]=d.map(e=>t.includes(e));return e.metaKey!==n||e.ctrlKey!==r||e.altKey!==i||e.shiftKey!==o}}const m={a:()=>"click",button:()=>"click",form:()=>"submit",details:()=>"toggle",input:e=>"submit"==e.getAttribute("type")?"click":"input",select:()=>"change",textarea:()=>"input"};function g(e){throw new Error(e)}function y(e){try{return JSON.parse(e)}catch(t){return e}}class v{constructor(e,t){this.context=e,this.action=t}get index(){return this.action.index}get eventTarget(){return this.action.eventTarget}get eventOptions(){return this.action.eventOptions}get identifier(){return this.context.identifier}handleEvent(e){const t=this.prepareActionEvent(e);this.willBeInvokedByEvent(e)&&this.applyEventModifiers(t)&&this.invokeWithEvent(t)}get eventName(){return this.action.eventName}get method(){const e=this.controller[this.methodName];if("function"==typeof e)return e;throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`)}applyEventModifiers(e){const{element:t}=this.action,{actionDescriptorFilters:n}=this.context.application,{controller:r}=this.context;let i=!0;for(const[o,a]of Object.entries(this.eventOptions))if(o in n){const s=n[o];i=i&&s({name:o,value:a,event:e,element:t,controller:r})}return i}prepareActionEvent(e){return Object.assign(e,{params:this.action.params})}invokeWithEvent(e){const{target:t,currentTarget:n}=e;try{this.method.call(this.controller,e),this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:n,action:this.methodName})}catch(t){const{identifier:n,controller:r,element:i,index:o}=this,a={identifier:n,controller:r,element:i,index:o,event:e};this.context.handleError(t,`invoking action "${this.action}"`,a)}}willBeInvokedByEvent(e){const t=e.target;return!(e instanceof KeyboardEvent&&this.action.shouldIgnoreKeyboardEvent(e))&&!(e instanceof MouseEvent&&this.action.shouldIgnoreMouseEvent(e))&&(this.element===t||(t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)))}get controller(){return this.context.controller}get methodName(){return this.action.methodName}get element(){return this.scope.element}get scope(){return this.context.scope}}class b{constructor(e,t){this.mutationObserverInit={attributes:!0,childList:!0,subtree:!0},this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver(e=>this.processMutations(e))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,this.mutationObserverInit),this.refresh())}pause(e){this.started&&(this.mutationObserver.disconnect(),this.started=!1),e(),this.started||(this.mutationObserver.observe(this.element,this.mutationObserverInit),this.started=!0)}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started){const e=new Set(this.matchElementsInTree());for(const t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(const t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){"attributes"==e.type?this.processAttributeChange(e.target,e.attributeName):"childList"==e.type&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))}processAttributeChange(e,t){this.elements.has(e)?this.delegate.elementAttributeChanged&&this.matchElement(e)?this.delegate.elementAttributeChanged(e,t):this.removeElement(e):this.matchElement(e)&&this.addElement(e)}processRemovedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.processTree(e,this.removeElement)}}processAddedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.elementIsActive(e)&&this.processTree(e,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(const n of this.matchElementsInTree(e))t.call(this,n)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected==this.element.isConnected&&this.element.contains(e)}addElement(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))}removeElement(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))}}class w{constructor(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new b(e,this)}get element(){return this.elementObserver.element}get selector(){return`[${this.attributeName}]`}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get started(){return this.elementObserver.started}matchElement(e){return e.hasAttribute(this.attributeName)}matchElementsInTree(e){const t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)}elementMatched(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)}elementUnmatched(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)}elementAttributeChanged(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)}}function O(e,t){let n=e.get(t);return n||(n=new Set,e.set(t,n)),n}class T{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){return Array.from(this.valuesByKey.values()).reduce((e,t)=>e.concat(Array.from(t)),[])}get size(){return Array.from(this.valuesByKey.values()).reduce((e,t)=>e+t.size,0)}add(e,t){!function(e,t,n){O(e,t).add(n)}(this.valuesByKey,e,t)}delete(e,t){!function(e,t,n){O(e,t).delete(n),function(e,t){const n=e.get(t);null!=n&&0==n.size&&e.delete(t)}(e,t)}(this.valuesByKey,e,t)}has(e,t){const n=this.valuesByKey.get(e);return null!=n&&n.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){return Array.from(this.valuesByKey.values()).some(t=>t.has(e))}getValuesForKey(e){const t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter(([t,n])=>n.has(e)).map(([e,t])=>e)}}class S{constructor(e,t,n,r){this._selector=t,this.details=r,this.elementObserver=new b(e,this),this.delegate=n,this.matchesByElement=new T}get started(){return this.elementObserver.started}get selector(){return this._selector}set selector(e){this._selector=e,this.refresh()}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get element(){return this.elementObserver.element}matchElement(e){const{selector:t}=this;if(t){const n=e.matches(t);return this.delegate.selectorMatchElement?n&&this.delegate.selectorMatchElement(e,this.details):n}return!1}matchElementsInTree(e){const{selector:t}=this;if(t){const n=this.matchElement(e)?[e]:[],r=Array.from(e.querySelectorAll(t)).filter(e=>this.matchElement(e));return n.concat(r)}return[]}elementMatched(e){const{selector:t}=this;t&&this.selectorMatched(e,t)}elementUnmatched(e){const t=this.matchesByElement.getKeysForValue(e);for(const n of t)this.selectorUnmatched(e,n)}elementAttributeChanged(e,t){const{selector:n}=this;if(n){const t=this.matchElement(e),r=this.matchesByElement.has(n,e);t&&!r?this.selectorMatched(e,n):!t&&r&&this.selectorUnmatched(e,n)}}selectorMatched(e,t){this.delegate.selectorMatched(e,t,this.details),this.matchesByElement.add(t,e)}selectorUnmatched(e,t){this.delegate.selectorUnmatched(e,t,this.details),this.matchesByElement.delete(t,e)}}class k{constructor(e,t){this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(e=>this.processMutations(e))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,attributeOldValue:!0}),this.refresh())}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started)for(const e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){const t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){const n=this.delegate.getStringMapKeyForAttribute(e);if(null!=n){this.stringMap.has(e)||this.stringMapKeyAdded(n,e);const r=this.element.getAttribute(e);if(this.stringMap.get(e)!=r&&this.stringMapValueChanged(r,n,t),null==r){const t=this.stringMap.get(e);this.stringMap.delete(e),t&&this.stringMapKeyRemoved(n,e,t)}else this.stringMap.set(e,r)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,n){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,n)}stringMapKeyRemoved(e,t,n){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,n)}get knownAttributeNames(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))}get currentAttributeNames(){return Array.from(this.element.attributes).map(e=>e.name)}get recordedAttributeNames(){return Array.from(this.stringMap.keys())}}class E{constructor(e,t,n){this.attributeObserver=new w(e,t,this),this.delegate=n,this.tokensByElement=new T}get started(){return this.attributeObserver.started}start(){this.attributeObserver.start()}pause(e){this.attributeObserver.pause(e)}stop(){this.attributeObserver.stop()}refresh(){this.attributeObserver.refresh()}get element(){return this.attributeObserver.element}get attributeName(){return this.attributeObserver.attributeName}elementMatchedAttribute(e){this.tokensMatched(this.readTokensForElement(e))}elementAttributeValueChanged(e){const[t,n]=this.refreshTokensForElement(e);this.tokensUnmatched(t),this.tokensMatched(n)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach(e=>this.tokenMatched(e))}tokensUnmatched(e){e.forEach(e=>this.tokenUnmatched(e))}tokenMatched(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)}tokenUnmatched(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)}refreshTokensForElement(e){const t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),r=function(e,t){const n=Math.max(e.length,t.length);return Array.from({length:n},(n,r)=>[e[r],t[r]])}(t,n).findIndex(([e,t])=>{return r=t,!((n=e)&&r&&n.index==r.index&&n.content==r.content);var n,r});return-1==r?[[],[]]:[t.slice(r),n.slice(r)]}readTokensForElement(e){const t=this.attributeName;return function(e,t,n){return e.trim().split(/\s+/).filter(e=>e.length).map((e,r)=>({element:t,attributeName:n,content:e,index:r}))}(e.getAttribute(t)||"",e,t)}}class C{constructor(e,t,n){this.tokenListObserver=new E(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}get started(){return this.tokenListObserver.started}start(){this.tokenListObserver.start()}stop(){this.tokenListObserver.stop()}refresh(){this.tokenListObserver.refresh()}get element(){return this.tokenListObserver.element}get attributeName(){return this.tokenListObserver.attributeName}tokenMatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))}tokenUnmatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))}fetchParseResultForToken(e){let t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t}fetchValuesByTokenForElement(e){let t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t}parseToken(e){try{return{value:this.delegate.parseValueForToken(e)}}catch(e){return{error:e}}}}class P{constructor(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}start(){this.valueListObserver||(this.valueListObserver=new C(this.element,this.actionAttribute,this),this.valueListObserver.start())}stop(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())}get element(){return this.context.element}get identifier(){return this.context.identifier}get actionAttribute(){return this.schema.actionAttribute}get schema(){return this.context.schema}get bindings(){return Array.from(this.bindingsByAction.values())}connectAction(e){const t=new v(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)}disconnectAction(e){const t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))}disconnectAllActions(){this.bindings.forEach(e=>this.delegate.bindingDisconnected(e,!0)),this.bindingsByAction.clear()}parseValueForToken(e){const t=p.forToken(e,this.schema);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}}class A{constructor(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new k(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap}start(){this.stringMapObserver.start(),this.invokeChangedCallbacksForDefaultValues()}stop(){this.stringMapObserver.stop()}get element(){return this.context.element}get controller(){return this.context.controller}getStringMapKeyForAttribute(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name}stringMapKeyAdded(e,t){const n=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,n.writer(this.receiver[e]),n.writer(n.defaultValue))}stringMapValueChanged(e,t,n){const r=this.valueDescriptorNameMap[t];null!==e&&(null===n&&(n=r.writer(r.defaultValue)),this.invokeChangedCallback(t,e,n))}stringMapKeyRemoved(e,t,n){const r=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,r.writer(this.receiver[e]),n):this.invokeChangedCallback(e,r.writer(r.defaultValue),n)}invokeChangedCallbacksForDefaultValues(){for(const{key:e,name:t,defaultValue:n,writer:r}of this.valueDescriptors)null==n||this.controller.data.has(e)||this.invokeChangedCallback(t,r(n),void 0)}invokeChangedCallback(e,t,n){const r=`${e}Changed`,i=this.receiver[r];if("function"==typeof i){const r=this.valueDescriptorNameMap[e];try{const e=r.reader(t);let o=n;n&&(o=r.reader(n)),i.call(this.receiver,e,o)}catch(e){throw e instanceof TypeError&&(e.message=`Stimulus Value "${this.context.identifier}.${r.name}" - ${e.message}`),e}}}get valueDescriptors(){const{valueDescriptorMap:e}=this;return Object.keys(e).map(t=>e[t])}get valueDescriptorNameMap(){const e={};return Object.keys(this.valueDescriptorMap).forEach(t=>{const n=this.valueDescriptorMap[t];e[n.name]=n}),e}hasValue(e){const t=`has${l(this.valueDescriptorNameMap[e].name)}`;return this.receiver[t]}}class j{constructor(e,t){this.context=e,this.delegate=t,this.targetsByName=new T}start(){this.tokenListObserver||(this.tokenListObserver=new E(this.element,this.attributeName,this),this.tokenListObserver.start())}stop(){this.tokenListObserver&&(this.disconnectAllTargets(),this.tokenListObserver.stop(),delete this.tokenListObserver)}tokenMatched({element:e,content:t}){this.scope.containsElement(e)&&this.connectTarget(e,t)}tokenUnmatched({element:e,content:t}){this.disconnectTarget(e,t)}connectTarget(e,t){var n;this.targetsByName.has(t,e)||(this.targetsByName.add(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause(()=>this.delegate.targetConnected(e,t)))}disconnectTarget(e,t){var n;this.targetsByName.has(t,e)&&(this.targetsByName.delete(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause(()=>this.delegate.targetDisconnected(e,t)))}disconnectAllTargets(){for(const e of this.targetsByName.keys)for(const t of this.targetsByName.getValuesForKey(e))this.disconnectTarget(t,e)}get attributeName(){return`data-${this.context.identifier}-target`}get element(){return this.context.element}get scope(){return this.context.scope}}function x(e,t){const n=M(e);return Array.from(n.reduce((e,n)=>(function(e,t){const n=e[t];return Array.isArray(n)?n:[]}(n,t).forEach(t=>e.add(t)),e),new Set))}function M(e){const t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}class _{constructor(e,t){this.started=!1,this.context=e,this.delegate=t,this.outletsByName=new T,this.outletElementsByName=new T,this.selectorObserverMap=new Map,this.attributeObserverMap=new Map}start(){this.started||(this.outletDefinitions.forEach(e=>{this.setupSelectorObserverForOutlet(e),this.setupAttributeObserverForOutlet(e)}),this.started=!0,this.dependentContexts.forEach(e=>e.refresh()))}refresh(){this.selectorObserverMap.forEach(e=>e.refresh()),this.attributeObserverMap.forEach(e=>e.refresh())}stop(){this.started&&(this.started=!1,this.disconnectAllOutlets(),this.stopSelectorObservers(),this.stopAttributeObservers())}stopSelectorObservers(){this.selectorObserverMap.size>0&&(this.selectorObserverMap.forEach(e=>e.stop()),this.selectorObserverMap.clear())}stopAttributeObservers(){this.attributeObserverMap.size>0&&(this.attributeObserverMap.forEach(e=>e.stop()),this.attributeObserverMap.clear())}selectorMatched(e,t,{outletName:n}){const r=this.getOutlet(e,n);r&&this.connectOutlet(r,e,n)}selectorUnmatched(e,t,{outletName:n}){const r=this.getOutletFromMap(e,n);r&&this.disconnectOutlet(r,e,n)}selectorMatchElement(e,{outletName:t}){const n=this.selector(t),r=this.hasOutlet(e,t),i=e.matches(`[${this.schema.controllerAttribute}~=${t}]`);return!!n&&r&&i&&e.matches(n)}elementMatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementAttributeValueChanged(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementUnmatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}connectOutlet(e,t,n){var r;this.outletElementsByName.has(n,t)||(this.outletsByName.add(n,e),this.outletElementsByName.add(n,t),null===(r=this.selectorObserverMap.get(n))||void 0===r||r.pause(()=>this.delegate.outletConnected(e,t,n)))}disconnectOutlet(e,t,n){var r;this.outletElementsByName.has(n,t)&&(this.outletsByName.delete(n,e),this.outletElementsByName.delete(n,t),null===(r=this.selectorObserverMap.get(n))||void 0===r||r.pause(()=>this.delegate.outletDisconnected(e,t,n)))}disconnectAllOutlets(){for(const e of this.outletElementsByName.keys)for(const t of this.outletElementsByName.getValuesForKey(e))for(const n of this.outletsByName.getValuesForKey(e))this.disconnectOutlet(n,t,e)}updateSelectorObserverForOutlet(e){const t=this.selectorObserverMap.get(e);t&&(t.selector=this.selector(e))}setupSelectorObserverForOutlet(e){const t=this.selector(e),n=new S(document.body,t,this,{outletName:e});this.selectorObserverMap.set(e,n),n.start()}setupAttributeObserverForOutlet(e){const t=this.attributeNameForOutletName(e),n=new w(this.scope.element,t,this);this.attributeObserverMap.set(e,n),n.start()}selector(e){return this.scope.outlets.getSelectorForOutletName(e)}attributeNameForOutletName(e){return this.scope.schema.outletAttributeForScope(this.identifier,e)}getOutletNameFromOutletAttributeName(e){return this.outletDefinitions.find(t=>this.attributeNameForOutletName(t)===e)}get outletDependencies(){const e=new T;return this.router.modules.forEach(t=>{x(t.definition.controllerConstructor,"outlets").forEach(n=>e.add(n,t.identifier))}),e}get outletDefinitions(){return this.outletDependencies.getKeysForValue(this.identifier)}get dependentControllerIdentifiers(){return this.outletDependencies.getValuesForKey(this.identifier)}get dependentContexts(){const e=this.dependentControllerIdentifiers;return this.router.contexts.filter(t=>e.includes(t.identifier))}hasOutlet(e,t){return!!this.getOutlet(e,t)||!!this.getOutletFromMap(e,t)}getOutlet(e,t){return this.application.getControllerForElementAndIdentifier(e,t)}getOutletFromMap(e,t){return this.outletsByName.getValuesForKey(t).find(t=>t.element===e)}get scope(){return this.context.scope}get schema(){return this.context.schema}get identifier(){return this.context.identifier}get application(){return this.context.application}get router(){return this.application.router}}class I{constructor(e,t){this.logDebugActivity=(e,t={})=>{const{identifier:n,controller:r,element:i}=this;t=Object.assign({identifier:n,controller:r,element:i},t),this.application.logDebugActivity(this.identifier,e,t)},this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new P(this,this.dispatcher),this.valueObserver=new A(this,this.controller),this.targetObserver=new j(this,this),this.outletObserver=new _(this,this);try{this.controller.initialize(),this.logDebugActivity("initialize")}catch(e){this.handleError(e,"initializing controller")}}connect(){this.bindingObserver.start(),this.valueObserver.start(),this.targetObserver.start(),this.outletObserver.start();try{this.controller.connect(),this.logDebugActivity("connect")}catch(e){this.handleError(e,"connecting controller")}}refresh(){this.outletObserver.refresh()}disconnect(){try{this.controller.disconnect(),this.logDebugActivity("disconnect")}catch(e){this.handleError(e,"disconnecting controller")}this.outletObserver.stop(),this.targetObserver.stop(),this.valueObserver.stop(),this.bindingObserver.stop()}get application(){return this.module.application}get identifier(){return this.module.identifier}get schema(){return this.application.schema}get dispatcher(){return this.application.dispatcher}get element(){return this.scope.element}get parentElement(){return this.element.parentElement}handleError(e,t,n={}){const{identifier:r,controller:i,element:o}=this;n=Object.assign({identifier:r,controller:i,element:o},n),this.application.handleError(e,`Error ${t}`,n)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}outletConnected(e,t,n){this.invokeControllerMethod(`${c(n)}OutletConnected`,e,t)}outletDisconnected(e,t,n){this.invokeControllerMethod(`${c(n)}OutletDisconnected`,e,t)}invokeControllerMethod(e,...t){const n=this.controller;"function"==typeof n[e]&&n[e](...t)}}const L="function"==typeof Object.getOwnPropertySymbols?e=>[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)]:Object.getOwnPropertyNames,N=(()=>{function e(e){function t(){return Reflect.construct(e,arguments,new.target)}return t.prototype=Object.create(e.prototype,{constructor:{value:t}}),Reflect.setPrototypeOf(t,e),t}try{return function(){const t=e(function(){this.a.call(this)});t.prototype.a=function(){},new t}(),e}catch(e){return e=>class extends e{}}})();class R{constructor(e,t){this.application=e,this.definition=function(e){return{identifier:e.identifier,controllerConstructor:(t=e.controllerConstructor,function(e,t){const n=N(e),r=function(e,t){return L(t).reduce((n,r)=>{const i=function(e,t,n){const r=Object.getOwnPropertyDescriptor(e,n);if(!r||!("value"in r)){const e=Object.getOwnPropertyDescriptor(t,n).value;return r&&(e.get=r.get||e.get,e.set=r.set||e.set),e}}(e,t,r);return i&&Object.assign(n,{[r]:i}),n},{})}(e.prototype,t);return Object.defineProperties(n.prototype,r),n}(t,function(e){return x(e,"blessings").reduce((t,n)=>{const r=n(e);for(const e in r){const n=t[e]||{};t[e]=Object.assign(n,r[e])}return t},{})}(t)))};var t}(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}get identifier(){return this.definition.identifier}get controllerConstructor(){return this.definition.controllerConstructor}get contexts(){return Array.from(this.connectedContexts)}connectContextForScope(e){const t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()}disconnectContextForScope(e){const t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())}fetchContextForScope(e){let t=this.contextsByScope.get(e);return t||(t=new I(this,e),this.contextsByScope.set(e,t)),t}}class D{constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){return(this.data.get(this.getDataKey(e))||"").match(/[^\s]+/g)||[]}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}}class F{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){const t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){const n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)}has(e){const t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){const t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}return!1}getAttributeNameForKey(e){return`data-${this.identifier}-${u(e)}`}}class B{constructor(e){this.warnedKeysByObject=new WeakMap,this.logger=e}warn(e,t,n){let r=this.warnedKeysByObject.get(e);r||(r=new Set,this.warnedKeysByObject.set(e,r)),r.has(t)||(r.add(t),this.logger.warn(n,e))}}function V(e,t){return`[${e}~="${t}"]`}class q{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce((e,t)=>e||this.findTarget(t)||this.findLegacyTarget(t),void 0)}findAll(...e){return e.reduce((e,t)=>[...e,...this.findAllTargets(t),...this.findAllLegacyTargets(t)],[])}findTarget(e){const t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){const t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){return V(this.schema.targetAttributeForScope(this.identifier),e)}findLegacyTarget(e){const t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){const t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map(t=>this.deprecate(t,e))}getLegacySelectorForTargetName(e){const t=`${this.identifier}.${e}`;return V(this.schema.targetAttribute,t)}deprecate(e,t){if(e){const{identifier:n}=this,r=this.schema.targetAttribute,i=this.schema.targetAttributeForScope(n);this.guide.warn(e,`target:${t}`,`Please replace ${r}="${n}.${t}" with ${i}="${t}". The ${r} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}}class U{constructor(e,t){this.scope=e,this.controllerElement=t}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce((e,t)=>e||this.findOutlet(t),void 0)}findAll(...e){return e.reduce((e,t)=>[...e,...this.findAllOutlets(t)],[])}getSelectorForOutletName(e){const t=this.schema.outletAttributeForScope(this.identifier,e);return this.controllerElement.getAttribute(t)}findOutlet(e){const t=this.getSelectorForOutletName(e);if(t)return this.findElement(t,e)}findAllOutlets(e){const t=this.getSelectorForOutletName(e);return t?this.findAllElements(t,e):[]}findElement(e,t){return this.scope.queryElements(e).filter(n=>this.matchesElement(n,e,t))[0]}findAllElements(e,t){return this.scope.queryElements(e).filter(n=>this.matchesElement(n,e,t))}matchesElement(e,t,n){const r=e.getAttribute(this.scope.schema.controllerAttribute)||"";return e.matches(t)&&r.split(" ").includes(n)}}class z{constructor(e,t,n,r){this.targets=new q(this),this.classes=new D(this),this.data=new F(this),this.containsElement=e=>e.closest(this.controllerSelector)===this.element,this.schema=e,this.element=t,this.identifier=n,this.guide=new B(r),this.outlets=new U(this.documentScope,t)}findElement(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)}findAllElements(e){return[...this.element.matches(e)?[this.element]:[],...this.queryElements(e).filter(this.containsElement)]}queryElements(e){return Array.from(this.element.querySelectorAll(e))}get controllerSelector(){return V(this.schema.controllerAttribute,this.identifier)}get isDocumentScope(){return this.element===document.documentElement}get documentScope(){return this.isDocumentScope?this:new z(this.schema,document.documentElement,this.identifier,this.guide.logger)}}class H{constructor(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new C(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}start(){this.valueListObserver.start()}stop(){this.valueListObserver.stop()}get controllerAttribute(){return this.schema.controllerAttribute}parseValueForToken(e){const{element:t,content:n}=e;return this.parseValueForElementAndIdentifier(t,n)}parseValueForElementAndIdentifier(e,t){const n=this.fetchScopesByIdentifierForElement(e);let r=n.get(t);return r||(r=this.delegate.createScopeForElementAndIdentifier(e,t),n.set(t,r)),r}elementMatchedValue(e,t){const n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),1==n&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){const n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),1==n&&this.delegate.scopeDisconnected(t))}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t}}class W{constructor(e){this.application=e,this.scopeObserver=new H(this.element,this.schema,this),this.scopesByIdentifier=new T,this.modulesByIdentifier=new Map}get element(){return this.application.element}get schema(){return this.application.schema}get logger(){return this.application.logger}get controllerAttribute(){return this.schema.controllerAttribute}get modules(){return Array.from(this.modulesByIdentifier.values())}get contexts(){return this.modules.reduce((e,t)=>e.concat(t.contexts),[])}start(){this.scopeObserver.start()}stop(){this.scopeObserver.stop()}loadDefinition(e){this.unloadIdentifier(e.identifier);const t=new R(this.application,e);this.connectModule(t);const n=e.controllerConstructor.afterLoad;n&&n.call(e.controllerConstructor,e.identifier,this.application)}unloadIdentifier(e){const t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){const n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find(t=>t.element==e)}proposeToConnectScopeForElementAndIdentifier(e,t){const n=this.scopeObserver.parseValueForElementAndIdentifier(e,t);n?this.scopeObserver.elementMatchedValue(n.element,n):console.error(`Couldn't find or create scope for identifier: "${t}" and element:`,e)}handleError(e,t,n){this.application.handleError(e,t,n)}createScopeForElementAndIdentifier(e,t){return new z(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach(t=>e.connectContextForScope(t))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach(t=>e.disconnectContextForScope(t))}}const $={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:e=>`data-${e}-target`,outletAttributeForScope:(e,t)=>`data-${e}-${t}-outlet`,keyMappings:Object.assign(Object.assign({enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"},K("abcdefghijklmnopqrstuvwxyz".split("").map(e=>[e,e]))),K("0123456789".split("").map(e=>[e,e])))};function K(e){return e.reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n}),{})}class G{constructor(e=document.documentElement,t=$){this.logger=console,this.debug=!1,this.logDebugActivity=(e,t,n={})=>{this.debug&&this.logFormattedMessage(e,t,n)},this.element=e,this.schema=t,this.dispatcher=new i(this),this.router=new W(this),this.actionDescriptorFilters=Object.assign({},o)}static start(e,t){const n=new this(e,t);return n.start(),n}async start(){await new Promise(e=>{"loading"==document.readyState?document.addEventListener("DOMContentLoaded",()=>e()):e()}),this.logDebugActivity("application","starting"),this.dispatcher.start(),this.router.start(),this.logDebugActivity("application","start")}stop(){this.logDebugActivity("application","stopping"),this.dispatcher.stop(),this.router.stop(),this.logDebugActivity("application","stop")}register(e,t){this.load({identifier:e,controllerConstructor:t})}registerActionOption(e,t){this.actionDescriptorFilters[e]=t}load(e,...t){(Array.isArray(e)?e:[e,...t]).forEach(e=>{e.controllerConstructor.shouldLoad&&this.router.loadDefinition(e)})}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach(e=>this.router.unloadIdentifier(e))}get controllers(){return this.router.contexts.map(e=>e.controller)}getControllerForElementAndIdentifier(e,t){const n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null}handleError(e,t,n){var r;this.logger.error("%s\n\n%o\n\n%o",t,e,n),null===(r=window.onerror)||void 0===r||r.call(window,t,"",0,0,e)}logFormattedMessage(e,t,n={}){n=Object.assign({application:this},n),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},n)),this.logger.groupEnd()}}function J(e,t,n){return e.application.getControllerForElementAndIdentifier(t,n)}function Y(e,t,n){let r=J(e,t,n);return r||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,n),r=J(e,t,n),r||void 0)}function Z([e,t],n){return function(e){const{token:t,typeDefinition:n}=e,r=`${u(t)}-value`,i=function(e){const{controller:t,token:n,typeDefinition:r}=e,i=function(e){const{controller:t,token:n,typeObject:r}=e,i=h(r.type),o=h(r.default),a=i&&o,s=i&&!o,c=!i&&o,l=X(r.type),u=Q(e.typeObject.default);if(s)return l;if(c)return u;if(l!==u)throw new Error(`The specified default value for the Stimulus Value "${t?`${t}.${n}`:n}" must match the defined type "${l}". The provided default value of "${r.default}" is of type "${u}".`);return a?l:void 0}({controller:t,token:n,typeObject:r}),o=Q(r),a=X(r),s=i||o||a;if(s)return s;throw new Error(`Unknown value type "${t?`${t}.${r}`:n}" for "${n}" value`)}(e);return{type:i,key:r,name:s(r),get defaultValue(){return function(e){const t=X(e);if(t)return ee[t];const n=f(e,"default"),r=f(e,"type"),i=e;if(n)return i.default;if(r){const{type:e}=i,t=X(e);if(t)return ee[t]}return e}(n)},get hasCustomDefaultValue(){return void 0!==Q(n)},reader:te[i],writer:ne[i]||ne.default}}({controller:n,token:e,typeDefinition:t})}function X(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function Q(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}return Array.isArray(e)?"array":"[object Object]"===Object.prototype.toString.call(e)?"object":void 0}const ee={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},te={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${e}" of type "${Q(t)}"`);return t},boolean:e=>!("0"==e||"false"==String(e).toLowerCase()),number:e=>Number(e.replace(/_/g,"")),object(e){const t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${e}" of type "${Q(t)}"`);return t},string:e=>e},ne={default:function(e){return`${e}`},array:re,object:re};function re(e){return JSON.stringify(e)}class ie{constructor(e){this.context=e}static get shouldLoad(){return!0}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:r=this.identifier,bubbles:i=!0,cancelable:o=!0}={}){const a=new CustomEvent(r?`${r}:${e}`:e,{detail:n,bubbles:i,cancelable:o});return t.dispatchEvent(a),a}}ie.blessings=[function(e){return x(e,"classes").reduce((e,t)=>{return Object.assign(e,(n=t,{[`${n}Class`]:{get(){const{classes:e}=this;if(e.has(n))return e.get(n);{const t=e.getAttributeName(n);throw new Error(`Missing attribute "${t}"`)}}},[`${n}Classes`]:{get(){return this.classes.getAll(n)}},[`has${l(n)}Class`]:{get(){return this.classes.has(n)}}}));var n},{})},function(e){return x(e,"targets").reduce((e,t)=>{return Object.assign(e,(n=t,{[`${n}Target`]:{get(){const e=this.targets.find(n);if(e)return e;throw new Error(`Missing target element "${n}" for "${this.identifier}" controller`)}},[`${n}Targets`]:{get(){return this.targets.findAll(n)}},[`has${l(n)}Target`]:{get(){return this.targets.has(n)}}}));var n},{})},function(e){const t=function(e,t){return M(e).reduce((e,n)=>(e.push(...function(e,t){const n=e[t];return n?Object.keys(n).map(e=>[e,n[e]]):[]}(n,t)),e),[])}(e,"values"),n={valueDescriptorMap:{get(){return t.reduce((e,t)=>{const n=Z(t,this.identifier),r=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[r]:n})},{})}}};return t.reduce((e,t)=>Object.assign(e,function(e){const t=Z(e,void 0),{key:n,name:r,reader:i,writer:o}=t;return{[r]:{get(){const e=this.data.get(n);return null!==e?i(e):t.defaultValue},set(e){void 0===e?this.data.delete(n):this.data.set(n,o(e))}},[`has${l(r)}`]:{get(){return this.data.has(n)||t.hasCustomDefaultValue}}}}(t)),n)},function(e){return x(e,"outlets").reduce((e,t)=>Object.assign(e,function(e){const t=c(e);return{[`${t}Outlet`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t){const n=Y(this,t,e);if(n)return n;throw new Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}Outlets`]:{get(){const t=this.outlets.findAll(e);return t.length>0?t.map(t=>{const n=Y(this,t,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,t)}).filter(e=>e):[]}},[`${t}OutletElement`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t)return t;throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${l(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}(t)),{})}],ie.targets=[],ie.outlets=[],ie.values={}},500(e,t,n){n.d(t,{default:()=>Ia});var r=n(72),i=n.n(r),o=n(825),a=n.n(o),s=n(659),c=n.n(s),l=n(56),u=n.n(l),h=n(540),f=n.n(h),d=n(113),p=n.n(d),m=n(109),g={};g.styleTagTransform=p(),g.setAttributes=u(),g.insert=c().bind(null,"head"),g.domAPI=a(),g.insertStyleElement=f(),i()(m.A,g),m.A&&m.A.locals&&m.A.locals;var y=n(891);function v(e,t){for(var n=0;n{var[t,n]=e;this[t]=n}),this}},{key:"shouldShowSuccessMessage",get:function(){return this.successMessage}}],null&&v(t.prototype,null),n&&v(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function O(e,t){for(var n=0;n{var[t,n]=e;if(!["primaryColor","secondaryColor","typography"].includes(t))throw new Error("Invalid style property: ".concat(t));if("typography"!==t&&!this.isHexOrRgba(n))throw new Error("Invalid color value: ".concat(n," for ").concat(t,". Colors must be hex or rgb/a."))}),this._style=e}},{key:"appearance",get:function(){return this._appearance},set:function(e){if(!this.isPlainObject(e))throw new Error("Appearance must be an object");Object.entries(e).forEach(e=>{var[t,n]=e;if(!["header","launcher"].includes(t))throw new Error("Invalid appearance property: ".concat(t));if(!this.isPlainObject(n))throw new Error("Appearance ".concat(t," must be an object"));Object.entries(n).forEach(e=>{var[n,r]=e;if("header"===t&&"name"!==n)throw new Error("Invalid appearance header property: ".concat(n));if("launcher"===t&&"iconUrl"!==n)throw new Error("Invalid appearance launcher property: ".concat(n));if(null!=r&&"string"!=typeof r)throw new Error("Invalid appearance ".concat(t,".").concat(n," value: ").concat(r))})}),this._appearance=e}},{key:"whatsapp",get:function(){return this._whatsapp},set:function(e){if(!this.isPlainObject(e))throw new Error("WhatsApp must be an object");Object.entries(e).forEach(e=>{var[t,n]=e;if(!["number","restrictToChannel"].includes(t))throw new Error("Invalid WhatsApp property: ".concat(t));if(null!=n){if("number"===t&&"string"!=typeof n)throw new Error("Invalid WhatsApp number value: ".concat(n));if("restrictToChannel"===t&&"boolean"!=typeof n)throw new Error("Invalid WhatsApp restrictToChannel value: ".concat(n))}}),this._whatsapp=e}},{key:"mode",get:function(){return this._mode},set:function(e){if(!Object.values(L).includes(e))throw new Error("Invalid mode value: ".concat(e));this._mode=e}},{key:"behaviour",get:function(){return this._behaviour},set:function(e){if(null!=e){if("object"!=typeof e||Array.isArray(e))throw new Error("Invalid behaviour value: ".concat(e));this._behaviour=e}else this._behaviour=e}},{key:"hasBehaviourOverride",get:function(){return this._hasBehaviourOverride}},{key:"behaviourOverride",set:function(e){this._hasBehaviourOverride=!!e}},{key:"strategy",get:function(){return this._strategy?this._strategy:"body"==this.container?I.FIXED:I.ABSOLUTE},set:function(e){if(e&&!Object.values(I).includes(e))throw new Error("Invalid strategy value: ".concat(e));this._strategy=e}},{key:"assign",value:function(e){return e&&Object.entries(e).forEach(e=>{var[t,n]=e;this[t]=n}),this}},{key:"isHexOrRgba",value:function(e){return/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(e)||/^rgba?\(\s*\d{1,3},\s*\d{1,3},\s*\d{1,3},?\s*(0|1|0?\.\d+)?\s*\)$/.test(e)}},{key:"isPlainObject",value:function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}}],null&&x(t.prototype,null),n&&x(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function R(e,t){for(var n=0;n{var[t,n]=e;if("launcher"!==t)throw new Error("Invalid appearance property: ".concat(t));if(!this.isPlainObject(n))throw new Error("Appearance ".concat(t," must be an object"));Object.entries(n).forEach(e=>{var[n,r]=e;if("iconUrl"!==n)throw new Error("Invalid appearance launcher property: ".concat(n));if(null!=r&&"string"!=typeof r)throw new Error("Invalid appearance ".concat(t,".").concat(n," value: ").concat(r))})}),this._appearance=e}},{key:"number",get:function(){return this._number},set:function(e){if(null!=e&&"string"!=typeof e)throw new Error("Invalid number value: ".concat(e));this._number=e}},{key:"body",get:function(){return this._body},set:function(e){if(null!=e&&"string"!=typeof e)throw new Error("Invalid body value: ".concat(e));this._body=e}},{key:"assign",value:function(e){return e&&Object.entries(e).forEach(e=>{var[t,n]=e;this[t]=n}),this}},{key:"isPlainObject",value:function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}}],null&&R(t.prototype,null),n&&R(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function V(e,t){for(var n=0;n{var[t,n]=e;"forms"===t?this.forms=w.assign(n):"webchat"===t?this.webchat=N.assign(n):"whatsappWidget"===t?this.whatsapp=B.assign(n):this[t]=n}),t&&(this.actionCableUrl=this.actionCableUrlForApiRoot(this.apiRoot))}return this}},{key:"locale",get:function(){return j.toString()},set:function(e){j.identifier=e}},{key:"endpoint",value:function(e){return"".concat(this.apiRoot,"/").concat(e)}},{key:"actionCableUrlForApiRoot",value:function(e){try{var t=new URL(e),n="https:"===t.protocol?"wss:":"ws:";return t.protocol=n,t.pathname="/cable",t.search="",t.hash="",t.toString()}catch(e){return this.actionCableUrl}}}],null&&V(t.prototype,null),n&&V(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function z(e){var t="function"==typeof Map?new Map:void 0;return z=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return H(e,arguments,K(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),$(r,e)},z(e)}function H(e,t,n){return H=W()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&$(i,n.prototype),i},H.apply(null,arguments)}function W(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function $(e,t){return $=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},$(e,t)}function K(e){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},K(e)}U.apiRoot="https://api.hellotext.com/v1",U.actionCableUrl="wss://www.hellotext.com/cable",U.autoGenerateSession=!0,U.session=null,U.forms=w,U.webchat=N,U.whatsapp=B;var G=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$(e,t)}(o,e);var t,n,r,i=(n=o,r=W(),function(){var e,t=K(n);if(r){var i=K(this).constructor;e=Reflect.construct(t,arguments,i)}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function o(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),(t=i.call(this,"".concat(e," is not valid. Please provide a valid event name"))).name="InvalidEvent",t}return t=o,Object.defineProperty(t,"prototype",{writable:!1}),t}(z(Error));function J(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Y(e){for(var t=1;tt===e)}}],(n=[{key:"addSubscriber",value:function(t,n){if(e.invalid(t))throw new G(t);this.subscribers=Y(Y({},this.subscribers),{},{[t]:this.subscribers[t]?[...this.subscribers[t],n]:[n]})}},{key:"removeSubscriber",value:function(t,n){if(e.invalid(t))throw new G(t);this.subscribers[t]&&(this.subscribers[t]=this.subscribers[t].filter(e=>e!==n))}},{key:"dispatch",value:function(e,t){var n;null===(n=this.subscribers[e])||void 0===n||n.forEach(e=>{e(t)})}},{key:"listeners",get:function(){return 0!==Object.keys(this.subscribers).length}}])&&X(t.prototype,n),r&&X(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function te(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function ne(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=yield fetch(this.endpoint,{method:"POST",headers:ii.headers,body:JSON.stringify(je({session:ii.session},e))});return new me(t.ok,t)},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){Me(o,n,i,a,s,"next",e)}function s(e){Me(o,n,i,a,s,"throw",e)}a(void 0)})},function(){return i.apply(this,arguments)})}],null&&_e(t.prototype,null),n&&_e(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const Ne=Le;function Re(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function De(e,t){for(var n=0;n{var[n,r]=e;t.searchParams.append("style[".concat(n,"]"),r)}),this.appendWebchatOverrides(t),t.searchParams.append("placement",U.webchat.placement);var n=yield fetch(t,{method:"GET",headers:ii.headers}),r=yield n.json();return ii.business.data||(ii.business.setData(r.business),ii.business.setLocale(r.locale)),(new DOMParser).parseFromString(r.html,"text/html").querySelector("article")},function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function a(e){Re(o,r,i,a,s,"next",e)}function s(e){Re(o,r,i,a,s,"throw",e)}a(void 0)})});return function(e){return t.apply(this,arguments)}}()},{key:"appendWebchatOverrides",value:function(e){var t,n,{appearance:r,whatsapp:i}=U.webchat;this.appendIfSupplied(e,"webchat[appearance][header][name]",null===(t=r.header)||void 0===t?void 0:t.name),this.appendIfSupplied(e,"webchat[appearance][launcher][icon_url]",null===(n=r.launcher)||void 0===n?void 0:n.iconUrl),this.appendIfSupplied(e,"webchat[handoff][identifier]",i.number),this.appendIfSupplied(e,"webchat[handoff][restrict_to_channel]",i.restrictToChannel)}},{key:"appendIfSupplied",value:function(e,t,n){null!=n&&e.searchParams.append(t,String(n))}}],n&&De(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const Ve=Be;function qe(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function Ue(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function a(e){qe(o,r,i,a,s,"next",e)}function s(e){qe(o,r,i,a,s,"throw",e)}a(void 0)})}}function ze(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{}),{},{session:ii.session,at:(new Date).toISOString()});fetch(this.endpoint,{method:"POST",headers:ii.headers,body:JSON.stringify(e),keepalive:!0})},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){Ye(o,n,i,a,s,"next",e)}function s(e){Ye(o,n,i,a,s,"throw",e)}a(void 0)})},function(){return i.apply(this,arguments)})}],null&&Ze(t.prototype,null),n&&Ze(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const et=Qe;function tt(e,t){for(var n=0;ne.href===t);if(n)return n.setAttribute(lt,"true"),n;var r=document.createElement("link");return r.rel="stylesheet",r.href=e,r.setAttribute(lt,"true"),this.waitForStylesheet(r),document.head.append(r),r}},{key:"stylesheetLinks",get:function(){return"undefined"==typeof document?[]:Array.from(document.querySelectorAll(this.stylesheetSelector))}},{key:"latestStylesheet",get:function(){return this.stylesheetLinks[this.stylesheetLinks.length-1]}},{key:"normalizedStylesheetUrl",value:function(e){try{return new URL(e,document.baseURI).href}catch(t){return e}}},{key:"waitForStylesheet",value:function(e){return e?this.stylesheetIsLoaded(e)?Promise.resolve(!0):"false"===e.dataset.hellotextStylesheetLoaded?Promise.resolve(!1):(e._hellotextStylesheetLoaded||(e._hellotextStylesheetLoaded=new Promise(t=>{var n,r=r=>{clearTimeout(n),e.removeEventListener("load",i),e.removeEventListener("error",o),e.dataset.hellotextStylesheetLoaded=r?"true":"false",t(r)},i=()=>r(this.stylesheetIsLoaded(e)),o=()=>r(!1);e.addEventListener("load",i),e.addEventListener("error",o),(n=setTimeout(()=>r(this.stylesheetIsLoaded(e)),1e4)).unref&&n.unref()})),e._hellotextStylesheetLoaded):Promise.resolve(!1)}},{key:"stylesheetIsLoaded",value:function(e){return"true"===e.dataset.hellotextStylesheetLoaded||!!e.sheet}}],n&&st(t.prototype,n),r&&st(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function ht(e,t){for(var n=0;n{var[t,n]=e;return n}));dt.set("hello_utm",JSON.stringify(r))}}var t,n;return t=e,(n=[{key:"current",get:function(){try{return JSON.parse(dt.get("hello_utm"))||{}}catch(e){return{}}}}])&&pt(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function yt(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.utm=new gt,this._url=t}var t,n,r;return t=e,r=[{key:"getRootDomain",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;try{if(!e){var t;if("undefined"==typeof window||null===(t=window.location)||void 0===t||!t.hostname)return null;e=window.location.hostname}var n=e.split(".");if(n.length<=1)return e;for(var r of["myshopify.com","vtexcommercestable.com.br","myvtex.com","wixsite.com"]){var i=r.split(".");if(n.slice(-i.length).join(".")===r&&n.length>i.length)return".".concat(n.slice(-(i.length+1)).join("."))}var o=n[n.length-1],a=n[n.length-2];return n.length>2&&2===o.length&&a.length<=3?".".concat(n.slice(-3).join(".")):".".concat(n.slice(-2).join("."))}catch(e){return null}}}],(n=[{key:"url",get:function(){return null!==this._url&&void 0!==this._url?this._url:window.location.href}},{key:"title",get:function(){return document.title}},{key:"path",get:function(){if(this._url)try{return new URL(this._url).pathname}catch(e){return"/"}return window.location.pathname}},{key:"utmParams",get:function(){return this.utm.current}},{key:"trackingData",get:function(){return{page:{url:this.url,title:this.title,path:this.path},utm_params:this.utmParams}}},{key:"domain",get:function(){try{var t=this.url;if(!t)return null;var n=new URL(t).hostname;return e.getRootDomain(n)}catch(e){return null}}}])&&yt(t.prototype,n),r&&yt(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function wt(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:new bt;Tt(this,Pt)[Pt]=e,Tt(this,Ct)[Ct]=new se,this.session=Tt(this,Ct)[Ct].session||U.session||dt.get("hello_session"),!this.session&&U.autoGenerateSession&&(this.session=crypto.randomUUID())}}],null&&wt(t.prototype,null),n&&wt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function jt(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=Array(t);n\n ".concat(ii.business.locale.white_label.powered_by,'\n\n \n \n Hellotext\n \n \n \n \n ')}});const Vt=Object.entries,qt=Object.setPrototypeOf,Ut=Object.isFrozen,zt=Object.getPrototypeOf,Ht=Object.getOwnPropertyDescriptor;let Wt=Object.freeze,$t=Object.seal,Kt=Object.create,Gt="undefined"!=typeof Reflect&&Reflect,Jt=Gt.apply,Yt=Gt.construct;Wt||(Wt=function(e){return e}),$t||($t=function(e){return e}),Jt||(Jt=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),i=2;i1?t-1:0),r=1;r1?n-1:0),i=1;i2&&void 0!==arguments[2]?arguments[2]:rn;if(qt&&qt(e,null),!nn(t))return e;let r=t.length;for(;r--;){let i=t[r];if("string"==typeof i){const e=n(i);e!==i&&(Ut(t)||(t[r]=e),i=e)}e[i]=!0}return e}function On(e){for(let t=0;t/g),Dn=$t(/\${[\w\W]*/g),Fn=$t(/^data-[\-\w.\u00B7-\uFFFF]+$/),Bn=$t(/^aria-[\-\w]+$/),Vn=$t(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),qn=$t(/^(?:\w+script|data):/i),Un=$t(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),zn=$t(/^html$/i),Hn=$t(/^[a-z][.\w]*(-[.\w]+)+$/i),Wn=$t(/<[/\w!]/g),$n=$t(/<[/\w]/g),Kn=$t(/<\/no(script|embed|frames)/i),Gn=$t(/\/>/i),Jn=function(){return"undefined"==typeof window?null:window},Yn=function(e,t,n,r){return pn(e,t)&&nn(e[t])?wn(r.base?Tn(r.base):{},e[t],r.transform):n};var Zn=function e(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Jn();const n=t=>e(t);if(n.version="3.4.12",n.removed=[],!t||!t.document||9!==t.document.nodeType||!t.Element)return n.isSupported=!1,n;let r=t.document;const i=r,o=i.currentScript;t.DocumentFragment;const a=t.HTMLTemplateElement,s=t.Node,c=t.Element,l=t.NodeFilter;void 0===t.NamedNodeMap&&(t.NamedNodeMap||t.MozNamedAttrMap),t.HTMLFormElement;const u=t.DOMParser,h=t.trustedTypes,f=c.prototype,d=Sn(f,"cloneNode"),p=Sn(f,"remove"),m=Sn(f,"nextSibling"),g=Sn(f,"childNodes"),y=Sn(f,"parentNode"),v=Sn(f,"shadowRoot"),b=Sn(f,"attributes"),w=s&&s.prototype?Sn(s.prototype,"nodeType"):null,O=s&&s.prototype?Sn(s.prototype,"nodeName"):null;if("function"==typeof a){const e=r.createElement("template");e.content&&e.content.ownerDocument&&(r=e.content.ownerDocument)}let T,S,k="",E=!1,C=0;const P=function(){if(C>0)throw yn('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},A=function(e){P(),C++;try{return T.createHTML(e)}finally{C--}},j=r,x=j.implementation,M=j.createNodeIterator,_=j.createDocumentFragment,I=j.getElementsByTagName,L=i.importNode;let N={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};n.isSupported="function"==typeof Vt&&"function"==typeof y&&x&&void 0!==x.createHTMLDocument;const R=Nn,D=Rn,F=Dn,B=Fn,V=Bn,q=qn,U=Un,z=Hn;let H=Vn,W=null;const $=wn({},[...kn,...En,...Cn,...An,...xn]);let K=null;const G=wn({},[...Mn,..._n,...In,...Ln]);let J=Object.seal(Kt(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Y=null,Z=null;const X=Object.seal(Kt(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Q=!0,ee=!0,te=!1,ne=!0,re=!1,ie=!0,oe=!1,ae=!1,se=null,ce=null,le=!1,ue=!1,he=!1,fe=!1,de=!0,pe=!1;const me="user-content-";let ge=!0,ye=!1,ve={},be=null;const we=wn({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let Oe=null;const Te=wn({},["audio","video","img","source","image","track"]);let Se=null;const ke=wn({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ee="http://www.w3.org/1998/Math/MathML",Ce="http://www.w3.org/2000/svg",Pe="http://www.w3.org/1999/xhtml";let Ae=Pe,je=!1,xe=null;const Me=wn({},[Ee,Ce,Pe],on),_e=Wt(["mi","mo","mn","ms","mtext"]);let Ie=wn({},_e);const Le=Wt(["annotation-xml"]);let Ne=wn({},Le);const Re=wn({},["title","style","font","a","script"]);let De=null;const Fe=["application/xhtml+xml","text/html"];let Be=null,Ve=null;const qe=r.createElement("form"),Ue=function(e){return e instanceof RegExp||e instanceof Function},ze=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Ve&&Ve===e)return;e&&"object"==typeof e||(e={}),e=Tn(e),De=-1===Fe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Be="application/xhtml+xml"===De?on:rn,W=Yn(e,"ALLOWED_TAGS",$,{transform:Be}),K=Yn(e,"ALLOWED_ATTR",G,{transform:Be}),xe=Yn(e,"ALLOWED_NAMESPACES",Me,{transform:on}),Se=Yn(e,"ADD_URI_SAFE_ATTR",ke,{transform:Be,base:ke}),Oe=Yn(e,"ADD_DATA_URI_TAGS",Te,{transform:Be,base:Te}),be=Yn(e,"FORBID_CONTENTS",we,{transform:Be}),Y=Yn(e,"FORBID_TAGS",Tn({}),{transform:Be}),Z=Yn(e,"FORBID_ATTR",Tn({}),{transform:Be}),ve=!!pn(e,"USE_PROFILES")&&(e.USE_PROFILES&&"object"==typeof e.USE_PROFILES?Tn(e.USE_PROFILES):e.USE_PROFILES),Q=!1!==e.ALLOW_ARIA_ATTR,ee=!1!==e.ALLOW_DATA_ATTR,te=e.ALLOW_UNKNOWN_PROTOCOLS||!1,ne=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,re=e.SAFE_FOR_TEMPLATES||!1,ie=!1!==e.SAFE_FOR_XML,oe=e.WHOLE_DOCUMENT||!1,ue=e.RETURN_DOM||!1,he=e.RETURN_DOM_FRAGMENT||!1,fe=e.RETURN_TRUSTED_TYPE||!1,le=e.FORCE_BODY||!1,de=!1!==e.SANITIZE_DOM,pe=e.SANITIZE_NAMED_PROPS||!1,ge=!1!==e.KEEP_CONTENT,ye=e.IN_PLACE||!1,H=function(e){try{return gn(e,""),!0}catch(e){return!1}}(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Vn,Ae="string"==typeof e.NAMESPACE?e.NAMESPACE:Pe,Ie=pn(e,"MATHML_TEXT_INTEGRATION_POINTS")&&e.MATHML_TEXT_INTEGRATION_POINTS&&"object"==typeof e.MATHML_TEXT_INTEGRATION_POINTS?Tn(e.MATHML_TEXT_INTEGRATION_POINTS):wn({},_e),Ne=pn(e,"HTML_INTEGRATION_POINTS")&&e.HTML_INTEGRATION_POINTS&&"object"==typeof e.HTML_INTEGRATION_POINTS?Tn(e.HTML_INTEGRATION_POINTS):wn({},Le);const t=pn(e,"CUSTOM_ELEMENT_HANDLING")&&e.CUSTOM_ELEMENT_HANDLING&&"object"==typeof e.CUSTOM_ELEMENT_HANDLING?Tn(e.CUSTOM_ELEMENT_HANDLING):Kt(null);if(J=Kt(null),pn(t,"tagNameCheck")&&Ue(t.tagNameCheck)&&(J.tagNameCheck=t.tagNameCheck),pn(t,"attributeNameCheck")&&Ue(t.attributeNameCheck)&&(J.attributeNameCheck=t.attributeNameCheck),pn(t,"allowCustomizedBuiltInElements")&&"boolean"==typeof t.allowCustomizedBuiltInElements&&(J.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),$t(J),re&&(ee=!1),he&&(ue=!0),ve&&(W=wn({},xn),K=Kt(null),!0===ve.html&&(wn(W,kn),wn(K,Mn)),!0===ve.svg&&(wn(W,En),wn(K,_n),wn(K,Ln)),!0===ve.svgFilters&&(wn(W,Cn),wn(K,_n),wn(K,Ln)),!0===ve.mathMl&&(wn(W,An),wn(K,In),wn(K,Ln))),X.tagCheck=null,X.attributeCheck=null,pn(e,"ADD_TAGS")&&("function"==typeof e.ADD_TAGS?X.tagCheck=e.ADD_TAGS:nn(e.ADD_TAGS)&&(W===$&&(W=Tn(W)),wn(W,e.ADD_TAGS,Be))),pn(e,"ADD_ATTR")&&("function"==typeof e.ADD_ATTR?X.attributeCheck=e.ADD_ATTR:nn(e.ADD_ATTR)&&(K===G&&(K=Tn(K)),wn(K,e.ADD_ATTR,Be))),pn(e,"ADD_URI_SAFE_ATTR")&&nn(e.ADD_URI_SAFE_ATTR)&&wn(Se,e.ADD_URI_SAFE_ATTR,Be),pn(e,"FORBID_CONTENTS")&&nn(e.FORBID_CONTENTS)&&(be===we&&(be=Tn(be)),wn(be,e.FORBID_CONTENTS,Be)),pn(e,"ADD_FORBID_CONTENTS")&&nn(e.ADD_FORBID_CONTENTS)&&(be===we&&(be=Tn(be)),wn(be,e.ADD_FORBID_CONTENTS,Be)),ge&&(W["#text"]=!0),oe&&wn(W,["html","head","body"]),W.table&&(wn(W,["tbody"]),delete Y.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw yn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw yn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const t=T;T=e.TRUSTED_TYPES_POLICY;try{k=A("")}catch(e){throw T=t,e}}else null===e.TRUSTED_TYPES_POLICY?(T=void 0,k=""):(void 0===T&&(E||(S=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const i="dompurify"+(n?"#"+n:"");try{return e.createPolicy(i,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+i+" could not be created."),null}}(h,o),E=!0),T=S),T&&"string"==typeof k&&(k=A("")));Wt&&Wt(e),Ve=e},He=wn({},[...En,...Cn,...Pn]),We=wn({},[...An,...jn]),$e=function(e){en(n.removed,{element:e});try{y(e).removeChild(e)}catch(t){if(p(e),!y(e))throw yn("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},Ke=function(e){Ye(e);const t=g(e);if(t){const e=[];Zt(t,t=>{en(e,t)}),Zt(e,e=>{try{p(e)}catch(e){}})}const n=b(e);if(n)for(let t=n.length-1;t>=0;--t){const r=n[t],i=r&&r.name;if("string"==typeof i)try{e.removeAttribute(i)}catch(e){}}},Ge=function(e,t){try{en(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){en(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e)if(ue||he)try{$e(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Je=function(e){const t=b(e);if(t)for(let n=t.length-1;n>=0;--n){const r=t[n],i=r&&r.name;if("string"==typeof i&&!K[Be(i)])try{e.removeAttribute(i)}catch(e){}}},Ye=function(e){const t=[e];for(;t.length>0;){const e=t.pop();1===(w?w(e):e.nodeType)&&Je(e);const n=g(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},Ze=function(e){let t=null,n=null;if(le)e=""+e;else{const t=an(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===De&&Ae===Pe&&(e=''+e+"");const i=T?A(e):e;if(Ae===Pe)try{t=(new u).parseFromString(i,De)}catch(e){}if(!t||!t.documentElement){t=x.createDocument(Ae,"template",null);try{t.documentElement.innerHTML=je?k:i}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(r.createTextNode(n),o.childNodes[0]||null),Ae===Pe?I.call(t,oe?"html":"body")[0]:oe?t.documentElement:o},Xe=function(e){return M.call(e.ownerDocument||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT|l.SHOW_PROCESSING_INSTRUCTION|l.SHOW_CDATA_SECTION,null)},Qe=function(e){return e=sn(e,R," "),e=sn(e,D," "),sn(e,F," ")},et=function(e){var t;e.normalize();const n=M.call(e.ownerDocument||e,e,l.SHOW_TEXT|l.SHOW_COMMENT|l.SHOW_CDATA_SECTION|l.SHOW_PROCESSING_INSTRUCTION,null);let r=n.nextNode();for(;r;)r.data=Qe(r.data),r=n.nextNode();const i=null===(t=e.querySelectorAll)||void 0===t?void 0:t.call(e,"template");i&&Zt(i,e=>{nt(e.content)&&et(e.content)})},tt=function(e){const t=O?O(e):null;return"string"==typeof t&&"form"===Be(t)&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||e.attributes!==b(e)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes||e.nodeType!==w(e)||e.childNodes!==g(e))},nt=function(e){if(!w||"object"!=typeof e||null===e)return!1;try{return 11===w(e)}catch(e){return!1}},rt=function(e){if(!w||"object"!=typeof e||null===e)return!1;try{return"number"==typeof w(e)}catch(e){return!1}};function it(e,t,r){0!==e.length&&Zt(e,e=>{e.call(n,t,r,Ve)})}const ot=function(e,t){if(it(N.beforeSanitizeElements,e,null),e!==t&&null===y(e))return!0;if(tt(e))return $e(e),!0;const r=Be(O?O(e):e.nodeName);if(it(N.uponSanitizeElement,e,{tagName:r,allowedTags:W}),e!==t&&null===y(e))return!0;if(function(e,t){return!!(ie&&e.hasChildNodes()&&!rt(e.firstElementChild)&&gn(Wn,e.textContent)&&gn(Wn,e.innerHTML))||!(!ie||e.namespaceURI!==Pe||"style"!==t||!rt(e.firstElementChild))||7===e.nodeType||!(!ie||8!==e.nodeType||!gn($n,e.data))}(e,r))return $e(e),!0;if(Y[r]||!(X.tagCheck instanceof Function&&X.tagCheck(r))&&!W[r]){const t=function(e,t){if(!Y[t]&&ct(t)){if(J.tagNameCheck instanceof RegExp&&gn(J.tagNameCheck,t))return!1;if(J.tagNameCheck instanceof Function&&J.tagNameCheck(t))return!1}if(ge&&!be[t]){const t=y(e),n=g(e);if(n&&t)for(let r=n.length-1;r>=0;--r){const i=ye?n[r]:d(n[r],!0);t.insertBefore(i,m(e))}}return $e(e),!0}(e,r);return!1===t&&it(N.afterSanitizeElements,e,null),t}if(1===(w?w(e):e.nodeType)&&!function(e){let t=y(e);t&&t.tagName||(t={namespaceURI:Ae,tagName:"template"});const n=rn(e.tagName),r=rn(t.tagName);return!!xe[e.namespaceURI]&&(e.namespaceURI===Ce?function(e,t,n){return t.namespaceURI===Pe?"svg"===e:t.namespaceURI===Ee?"svg"===e&&("annotation-xml"===n||Ie[n]):Boolean(He[e])}(n,t,r):e.namespaceURI===Ee?function(e,t,n){return t.namespaceURI===Pe?"math"===e:t.namespaceURI===Ce?"math"===e&&Ne[n]:Boolean(We[e])}(n,t,r):e.namespaceURI===Pe?function(e,t,n){return!(t.namespaceURI===Ce&&!Ne[n])&&!(t.namespaceURI===Ee&&!Ie[n])&&!We[e]&&(Re[e]||!He[e])}(n,t,r):!("application/xhtml+xml"!==De||!xe[e.namespaceURI]))}(e))return $e(e),!0;if(("noscript"===r||"noembed"===r||"noframes"===r)&&gn(Kn,e.innerHTML))return $e(e),!0;if(re&&3===e.nodeType){const t=Qe(e.textContent);e.textContent!==t&&(en(n.removed,{element:e.cloneNode()}),e.textContent=t)}return it(N.afterSanitizeElements,e,null),!1},at=function(e,t,n){if(Z[t])return!1;if(ie&&"patchsrc"===t)return!1;if(ie&&"for"===t&&"label"!==e&&"output"!==e)return!1;if(de&&("id"===t||"name"===t)&&(n in r||n in qe))return!1;const i=K[t]||X.attributeCheck instanceof Function&&X.attributeCheck(t,e);if(ee&&gn(B,t));else if(Q&&gn(V,t));else if(i){if(Se[t]);else if(gn(H,sn(n,U,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==cn(n,"data:")||!Oe[e])if(te&&!gn(q,sn(n,U,"")));else if(n)return!1}else if(!(ct(e)&&(J.tagNameCheck instanceof RegExp&&gn(J.tagNameCheck,e)||J.tagNameCheck instanceof Function&&J.tagNameCheck(e))&&(J.attributeNameCheck instanceof RegExp&&gn(J.attributeNameCheck,t)||J.attributeNameCheck instanceof Function&&J.attributeNameCheck(t,e))||"is"===t&&J.allowCustomizedBuiltInElements&&(J.tagNameCheck instanceof RegExp&&gn(J.tagNameCheck,n)||J.tagNameCheck instanceof Function&&J.tagNameCheck(n))))return!1;return!0},st=wn({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),ct=function(e){return!st[rn(e)]&&gn(z,e)},lt=function(e,t,n,r){if(T&&"object"==typeof h&&"function"==typeof h.getAttributeType&&!n)switch(h.getAttributeType(e,t)){case"TrustedHTML":return A(r);case"TrustedScriptURL":return function(e){P(),C++;try{return T.createScriptURL(e)}finally{C--}}(r)}return r},ut=function(e,t,r,i){try{r?e.setAttributeNS(r,t,i):e.setAttribute(t,i),tt(e)?$e(e):Qt(n.removed)}catch(n){Ge(t,e)}},ht=function(e){it(N.beforeSanitizeAttributes,e,null);const t=e.attributes;if(!t||tt(e))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:K,forceKeepAttr:void 0};let r=t.length;const i=Be(e.nodeName);for(;r--;){const o=t[r],a=o.name,s=o.namespaceURI,c=o.value,l=Be(a),u=c;let h="value"===a?u:ln(u);n.attrName=l,n.attrValue=h,n.keepAttr=!0,n.forceKeepAttr=void 0,it(N.uponSanitizeAttribute,e,n),h=n.attrValue,!pe||"id"!==l&&"name"!==l||0===cn(h,me)||(Ge(a,e),h=me+h),ie&&gn(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,h)||"attributename"===l&&an(h,"href")?Ge(a,e):n.forceKeepAttr||(!n.keepAttr||!ne&&gn(Gn,h)?Ge(a,e):(re&&(h=Qe(h)),at(i,l,h)?(h=lt(i,l,s,h),h!==u&&ut(e,a,s,h)):Ge(a,e)))}it(N.afterSanitizeAttributes,e,null)},ft=function(e){let t=null;const n=Xe(e);for(it(N.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(it(N.uponSanitizeShadowNode,t,null),ot(t,e),ht(t),nt(t.content)&&ft(t.content),1===(w?w(t):t.nodeType)){const e=v(t);nt(e)&&(dt(e),ft(e))}it(N.afterSanitizeShadowDOM,e,null)},dt=function(e){const t=[{node:e,shadow:null}];for(;t.length>0;){const e=t.pop();if(e.shadow){ft(e.shadow);continue}const n=e.node,r=1===(w?w(n):n.nodeType),i=g(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){const e=O?O(n):null;if("string"==typeof e&&"template"===Be(e)){const e=n.content;nt(e)&&t.push({node:e,shadow:null})}}if(r){const e=v(n);nt(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return n.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(je=!e,je&&(e="\x3c!--\x3e"),"string"!=typeof e&&!rt(e)&&"string"!=typeof(e=function(e){switch(typeof e){case"string":return e;case"number":return un(e);case"boolean":return hn(e);case"bigint":return fn?fn(e):"0";case"symbol":return dn?dn(e):"Symbol()";case"undefined":default:return mn(e);case"function":case"object":{if(null===e)return mn(e);const t=e,n=Sn(t,"toString");if("function"==typeof n){const e=n(t);return"string"==typeof e?e:mn(e)}return mn(e)}}}(e)))throw yn("dirty is not a string, aborting");if(!n.isSupported)return e;ae?(W=se,K=ce):ze(t),(N.uponSanitizeElement.length>0||N.uponSanitizeAttribute.length>0)&&(W=Tn(W)),N.uponSanitizeAttribute.length>0&&(K=Tn(K)),n.removed=[];const c=ye&&"string"!=typeof e&&rt(e);if(c){!function(e){if(!ie)return;const t=[e];for(;t.length>0;){const e=t.pop(),n=w?w(e):e.nodeType;if(7===n||8===n&&gn($n,e.data)){try{p(e)}catch(e){}continue}if(1===n){const t=e,n=Be(O?O(e):e.nodeName);try{t.hasAttribute&&t.hasAttribute("patchsrc")&&t.removeAttribute("patchsrc"),t.hasAttribute&&t.hasAttribute("for")&&"label"!==n&&"output"!==n&&t.removeAttribute("for")}catch(e){}}const r=g(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}}(e);const t=O?O(e):e.nodeName;if("string"==typeof t){const n=Be(t);if(!W[n]||Y[n])throw Ke(e),yn("root node is forbidden and cannot be sanitized in-place")}if(tt(e))throw Ke(e),yn("root node is clobbered and cannot be sanitized in-place");try{dt(e)}catch(t){throw Ke(e),t}}else if(rt(e))r=Ze("\x3c!----\x3e"),o=r.ownerDocument.importNode(e,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o),dt(o);else{if(!ue&&!re&&!oe&&-1===e.indexOf("<"))return T&&fe?A(e):e;if(r=Ze(e),!r)return ue?null:fe?k:""}r&&le&&$e(r.firstChild);const l=c?e:r,u=Xe(l);try{for(;a=u.nextNode();)ot(a,l),ht(a),nt(a.content)&&ft(a.content)}catch(t){throw c&&(Ke(e),Zt(n.removed,e=>{e.element&&Ye(e.element)})),t}if(c)return Zt(n.removed,e=>{e.element&&Ye(e.element)}),re&&et(e),e;if(ue){if(re&&et(r),he)for(s=_.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(K.shadowroot||K.shadowrootmode)&&(s=L.call(i,s,!0)),s}let h=oe?r.outerHTML:r.innerHTML;return oe&&W["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&gn(zn,r.ownerDocument.doctype.name)&&(h="\n"+h),re&&(h=Qe(h)),T&&fe?A(h):h},n.setConfig=function(){ze(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ae=!0,se=W,ce=K},n.clearConfig=function(){Ve=null,ae=!1,se=null,ce=null,T=S,k=""},n.isValidAttribute=function(e,t,n){Ve||ze({});const r=Be(e),i=Be(t);return at(r,i,n)},n.addHook=function(e,t){"function"==typeof t&&pn(N,e)&&en(N[e],t)},n.removeHook=function(e,t){if(pn(N,e)){if(void 0!==t){const n=Xt(N[e],t);return-1===n?void 0:tn(N[e],n,1)[0]}return Qt(N[e])}},n.removeHooks=function(e){pn(N,e)&&(N[e]=[])},n.removeAllHooks=function(){N={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},n}(),Xn={ADD_ATTR:["target"],ALLOW_DATA_ATTR:!1,RETURN_DOM_FRAGMENT:!0,USE_PROFILES:{html:!0}},Qn={ADD_ATTR:["target"],ADD_TAGS:["hellotext-icon"],RETURN_DOM_FRAGMENT:!0,USE_PROFILES:{html:!0,svg:!0}};function er(e,t){var n=Zn.sanitize(e,t);return n.querySelectorAll('a[target="_blank"]').forEach(e=>{var t=new Set(e.rel.split(/\s+/).filter(Boolean));t.add("noopener"),t.add("noreferrer"),e.rel=Array.from(t).join(" ")}),n}function tr(e,t){e.replaceChildren(function(e){return er(e,Xn)}(t))}function nr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function rr(e,t,n){return(t=ar(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ir(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function or(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Object.defineProperty(this,ur,{value:fr}),this.data=t,this.element=n||document.querySelector('[data-hello-form="'.concat(this.id,'"]'))||document.createElement("form")}var t,n,r,i;return t=e,n=[{key:"mount",value:(r=function*(){var e,{ifCompleted:t=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t&&this.hasBeenCompleted)return null===(e=this.element)||void 0===e||e.remove(),ii.eventEmitter.dispatch("form:completed",function(e){for(var t=1;t{this.element.setAttribute(e.name,e.value)}),document.contains(this.element)||document.body.appendChild(this.element),ii.business.features.white_label||this.element.prepend(Dt.build())},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){ir(o,n,i,a,s,"next",e)}function s(e){ir(o,n,i,a,s,"throw",e)}a(void 0)})},function(){return i.apply(this,arguments)})},{key:"buildHeader",value:function(e){var t=sr(this,ur)[ur]("[data-form-header]","header");tr(t,e.content),this.element.querySelector("[data-form-header]")?this.element.querySelector("[data-form-header]").replaceWith(t):this.element.prepend(t)}},{key:"buildInputs",value:function(e){var t=sr(this,ur)[ur]("[data-form-inputs]","main");e.map(e=>Mt.build(e)).forEach(e=>t.appendChild(e)),this.element.querySelector("[data-form-inputs]")?this.element.querySelector("[data-form-inputs]").replaceWith(t):this.element.querySelector("[data-form-header]").insertAdjacentHTML("afterend",t.outerHTML)}},{key:"buildButton",value:function(e){var t=sr(this,ur)[ur]("[data-form-button]","button");t.innerText=e.text,t.setAttribute("data-action","click->hellotext--form#submit"),t.setAttribute("data-hellotext--form-target","button"),this.element.querySelector("[data-form-button]")?this.element.querySelector("[data-form-button]").replaceWith(t):this.element.querySelector("[data-form-inputs]").insertAdjacentHTML("afterend",t.outerHTML)}},{key:"buildFooter",value:function(e){var t=sr(this,ur)[ur]("[data-form-footer]","footer");tr(t,e.content),this.element.querySelector("[data-form-footer]")?this.element.querySelector("[data-form-footer]").replaceWith(t):this.element.appendChild(t)}},{key:"markAsCompleted",value:function(e){var t={state:"completed",id:this.id,data:e,completedAt:(new Date).getTime()};localStorage.setItem("hello-form-".concat(this.id),JSON.stringify(t)),ii.eventEmitter.dispatch("form:completed",t)}},{key:"hasBeenCompleted",get:function(){return null!==localStorage.getItem("hello-form-".concat(this.id))}},{key:"id",get:function(){return this.data.id}},{key:"localeAuthKey",get:function(){var e=this.data.steps[0];return e.inputs.some(e=>"email"===e.kind)&&e.inputs.some(e=>"phone"===e.kind)?"phone_and_email":e.inputs.some(e=>"email"===e.kind)?"email":e.inputs.some(e=>"phone"===e.kind)?"phone":"none"}},{key:"elementAttributes",get:function(){return[{name:"data-controller",value:"hellotext--form"},{name:"data-hello-form",value:this.id},{name:"data-hellotext--form-data-value",value:JSON.stringify(this.data)}]}}],n&&or(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function fr(e,t){var n=this.element.querySelector(e);if(n)return n.cloneNode(!0);var r=document.createElement(t);return r.setAttribute(e.replace("[","").replace("]",""),""),r}function dr(e){var t="function"==typeof Map?new Map:void 0;return dr=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return pr(e,arguments,yr(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),gr(r,e)},dr(e)}function pr(e,t,n){return pr=mr()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&gr(i,n.prototype),i},pr.apply(null,arguments)}function mr(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function gr(e,t){return gr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},gr(e,t)}function yr(e){return yr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},yr(e)}var vr=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gr(e,t)}(o,e);var t,n,r,i=(n=o,r=mr(),function(){var e,t=yr(n);if(r){var i=yr(this).constructor;e=Reflect.construct(t,arguments,i)}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function o(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),(e=i.call(this,"You need to initialize before tracking events. Call Hellotext.initialize and pass your public business id")).name="NotInitializedError",e}return t=o,Object.defineProperty(t,"prototype",{writable:!1}),t}(dr(Error));function br(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function wr(e,t){for(var n=0;n0&&this.collect()}},{key:"formMutationObserver",value:function(e){e.find(e=>"childList"===e.type&&e.addedNodes.length>0)&&Array.from(document.querySelectorAll("[data-hello-form]")).length>0&&this.collect()}},{key:"collect",value:(r=function*(){if(ii.notInitialized)throw new vr;if(!this.fetching){if("undefined"==typeof document||!("querySelectorAll"in document))return console.warn("Document is not defined, collection is not possible. Please make sure to initialize the library after the document is loaded.");var e=function(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}(this,kr)[kr];if(0!==e.length){var t=e.map(e=>Pe.get(e).then(e=>e.json()));this.fetching=!0,yield Promise.all(t).then(e=>e.forEach(this.add)).then(()=>ii.eventEmitter.dispatch("forms:collected",this)).then(()=>this.fetching=!1),U.forms.autoMount&&this.forms.forEach(e=>e.mount())}}},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){br(o,n,i,a,s,"next",e)}function s(e){br(o,n,i,a,s,"throw",e)}a(void 0)})},function(){return i.apply(this,arguments)})},{key:"forEach",value:function(e){this.forms.forEach(e)}},{key:"map",value:function(e){return this.forms.map(e)}},{key:"add",value:function(e){this.includes(e.id)||(ii.business.data||(ii.business.setData(e.business),ii.business.setLocale(j.toString())),ii.business.enabledWhitelist||console.warn("No whitelist has been configured. It is advised to whitelist the domain to avoid bots from submitting forms."),this.forms.push(new hr(e)))}},{key:"getById",value:function(e){return this.forms.find(t=>t.id===e)}},{key:"getByIndex",value:function(e){return this.forms[e]}},{key:"includes",value:function(e){return this.forms.some(t=>t.id===e)}},{key:"excludes",value:function(e){return!this.includes(e)}},{key:"length",get:function(){return this.forms.length}}],n&&wr(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Cr(){return Array.from(document.querySelectorAll("[data-hello-form]")).map(e=>e.dataset.helloForm).filter(this.excludes)}function Pr(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function Ar(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function a(e){Pr(o,r,i,a,s,"next",e)}function s(e){Pr(o,r,i,a,s,"throw",e)}a(void 0)})}}function jr(e,t){for(var n=0;n$r(e)).filter(e=>void 0!==e);if(e instanceof Date)return e.toISOString();if("object"==typeof e){var n=Object.keys(e).sort((e,t)=>e.localeCompare(t)).reduce((t,n)=>{var r=$r(e[n]);return void 0!==r&&(t[n]=r),t},{});return Object.keys(n).length>0?n:void 0}return"number"==typeof e||"boolean"==typeof e?e:void 0}}function Kr(e,t){var n=$r(function(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{}))||{};return JSON.stringify(n)}function Gr(){return(Gr=Ur(function*(e){var t;if(null===(t=globalThis.crypto)||void 0===t||!t.subtle||"undefined"==typeof TextEncoder)return function(e){for(var t=5381,n=0;n>>0).toString(16))}(e);var n=yield globalThis.crypto.subtle.digest("SHA-256",(new TextEncoder).encode(e)),r=Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,"0")).join("");return"v1:".concat(r)})).apply(this,arguments)}var Jr=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}var t,n,r;return t=e,n=[{key:"matches",value:function(e,t){return!!e&&e===t}},{key:"generate",value:(r=Ur(function*(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return yield function(e){return Gr.apply(this,arguments)}(Kr(e,t,n))}),function(e,t){return r.apply(this,arguments)})}],n&&Vr(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Yr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Zr(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};this.business=new ut(e),this.page=new bt,U.assign(t),At.initialize(this.page),this.forms=new Er,this.query=new se;var n=yield this.business.hydrate(),r=!1!==t.webchat&&this.mergeWebchatConfig(n&&n.webchat||{},t.webchat||{}),i=!1!==t.whatsappWidget&&this.mergeWhatsAppConfig(n&&n.whatsapp||{},t.whatsappWidget||{}),o=t.webchat&&!1!==t.webchat&&Object.prototype.hasOwnProperty.call(t.webchat,"behaviour");U.webchat.behaviourOverride=o,r&&r.id&&(U.webchat.assign(r),this.webchat=yield Mr.load(r.id)),i&&i.id&&(U.whatsapp.assign(i),this.whatsapp=yield Rr.load(i.id)),"undefined"!=typeof MutationObserver&&this.forms.collectExistingFormsOnPage()}),function(e){return o.apply(this,arguments)})},{key:"mergeWebchatConfig",value:function(e,t){return this.deepMergePlainObjects(e,t)}},{key:"mergeWhatsAppConfig",value:function(e,t){return this.deepMergePlainObjects(e,t)}},{key:"deepMergePlainObjects",value:function(e,t){var n=Zr({},e);return Object.entries(t).forEach(e=>{var[t,r]=e;this.isPlainObject(r)&&this.isPlainObject(n[t])?n[t]=this.deepMergePlainObjects(n[t],r):n[t]=r}),n}},{key:"isPlainObject",value:function(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}},{key:"track",value:(i=ei(function*(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.notInitialized)throw new vr;var n=Zr(Zr({},t&&t.headers||{}),this.headers),r=Zr(Zr({},Br.identificationData),t.user_parameters||{}),i=t&&t.url?new bt(t.url):this.page,o=Zr(Zr({session:this.session,user_parameters:r,action:e},t),i.trackingData);return delete o.headers,yield it.events.create({headers:n,body:o,keepalive:rt(o)})}),function(e){return i.apply(this,arguments)})},{key:"identify",value:(r=ei(function*(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=yield Jr.generate(this.session,e,n);if(Jr.matches(Br.fingerprint,r))return new me(!0,{json:(t=ei(function*(){return{already_identified:!0}}),function(){return t.apply(this,arguments)})});var i=yield it.identifications.create(Zr({user_id:e},n));return i.succeeded&&Br.remember(e,n.source,r),i}),function(e){return r.apply(this,arguments)})},{key:"forget",value:function(){Br.forget()}},{key:"on",value:function(e,t){this.eventEmitter.addSubscriber(e,t)}},{key:"removeEventListener",value:function(e,t){this.eventEmitter.removeSubscriber(e,t)}},{key:"session",get:function(){return At.session}},{key:"isInitialized",get:function(){return void 0!==At.session}},{key:"notInitialized",get:function(){return!this.business||void 0===this.business.id}},{key:"headers",get:function(){if(this.notInitialized)throw new vr;return{Authorization:"Bearer ".concat(this.business.id),Accept:"application/json","Content-Type":"application/json"}}}],n&&ti(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();ri.eventEmitter=new ee,ri.forms=void 0,ri.business=void 0,ri.webchat=void 0,ri.whatsapp=void 0;const ii=ri;function oi(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function ai(e,t){for(var n=0;n{var{type:t,parameter:n}=e,r=this.inputTargets.find(e=>e.name===n);r.setCustomValidity(ii.business.locale.errors[t]),r.reportValidity(),r.addEventListener("input",()=>{r.setCustomValidity(""),r.reportValidity()})}),this.showErrorMessages();this.buttonTarget.style.display="none",this.element.querySelectorAll("input").forEach(e=>e.disabled=!0),this.completed()},i=function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){oi(o,n,i,a,s,"next",e)}function s(e){oi(o,n,i,a,s,"throw",e)}a(void 0)})},function(e){return i.apply(this,arguments)})},{key:"completed",value:function(){if(this.form.markAsCompleted(this.formData),!U.forms.shouldShowSuccessMessage)return this.element.remove();"string"==typeof U.forms.successMessage?this.element.innerHTML=U.forms.successMessage:this.element.innerHTML=ii.business.locale.forms[this.form.localeAuthKey]}},{key:"showErrorMessages",value:function(){this.inputTargets.forEach(e=>{var t=e.closest("article").querySelector("[data-error-container]");e.validity.valid?t.innerText="":t.innerText=e.validationMessage})}},{key:"clearErrorMessages",value:function(){this.inputTargets.forEach(e=>{e.setCustomValidity(""),e.closest("article").querySelector("[data-error-container]").innerText=""})}},{key:"inputTargetConnected",value:function(e){e.getAttribute("data-default-value")&&(e.value=e.getAttribute("data-default-value"))}},{key:"requiredInputs",get:function(){return this.inputTargets.filter(e=>e.required)}},{key:"invalid",get:function(){return!this.element.checkValidity()}}],n&&ai(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),c}(y.xI);function fi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function di(e){for(var t=1;t0?e:this.getCardScrollAmount()}},{key:"getNextPageScrollLeft",value:function(){var e=this.getCurrentScrollLeft(),t=e+this.carouselContainerTarget.clientWidth,n=this.getCardMetrics().find(e=>e.end>t+1),r=n?this.getPageAlignedScrollLeft(n.start):e+this.getPageScrollAmount(),i=e+this.getPageScrollAmount();return this.clampScrollLeft(r>e+1?r:i)}},{key:"getPreviousPageScrollLeft",value:function(){var e,t,n=this.getCurrentScrollLeft();if(n<=1)return 0;var r=Math.max(n-this.getPageScrollAmount(),0);if(r<=1)return 0;var i=this.getCardMetrics(),o=i.find(e=>e.start>=r-1&&e.starte.start{var t=this.getCardScrollLeft(e);return{start:t,end:t+e.offsetWidth}})}},{key:"getCardScrollLeft",value:function(e){var t=e.getBoundingClientRect(),n=this.carouselContainerTarget.getBoundingClientRect();return t.left||t.width||n.left||n.width?t.left-n.left+this.carouselContainerTarget.scrollLeft:e.offsetLeft||0}},{key:"getCurrentScrollLeft",value:function(){return this.clampScrollLeft(this.carouselContainerTarget.scrollLeft)}},{key:"clampScrollLeft",value:function(e){var t=Math.max(this.carouselContainerTarget.scrollWidth-this.carouselContainerTarget.clientWidth,0);return Math.min(Math.max(e,0),t)}},{key:"getGap",value:function(){var e=window.getComputedStyle(this.carouselContainerTarget),t=Number.parseFloat(e.columnGap||e.gap);return Number.isFinite(t)?t:16}},{key:"getFadeDistance",value:function(){return Number.isFinite(this.fadeDistanceValue)?this.fadeDistanceValue:64}},{key:"getPageStartOffset",value:function(){return Number.isFinite(this.pageStartOffsetValue)?this.pageStartOffsetValue:0}},{key:"observeContainerSize",value:function(){this.hasCarouselContainerTarget&&window.ResizeObserver&&(this.resizeObserver=new ResizeObserver(()=>this.updateFades()),this.resizeObserver.observe(this.carouselContainerTarget))}},{key:"updateFades",value:function(){if(this.hasCarouselContainerTarget){var e=Math.max(this.carouselContainerTarget.scrollWidth-this.carouselContainerTarget.clientWidth,0);if(e<=1)return this.hideFade(this.leftFadeTarget),void this.hideFade(this.rightFadeTarget);var t=Math.min(Math.max(this.carouselContainerTarget.scrollLeft,0),e),n=this.getFadeDistance();this.setFadeOpacity(this.leftFadeTarget,t/n),this.setFadeOpacity(this.rightFadeTarget,(e-t)/n)}}},{key:"setFadeOpacity",value:function(e,t){var n=Math.min(Math.max(t,0),1);n<=.05?this.hideFade(e):(e.classList.remove("hidden"),e.removeAttribute("disabled"),e.removeAttribute("tabindex"),e.setAttribute("aria-hidden","false"),e.style.opacity=n.toFixed(3),e.style.pointerEvents="auto")}},{key:"hideFade",value:function(e){e.style.opacity="0",e.style.pointerEvents="none",e.setAttribute("aria-hidden","true"),e.setAttribute("tabindex","-1"),"disabled"in e&&(e.disabled=!0),e.classList.add("hidden")}}],n&&mi(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),a}(y.xI);bi.values={fadeDistance:{type:Number,default:64},id:String,pageStartOffset:{type:Number,default:0}},bi.targets=["carouselContainer","leftFade","rightFade","carouselCard"];const wi=["start","end"],Oi=["top","right","bottom","left"].reduce((e,t)=>e.concat(t,t+"-"+wi[0],t+"-"+wi[1]),[]),Ti=Math.min,Si=Math.max,ki=Math.round,Ei=Math.floor,Ci=e=>({x:e,y:e}),Pi={left:"right",right:"left",bottom:"top",top:"bottom"},Ai={start:"end",end:"start"};function ji(e,t,n){return Si(e,Ti(t,n))}function xi(e,t){return"function"==typeof e?e(t):e}function Mi(e){return e.split("-")[0]}function _i(e){return e.split("-")[1]}function Ii(e){return"x"===e?"y":"x"}function Li(e){return"y"===e?"height":"width"}const Ni=new Set(["top","bottom"]);function Ri(e){return Ni.has(Mi(e))?"y":"x"}function Di(e){return Ii(Ri(e))}function Fi(e,t,n){void 0===n&&(n=!1);const r=_i(e),i=Di(e),o=Li(i);let a="x"===i?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[o]>t.floating[o]&&(a=Hi(a)),[a,Hi(a)]}function Bi(e){return e.replace(/start|end/g,e=>Ai[e])}const Vi=["left","right"],qi=["right","left"],Ui=["top","bottom"],zi=["bottom","top"];function Hi(e){return e.replace(/left|right|bottom|top/g,e=>Pi[e])}function Wi(e){const{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function $i(e,t,n){let{reference:r,floating:i}=e;const o=Ri(t),a=Di(t),s=Li(a),c=Mi(t),l="y"===o,u=r.x+r.width/2-i.width/2,h=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2;let d;switch(c){case"top":d={x:u,y:r.y-i.height};break;case"bottom":d={x:u,y:r.y+r.height};break;case"right":d={x:r.x+r.width,y:h};break;case"left":d={x:r.x-i.width,y:h};break;default:d={x:r.x,y:r.y}}switch(_i(t)){case"start":d[a]-=f*(n&&l?-1:1);break;case"end":d[a]+=f*(n&&l?-1:1)}return d}async function Ki(e,t){var n;void 0===t&&(t={});const{x:r,y:i,platform:o,rects:a,elements:s,strategy:c}=e,{boundary:l="clippingAncestors",rootBoundary:u="viewport",elementContext:h="floating",altBoundary:f=!1,padding:d=0}=xi(t,e),p=function(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}(d),m=s[f?"floating"===h?"reference":"floating":h],g=Wi(await o.getClippingRect({element:null==(n=await(null==o.isElement?void 0:o.isElement(m)))||n?m:m.contextElement||await(null==o.getDocumentElement?void 0:o.getDocumentElement(s.floating)),boundary:l,rootBoundary:u,strategy:c})),y="floating"===h?{x:r,y:i,width:a.floating.width,height:a.floating.height}:a.reference,v=await(null==o.getOffsetParent?void 0:o.getOffsetParent(s.floating)),b=await(null==o.isElement?void 0:o.isElement(v))&&await(null==o.getScale?void 0:o.getScale(v))||{x:1,y:1},w=Wi(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:y,offsetParent:v,strategy:c}):y);return{top:(g.top-w.top+p.top)/b.y,bottom:(w.bottom-g.bottom+p.bottom)/b.y,left:(g.left-w.left+p.left)/b.x,right:(w.right-g.right+p.right)/b.x}}const Gi=new Set(["left","top"]);function Ji(){return"undefined"!=typeof window}function Yi(e){return Qi(e)?(e.nodeName||"").toLowerCase():"#document"}function Zi(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Xi(e){var t;return null==(t=(Qi(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function Qi(e){return!!Ji()&&(e instanceof Node||e instanceof Zi(e).Node)}function eo(e){return!!Ji()&&(e instanceof Element||e instanceof Zi(e).Element)}function to(e){return!!Ji()&&(e instanceof HTMLElement||e instanceof Zi(e).HTMLElement)}function no(e){return!(!Ji()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof Zi(e).ShadowRoot)}const ro=new Set(["inline","contents"]);function io(e){const{overflow:t,overflowX:n,overflowY:r,display:i}=yo(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!ro.has(i)}const oo=new Set(["table","td","th"]);function ao(e){return oo.has(Yi(e))}const so=[":popover-open",":modal"];function co(e){return so.some(t=>{try{return e.matches(t)}catch(e){return!1}})}const lo=["transform","translate","scale","rotate","perspective"],uo=["transform","translate","scale","rotate","perspective","filter"],ho=["paint","layout","strict","content"];function fo(e){const t=po(),n=eo(e)?yo(e):e;return lo.some(e=>!!n[e]&&"none"!==n[e])||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||uo.some(e=>(n.willChange||"").includes(e))||ho.some(e=>(n.contain||"").includes(e))}function po(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}const mo=new Set(["html","body","#document"]);function go(e){return mo.has(Yi(e))}function yo(e){return Zi(e).getComputedStyle(e)}function vo(e){return eo(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function bo(e){if("html"===Yi(e))return e;const t=e.assignedSlot||e.parentNode||no(e)&&e.host||Xi(e);return no(t)?t.host:t}function wo(e){const t=bo(e);return go(t)?e.ownerDocument?e.ownerDocument.body:e.body:to(t)&&io(t)?t:wo(t)}function Oo(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const i=wo(e),o=i===(null==(r=e.ownerDocument)?void 0:r.body),a=Zi(i);if(o){const e=To(a);return t.concat(a,a.visualViewport||[],io(i)?i:[],e&&n?Oo(e):[])}return t.concat(i,Oo(i,[],n))}function To(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function So(e){const t=yo(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const i=to(e),o=i?e.offsetWidth:n,a=i?e.offsetHeight:r,s=ki(n)!==o||ki(r)!==a;return s&&(n=o,r=a),{width:n,height:r,$:s}}function ko(e){return eo(e)?e:e.contextElement}function Eo(e){const t=ko(e);if(!to(t))return Ci(1);const n=t.getBoundingClientRect(),{width:r,height:i,$:o}=So(t);let a=(o?ki(n.width):n.width)/r,s=(o?ki(n.height):n.height)/i;return a&&Number.isFinite(a)||(a=1),s&&Number.isFinite(s)||(s=1),{x:a,y:s}}const Co=Ci(0);function Po(e){const t=Zi(e);return po()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:Co}function Ao(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const i=e.getBoundingClientRect(),o=ko(e);let a=Ci(1);t&&(r?eo(r)&&(a=Eo(r)):a=Eo(e));const s=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==Zi(e))&&t}(o,n,r)?Po(o):Ci(0);let c=(i.left+s.x)/a.x,l=(i.top+s.y)/a.y,u=i.width/a.x,h=i.height/a.y;if(o){const e=Zi(o),t=r&&eo(r)?Zi(r):r;let n=e,i=To(n);for(;i&&r&&t!==n;){const e=Eo(i),t=i.getBoundingClientRect(),r=yo(i),o=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,a=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,h*=e.y,c+=o,l+=a,n=Zi(i),i=To(n)}}return Wi({width:u,height:h,x:c,y:l})}function jo(e,t){const n=vo(e).scrollLeft;return t?t.left+n:Ao(Xi(e)).left+n}function xo(e,t,n){void 0===n&&(n=!1);const r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-(n?0:jo(e,r)),y:r.top+t.scrollTop}}const Mo=new Set(["absolute","fixed"]);function _o(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=Zi(e),r=Xi(e),i=n.visualViewport;let o=r.clientWidth,a=r.clientHeight,s=0,c=0;if(i){o=i.width,a=i.height;const e=po();(!e||e&&"fixed"===t)&&(s=i.offsetLeft,c=i.offsetTop)}return{width:o,height:a,x:s,y:c}}(e,n);else if("document"===t)r=function(e){const t=Xi(e),n=vo(e),r=e.ownerDocument.body,i=Si(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=Si(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let a=-n.scrollLeft+jo(e);const s=-n.scrollTop;return"rtl"===yo(r).direction&&(a+=Si(t.clientWidth,r.clientWidth)-i),{width:i,height:o,x:a,y:s}}(Xi(e));else if(eo(t))r=function(e,t){const n=Ao(e,!0,"fixed"===t),r=n.top+e.clientTop,i=n.left+e.clientLeft,o=to(e)?Eo(e):Ci(1);return{width:e.clientWidth*o.x,height:e.clientHeight*o.y,x:i*o.x,y:r*o.y}}(t,n);else{const n=Po(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return Wi(r)}function Io(e,t){const n=bo(e);return!(n===t||!eo(n)||go(n))&&("fixed"===yo(n).position||Io(n,t))}function Lo(e,t,n){const r=to(t),i=Xi(t),o="fixed"===n,a=Ao(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const c=Ci(0);function l(){c.x=jo(i)}if(r||!r&&!o)if(("body"!==Yi(t)||io(i))&&(s=vo(t)),r){const e=Ao(t,!0,o,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}else i&&l();o&&!r&&i&&l();const u=!i||r||o?Ci(0):xo(i,s);return{x:a.left+s.scrollLeft-c.x-u.x,y:a.top+s.scrollTop-c.y-u.y,width:a.width,height:a.height}}function No(e){return"static"===yo(e).position}function Ro(e,t){if(!to(e)||"fixed"===yo(e).position)return null;if(t)return t(e);let n=e.offsetParent;return Xi(e)===n&&(n=n.ownerDocument.body),n}function Do(e,t){const n=Zi(e);if(co(e))return n;if(!to(e)){let t=bo(e);for(;t&&!go(t);){if(eo(t)&&!No(t))return t;t=bo(t)}return n}let r=Ro(e,t);for(;r&&ao(r)&&No(r);)r=Ro(r,t);return r&&go(r)&&No(r)&&!fo(r)?n:r||function(e){let t=bo(e);for(;to(t)&&!go(t);){if(fo(t))return t;if(co(t))return null;t=bo(t)}return null}(e)||n}const Fo={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e;const o="fixed"===i,a=Xi(r),s=!!t&&co(t.floating);if(r===a||s&&o)return n;let c={scrollLeft:0,scrollTop:0},l=Ci(1);const u=Ci(0),h=to(r);if((h||!h&&!o)&&(("body"!==Yi(r)||io(a))&&(c=vo(r)),to(r))){const e=Ao(r);l=Eo(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}const f=!a||h||o?Ci(0):xo(a,c,!0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}},getDocumentElement:Xi,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e;const o=[..."clippingAncestors"===n?co(t)?[]:function(e,t){const n=t.get(e);if(n)return n;let r=Oo(e,[],!1).filter(e=>eo(e)&&"body"!==Yi(e)),i=null;const o="fixed"===yo(e).position;let a=o?bo(e):e;for(;eo(a)&&!go(a);){const t=yo(a),n=fo(a);n||"fixed"!==t.position||(i=null),(o?!n&&!i:!n&&"static"===t.position&&i&&Mo.has(i.position)||io(a)&&!n&&Io(e,a))?r=r.filter(e=>e!==a):i=t,a=bo(a)}return t.set(e,r),r}(t,this._c):[].concat(n),r],a=o[0],s=o.reduce((e,n)=>{const r=_o(t,n,i);return e.top=Si(r.top,e.top),e.right=Ti(r.right,e.right),e.bottom=Ti(r.bottom,e.bottom),e.left=Si(r.left,e.left),e},_o(t,a,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:Do,getElementRects:async function(e){const t=this.getOffsetParent||Do,n=this.getDimensions,r=await n(e.floating);return{reference:Lo(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:n}=So(e);return{width:t,height:n}},getScale:Eo,isElement:eo,isRTL:function(e){return"rtl"===yo(e).direction}};function Bo(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}const Vo=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:i,y:o,placement:a,middlewareData:s}=t,c=await async function(e,t){const{placement:n,platform:r,elements:i}=e,o=await(null==r.isRTL?void 0:r.isRTL(i.floating)),a=Mi(n),s=_i(n),c="y"===Ri(n),l=Gi.has(a)?-1:1,u=o&&c?-1:1,h=xi(t,e);let{mainAxis:f,crossAxis:d,alignmentAxis:p}="number"==typeof h?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return s&&"number"==typeof p&&(d="end"===s?-1*p:p),c?{x:d*u,y:f*l}:{x:f*l,y:d*u}}(t,e);return a===(null==(n=s.offset)?void 0:n.placement)&&null!=(r=s.arrow)&&r.alignmentOffset?{}:{x:i+c.x,y:o+c.y,data:{...c,placement:a}}}}},qo=function(e){return void 0===e&&(e={}),{name:"autoPlacement",options:e,async fn(t){var n,r,i;const{rects:o,middlewareData:a,placement:s,platform:c,elements:l}=t,{crossAxis:u=!1,alignment:h,allowedPlacements:f=Oi,autoAlignment:d=!0,...p}=xi(e,t),m=void 0!==h||f===Oi?function(e,t,n){return(e?[...n.filter(t=>_i(t)===e),...n.filter(t=>_i(t)!==e)]:n.filter(e=>Mi(e)===e)).filter(n=>!e||_i(n)===e||!!t&&Bi(n)!==n)}(h||null,d,f):f,g=await Ki(t,p),y=(null==(n=a.autoPlacement)?void 0:n.index)||0,v=m[y];if(null==v)return{};const b=Fi(v,o,await(null==c.isRTL?void 0:c.isRTL(l.floating)));if(s!==v)return{reset:{placement:m[0]}};const w=[g[Mi(v)],g[b[0]],g[b[1]]],O=[...(null==(r=a.autoPlacement)?void 0:r.overflows)||[],{placement:v,overflows:w}],T=m[y+1];if(T)return{data:{index:y+1,overflows:O},reset:{placement:T}};const S=O.map(e=>{const t=_i(e.placement);return[e.placement,t&&u?e.overflows.slice(0,2).reduce((e,t)=>e+t,0):e.overflows[0],e.overflows]}).sort((e,t)=>e[1]-t[1]),k=(null==(i=S.filter(e=>e[2].slice(0,_i(e[0])?2:3).every(e=>e<=0))[0])?void 0:i[0])||S[0][0];return k!==s?{data:{index:y+1,overflows:O},reset:{placement:k}}:{}}}},Uo=function(e){return void 0===e&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:i}=t,{mainAxis:o=!0,crossAxis:a=!1,limiter:s={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...c}=xi(e,t),l={x:n,y:r},u=await Ki(t,c),h=Ri(Mi(i)),f=Ii(h);let d=l[f],p=l[h];if(o){const e="y"===f?"bottom":"right";d=ji(d+u["y"===f?"top":"left"],d,d-u[e])}if(a){const e="y"===h?"bottom":"right";p=ji(p+u["y"===h?"top":"left"],p,p-u[e])}const m=s.fn({...t,[f]:d,[h]:p});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[f]:o,[h]:a}}}}}},zo=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:i,middlewareData:o,rects:a,initialPlacement:s,platform:c,elements:l}=t,{mainAxis:u=!0,crossAxis:h=!0,fallbackPlacements:f,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:m=!0,...g}=xi(e,t);if(null!=(n=o.arrow)&&n.alignmentOffset)return{};const y=Mi(i),v=Ri(s),b=Mi(s)===s,w=await(null==c.isRTL?void 0:c.isRTL(l.floating)),O=f||(b||!m?[Hi(s)]:function(e){const t=Hi(e);return[Bi(e),t,Bi(t)]}(s)),T="none"!==p;!f&&T&&O.push(...function(e,t,n,r){const i=_i(e);let o=function(e,t,n){switch(e){case"top":case"bottom":return n?t?qi:Vi:t?Vi:qi;case"left":case"right":return t?Ui:zi;default:return[]}}(Mi(e),"start"===n,r);return i&&(o=o.map(e=>e+"-"+i),t&&(o=o.concat(o.map(Bi)))),o}(s,m,p,w));const S=[s,...O],k=await Ki(t,g),E=[];let C=(null==(r=o.flip)?void 0:r.overflows)||[];if(u&&E.push(k[y]),h){const e=Fi(i,a,w);E.push(k[e[0]],k[e[1]])}if(C=[...C,{placement:i,overflows:E}],!E.every(e=>e<=0)){var P,A;const e=((null==(P=o.flip)?void 0:P.index)||0)+1,t=S[e];if(t&&("alignment"!==h||v===Ri(t)||C.every(e=>Ri(e.placement)!==v||e.overflows[0]>0)))return{data:{index:e,overflows:C},reset:{placement:t}};let n=null==(A=C.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:A.placement;if(!n)switch(d){case"bestFit":{var j;const e=null==(j=C.filter(e=>{if(T){const t=Ri(e.placement);return t===v||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:j[0];e&&(n=e);break}case"initialPlacement":n=s}if(i!==n)return{reset:{placement:n}}}return{}}}};var Ho=e=>{Object.assign(e,{show(){var e;null===(e=this.cancelBehaviourOpen)||void 0===e||e.call(this),this.openValue=!0},hide(){this.openValue=!1},toggle(){var e;null===(e=this.cancelBehaviourOpen)||void 0===e||e.call(this),this.openValue=!this.openValue},setupFloatingUI(e){var{trigger:t,popover:n,strategy:r}=e;this.floatingUICleanup=function(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:a="function"==typeof ResizeObserver,layoutShift:s="function"==typeof IntersectionObserver,animationFrame:c=!1}=r,l=ko(e),u=i||o?[...l?Oo(l):[],...Oo(t)]:[];u.forEach(e=>{i&&e.addEventListener("scroll",n,{passive:!0}),o&&e.addEventListener("resize",n)});const h=l&&s?function(e,t){let n,r=null;const i=Xi(e);function o(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return function a(s,c){void 0===s&&(s=!1),void 0===c&&(c=1),o();const l=e.getBoundingClientRect(),{left:u,top:h,width:f,height:d}=l;if(s||t(),!f||!d)return;const p={rootMargin:-Ei(h)+"px "+-Ei(i.clientWidth-(u+f))+"px "+-Ei(i.clientHeight-(h+d))+"px "+-Ei(u)+"px",threshold:Si(0,Ti(1,c))||1};let m=!0;function g(t){const r=t[0].intersectionRatio;if(r!==c){if(!m)return a();r?a(!1,r):n=setTimeout(()=>{a(!1,1e-7)},1e3)}1!==r||Bo(l,e.getBoundingClientRect())||a(),m=!1}try{r=new IntersectionObserver(g,{...p,root:i.ownerDocument})}catch(e){r=new IntersectionObserver(g,p)}r.observe(e)}(!0),o}(l,n):null;let f,d=-1,p=null;a&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&(p.unobserve(t),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var e;null==(e=p)||e.observe(t)})),n()}),l&&!c&&p.observe(l),p.observe(t));let m=c?Ao(e):null;return c&&function t(){const r=Ao(e);m&&!Bo(m,r)&&n(),m=r,f=requestAnimationFrame(t)}(),n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener("scroll",n),o&&e.removeEventListener("resize",n)}),null==h||h(),null==(e=p)||e.disconnect(),p=null,c&&cancelAnimationFrame(f)}}(t,n,()=>{((e,t,n)=>{const r=new Map,i={platform:Fo,...n},o={...i.platform,_c:r};return(async(e,t,n)=>{const{placement:r="bottom",strategy:i="absolute",middleware:o=[],platform:a}=n,s=o.filter(Boolean),c=await(null==a.isRTL?void 0:a.isRTL(t));let l=await a.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:h}=$i(l,r,c),f=r,d={},p=0;for(let n=0;n{var{x:t,y:r,strategy:i}=e,o={left:"".concat(t,"px"),top:"".concat(r,"px"),position:i};Object.assign(n.style,o)})})},openValueChanged(){var e;this.disabledValue||(this.openValue?(null===(e=this.preparePopoverOpenAnimation)||void 0===e||e.call(this),this.popoverTarget.showPopover(),this.popoverTarget.setAttribute("aria-expanded","true"),this.onPopoverOpened&&this.onPopoverOpened()):(this.popoverTarget.hidePopover(),this.popoverTarget.removeAttribute("aria-expanded"),this.onPopoverClosed&&this.onPopoverClosed()))}})};function Wo(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function $o(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function a(e){Wo(o,r,i,a,s,"next",e)}function s(e){Wo(o,r,i,a,s,"throw",e)}a(void 0)})}}function Ko(e,t){for(var n=0;n{var[n,r]=e;t.searchParams.append(n,r)}),yield fetch(t,{method:"GET",headers:ii.headers})}),function(e){return o.apply(this,arguments)})},{key:"catchUp",value:function(e){return this.index({after_id:e,session:ii.session})}},{key:"create",value:(i=ea(function*(e){var t=yield fetch(this.url,{method:"POST",headers:{Authorization:"Bearer ".concat(ii.business.id)},body:e});return new me(t.ok,t)}),function(e){return i.apply(this,arguments)})},{key:"markAsSeen",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=e?this.url+"/".concat(e):this.url+"/seen";fetch(t,{method:"PATCH",headers:ii.headers,body:JSON.stringify({session:ii.session})})}},{key:"url",get:function(){return e.endpoint.replace(":id",this.webchatId)}}],r=[{key:"endpoint",get:function(){return U.endpoint("public/webchats/:id/messages")}}],n&&ta(t.prototype,n),r&&ta(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const ia=ra;function oa(e,t){for(var n=0;n{a.send(s)})}},{key:"onMessage",value:function(t){var n=e=>{var n=JSON.parse(e.data),{type:r,message:i}=n;this.ignoredEvents.includes(r)||t(i)};e.messageHandlers.add(n),e.ensureWebSocket().addEventListener("message",n)}},{key:"onDisconnect",value:function(t){e.disconnectHandlers.add(t)}},{key:"onSubscriptionConfirmed",value:function(t){e.subscriptionConfirmHandlers.add(t)}},{key:"webSocket",get:function(){return e.ensureWebSocket()}},{key:"ignoredEvents",get:function(){return["ping","confirm_subscription","welcome"]}}],r=[{key:"ensureWebSocket",value:function(){return this.webSocket&&!this.closedWebSocket(this.webSocket)?this.webSocket:(this.webSocket&&(this.needsResubscribe=!0),this.openWebSocket())}},{key:"openWebSocket",value:function(){this.clearReconnectTimeout();var e=new WebSocket(U.actionCableUrl);return this.webSocket=e,this.installWebSocketHandlers(e),e}},{key:"installWebSocketHandlers",value:function(e){e.addEventListener("open",()=>this.handleOpen(e)),e.addEventListener("close",()=>this.handleDisconnect(e)),e.addEventListener("error",()=>this.handleDisconnect(e)),e.addEventListener("message",e=>this.handleControlMessage(e)),this.messageHandlers.forEach(t=>{e.addEventListener("message",t)})}},{key:"handleOpen",value:function(e){e===this.webSocket&&(this.reconnectAttempts=0,this.needsResubscribe&&(this.needsResubscribe=!1,this.resubscribeChannels()))}},{key:"handleControlMessage",value:function(e){var t;try{t=JSON.parse(e.data)}catch(e){return}"confirm_subscription"===t.type&&this.subscriptionConfirmHandlers.forEach(e=>e(t.identifier))}},{key:"handleDisconnect",value:function(e){e===this.webSocket&&(this.disconnectHandlers.forEach(e=>e()),this.webSocket=null,this.needsResubscribe=!0,this.scheduleReconnect())}},{key:"scheduleReconnect",value:function(){this.reconnectTimeout||(this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,this.reconnectAttempts+=1,this.openWebSocket()},this.reconnectDelay))}},{key:"clearReconnectTimeout",value:function(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null)}},{key:"resubscribeChannels",value:function(){this.channels.forEach(e=>{var t=e.resubscribe||e.subscribe;"function"==typeof t&&t.call(e)})}},{key:"closedWebSocket",value:function(e){return e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING}},{key:"reconnectDelay",get:function(){var e=Math.min(this.reconnectMaxDelay,this.reconnectBaseDelay*2**this.reconnectAttempts);return e+Math.round(e*this.reconnectJitter*Math.random())}}],n&&oa(t.prototype,n),r&&oa(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function ca(e,t){for(var n=0;nr.handleSubscriptionConfirmed(e)),r.subscribe(),r}return t=a,(n=[{key:"subscribe",value:function(){this.subscribed=!0;var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"subscribe",identifier:e})}},{key:"unsubscribe",value:function(){this.subscribed=!1;var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"unsubscribe",identifier:e})}},{key:"resubscribe",value:function(){!1!==this.subscribed&&(this.awaitingReconnectConfirmation=!0,this.subscribe())}},{key:"onReconnect",value:function(e){this.reconnectCallbacks.add(e)}},{key:"handleSubscriptionConfirmed",value:function(e){this.awaitingReconnectConfirmation&&this.matchesIdentifier(e)&&(this.awaitingReconnectConfirmation=!1,this.reconnectCallbacks.forEach(e=>e()))}},{key:"matchesIdentifier",value:function(e){var t;try{t="string"==typeof e?JSON.parse(e):e}catch(e){return!1}return"WebchatChannel"===t.channel&&t.id===this.id&&t.session===this.session&&t.conversation===this.conversation}},{key:"startTypingIndicator",value:function(){var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"message",identifier:e,data:{action:"started_typing"}})}},{key:"stopTypingIndicator",value:function(){var e={channel:"WebchatChannel",id:this.id,session:this.session,conversation:this.conversation};this.send({command:"typing:stop",identifier:e,data:{action:"stopped_typing"}})}},{key:"onMessage",value:function(e){ua(fa(a.prototype),"onMessage",this).call(this,t=>{"message"===t.type&&e(t)})}},{key:"onReaction",value:function(e){ua(fa(a.prototype),"onMessage",this).call(this,t=>{"reaction.create"!==t.type&&"reaction.destroy"!==t.type||e(t)})}},{key:"onTypingStart",value:function(e){ua(fa(a.prototype),"onMessage",this).call(this,t=>{"started_typing"===t.type&&e(t)})}},{key:"updateSubscriptionWith",value:function(e){this.unsubscribe(),setTimeout(()=>{this.conversation=e,this.subscribe()},1e3)}}])&&ca(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),a}(sa);const pa=da;var ma=e=>{Object.assign(e,{scheduleBehaviourOpen(){if(this.shouldAutoOpenFromBehaviour()){var e=1e3*Number(this.behaviourValue.delay_seconds||0);this.behaviourOpenTimeout=window.setTimeout(()=>{this.behaviourOpenTimeout=null,this.openValue||(this.openValue=!0,this.markBehaviourAutoOpened())},e)}},cancelBehaviourOpen(){window.clearTimeout(this.behaviourOpenTimeout),this.behaviourOpenTimeout=null},shouldAutoOpenFromBehaviour(){var e=this.behaviourValue;return!(!e||"on_load"!==e.trigger||e.first_visit_only&&localStorage.getItem(this.firstVisitKey())||e.once_per_session&&sessionStorage.getItem(this.sessionKey()))},markBehaviourAutoOpened(){this.behaviourValue.first_visit_only&&localStorage.setItem(this.firstVisitKey(),"1"),this.behaviourValue.once_per_session&&sessionStorage.setItem(this.sessionKey(),"1")},firstVisitKey(){return"hellotext--webchat--".concat(this.idValue,"--auto-opened")},sessionKey(){return"hellotext--webchat--".concat(this.idValue,"--auto-opened-session")}})},ga=e=>{Object.assign(e,{setupOpeningSequence(){this.openingSequenceStarted=!1,this.openingSequenceCancelled=!1,this.openingSequenceTimeout=null,this.openingSequenceMessages=[],this.revealedOpeningSequenceMessageIds=[]},teardownOpeningSequence(){this.cancelOpeningSequence()},startOpeningSequence(){this.openingSequenceMessages=Array.from(this.openingSequenceMessageTargets||[]),this.openingSequenceCanStart()&&(this.openingSequenceStarted=!0,this.openingSequenceCancelled=!1,this.revealedOpeningSequenceMessageIds=[],this.playOpeningSequenceMessageAt(0))},openingSequenceCanStart(){return!this.conversationIdValue&&this.hasOpeningSequenceTarget&&this.openingSequenceMessages.length>0&&!this.openingSequenceStarted},playOpeningSequenceMessageAt(e){var t=this.openingSequenceMessages[e];if(t){var n=1e3*this.openingSequenceMessageDelay(t);this.openingSequenceTimeout=window.setTimeout(()=>{this.openingSequenceTimeout=null,this.openingSequenceCancelled||(this.revealOpeningSequenceMessage(t),this.playOpeningSequenceMessageAt(e+1))},n)}},revealOpeningSequenceMessage(e){this.messagesContainerTarget.insertBefore(e,this.messageTemplateTarget),e.hidden=!1,this.recordOpeningSequenceMessage(e),this.scrollOpeningSequenceToBottom()},recordOpeningSequenceMessage(e){var t=e.dataset.openingSequenceMessageId;t&&!this.revealedOpeningSequenceMessageIds.includes(t)&&this.revealedOpeningSequenceMessageIds.push(t)},openingSequenceMessageDelay(e){var t=Number(e.dataset.delaySeconds||0);return Number.isFinite(t)?t:0},scrollOpeningSequenceToBottom(){this.messagesContainerTarget.scroll&&this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight,behavior:"smooth"})},cancelOpeningSequence(){this.openingSequenceCancelled=!0,null!==this.openingSequenceTimeout&&void 0!==this.openingSequenceTimeout&&(window.clearTimeout(this.openingSequenceTimeout),this.openingSequenceTimeout=null)},appendOpeningSequenceMessageIds(e){this.cancelOpeningSequence(),(this.revealedOpeningSequenceMessageIds||[]).forEach(t=>{e.append("message[opening_sequence_message_ids][]",t)})},clearRevealedOpeningSequenceMessageIds(){this.revealedOpeningSequenceMessageIds=[]}})},ya=e=>{Object.assign(e,{setupTeaser(){this.teaserCycleTimeout=null,this.teaserMessages=[],this.boundOnTeaserClick=this.boundOnTeaserClick||this.onTeaserClick.bind(this),this.hasTeaserTarget&&(this.teaserTarget.addEventListener("click",this.boundOnTeaserClick),this.startTeaserPresentation())},teardownTeaser(){this.stopTeaserCycle(),this.hasTeaserTarget&&this.boundOnTeaserClick&&this.teaserTarget.removeEventListener("click",this.boundOnTeaserClick)},collectTeaserMessages(){return this.hasTeaserTarget?Array.from(this.teaserTarget.querySelectorAll("[data-teaser-message]")):[]},startTeaserPresentation(){this.stopTeaserCycle(),this.teaserMessages=this.collectTeaserMessages(),this.hasTeaserTarget&&(0!==this.teaserMessages.length?this.openValue||this.conversationIdValue||this.hasRenderedConversationMessages()?this.dismissTeaserForSession():this.teaserSeenForSession()?this.hideTeaser():(this.teaserTarget.classList.remove("invisible"),this.showTeaserMessage(0),this.teaserMessages.length<2||this.scheduleNextTeaserMessage(0)):this.hideTeaser())},scheduleNextTeaserMessage(e){var t=e+1;if(!(t>=this.teaserMessages.length)){var n=this.teaserMessages[e],r=this.teaserPresentationDelay(n);this.teaserCycleTimeout=window.setTimeout(()=>{this.teaserCycleTimeout=null,this.showTeaserMessage(t),this.scheduleNextTeaserMessage(t)},r)}},showTeaserMessage(e){this.teaserMessages.forEach((t,n)=>{t.classList.toggle("hidden",n!==e)})},stopTeaserCycle(){null!==this.teaserCycleTimeout&&void 0!==this.teaserCycleTimeout&&(window.clearTimeout(this.teaserCycleTimeout),this.teaserCycleTimeout=null)},teaserMessageDelay(e){var t=Number(e.dataset.delaySeconds||0);return Number.isFinite(t)?t:0},teaserPresentationDelay(e){return Math.max(1e3*this.teaserMessageDelay(e),250)},hasRenderedConversationMessages(){var e=[];try{e=Array.from(this.messageTargets||[])}catch(t){e=[]}return e.some(e=>e!==this.messageTemplateTarget)},teaserSeenKey(){var e=this.hasTeaserTarget?this.teaserTarget.dataset.teaserVersion:"",t=e?":".concat(e):"";return"hellotext:webchat:".concat(this.idValue||this.element.id,":teaser-seen").concat(t)},teaserSeenForSession(){try{return"true"===window.sessionStorage.getItem(this.teaserSeenKey())}catch(e){return!1}},markTeaserSeenForSession(){try{window.sessionStorage.setItem(this.teaserSeenKey(),"true")}catch(e){}},dismissTeaserForSession(){this.markTeaserSeenForSession(),this.hideTeaser()},hideTeaser(){this.stopTeaserCycle(),this.hasTeaserTarget&&this.teaserTarget.classList.add("invisible")},onTeaserClick(e){e.target.closest("a")||(this.dismissTeaserForSession(),this.show())}})};function va(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ba(e){for(var t=1;t{this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight,behavior:"instant"})});var t=this.typingIndicatorKeepAliveValue;this.incomingTypingIndicatorTimeout=setTimeout(()=>{this.clearTypingIndicator()},t)}},{key:"resetTypingIndicatorTimer",value:function(){if(this.typingIndicatorVisible){clearTimeout(this.incomingTypingIndicatorTimeout),clearTimeout(this.optimisticTypingTimeout);var e=this.typingIndicatorKeepAliveValue;this.incomingTypingIndicatorTimeout=setTimeout(()=>{this.clearTypingIndicator()},e)}}},{key:"clearTypingIndicator",value:function(){this.hasTypingIndicatorTarget&&this.typingIndicatorTarget.remove(),this.typingIndicatorVisible=!1,clearTimeout(this.incomingTypingIndicatorTimeout),clearTimeout(this.optimisticTypingTimeout)}},{key:"onMessageInputChange",value:function(){this.resizeInput(),clearTimeout(this.typingIndicatorTimeout),this.hasSentTypingIndicator||(this.webChatChannel.startTypingIndicator(),this.hasSentTypingIndicator=!0),this.typingIndicatorTimeout=setTimeout(()=>{this.hasSentTypingIndicator=!1},3e3)}},{key:"onOutboundMessageSent",value:function(e){var{data:t}=e,n={"message:sent":e=>{var t=(new DOMParser).parseFromString(e.element,"text/html").body.firstElementChild;this.localizeMessageTimestamps(t),this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(t,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(t),t.scrollIntoView({behavior:"instant"})},"message:failed":e=>{var t=this.messagesContainerTarget.querySelector("#".concat(e.id));this.markMessageFailed(t,e.reason)}};n[t.type]?n[t.type](t):console.log("Unhandled message event: ".concat(t.type))}},{key:"onScroll",value:(u=Ta(function*(){if(!(this.messagesContainerTarget.scrollTop>300||!this.nextPageValue||this.fetchingNextPage)){this.fetchingNextPage=!0;var e=yield this.messagesAPI.index({page:this.nextPageValue,session:ii.session}),{next:t,messages:n}=yield e.json();this.nextPageValue=t,this.oldScrollHeight=this.messagesContainerTarget.scrollHeight,n.forEach(e=>{var{body:t,attachments:n}=e,r=e.created_at||e.createdAt,i=this.messageTemplateTarget.cloneNode(!0);i.classList.add("hellotext--webchat-message"),i.setAttribute("data-hellotext--webchat-target","message"),i.setAttribute("data-id",e.id),r&&i.setAttribute("data-created-at",r),i.style.removeProperty("display"),tr(i.querySelector("[data-body]"),t),"received"===e.state?i.classList.add("received"):i.classList.remove("received"),n&&n.forEach(e=>{var t,n=this.attachmentImageTarget.cloneNode(!0);n.removeAttribute("data-hellotext--webchat-target"),n.src=e,n.style.display="block",null===(t=this.messageAttachmentsContainer(i))||void 0===t||t.appendChild(n)}),i.setAttribute("data-body",t),this.localizeMessageTimestamp(i.querySelector("[data-message-timestamp]"),r),this.messagesContainerTarget.prepend(i)}),this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight-this.oldScrollHeight,behavior:"instant"}),this.fetchingNextPage=!1}}),function(){return u.apply(this,arguments)})},{key:"onClickOutside",value:function(e){N.mode===L.POPOVER&&this.openValue&&e.target.nodeType&&!1===this.element.contains(e.target)&&(this.openValue=!1)}},{key:"closePopover",value:function(){this.clearPopoverOpenAnimation(),this.popoverTarget.classList.remove(...this.fadeOutClasses),this.openValue=!1}},{key:"preparePopoverOpenAnimation",value:function(){this.clearPopoverOpenAnimation(),this.popoverTarget.classList.remove(...this.fadeOutClasses),this.popoverTarget.classList.add("hellotext--webchat-popover-opening"),this.popoverOpenAnimationTimeout=setTimeout(()=>{this.popoverTarget.classList.remove("hellotext--webchat-popover-opening"),this.popoverOpenAnimationTimeout=null},120)}},{key:"clearPopoverOpenAnimation",value:function(){var e;this.popoverOpenAnimationTimeout&&(clearTimeout(this.popoverOpenAnimationTimeout),this.popoverOpenAnimationTimeout=null),null===(e=this.popoverTarget)||void 0===e||e.classList.remove("hellotext--webchat-popover-opening")}},{key:"onPopoverOpened",value:function(){var e;this.popoverTarget.classList.remove(...this.fadeOutClasses),null===(e=this.dismissTeaserForSession)||void 0===e||e.call(this),this.onMobile||this.focusComposeInput(),this.scrolled||(requestAnimationFrame(()=>{this.messagesContainerTarget.scroll({top:this.messagesContainerTarget.scrollHeight,behavior:"instant"})}),this.scrolled=!0),ii.eventEmitter.dispatch("webchat:opened"),localStorage.setItem("hellotext--webchat--".concat(this.idValue),"opened"),this.messageTeaserValue&&(this.messageTeaserValue=null),this.startOpeningSequence(),"none"!==this.unreadCounterTarget.style.display&&(this.unreadCounterTarget.style.display="none",this.unreadCounterTarget.innerText="0",this.messagesAPI.markAsSeen())}},{key:"onPopoverClosed",value:function(){this.clearPopoverOpenAnimation(),ii.eventEmitter.dispatch("webchat:closed"),localStorage.setItem("hellotext--webchat--".concat(this.idValue),"closed")}},{key:"onMessageReaction",value:function(e){var{message:t,reaction:n,type:r}=e,i=this.messageTargets.find(e=>e.dataset.id===t).querySelector("[data-reactions]");if("reaction.destroy"===r)return i.querySelector('[data-id="'.concat(n.id,'"]')).remove();if(i.querySelector('[data-id="'.concat(n.id,'"]')))i.querySelector('[data-id="'.concat(n.id,'"]')).innerText=n.emoji;else{var o=document.createElement("span");o.innerText=n.emoji,o.setAttribute("data-id",n.id),i.appendChild(o)}}},{key:"onMessageReceived",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{id:r,body:i,attachments:o,teaser:a}=e,s=e.created_at||e.createdAt;if(this.claimMessageId(r)){if(null===(t=this.hideTeaser)||void 0===t||t.call(this),e.carousel)return this.insertCarouselMessage(e,n);var c=this.messageTemplateTarget.cloneNode(!0);c.classList.add("hellotext--webchat-message"),c.style.display="flex",tr(c.querySelector("[data-body]"),i),c.setAttribute("data-id",r),c.setAttribute("data-hellotext--webchat-target","message"),this.setMessageCreatedAt(c,s),this.localizeMessageTimestamp(c.querySelector("[data-message-timestamp]"),s),o&&o.forEach(e=>{var t,n=this.attachmentImageTarget.cloneNode(!0);n.src=e,n.style.display="block",null===(t=this.messageAttachmentsContainer(c))||void 0===t||t.appendChild(n)}),this.clearTypingIndicator(),this.insertMessageElement(c),ii.eventEmitter.dispatch("webchat:message:received",ba(ba({},e),{},{body:c.querySelector("[data-body]").innerText})),!1!==n.scroll&&c.scrollIntoView({behavior:"smooth"}),this.updateMessageTeaser(a),this.openValue?this.messagesAPI.markAsSeen(r):this.incrementUnreadCounter()}}},{key:"claimMessageId",value:function(e){var t=this.messageTargets||[];return!this.messageIds.has(e)&&(this.messageIds.add(e),!t.some(t=>t.dataset.id===e))}},{key:"captureCatchUpCursor",value:function(){this.catchUpAfterMessageId=this.lastRenderedMessageId}},{key:"catchUpMessages",value:(l=Ta(function*(){var e=this.catchUpAfterMessageId;if(e&&!this.fetchingCatchUpMessages){this.fetchingCatchUpMessages=!0;try{var t=yield this.messagesAPI.catchUp(e),{messages:n=[]}=yield t.json();n.forEach(e=>this.onMessageReceived(e,{scroll:!1})),this.catchUpAfterMessageId=this.lastRenderedMessageId}finally{this.fetchingCatchUpMessages=!1}}}),function(){return l.apply(this,arguments)})},{key:"lastRenderedMessageId",get:function(){var e,t=this.persistedMessageElements;return(null===(e=t[t.length-1])||void 0===e?void 0:e.dataset.id)||null}},{key:"persistedMessageElements",get:function(){return Array.from(this.messagesContainerTarget.querySelectorAll(".hellotext--webchat-message[data-id]"))}},{key:"setMessageCreatedAt",value:function(e,t){t&&e.setAttribute("data-created-at",t)}},{key:"insertMessageElement",value:function(e){var t=this.nextMessageElementFor(e);t?this.messagesContainerTarget.insertBefore(e,t):this.messagesContainerTarget.appendChild(e)}},{key:"nextMessageElementFor",value:function(e){var t=Date.parse(e.dataset.createdAt);return Number.isNaN(t)?null:this.persistedMessageElements.find(n=>{if(n===e)return!1;var r=Date.parse(n.dataset.createdAt);return!Number.isNaN(r)&&r>t})}},{key:"updateMessageTeaser",value:function(e){this.messageTeaserValue=e,this.messageTeaserValue&&this.hasTeaserTarget&&this.hasInboundMessageTeaserTarget&&this.hasInboundMessageTeaserBodyTarget&&(this.teaserMessageTargets.forEach(e=>e.classList.add("hidden")),this.inboundMessageTeaserBodyTarget.textContent=this.messageTeaserValue,this.inboundMessageTeaserTarget.classList.remove("hidden"),this.teaserTarget.classList.toggle("invisible",this.openValue))}},{key:"insertCarouselMessage",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.html,i=e.created_at||e.createdAt,o=function(e){return er(e,Qn)}(r).firstElementChild;o.classList.add("hellotext--webchat-message"),o.setAttribute("data-id",e.id),o.setAttribute("data-hellotext--webchat-target","message"),this.setMessageCreatedAt(o,i),this.localizeMessageTimestamps(o),this.clearTypingIndicator(),this.insertMessageElement(o),!1!==n.scroll&&o.scrollIntoView({behavior:"smooth"}),ii.eventEmitter.dispatch("webchat:message:received",ba(ba({},e),{},{body:(null===(t=o.querySelector("[data-body]"))||void 0===t?void 0:t.innerText)||""})),this.updateMessageTeaser(e.teaser),this.openValue?this.messagesAPI.markAsSeen(e.id):this.incrementUnreadCounter()}},{key:"resizeInput",value:function(){this.inputTarget.style.height="auto";var e=this.inputTarget.scrollHeight;this.inputTarget.style.height="".concat(Math.min(e,96),"px")}},{key:"sendQuickReplyMessage",value:(c=Ta(function*(e){var t,n,{detail:{id:r,product:i,buttonId:o,body:a,cardElement:s}}=e;null===(t=this.dismissTeaserForSession)||void 0===t||t.call(this);var c=new FormData;c.append("message[body]",a),r&&c.append("message[replied_to]",r),i&&c.append("message[product]",i),o&&c.append("message[button]",o),c.append("session",ii.session),c.append("locale",j.toString()),this.appendOpeningSequenceMessageIds(c);var l,u=this.buildMessageElement(),h=null==s||null===(n=s.querySelector("img"))||void 0===n?void 0:n.cloneNode(!0);u.querySelector("[data-body]").innerText=a,h&&(h.removeAttribute("width"),h.removeAttribute("height"),null===(l=this.messageAttachmentsContainer(u))||void 0===l||l.appendChild(h)),this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(u,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(u),u.scrollIntoView({behavior:"smooth"}),this.broadcastChannel.postMessage({type:"message:sent",element:u.outerHTML});var f=yield this.messagesAPI.create(c);if(f.failed)return clearTimeout(this.optimisticTypingTimeout),this.markMessageFailedFromResponse(f,u);var d=yield f.json();this.dispatch("set:id",{target:u,detail:d.id}),this.localizeMessageTimestamp(u.querySelector("[data-message-timestamp]"),d.created_at||d.createdAt),this.clearRevealedOpeningSequenceMessageIds();var p={id:d.id,body:a,attachments:h?[h.src]:[],replied_to:r,product:i,button:o,type:"quick_reply"};ii.eventEmitter.dispatch("webchat:message:sent",p)}),function(e){return c.apply(this,arguments)})},{key:"sendTeaserQuickReply",value:(s=Ta(function*(e){var t;e.preventDefault(),e.stopPropagation();var n=e.currentTarget,r=(n.dataset.value||"").trim(),i=[n.dataset.text,n.textContent].map(e=>(e||"").trim()).find(e=>e.length>0),o=r||i;if(o){null===(t=this.dismissTeaserForSession)||void 0===t||t.call(this),this.show();var a=(n.dataset.type||"").trim()||"quick_reply",s=new FormData;s.append("message[body]",o),s.append("session",ii.session),s.append("locale",j.toString()),this.appendOpeningSequenceMessageIds(s);var c=this.buildMessageElement();c.querySelector("[data-body]").innerText=o,this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(c,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(c),c.scrollIntoView({behavior:"smooth"}),this.broadcastChannel.postMessage({type:"message:sent",element:c.outerHTML}),this.typingIndicatorVisible||(clearTimeout(this.optimisticTypingTimeout),this.optimisticTypingTimeout=setTimeout(()=>{this.showOptimisticTypingIndicator()},this.optimisticTypingIndicatorWaitValue));var l=yield this.messagesAPI.create(s);if(l.failed)return clearTimeout(this.optimisticTypingTimeout),this.markMessageFailedFromResponse(l,c);var u=yield l.json();c.setAttribute("data-id",u.id),this.localizeMessageTimestamp(c.querySelector("[data-message-timestamp]"),u.created_at||u.createdAt),this.clearRevealedOpeningSequenceMessageIds(),ii.eventEmitter.dispatch("webchat:message:sent",{id:u.id,body:o,attachments:[],type:"quick_reply",teaser:{text:i||o,value:r||o,type:a}}),u.conversation&&u.conversation!==this.conversationIdValue&&(this.conversationIdValue=u.conversation,this.webChatChannel.updateSubscriptionWith(this.conversationIdValue)),this.typingIndicatorVisible&&this.resetTypingIndicatorTimer()}}),function(e){return s.apply(this,arguments)})},{key:"sendMessage",value:(a=Ta(function*(e){var t,n={body:this.inputTarget.value,attachments:this.files};if(0!==this.inputTarget.value.trim().length||0!==this.files.length){null===(t=this.dismissTeaserForSession)||void 0===t||t.call(this);var r=new FormData;this.inputTarget.value.trim().length>0?r.append("message[body]",this.inputTarget.value):delete n.body,this.files.forEach(e=>{r.append("message[attachments][]",e)}),r.append("session",ii.session),r.append("locale",j.toString()),this.appendOpeningSequenceMessageIds(r);var i=this.buildMessageElement();this.inputTarget.value.trim().length>0?i.querySelector("[data-body]").innerText=this.inputTarget.value:i.querySelector("[data-message-bubble]").remove();var o=this.attachmentContainerTarget.querySelectorAll("img");o.length>0&&o.forEach(e=>{var t;null===(t=this.messageAttachmentsContainer(i))||void 0===t||t.appendChild(e.cloneNode(!0))}),this.typingIndicatorVisible&&this.hasTypingIndicatorTarget?this.messagesContainerTarget.insertBefore(i,this.typingIndicatorTarget):this.messagesContainerTarget.appendChild(i),i.scrollIntoView({behavior:"smooth"}),this.broadcastChannel.postMessage({type:"message:sent",element:i.outerHTML}),this.inputTarget.value="",this.resizeInput(),this.files=[],this.attachmentInputTarget.value="",this.attachmentContainerTarget.innerHTML="",this.attachmentContainerTarget.style.display="none",this.errorMessageContainerTarget.style.display="none",this.focusComposeInput(),this.typingIndicatorVisible||(clearTimeout(this.optimisticTypingTimeout),this.optimisticTypingTimeout=setTimeout(()=>{this.showOptimisticTypingIndicator()},this.optimisticTypingIndicatorWaitValue));var a=yield this.messagesAPI.create(r);if(a.failed)return clearTimeout(this.optimisticTypingTimeout),this.markMessageFailedFromResponse(a,i);var s=yield a.json();i.setAttribute("data-id",s.id),n.id=s.id,this.localizeMessageTimestamp(i.querySelector("[data-message-timestamp]"),s.created_at||s.createdAt),this.clearRevealedOpeningSequenceMessageIds(),ii.eventEmitter.dispatch("webchat:message:sent",n),s.conversation!==this.conversationIdValue&&(this.conversationIdValue=s.conversation,this.webChatChannel.updateSubscriptionWith(this.conversationIdValue)),this.typingIndicatorVisible&&this.resetTypingIndicatorTimer(),this.attachmentContainerTarget.style.display=""}else e&&e.target&&e.preventDefault()}),function(e){return a.apply(this,arguments)})},{key:"buildMessageElement",value:function(){var e=this.messageTemplateTarget.cloneNode(!0);return e.id="hellotext--webchat--".concat(this.idValue,"--message--").concat(Date.now()),e.classList.add("received"),e.style.removeProperty("display"),e.setAttribute("data-controller","hellotext--message"),e.setAttribute("data-hellotext--webchat-target","message"),this.localizeMessageTimestamp(e.querySelector("[data-message-timestamp]"),new Date),e}},{key:"focusCompose",value:function(e){var{target:t}=e,n=["button","a","input","textarea","select","label",'[role="button"]',"em-emoji-picker",'[data-hellotext--webchat--emoji-target~="popover"]','[data-controller~="hellotext--webchat--emoji"]'].join(", ");this.hasInputTarget&&!t.closest(n)&&this.focusComposeInput({moveCursorToEnd:!0})&&e.preventDefault()}},{key:"closePopoverFromHeader",value:function(e){var{target:t}=e;t.closest(".hellotext--webchat-header-channel-button, .hellotext--webchat-close-button")||(e.preventDefault(),this.closePopover())}},{key:"closePopoverOnEscape",value:function(e){var t,n;"Escape"===e.key&&this.openValue&&(e.preventDefault(),e.stopPropagation(),this.closePopover(),null===(t=this.triggerTarget)||void 0===t||null===(n=t.focus)||void 0===n||n.call(t))}},{key:"markMessageFailedFromResponse",value:(o=Ta(function*(e,t){var n=yield this.messageFailureReason(e);this.markMessageFailed(t,n),this.broadcastChannel.postMessage({type:"message:failed",id:t.id,reason:n})}),function(e,t){return o.apply(this,arguments)})},{key:"markMessageFailed",value:function(e,t){if(e&&(e.classList.add("failed"),t)){var n=e.querySelector("[data-message-timestamp]");n&&(n.textContent=t)}}},{key:"localizeMessageTimestamps",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.element;n&&(null!==(e=n.matches)&&void 0!==e&&e.call(n,"time[datetime][data-message-timestamp]")?[n]:Array.from((null===(t=n.querySelectorAll)||void 0===t?void 0:t.call(n,"time[datetime][data-message-timestamp]"))||[])).forEach(e=>this.localizeMessageTimestamp(e))}},{key:"localizeMessageTimestamp",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null==e?void 0:e.getAttribute("datetime");if(e&&t){var n=t instanceof Date?t:new Date(t);Number.isNaN(n.getTime())||(e.setAttribute("datetime",n.toISOString()),e.textContent=this.formatMessageTimestamp(n))}}},{key:"formatMessageTimestamp",value:function(e){return this.constructor.messageTimestampFormatterFor(j.toString()).format(e)}},{key:"messageFailureReason",value:(i=Ta(function*(e){var t=(null==e?void 0:e.data)||(null==e?void 0:e.response),n=(null==t?void 0:t.statusText)||"Message failed";try{var r,i=null!=t&&t.clone?t.clone():t,o=yield null==i||null===(r=i.json)||void 0===r?void 0:r.call(i),a=this.messageFailureReasonFromPayload(o);if(a)return a}catch(e){}try{var s,c=null!=t&&t.clone?t.clone():t,l=yield null==c||null===(s=c.text)||void 0===s?void 0:s.call(c);return this.messageFailureReasonFromText(l)||n}catch(e){return n}}),function(e){return i.apply(this,arguments)})},{key:"messageFailureReasonFromText",value:function(e){if("string"!=typeof e)return null;var t=e.trim();if(!t||t.startsWith("<"))return null;try{return this.messageFailureReasonFromPayload(JSON.parse(t))||t}catch(e){return t}}},{key:"messageFailureReasonFromPayload",value:function(e){var t,n,r,i,o,a;return e?[null===(t=e.error)||void 0===t?void 0:t.message,e.message,null===(n=e.errors)||void 0===n?void 0:n.message,null===(r=e.errors)||void 0===r||null===(i=r[0])||void 0===i?void 0:i.message,null===(o=e.errors)||void 0===o||null===(a=o[0])||void 0===a?void 0:a.description].find(e=>"string"==typeof e&&e.trim().length>0):null}},{key:"messageAttachmentsContainer",value:function(e){return e.querySelector("[data-attachments-container], [data-attachment-container]")}},{key:"incrementUnreadCounter",value:function(){this.unreadCounterTarget.style.display="flex";var e=(parseInt(this.unreadCounterTarget.innerText)||0)+1;this.unreadCounterTarget.innerText=Math.min(e,9)}},{key:"openAttachment",value:function(){this.attachmentInputTarget.click()}},{key:"onFileInputChange",value:function(){this.errorMessageContainerTarget.style.display="none";var e=Array.from(this.attachmentInputTarget.files);this.attachmentInputTarget.value="";var t=e.find(e=>{var t=e.type.split("/")[0];return["image","video","audio"].includes(t)?this.mediaValue[t].max_sizethis.createAttachmentElement(e)),this.focusComposeInput()}},{key:"createAttachmentElement",value:function(e){var t=this.attachmentElement();if(this.attachmentContainerTarget.style.display="",t.setAttribute("data-name",e.name),e.type.startsWith("image/")){var n=this.attachmentImageTarget.cloneNode(!0);n.src=URL.createObjectURL(e),n.style.display="block",t.appendChild(n),this.attachmentContainerTarget.appendChild(t),this.attachmentContainerTarget.style.display="flex"}else{var r=t.querySelector("main");r.style.height="5rem",r.style.borderRadius="0.375rem",r.style.backgroundColor="#e5e7eb",r.style.padding="0.25rem",t.querySelector("p[data-attachment-name]").innerText=e.name,this.attachmentContainerTarget.appendChild(t),this.attachmentContainerTarget.style.display="flex"}}},{key:"removeAttachment",value:function(e){var{currentTarget:t}=e,n=t.closest("[data-hellotext--webchat-target='attachment']");this.files=this.files.filter(e=>e.name!==n.dataset.name),this.attachmentInputTarget.value="",n.remove(),this.focusComposeInput()}},{key:"attachmentTargetDisconnected",value:function(){0===this.attachmentTargets.length&&(this.attachmentContainerTarget.innerHTML="",this.attachmentContainerTarget.style.display="none")}},{key:"attachmentElement",value:function(){var e=this.attachmentTemplateTarget.cloneNode(!0);return e.removeAttribute("hidden"),e.style.display="flex",e.setAttribute("data-hellotext--webchat-target","attachment"),e}},{key:"onEmojiSelect",value:function(e){var{detail:t}=e,n=this.inputTarget.value,r=this.inputTarget.selectionStart,i=this.inputTarget.selectionEnd;this.inputTarget.value=n.slice(0,r)+t+n.slice(i),this.inputTarget.selectionStart=this.inputTarget.selectionEnd=r+t.length,this.focusComposeInput()}},{key:"focusComposeInput",value:function(){var{moveCursorToEnd:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.shouldAutofocusCompose)return!1;if(!1===this.hasInputTarget)return!1;if(void 0===this.hasInputTarget&&!this.inputTarget)return!1;if(this.inputTarget.focus(),e&&"number"==typeof this.inputTarget.selectionStart){var t=this.inputTarget.value.length;this.inputTarget.setSelectionRange(t,t)}return!0}},{key:"byteToMegabyte",value:function(e){return Math.ceil(e/1024/1024)}},{key:"middlewares",get:function(){return[Vo(this.offsetValue),Uo({padding:this.paddingValue}),zo()]}},{key:"shouldOpenOnMount",get:function(){return"opened"===localStorage.getItem("hellotext--webchat--".concat(this.idValue))&&!this.onMobile}},{key:"shouldAutofocusCompose",get:function(){return!this.usesVirtualKeyboard}},{key:"usesVirtualKeyboard",get:function(){var e;if("undefined"==typeof navigator)return!1;var t=navigator.userAgent||"",n="MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,r=ja.test(t),i=!0===(null===(e=navigator.userAgentData)||void 0===e?void 0:e.mobile);return r||n||i||this.hasTouchOnlyPointer}},{key:"hasTouchOnlyPointer",get:function(){return"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(pointer: coarse)").matches&&window.matchMedia("(hover: none)").matches}},{key:"onMobile",get:function(){return"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(max-width: ".concat(this.fullScreenThresholdValue,"px)")).matches}}],r=[{key:"messageTimestampFormatterFor",value:function(e){var t=e||"default";return this.messageTimestampFormatters[t]||(this.messageTimestampFormatters[t]=this.buildMessageTimestampFormatter(e)),this.messageTimestampFormatters[t]}},{key:"buildMessageTimestampFormatter",value:function(e){try{return new Intl.DateTimeFormat(e||void 0,Aa)}catch(e){return new Intl.DateTimeFormat(void 0,Aa)}}}],n&&Sa(t.prototype,n),r&&Sa(t,r),Object.defineProperty(t,"prototype",{writable:!1}),p}(y.xI);Ma.messageTimestampFormatters={},Ma.values={id:String,conversationId:String,media:Object,fileSizeErrorMessage:String,placement:{type:String,default:"bottom-end"},open:{type:Boolean,default:!1},autoPlacement:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},nextPage:{type:Number,default:void 0},fullScreenThreshold:{type:Number,default:1024},typingIndicatorKeepAlive:{type:Number,default:3e4},offset:{type:Number,default:24},padding:{type:Number,default:24},optimisticTypingIndicatorWait:{type:Number,default:1e3},teaser:Object,messageTeaser:String,behaviour:Object},Ma.classes=["fadeOut"],Ma.targets=["trigger","popover","input","attachmentInput","attachmentButton","errorMessageContainer","attachmentTemplate","attachmentContainer","attachment","messageTemplate","messagesContainer","title","attachmentImage","footer","toolbar","message","unreadCounter","typingIndicator","typingIndicatorTemplate","teaser","teaserMessage","inboundMessageTeaser","inboundMessageTeaserBody","openingSequence","openingSequenceMessage"];var _a=y.lg.start();_a.register("hellotext--form",hi),_a.register("hellotext--webchat",Ma),_a.register("hellotext--webchat--emoji",Xo),_a.register("hellotext--message",bi),window.Hellotext=ii;const Ia=ii},109(e,t,n){var r=n(601),i=n.n(r),o=n(314),a=n.n(o)()(i());a.push([e.id,"form[data-hello-form] {\n position: relative;\n}\n\nform[data-hello-form] article [data-error-container] {\n font-size: 0.875rem;\n line-height: 1.25rem;\n display: none;\n}\n\nform[data-hello-form] article:has(input:invalid) [data-error-container] {\n display: block;\n}\n\nform[data-hello-form] [data-logo-container] {\n display: flex;\n justify-content: center;\n align-items: flex-end;\n position: absolute;\n right: 1rem;\n bottom: 1rem;\n}\n\nform[data-hello-form] [data-logo-container] small {\n margin: 0 0.3rem;\n}\n\nform[data-hello-form] [data-logo-container] [data-hello-brand] {\n width: 4rem;\n}\n",""]);const s=a;n.d(t,["A",0,s])},314(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,r,i,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var s=0;s0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),i&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=i):u[4]="".concat(i)),t.push(u))}},t}},601(e){e.exports=function(e){return e[1]}},72(e){var t=[];function n(e){for(var n=-1,r=0;r0?" ".concat(n.layer):""," {")),r+=n.css,i&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113(e){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}}};const t={};function n(r){const i=t[r];if(void 0!==i)return i.exports;const o=t[r]={id:r,exports:{}};return e[r](o,o.exports,n),o.exports}n.m=e,n.n=e=>{const t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},(()=>{const e=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;let t;n.t=function(r,i){if(1&i&&(r=this(r)),8&i)return r;if("object"==typeof r&&r){if(4&i&&r.__esModule)return r;if(16&i&&"function"==typeof r.then)return r}const o=Object.create(null);n.r(o);const a={};t=t||[null,e({}),e([]),e(e)];for(var s=2&i&&r;("object"==typeof s||"function"==typeof s)&&!~t.indexOf(s);s=e(s))Object.getOwnPropertyNames(s).forEach(e=>a[e]=()=>r[e]);return a.default=()=>r,n.d(o,a),o}})(),n.d=(e,t)=>{if(Array.isArray(t))for(var r=0;rPromise.all(Object.keys(n.f).reduce((t,r)=>(n.f[r](e,t),t),[])),n.u=e=>({160:"webchat-emoji",200:"webchat-emoji-en",437:"webchat-emoji-es"}[e]+".js"),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="Hellotext:";n.l=(r,i,o,a)=>{if(e[r])return void e[r].push(i);let s,c;if(void 0!==o){const e=document.getElementsByTagName("script");for(var l=0;l{s.onerror=s.onload=null,clearTimeout(h);const i=e[r];if(delete e[r],s.parentNode?.removeChild(s),i?.forEach(e=>e(n)),t)return t(n)},h=setTimeout(u.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=u.bind(null,s.onerror),s.onload=u.bind(null,s.onload),c&&document.head.appendChild(s)}})(),n.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{let e;n.g.importScripts&&(e=n.g.location+"");const t=n.g.document;if(!e&&t&&("SCRIPT"===t.currentScript?.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){const n=t.getElementsByTagName("script");if(n.length){let t=n.length-1;for(;t>-1&&(!e||!/^http(s?):/.test(e));)e=n[t--].src}}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{const e={792:0};n.f.j=(t,r)=>{let i=n.o(e,t)?e[t]:void 0;if(0!==i)if(i)r.push(i[2]);else{const o=new Promise((n,r)=>i=e[t]=[n,r]);r.push(i[2]=o);const a=n.p+n.u(t),s=new Error,c=r=>{if(n.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+e+": "+n+")",s.name="ChunkLoadError",s.type=e,s.request=n,i[1](s)}};n.l(a,c,"chunk-"+t,t)}};const t=(t,r)=>{let[i,o,a]=r;var s,c,l=0;if(i.some(t=>0!==e[t])){for(s in o)n.o(o,s)&&(n.m[s]=o[s]);a&&a(n)}for(t&&t(r);l teaserMessage.classList.add('hidden')); - this.inboundMessageTeaserBodyTarget.innerHTML = this.messageTeaserValue; + this.inboundMessageTeaserBodyTarget.textContent = this.messageTeaserValue; this.inboundMessageTeaserTarget.classList.remove('hidden'); this.teaserTarget.classList.toggle('invisible', this.openValue); } @@ -543,7 +540,7 @@ let _default = /*#__PURE__*/function (_Controller) { var _element$querySelecto; const html = message.html; const createdAt = message.created_at || message.createdAt; - const element = new DOMParser().parseFromString(html, 'text/html').body.firstElementChild; + const element = (0, _sanitize_html.sanitizedWebchatComponentFragment)(html).firstElementChild; element.classList.add('hellotext--webchat-message'); element.setAttribute('data-id', message.id); element.setAttribute('data-hellotext--webchat-target', 'message'); diff --git a/lib/controllers/webchat_controller.js b/lib/controllers/webchat_controller.js index 5aa4a55b..9d771f07 100644 --- a/lib/controllers/webchat_controller.js +++ b/lib/controllers/webchat_controller.js @@ -24,6 +24,7 @@ import WebchatChannel from '../channels/webchat_channel'; import Hellotext from '../hellotext'; import { Locale } from '../core'; import { Webchat as WebchatConfiguration, modes } from '../core/configuration/webchat'; +import { sanitizedWebchatComponentFragment, setSanitizedRichText } from '../core/sanitize_html'; import { usePopover } from './mixins/usePopover'; import { useBehaviour } from './webchat/useBehaviour'; import { useOpeningSequence } from './webchat/useOpeningSequence'; @@ -264,8 +265,6 @@ var _default = /*#__PURE__*/function (_Controller) { attachments } = message; var createdAt = message.created_at || message.createdAt; - var div = document.createElement('div'); - div.innerHTML = body; var element = this.messageTemplateTarget.cloneNode(true); element.classList.add('hellotext--webchat-message'); element.setAttribute('data-hellotext--webchat-target', 'message'); @@ -274,7 +273,7 @@ var _default = /*#__PURE__*/function (_Controller) { element.setAttribute('data-created-at', createdAt); } element.style.removeProperty('display'); - element.querySelector('[data-body]').innerHTML = div.innerHTML; + setSanitizedRichText(element.querySelector('[data-body]'), body); if (message.state === 'received') { element.classList.add('received'); } else { @@ -417,12 +416,10 @@ var _default = /*#__PURE__*/function (_Controller) { if (message.carousel) { return this.insertCarouselMessage(message, options); } - var div = document.createElement('div'); - div.innerHTML = body; var element = this.messageTemplateTarget.cloneNode(true); element.classList.add('hellotext--webchat-message'); element.style.display = 'flex'; - element.querySelector('[data-body]').innerHTML = div.innerHTML; + setSanitizedRichText(element.querySelector('[data-body]'), body); element.setAttribute('data-id', id); element.setAttribute('data-hellotext--webchat-target', 'message'); this.setMessageCreatedAt(element, createdAt); @@ -543,7 +540,7 @@ var _default = /*#__PURE__*/function (_Controller) { return; } this.teaserMessageTargets.forEach(teaserMessage => teaserMessage.classList.add('hidden')); - this.inboundMessageTeaserBodyTarget.innerHTML = this.messageTeaserValue; + this.inboundMessageTeaserBodyTarget.textContent = this.messageTeaserValue; this.inboundMessageTeaserTarget.classList.remove('hidden'); this.teaserTarget.classList.toggle('invisible', this.openValue); } @@ -554,7 +551,7 @@ var _default = /*#__PURE__*/function (_Controller) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var html = message.html; var createdAt = message.created_at || message.createdAt; - var element = new DOMParser().parseFromString(html, 'text/html').body.firstElementChild; + var element = sanitizedWebchatComponentFragment(html).firstElementChild; element.classList.add('hellotext--webchat-message'); element.setAttribute('data-id', message.id); element.setAttribute('data-hellotext--webchat-target', 'message'); diff --git a/lib/core/sanitize_html.cjs b/lib/core/sanitize_html.cjs new file mode 100644 index 00000000..77f9852f --- /dev/null +++ b/lib/core/sanitize_html.cjs @@ -0,0 +1,46 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.sanitizedRichTextFragment = sanitizedRichTextFragment; +exports.sanitizedWebchatComponentFragment = sanitizedWebchatComponentFragment; +exports.setSanitizedRichText = setSanitizedRichText; +var _dompurify = _interopRequireDefault(require("dompurify")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const RICH_TEXT_SANITIZER_OPTIONS = { + ADD_ATTR: ['target'], + ALLOW_DATA_ATTR: false, + RETURN_DOM_FRAGMENT: true, + USE_PROFILES: { + html: true + } +}; +const WEBCHAT_COMPONENT_SANITIZER_OPTIONS = { + ADD_ATTR: ['target'], + ADD_TAGS: ['hellotext-icon'], + RETURN_DOM_FRAGMENT: true, + USE_PROFILES: { + html: true, + svg: true + } +}; +function sanitizedFragment(html, options) { + const fragment = _dompurify.default.sanitize(html, options); + fragment.querySelectorAll('a[target="_blank"]').forEach(link => { + const rel = new Set(link.rel.split(/\s+/).filter(Boolean)); + rel.add('noopener'); + rel.add('noreferrer'); + link.rel = Array.from(rel).join(' '); + }); + return fragment; +} +function sanitizedRichTextFragment(html) { + return sanitizedFragment(html, RICH_TEXT_SANITIZER_OPTIONS); +} +function sanitizedWebchatComponentFragment(html) { + return sanitizedFragment(html, WEBCHAT_COMPONENT_SANITIZER_OPTIONS); +} +function setSanitizedRichText(element, html) { + element.replaceChildren(sanitizedRichTextFragment(html)); +} \ No newline at end of file diff --git a/lib/core/sanitize_html.js b/lib/core/sanitize_html.js new file mode 100644 index 00000000..843d1848 --- /dev/null +++ b/lib/core/sanitize_html.js @@ -0,0 +1,37 @@ +import DOMPurify from 'dompurify'; +var RICH_TEXT_SANITIZER_OPTIONS = { + ADD_ATTR: ['target'], + ALLOW_DATA_ATTR: false, + RETURN_DOM_FRAGMENT: true, + USE_PROFILES: { + html: true + } +}; +var WEBCHAT_COMPONENT_SANITIZER_OPTIONS = { + ADD_ATTR: ['target'], + ADD_TAGS: ['hellotext-icon'], + RETURN_DOM_FRAGMENT: true, + USE_PROFILES: { + html: true, + svg: true + } +}; +function sanitizedFragment(html, options) { + var fragment = DOMPurify.sanitize(html, options); + fragment.querySelectorAll('a[target="_blank"]').forEach(link => { + var rel = new Set(link.rel.split(/\s+/).filter(Boolean)); + rel.add('noopener'); + rel.add('noreferrer'); + link.rel = Array.from(rel).join(' '); + }); + return fragment; +} +export function sanitizedRichTextFragment(html) { + return sanitizedFragment(html, RICH_TEXT_SANITIZER_OPTIONS); +} +export function sanitizedWebchatComponentFragment(html) { + return sanitizedFragment(html, WEBCHAT_COMPONENT_SANITIZER_OPTIONS); +} +export function setSanitizedRichText(element, html) { + element.replaceChildren(sanitizedRichTextFragment(html)); +} \ No newline at end of file diff --git a/lib/models/form.cjs b/lib/models/form.cjs index ab199642..ebeee4ce 100644 --- a/lib/models/form.cjs +++ b/lib/models/form.cjs @@ -7,6 +7,7 @@ exports.Form = void 0; var _hellotext = _interopRequireDefault(require("../hellotext")); var _input_builder = require("../builders/input_builder"); var _logo_builder = require("../builders/logo_builder"); +var _sanitize_html = require("../core/sanitize_html"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } @@ -58,7 +59,7 @@ let Form = /*#__PURE__*/function () { key: "buildHeader", value: function buildHeader(header) { const headerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-header]', 'header'); - headerElement.innerHTML = header.content; + (0, _sanitize_html.setSanitizedRichText)(headerElement, header.content); if (this.element.querySelector('[data-form-header]')) { this.element.querySelector('[data-form-header]').replaceWith(headerElement); } else { @@ -94,7 +95,7 @@ let Form = /*#__PURE__*/function () { key: "buildFooter", value: function buildFooter(footer) { const element = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-footer]', 'footer'); - element.innerHTML = footer.content; + (0, _sanitize_html.setSanitizedRichText)(element, footer.content); if (this.element.querySelector('[data-form-footer]')) { this.element.querySelector('[data-form-footer]').replaceWith(element); } else { diff --git a/lib/models/form.js b/lib/models/form.js index 041ee976..3630e178 100644 --- a/lib/models/form.js +++ b/lib/models/form.js @@ -14,6 +14,7 @@ function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + n import Hellotext from '../hellotext'; import { InputBuilder } from '../builders/input_builder'; import { LogoBuilder } from '../builders/logo_builder'; +import { setSanitizedRichText } from '../core/sanitize_html'; var _findOrCreateComponent = /*#__PURE__*/_classPrivateFieldLooseKey("findOrCreateComponent"); var Form = /*#__PURE__*/function () { function Form(data) { @@ -63,7 +64,7 @@ var Form = /*#__PURE__*/function () { key: "buildHeader", value: function buildHeader(header) { var headerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-header]', 'header'); - headerElement.innerHTML = header.content; + setSanitizedRichText(headerElement, header.content); if (this.element.querySelector('[data-form-header]')) { this.element.querySelector('[data-form-header]').replaceWith(headerElement); } else { @@ -99,7 +100,7 @@ var Form = /*#__PURE__*/function () { key: "buildFooter", value: function buildFooter(footer) { var element = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-footer]', 'footer'); - element.innerHTML = footer.content; + setSanitizedRichText(element, footer.content); if (this.element.querySelector('[data-form-footer]')) { this.element.querySelector('[data-form-footer]').replaceWith(element); } else { diff --git a/package.json b/package.json index 61eb7869..39983f11 100644 --- a/package.json +++ b/package.json @@ -94,6 +94,7 @@ "@emoji-mart/data": "^1.2.1", "@floating-ui/dom": "^1.7.3", "@hotwired/stimulus": "^3.0.0", + "dompurify": "^3.4.12", "emoji-mart": "^5.6.0" }, "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610", diff --git a/src/controllers/webchat_controller.js b/src/controllers/webchat_controller.js index 0fac0cb3..f344e785 100644 --- a/src/controllers/webchat_controller.js +++ b/src/controllers/webchat_controller.js @@ -7,6 +7,10 @@ import Hellotext from '../hellotext' import { Locale } from '../core' import { Webchat as WebchatConfiguration, modes } from '../core/configuration/webchat' +import { + sanitizedWebchatComponentFragment, + setSanitizedRichText, +} from '../core/sanitize_html' import { usePopover } from './mixins/usePopover' import { useBehaviour } from './webchat/useBehaviour' @@ -333,9 +337,6 @@ export default class extends Controller { const { body, attachments } = message const createdAt = message.created_at || message.createdAt - const div = document.createElement('div') - div.innerHTML = body - const element = this.messageTemplateTarget.cloneNode(true) element.classList.add('hellotext--webchat-message') @@ -348,7 +349,7 @@ export default class extends Controller { element.style.removeProperty('display') - element.querySelector('[data-body]').innerHTML = div.innerHTML + setSanitizedRichText(element.querySelector('[data-body]'), body) if (message.state === 'received') { element.classList.add('received') @@ -497,14 +498,11 @@ export default class extends Controller { return this.insertCarouselMessage(message, options) } - const div = document.createElement('div') - div.innerHTML = body - const element = this.messageTemplateTarget.cloneNode(true) element.classList.add('hellotext--webchat-message') element.style.display = 'flex' - element.querySelector('[data-body]').innerHTML = div.innerHTML + setSanitizedRichText(element.querySelector('[data-body]'), body) element.setAttribute('data-id', id) element.setAttribute('data-hellotext--webchat-target', 'message') @@ -633,7 +631,7 @@ export default class extends Controller { } this.teaserMessageTargets.forEach(teaserMessage => teaserMessage.classList.add('hidden')) - this.inboundMessageTeaserBodyTarget.innerHTML = this.messageTeaserValue + this.inboundMessageTeaserBodyTarget.textContent = this.messageTeaserValue this.inboundMessageTeaserTarget.classList.remove('hidden') this.teaserTarget.classList.toggle('invisible', this.openValue) @@ -642,7 +640,7 @@ export default class extends Controller { insertCarouselMessage(message, options = {}) { const html = message.html const createdAt = message.created_at || message.createdAt - const element = new DOMParser().parseFromString(html, 'text/html').body.firstElementChild + const element = sanitizedWebchatComponentFragment(html).firstElementChild element.classList.add('hellotext--webchat-message') element.setAttribute('data-id', message.id) diff --git a/src/core/sanitize_html.js b/src/core/sanitize_html.js new file mode 100644 index 00000000..bb5db6fd --- /dev/null +++ b/src/core/sanitize_html.js @@ -0,0 +1,40 @@ +import DOMPurify from 'dompurify' + +const RICH_TEXT_SANITIZER_OPTIONS = { + ADD_ATTR: ['target'], + ALLOW_DATA_ATTR: false, + RETURN_DOM_FRAGMENT: true, + USE_PROFILES: { html: true }, +} + +const WEBCHAT_COMPONENT_SANITIZER_OPTIONS = { + ADD_ATTR: ['target'], + ADD_TAGS: ['hellotext-icon'], + RETURN_DOM_FRAGMENT: true, + USE_PROFILES: { html: true, svg: true }, +} + +function sanitizedFragment(html, options) { + const fragment = DOMPurify.sanitize(html, options) + + fragment.querySelectorAll('a[target="_blank"]').forEach(link => { + const rel = new Set(link.rel.split(/\s+/).filter(Boolean)) + rel.add('noopener') + rel.add('noreferrer') + link.rel = Array.from(rel).join(' ') + }) + + return fragment +} + +export function sanitizedRichTextFragment(html) { + return sanitizedFragment(html, RICH_TEXT_SANITIZER_OPTIONS) +} + +export function sanitizedWebchatComponentFragment(html) { + return sanitizedFragment(html, WEBCHAT_COMPONENT_SANITIZER_OPTIONS) +} + +export function setSanitizedRichText(element, html) { + element.replaceChildren(sanitizedRichTextFragment(html)) +} diff --git a/src/models/form.js b/src/models/form.js index e788f67b..a2de40a2 100644 --- a/src/models/form.js +++ b/src/models/form.js @@ -2,6 +2,7 @@ import Hellotext from '../hellotext' import { InputBuilder } from '../builders/input_builder' import { LogoBuilder } from '../builders/logo_builder' +import { setSanitizedRichText } from '../core/sanitize_html' class Form { constructor(data, element = null) { @@ -44,7 +45,7 @@ class Form { buildHeader(header) { const headerElement = this.#findOrCreateComponent('[data-form-header]', 'header') - headerElement.innerHTML = header.content + setSanitizedRichText(headerElement, header.content) if (this.element.querySelector('[data-form-header]')) { this.element.querySelector('[data-form-header]').replaceWith(headerElement) @@ -86,7 +87,7 @@ class Form { buildFooter(footer) { const element = this.#findOrCreateComponent('[data-form-footer]', 'footer') - element.innerHTML = footer.content + setSanitizedRichText(element, footer.content) if (this.element.querySelector('[data-form-footer]')) { this.element.querySelector('[data-form-footer]').replaceWith(element) diff --git a/test/fixtures/webchat_carousel.js b/test/fixtures/webchat_carousel.js new file mode 100644 index 00000000..32de13be --- /dev/null +++ b/test/fixtures/webchat_carousel.js @@ -0,0 +1,82 @@ +export default ` +
+
+
+

Product recommendations

+
+
+ + + + +
+` diff --git a/yarn.lock b/yarn.lock index 786ba045..12a27930 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1545,6 +1545,11 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" @@ -2338,6 +2343,13 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" +dompurify@^3.4.12: + version "3.4.12" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.12.tgz#6fa2265e9bbdce882c4ace4107626051b448ffa8" + integrity sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg== + optionalDependencies: + "@types/trusted-types" "^2.0.7" + electron-to-chromium@^1.4.284: version "1.4.295" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz#911d5df67542bf7554336142eb302c5ec90bba66"