{"version":3,"file":"view-VQ3LPBC1.cjs","sources":["../../node_modules/preact/dist/preact.module.js","../../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../../node_modules/preact/hooks/dist/hooks.module.js","../../node_modules/preact/compat/dist/compat.module.js","../../node_modules/zustand/esm/vanilla.mjs","../../node_modules/use-sync-external-store/shim/index.js","../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../node_modules/use-sync-external-store/shim/with-selector.js","../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../node_modules/zustand/esm/index.mjs","../../src/view/cards/types.ts","../../src/view/helpers/skipLogicHelpers.ts","../../src/view/store.ts","../../src/assets/caret.svg?react","../../src/assets/checkmark.svg?react","../../src/view/components/accordion.tsx","../../src/view/components/arrow.tsx","../../src/view/helpers/classes.ts","../../src/view/components/button.tsx","../../src/helpers/useIsCardScrollable.tsx","../../src/view/components/header.tsx","../../src/view/components/longformSubmitButton.tsx","../../src/view/components/mobileEmbedView.tsx","../../src/view/components/checkbox.tsx","../../src/view/hooks/useAutoSize.ts","../../src/view/components/option.tsx","../../src/view/components/questionBody.tsx","../../src/view/components/questionBodyFooterContainer.tsx","../../src/view/logo.tsx","../../src/view/components/sprigBrandLogo.tsx","../../src/view/components/thankYouLink.tsx","../../src/view/helpers/card.ts","../../src/view/cards/consentLegalCard.tsx","../../src/view/cards/likertCard/likertOption.tsx","../../src/view/cards/likertCard/likertCard.tsx","../../src/view/cards/matrixViews/matrixAccordionView.tsx","../../src/view/cards/matrixViews/matrixTableView.tsx","../../src/view/cards/matrixCard.tsx","../../src/view/components/select/select.tsx","../../src/view/cards/multipleChoice/baseMultiChoiceCard.tsx","../../src/view/cards/multipleChoice/singleSelectCard.tsx","../../src/view/cards/multipleChoice/multiSelectCard.tsx","../../src/view/cards/npsCard.tsx","../../src/view/cards/openTextCard.tsx","../../src/view/cards/pageCard/DisplayQuestion.tsx","../../src/view/cards/pageCard/longFormQuestionsFooter.tsx","../../src/view/cards/pageCard/pageCard.tsx","../../src/view/cards/recordedTask/constants.ts","../../src/view/cards/recordedTask/helpers.ts","../../src/view/cards/recordedTask/store.ts","../../src/view/cards/recordedTask/actions.ts","../../src/view/cards/recordedTask/components.tsx","../../src/view/cards/recordedTask/card.tsx","../../src/view/helpers/getAttributedUrl.ts","../../src/view/cards/textUrlPromptCard.tsx","../../src/view/cards/thanksCard.tsx","../../src/view/cards/uploadingCard.tsx","../../src/view/footer.tsx","../../src/view/progressBar.tsx","../../src/view/app.tsx","../../src/view/recorder/recorder.ts","../../src/view/view.tsx"],"sourcesContent":["var n,l,u,t,i,o,r,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h=Array.isArray;function v(n,l){for(var u in l)n[u]=l[u];return n}function p(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d(l,f,i,o,null)}function d(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(f),f}function _(){return{current:null}}function g(n){return n.children}function b(n,l){this.props=n,this.context=l}function m(n,l){if(null==l)return n.__?m(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?m(n):null}function k(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k(n)}}function w(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!x.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(x)}function x(){var n,u,t,o,r,e,c,s,a;for(i.sort(f);n=i.shift();)n.__d&&(u=i.length,o=void 0,e=(r=(t=n).__v).__e,s=[],a=[],(c=t.__P)&&((o=v({},r)).__v=r.__v+1,l.vnode&&l.vnode(o),L(c,o,r,t.__n,void 0!==c.ownerSVGElement,32&r.__u?[e]:null,s,null==e?m(r):e,!!(32&r.__u),a),o.__.__k[o.__i]=o,M(s,o,a),o.__e!=e&&k(o)),i.length>u&&i.sort(f));x.__r=0}function C(n,l,u,t,i,o,r,f,e,a,h){var v,p,y,d,_,g=t&&t.__k||s,b=l.length;for(u.__d=e,P(u,l,g),e=u.__d,v=0;v<b;v++)null!=(y=u.__k[v])&&\"boolean\"!=typeof y&&\"function\"!=typeof y&&(p=-1===y.__i?c:g[y.__i]||c,y.__i=v,L(n,y,p,i,o,r,f,e,a,h),d=y.__e,y.ref&&p.ref!=y.ref&&(p.ref&&z(p.ref,null,y),h.push(y.ref,y.__c||d,y)),null==_&&null!=d&&(_=d),65536&y.__u||p.__k===y.__k?e=S(y,e,n):\"function\"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=_}function P(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)null!=(i=n.__k[t]=null==(i=l[t])||\"boolean\"==typeof i||\"function\"==typeof i?null:\"string\"==typeof i||\"number\"==typeof i||\"bigint\"==typeof i||i.constructor==String?d(null,i,null,null,i):h(i)?d(g,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?d(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=H(i,u,r=t+a,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,\"function\"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f===r+1?a++:f>r?s>e-r?a+=f-r:a--:a=f<r&&f==r-1?f-r:0,f!==t+a&&(i.__u|=65536))):(o=u[t])&&null==o.key&&o.__e&&(o.__e==n.__d&&(n.__d=m(o)),N(o,o,!1),u[t]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=m(o)),N(o,o))}function S(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=S(t[i],l,u));return l}return n.__e!=l&&(u.insertBefore(n.__e,l||null),l=n.__e),l&&l.nextSibling}function $(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(h(n)?n.some(function(n){$(n,l)}):l.push(n)),l}function H(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++}}return-1}function I(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a.test(l)?u:u+\"px\"}function T(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||I(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||I(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/,\"$1\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=Date.now(),n.addEventListener(l,o?D:A,o)):n.removeEventListener(l,o?D:A,o);else{if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&\"rowSpan\"!==l&&\"colSpan\"!==l&&\"role\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u))}}function A(n){var u=this.l[n.type+!1];if(n.t){if(n.t<=u.u)return}else n.t=Date.now();return u(l.event?l.event(n):n)}function D(n){return this.l[n.type+!0](l.event?l.event(n):n)}function L(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,m,k,w,x,P,S,$,H,I,T,A=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof A)try{if(w=u.props,x=(a=A.contextType)&&i[a.__c],P=a?x?x.props.value:a.__:i,t.__c?k=(p=u.__c=t.__c).__=p.__E:(\"prototype\"in A&&A.prototype.render?u.__c=p=new A(w,P):(u.__c=p=new b(w,P),p.constructor=A,p.render=O),x&&x.sub(p),p.props=w,p.state||(p.state={}),p.context=P,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=A.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v({},p.__s)),v(p.__s,A.getDerivedStateFromProps(w,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==A.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(null==A.getDerivedStateFromProps&&w!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(w,P),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(w,p.__s,P)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=w,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u)}),S=0;S<p._sb.length;S++)p.__h.push(p._sb[S]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(w,p.__s,P),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,m)})}if(p.context=P,p.props=w,p.__P=n,p.__e=!1,$=l.__r,H=0,\"prototype\"in A&&A.prototype.render){for(p.state=p.__s,p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),I=0;I<p._sb.length;I++)p.__h.push(p._sb[I]);p._sb=[]}else do{p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++H<25);p.state=p.__s,null!=p.getChildContext&&(i=v(v({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(m=p.getSnapshotBeforeUpdate(d,_)),C(n,h(T=null!=a&&a.type===g&&null==a.key?a.props.children:a)?T:[T],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__u&=-161,p.__h.length&&f.push(p),k&&(p.__E=p.__=null)}catch(n){u.__v=null,c||null!=r?(u.__e=e,u.__u|=c?160:32,r[r.indexOf(e)]=null):(u.__e=t.__e,u.__k=t.__k),l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=j(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function M(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)z(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function j(l,u,t,i,o,r,f,e,s){var a,v,y,d,_,g,b,k=t.props,w=u.props,x=u.type;if(\"svg\"===x&&(o=!0),null!=r)for(a=0;a<r.length;a++)if((_=r[a])&&\"setAttribute\"in _==!!x&&(x?_.localName===x:3===_.nodeType)){l=_,r[a]=null;break}if(null==l){if(null===x)return document.createTextNode(w);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",x):document.createElement(x,w.is&&w),r=null,e=!1}if(null===x)k===w||e&&l.data===w||(l.data=w);else{if(r=r&&n.call(l.childNodes),k=t.props||c,!e&&null!=r)for(k={},a=0;a<l.attributes.length;a++)k[(_=l.attributes[a]).name]=_.value;for(a in k)_=k[a],\"children\"==a||(\"dangerouslySetInnerHTML\"==a?y=_:\"key\"===a||a in w||T(l,a,null,_,o));for(a in w)_=w[a],\"children\"==a?d=_:\"dangerouslySetInnerHTML\"==a?v=_:\"value\"==a?g=_:\"checked\"==a?b=_:\"key\"===a||e&&\"function\"!=typeof _||k[a]===_||T(l,a,_,k[a],o);if(v)e||y&&(v.__html===y.__html||v.__html===l.innerHTML)||(l.innerHTML=v.__html),u.__k=[];else if(y&&(l.innerHTML=\"\"),C(l,h(d)?d:[d],u,t,i,o&&\"foreignObject\"!==x,r,f,r?r[0]:t.__k&&m(t,0),e,s),null!=r)for(a=r.length;a--;)null!=r[a]&&p(r[a]);e||(a=\"value\",void 0!==g&&(g!==l[a]||\"progress\"===x&&!g||\"option\"===x&&g!==k[a])&&T(l,a,g,k[a],!1),a=\"checked\",void 0!==b&&b!==l[a]&&T(l,a,b,k[a],!1))}return l}function z(n,u,t){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,t)}}function N(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||z(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null,n.__c=void 0}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&N(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||p(n.__e),n.__=n.__e=n.__d=void 0}function O(n,l,u){return this.constructor(n,u)}function q(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],L(t,u=(!o&&i||t).__k=y(g,null,[u]),r||c,c,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),M(f,u,e)}function B(n,l){q(n,l,B)}function E(l,u,t){var i,o,r,f,e=v({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),d(l.type,e,i||l.key,o||l.ref,null)}function F(n,l){var u={__c:l=\"__cC\"+e++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,w(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),\"function\"==typeof n&&(n=n(v({},u),this.props)),n&&v(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),w(this))},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),w(this))},b.prototype.render=g,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},x.__r=0,e=0;export{b as Component,g as Fragment,E as cloneElement,F as createContext,y as createElement,_ as createRef,y as h,B as hydrate,t as isValidElement,l as options,q as render,$ as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){var a,c,p={};for(c in t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),_=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(_=\"px;\"),i=i+l+\":\"+a+_}}return e+'=\"'+i+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(t)+'\"'}function _(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=_(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,_ as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n.__b,a=n.__r,v=n.diffed,l=n.__c,m=n.unmount;function d(t,u){n.__h&&n.__h(r,t,o||u),o=0;var i=r.__H||(r.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c}),i.__[t]}function h(n){return o=1,s(B,n)}function s(n,u,i){var o=d(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function p(u,i){var o=d(t++,3);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__H.__h.push(o))}function y(u,i){var o=d(t++,4);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__h.push(o))}function _(n){return o=5,F(function(){return{current:n}},[])}function A(n,t,r){o=6,y(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function F(n,r){var u=d(t++,7);return z(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T(n,t){return o=8,F(function(){return n},t)}function q(n){var u=r.context[n.__c],i=d(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function x(t,r){n.useDebugValue&&n.useDebugValue(r?r(t):t)}function P(n){var u=d(t++,10),i=h();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function V(){var n=d(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w),t.__H.__h=[]}catch(r){t.__H.__h=[],n.__e(r,t.__v)}}n.__b=function(n){r=null,e&&e(n)},n.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(k),i.__h.forEach(w),i.__h=[],t=0)),u=r},n.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===n.requestAnimationFrame||((i=n.requestAnimationFrame)||j)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},n.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return!n.__||w(n)})}catch(u){r.some(function(n){n.__h&&(n.__h=[])}),r=[],n.__e(u,t.__v)}}),l&&l(t,r)},n.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n)}catch(n){r=n}}),u.__H=void 0,r&&n.__e(r,u.__v))};var g=\"function\"==typeof requestAnimationFrame;function j(n){var t,r=function(){clearTimeout(u),g&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);g&&(t=requestAnimationFrame(r))}function k(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function w(n){var t=r;n.__c=n.__(),r=t}function z(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B(n,t){return\"function\"==typeof t?t(n):t}export{T as useCallback,q as useContext,x as useDebugValue,p as useEffect,P as useErrorBoundary,V as useId,A as useImperativeHandle,y as useLayoutEffect,F as useMemo,s as useReducer,_ as useRef,h as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,createContext,createElement,createRef}from\"preact\";import{useState as a,useId as s,useReducer as h,useEffect as v,useLayoutEffect as d,useRef as p,useImperativeHandle as m,useMemo as y,useCallback as _,useContext as b,useDebugValue as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function E(n){this.props=n}function w(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:C(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u}(E.prototype=new n).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var x=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),x&&x(n)};var R=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function N(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var k=function(n,t){return null==n?null:r(r(n).map(t))},A={map:k,forEach:k,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},O=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);O(n,t,e,r)};var T=e.unmount;function F(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return F(n,t,e)})),n}function I(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return I(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null}function U(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function D(n){var e,r,u;function o(o){if(e||(e=n()).then(function(n){r=n.default||n},function(n){u=n}),u)throw u;if(!r)throw e;return t(r,o)}return o.displayName=\"Lazy\",o.__f=!0,o}function M(){this.u=null,this.o=null}e.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n)},(L.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=I(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},L.prototype.componentWillUnmount=function(){this.t=[]},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=F(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2]}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){o(null,e.l),e.l=null,e.i=null},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n)},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n)}}),o(t(W,{context:e.context},n.__v),e.l)}function j(n,e){var r=t(P,{__v:n,i:e});return r.containerInfo=e,r}(M.prototype=new n).__a=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u()};e?e(o):o()}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t)})};var z=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y=\"undefined\"!=typeof document,$=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function q(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function G(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var J=e.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}e.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var nn,tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!(\"value\"===o&&\"defaultValue\"in t&&null==i||Y&&\"children\"===o&&\"noscript\"===e||\"class\"===o||\"className\"===o)){var l=o.toLowerCase();\"defaultValue\"===o&&\"value\"in t&&null==t.value?o=\"value\":\"download\"===o&&!0===i?i=\"\":\"ondoubleclick\"===l?o=\"ondblclick\":\"onchange\"!==l||\"input\"!==e&&\"textarea\"!==e||$(t.type)?\"onfocus\"===l?o=\"onfocusin\":\"onblur\"===l?o=\"onfocusout\":H.test(o)?o=l:-1===e.indexOf(\"-\")&&B.test(o)?o=o.replace(Z,\"-$&\").toLowerCase():null===i&&(i=void 0):l=o=\"oninput\",\"oninput\"===l&&u[o=l]&&(o=\"oninputCapture\"),u[o]=i}}\"select\"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==e&&null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=z,en&&en(n)};var rn=e.__r;e.__r=function(n){rn&&rn(n),nn=n.__c};var un=e.diffed;e.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),nn=null};var on={ReactCurrentDispatcher:{current:{readContext:function(n){return nn.__n[n.__c].props.value}}}},ln=\"17.0.2\";function cn(n){return t.bind(null,n)}function fn(n){return!!n&&n.$$typeof===z}function an(n){return fn(n)&&n.type===u}function sn(n){return fn(n)?f.apply(null,arguments):n}function hn(n){return!!n.__k&&(o(null,n),!0)}function vn(n){return n&&(n.base||1===n.nodeType&&n)||null}var dn=function(n,t){return n(t)},pn=function(n,t){return n(t)},mn=u;function yn(n){n()}function _n(n){return n}function bn(){return[!1,yn]}var Sn=d,gn=fn;function Cn(n,t){var e=t(),r=a({h:{__:e,v:t}}),u=r[0].h,o=r[1];return d(function(){u.__=e,u.v=t,En(u)&&o({h:u})},[n,e,t]),v(function(){return En(u)&&o({h:u}),n(function(){En(u)&&o({h:u})})},[n]),e}function En(n){var t,e,r=n.v,u=n.__;try{var o=r();return!((t=u)===(e=o)&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}}var wn={useState:a,useId:s,useReducer:h,useEffect:v,useLayoutEffect:d,useInsertionEffect:Sn,useTransition:bn,useDeferredValue:_n,useSyncExternalStore:Cn,startTransition:yn,useRef:p,useImperativeHandle:m,useMemo:y,useCallback:_,useContext:b,useDebugValue:S,version:\"17.0.2\",Children:A,render:q,hydrate:G,unmountComponentAtNode:hn,createPortal:j,createElement:t,createContext:l,createFactory:cn,cloneElement:sn,createRef:c,Fragment:u,isValidElement:fn,isElement:gn,isFragment:an,findDOMNode:vn,Component:n,PureComponent:E,memo:w,forwardRef:N,flushSync:pn,unstable_batchedUpdates:dn,StrictMode:mn,Suspense:L,SuspenseList:M,lazy:D,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:on};export{A as Children,E as PureComponent,mn as StrictMode,L as Suspense,M as SuspenseList,on as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,sn as cloneElement,cn as createFactory,j as createPortal,wn as default,vn as findDOMNode,pn as flushSync,N as forwardRef,G as hydrate,gn as isElement,an as isFragment,fn as isValidElement,D as lazy,w as memo,q as render,yn as startTransition,hn as unmountComponentAtNode,dn as unstable_batchedUpdates,_n as useDeferredValue,Sn as useInsertionEffect,Cn as useSyncExternalStore,bn as useTransition,ln as version};\n//# sourceMappingURL=compat.module.js.map\n","const createStoreImpl = (createState) => {\n  let state;\n  const listeners = /* @__PURE__ */ new Set();\n  const setState = (partial, replace) => {\n    const nextState = typeof partial === \"function\" ? partial(state) : partial;\n    if (!Object.is(nextState, state)) {\n      const previousState = state;\n      state = (replace != null ? replace : typeof nextState !== \"object\") ? nextState : Object.assign({}, state, nextState);\n      listeners.forEach((listener) => listener(state, previousState));\n    }\n  };\n  const getState = () => state;\n  const subscribe = (listener) => {\n    listeners.add(listener);\n    return () => listeners.delete(listener);\n  };\n  const destroy = () => listeners.clear();\n  const api = { setState, getState, subscribe, destroy };\n  state = createState(setState, getState, api);\n  return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore as default };\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","import createStore__default from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nexport { default as createStore } from 'zustand/vanilla';\nimport { useDebugValue } from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nfunction useStore(api, selector = api.getState, equalityFn) {\n  const slice = useSyncExternalStoreWithSelector(\n    api.subscribe,\n    api.getState,\n    api.getServerState || api.getState,\n    selector,\n    equalityFn\n  );\n  useDebugValue(slice);\n  return slice;\n}\nconst createImpl = (createState) => {\n  const api = typeof createState === \"function\" ? createStore__default(createState) : createState;\n  const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n  Object.assign(useBoundStore, api);\n  return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nexport { create as default, useStore };\n","import { TaskStatus } from \"../../constants/sprigRecordingEvents\";\nimport { CardType } from \"../../types/card\";\n\nexport type MultiSelectValueType = Record<string, boolean>;\n\nexport type SingleSelectValueType = Record<string, string>;\n\nexport type MultiChoiceSecondaryValueType = Record<\n  string,\n  { userText: string }\n> | null;\n\nexport interface RecordedTaskResponseValueType {\n  mediaRecordingUids?: string[] | null;\n  taskDurationMillisecond?: number;\n  taskStatus: TaskStatus;\n}\n\nexport type SelectedValue =\n  | RecordedTaskResponseValueType\n  | MultiSelectValueType\n  | SingleSelectValueType\n  | { [rowId: string]: null | string }\n  | { mediaRecordingUid: UUID | null }\n  | { submitted: boolean; name?: string }\n  | { skipped: boolean }\n  | string\n  | string[]\n  | number\n  | null\n  | undefined;\n\nexport type NextFnData = {\n  value: SelectedValue;\n  secondaryValue?: MultiChoiceSecondaryValueType;\n  questionId: number;\n  type: CardType;\n};\n\nexport type NextFnType = (\n  options: NextFnData,\n  isValidToSubmit: boolean,\n) => void;\nexport type MultiNextFn = (data: NextFnData | NextFnData[]) => void;\n\nexport interface BaseCardProps {\n  className: string;\n  next: NextFnType;\n  questionId: number;\n  type: CardType;\n  showIndividualSubmit?: boolean;\n  onSubmitButtonClick?: () => void;\n}\n\nexport type TouchKeyEvents = Pick<\n  React.JSX.DOMAttributes<HTMLDivElement>,\n  | \"onClick\"\n  | \"onKeyPress\"\n  | \"onMouseDown\"\n  | \"onMouseLeave\"\n  | \"onMouseOver\"\n  | \"onMouseUp\"\n  | \"onTouchCancel\"\n  | \"onTouchMove\"\n  | \"onTouchStart\"\n  | \"onTouchEnd\"\n>;\n\nexport type CardResponse =\n  | {\n      type: \"texturlprompt\";\n      response: undefined | { skipped: true };\n    }\n  | {\n      type: \"consentlegal\";\n      response: { submitted: true } | null;\n    }\n  | {\n      type: \"recordedtask\";\n      response: {\n        mediaRecordingUids: string[];\n        taskDurationMillisecond: number;\n        taskStatus: TaskStatus;\n      };\n    }\n  | {\n      type: \"likert\";\n      response: number | null;\n    }\n  | {\n      type: \"open\";\n      response: string;\n    }\n  | {\n      type: \"multiplechoice\";\n      response: string | undefined;\n    }\n  | {\n      type: \"multipleselect\";\n      response: string[];\n    }\n  | {\n      type: \"matrix\";\n      response: { [rowId: number]: string };\n    }\n  | {\n      type: \"nps\";\n      response: number | null;\n    }\n  | {\n      type: \"videovoice\";\n      response: {\n        mediaRecordingUid: string;\n      };\n    };\n\nexport const BOOLEAN_OPERATOR = {\n  And: 1,\n  Or: 2,\n} as const;\n\nexport type BooleanOperator =\n  (typeof BOOLEAN_OPERATOR)[keyof typeof BOOLEAN_OPERATOR];\n","import { TaskStatus } from \"../../constants/sprigRecordingEvents\";\nimport {\n  AppCard,\n  CardType,\n  Comparator,\n  GroupRoutingOption,\n  RoutingGroupOption,\n  OldRoutingOption,\n} from \"../../types/card\";\nimport { AppConfig } from \"../../types/config\";\nimport { MatrixState } from \"../cards/matrixCard\";\nimport {\n  BOOLEAN_OPERATOR,\n  BooleanOperator,\n  CardResponse,\n} from \"../cards/types\";\n\nconst ANSWERED = 1;\n\nconst comparators = {\n  eq(a: number, b: number) {\n    return a == b;\n  },\n\n  neq(a: number, b: number) {\n    return !this.eq(a, b);\n  },\n\n  gt(a: number, b: number) {\n    return a > b;\n  },\n\n  gte(a: number, b: number) {\n    return a >= b;\n  },\n\n  lt(a: number, b: number) {\n    return a < b;\n  },\n\n  lte(a: number, b: number) {\n    return a <= b;\n  },\n\n  // multiselect comparators\n  list_exact(a: string[] | unknown, b: string[] | unknown) {\n    if (!Array.isArray(a) || !Array.isArray(b)) return false;\n    return a.slice().sort().join(\",\") === b.slice().sort().join(\",\");\n  },\n\n  /**\n   * a contains b\n   */\n  list_all(a: string[] | unknown, b: string[] | unknown) {\n    if (!Array.isArray(a) || !Array.isArray(b)) return false;\n    // there's no some value in b that doesn't exist in a is logically equivalent to all value in b exist in a\n    return !b.some((val) => a.indexOf(val) === -1);\n  },\n\n  /**\n   * a has at least one value from b\n   */\n  list_alo(a: string[] | unknown, b: string[] | unknown) {\n    if (!Array.isArray(b)) return false;\n    // support mcss\n    const transformA = !Array.isArray(a) ? [a] : a;\n    // some value exist in b that also exist in a\n    const aSet = new Set(transformA);\n    return b.some((val) => aSet.has(val));\n  },\n\n  /**\n   * a is not included in b\n   */\n  list_dni(a: string[] | string, b: string[]) {\n    if (!Array.isArray(b)) return false;\n    // support mcss\n    const transformA = !Array.isArray(a) ? [a] : a;\n    // no value exist in b that also exist in a\n    const setA = new Set(transformA);\n    return b.every((val) => !setA.has(val));\n  },\n\n  /**\n   * a contains b\n   */\n  contains(a: string, b: string) {\n    const aLower = a.toLowerCase();\n    const bLower = b.toLowerCase();\n    return aLower.includes(bLower);\n  },\n  /**\n   * a not contains b\n   */\n  notcontains(a: string, b: string) {\n    return !this.contains(a, b);\n  },\n};\n\n/**\n * @param response response object submitted\n * @param type type of the question\n * @param routingValue value used to determine routing from skip logic\n * @returns\n */\nexport const getHasValidAnswer = (\n  response: { value: unknown },\n  type: CardType,\n  routingValue: { taskStatus: TaskStatus } | null | undefined,\n) => {\n  switch (type) {\n    case \"videovoice\":\n      return Boolean(response && response.value);\n    case \"open\":\n      return !!routingValue;\n    case \"multipleselect\":\n      return Boolean(routingValue && !!Object.keys(routingValue).length);\n    case \"recordedtask\":\n      return routingValue?.taskStatus === \"completed\";\n    case \"texturlprompt\":\n      return !response.value;\n    case \"consentlegal\":\n      return routingValue !== null;\n    case \"multiplechoice\":\n      return routingValue !== undefined;\n    case \"matrix\":\n      return Boolean(\n        routingValue &&\n          Object.values(routingValue).every((val) => val !== null),\n      );\n    case \"nps\":\n      return routingValue !== null;\n    case \"likert\":\n      return routingValue !== null;\n    default:\n      return true;\n  }\n};\n\n/**\n *\n * @param response response object submitted\n * @param type question type\n * @returns boolean, true if answer is partial\n */\nconst getHasPartialAnswer = (response: MatrixState, type: CardType) => {\n  if (type === \"matrix\") {\n    const numRows = Object.keys(response).length;\n    const numAnswered = Object.values(response).filter(\n      (val) => val !== null,\n    ).length;\n    return numAnswered > 0 && numAnswered < numRows;\n  }\n  return false;\n};\n\n/**\n * @param cards - Array of all cards\n * @param index - Current index in the cards\n * @param selectedValue - Value that was selected which determines routing options\n * @param hasEndCard - is the thanks card configured\n * @returns optional next index value, if next index is null, survey ends immediately\n */\nexport const getNextCardIndex = ({\n  cards,\n  index,\n  hasEndCard,\n  allResponses,\n  uploadProgress = {},\n}: {\n  cards: AppCard[];\n  hasEndCard: boolean;\n  index: number;\n  uploadProgress?: AppConfig[\"uploadProgress\"];\n  allResponses: unknown[];\n}) => {\n  if (index >= cards.length || index < 0) return null; // invalid scenario\n  const card = cards[index];\n  let nextIndex = index + 1;\n  const routingOptions = card.props.routingOptions || [];\n\n  for (let i = 0; i < routingOptions.length; i++) {\n    const { group, target } = routingOptions[i] as GroupRoutingOption;\n    if (!group?.length) continue; // if there's no group length, break and skip to next routing option\n    const base = group[0] as RoutingGroupOption;\n\n    // if questionIndex is for future index, skip\n    if (\n      base.questionIndex === undefined ||\n      base.questionIndex > allResponses.length\n    )\n      continue;\n\n    let matches = evaluateRule({\n      comparator: base.comparator,\n      // @ts-expect-error - unknown response type\n      response: allResponses[base.questionIndex],\n      // @ts-expect-error - expected card type\n      type: card.type,\n      value: base.value as never,\n    });\n\n    for (let i = 1; i < group.length; i += 2) {\n      const op = group[i] as BooleanOperator;\n\n      const rule = group[i + 1] as RoutingGroupOption;\n\n      const ruleMatches = evaluateRule({\n        comparator: rule.comparator,\n        // @ts-expect-error - unknown response type\n        response: allResponses[rule.questionIndex],\n        // @ts-expect-error - expected card type\n        type: cards[rule.questionIndex].type,\n        value: rule.value as never,\n      });\n\n      if (op === BOOLEAN_OPERATOR.And) {\n        matches &&= ruleMatches;\n      } else if (op === BOOLEAN_OPERATOR.Or) {\n        matches ||= ruleMatches;\n      }\n    }\n\n    if (matches) {\n      nextIndex = target === -1 && hasEndCard ? cards.length - 1 : target;\n      break;\n    }\n  }\n\n  const uploadCardIndex = cards.findIndex((card) => card.type === \"uploading\");\n\n  let lastQuestionIndex;\n  if (uploadCardIndex > 0) {\n    lastQuestionIndex = hasEndCard ? cards.length - 3 : cards.length - 2;\n  } else {\n    lastQuestionIndex = cards.length - 1;\n  }\n\n  // these are the two end scenarios:\n  // 1. when we're at (or, in an error case, after) the last question (don't care about routing in this case)\n  // 2. when the routing target is to skip to end (-1) or (error case) to an index after the last question.\n  if (\n    index >= lastQuestionIndex ||\n    nextIndex === -1 ||\n    (nextIndex !== null && nextIndex > lastQuestionIndex)\n  ) {\n    // show upload card if recordings are still being processed\n    const showUploadingCardAtEnd =\n      uploadCardIndex > 0 &&\n      Object.values(uploadProgress).some((v) => v.isSubmitted && !v.isComplete);\n\n    if (showUploadingCardAtEnd) {\n      return uploadCardIndex;\n    } else if (hasEndCard) {\n      return cards.length - 1;\n    } else {\n      return null;\n    }\n  }\n\n  // no end card\n  if (nextIndex === -1) return null;\n\n  return nextIndex;\n};\n\nconst evaluateRule = ({\n  comparator,\n  response,\n  type,\n  value,\n}: {\n  comparator: Comparator;\n  value: never;\n} & CardResponse) => {\n  if (comparator === \"answered\") {\n    switch (type) {\n      case \"texturlprompt\":\n        return response === undefined;\n      case \"consentlegal\":\n        return response && response.submitted === true;\n      case \"recordedtask\":\n        return \"taskStatus\" in response && response.taskStatus === \"completed\";\n      case \"likert\":\n        return Number.isInteger(response);\n      case \"matrix\":\n        return Object.values(response).every((val) => val !== null);\n      case \"multiplechoice\":\n        return response !== undefined;\n      case \"multipleselect\":\n        return response?.length > 0;\n      case \"nps\":\n        return Number.isInteger(response);\n      case \"open\":\n        return response && response.length > 0;\n      case \"videovoice\":\n        return !!response?.mediaRecordingUid;\n      default:\n        return false;\n    }\n  }\n  if (comparator === \"given_up\") {\n    if (type === \"recordedtask\") {\n      return \"taskStatus\" in response && response.taskStatus === \"given.up\";\n    } else {\n      return true;\n    }\n  }\n  if (comparator === \"partial\") {\n    if (type === \"matrix\") {\n      return getHasPartialAnswer(response, type);\n    } else {\n      return false;\n    }\n  }\n  if (comparator === \"skipped\") {\n    switch (type) {\n      case \"texturlprompt\":\n        return response?.skipped;\n      case \"consentlegal\":\n        return response === null;\n      case \"recordedtask\":\n        return \"taskStatus\" in response && response.taskStatus === \"abandoned\";\n      case \"likert\":\n        return response === null;\n      case \"open\":\n        return response?.length === 0;\n      case \"multiplechoice\":\n        return response === undefined;\n      case \"multipleselect\":\n        return response?.length === 0;\n      case \"matrix\":\n        return Object.values(response).every((val) => val === null);\n      case \"nps\":\n        return response === null;\n      case \"videovoice\":\n        return response === null;\n      default:\n        return false;\n    }\n  }\n  return comparators[comparator](response as never, value);\n};\n\nconst MAX_LENGTH_TO_CALCULATE_SUBSETS = 13;\n// https://stackoverflow.com/questions/42773836/how-to-find-all-subsets-of-a-set-in-javascript-powerset-of-array\nconst getAllSubsets = (array: string[], allowEmpty: boolean) => {\n  return array\n    .reduce(\n      (subsets: string[][], value) =>\n        subsets.concat(subsets.map((set) => [...set, value])),\n      [[]],\n    )\n    .filter((arr) => allowEmpty || arr.length > 0);\n};\n\nconst generatePossibleSelectedValues = (card: AppCard) => {\n  switch (card.type) {\n    case \"multipleselect\":\n      // return null if invalid options\n      if (!card || !card.props || !card.props.options) return null;\n      if (card.props.options.length > MAX_LENGTH_TO_CALCULATE_SUBSETS) {\n        // 2 ** MAX_LENGTH_TO_CALCULATE_SUBSETS (13) = 8192. above this limit, computation may be too slow.\n        // We should almost never see more than 13 options, but in this edge case, only consider length-1 combinations.\n        // This may lead to an inaccurate calculation, but we prefer that than poor performance.\n        return card.props.options.map((option) => [option.value]);\n      }\n      return getAllSubsets(\n        card.props.options.map((option) => option.value),\n        !card.props.properties.required,\n      );\n    case \"multiplechoice\": {\n      // return null if invalid options\n      if (!card || !card.props || !card.props.options) return null;\n      const possibleValues: (string | undefined)[] = card.props.options.map(\n        (option) => option.value,\n      );\n      if (!card.props.properties.required) possibleValues.push(undefined);\n      return possibleValues;\n    }\n    case \"matrix\": {\n      if (!card?.props?.options) return null;\n      const matrixColumns = card.props.properties.matrixColumn;\n      const matrixRows = card.props.options;\n      const emptyResponse = matrixRows.reduce(\n        (prevMap: MatrixState, option) => {\n          prevMap[option.id] = null;\n          return prevMap;\n        },\n        {},\n      );\n      const partialResponse = {\n        ...emptyResponse,\n        [matrixRows[0].id]: matrixColumns[0].value,\n      };\n      const completeResponse = matrixRows.reduce(\n        (prevMap: MatrixState, option) => {\n          prevMap[option.id] = matrixColumns[0].value;\n          return prevMap;\n        },\n        {},\n      );\n      const possibleValues = [partialResponse, completeResponse];\n      if (!card.props.properties.required) possibleValues.push(emptyResponse);\n      return possibleValues;\n    }\n\n    case \"likert\": {\n      const range = Number(card.props?.properties?.range) || 5;\n      const ratingScaleArr = Array.from(Array(range).keys()).map((i) => i + 1);\n      return [\n        ...ratingScaleArr,\n        ...(card.props.properties.required ? [] : [null]),\n      ];\n    }\n    case \"nps\":\n      return [\n        0,\n        1,\n        2,\n        3,\n        4,\n        5,\n        6,\n        7,\n        8,\n        9,\n        10,\n        ...(card.props.properties.required ? [] : [null]),\n      ];\n    case \"videovoice\":\n    case \"open\":\n      return [\"1\", ...(card.props.properties.required ? [] : [\"\"])];\n    case \"recordedtask\": {\n      const res: { taskStatus: TaskStatus }[] = [\n        { taskStatus: \"completed\" },\n        { taskStatus: \"given.up\" },\n      ];\n      if (!card.props.properties.required)\n        res.push({ taskStatus: \"abandoned\" });\n      return res;\n    }\n    case \"texturlprompt\":\n      return [\n        undefined,\n        ...(card.props.properties.required ? [] : [{ skipped: true }]),\n      ];\n    case \"consentlegal\":\n      return [ANSWERED, ...(card.props.properties.required ? [] : [null])];\n    default:\n      return [ANSWERED];\n  }\n};\n\nconst hasComparator = (\n  comparator: Comparator,\n): comparator is Extract<\n  Comparator,\n  | \"eq\"\n  | \"neq\"\n  | \"gt\"\n  | \"gte\"\n  | \"lt\"\n  | \"lte\"\n  | \"list_all\"\n  | \"list_alo\"\n  | \"list_exact\"\n  | \"list_dni\"\n  | \"contains\"\n  | \"notcontains\"\n> => {\n  return comparator in comparators;\n};\n\nconst hasTaskStatus = (x: unknown): x is { taskStatus: TaskStatus } => {\n  return typeof x === \"object\" && x !== null && \"taskStatus\" in x;\n};\n\nconst getFlattenRoutingOption = (\n  questionIndex: number,\n  routingOptions: GroupRoutingOption[] = [],\n) => {\n  return routingOptions.reduce((acc, option) => {\n    const { group, target } = option;\n    if (!group?.length) return [...acc];\n\n    const flattenGroup = group\n      .filter((item): item is RoutingGroupOption => {\n        if (Number(item)) return true; // filter out booleans\n        else if (typeof item === \"object\")\n          return item.questionIndex === questionIndex; // filter out previous response comparators\n        return false;\n      })\n      .map((item) => {\n        const { comparator, value } = item;\n        return {\n          comparator,\n          target,\n          value,\n        } as never;\n      });\n    return [...acc, ...flattenGroup];\n  }, []);\n};\n\n/**\n * Calculates the maximum number of remaining cards by calculating the maximum remaining cards for the remaining cards.\n * It is inclusive of the current card.\n * It calculates by finding all possible solutions, and then seeing if it will validate the routing rules of the question.\n * Current limitation of this function is that it does not consider the routing rules for previous question or calculates any boolean operators.\n * @param cards Array of cards\n * @param index Current card index\n * @returns an integer of the maximum number of remaining cards, including this card\n */\nexport const getMaxRemainingCards = (cards: AppCard[], index: number) => {\n  const invalidCardTypes = new Set<CardType>([\"thanks\", \"uploading\"]);\n\n  // returns the maximum number of remaining cards, including this card\n  if (index >= cards.length || index < 0) return 0; // invalid scenario\n\n  if (invalidCardTypes.has(cards[index].type)) {\n    // this is the thank you or uploading card; survey is completed; no max remaining cards\n    return 0;\n  }\n\n  // filter out thank you card and uploading card from calculation, if present\n  const filteredCards = cards.filter(\n    (card) => !invalidCardTypes.has(card.type),\n  );\n\n  // this is the last card, so we can short-circuit.\n  if (index === filteredCards.length - 1) return 1;\n\n  // routingTarget of end card is -1, in this case, there are no questions left.\n  const cache = { [filteredCards.length - 1]: 1, [-1]: 0 };\n\n  // for each card in reverse order, ending with the current desired index, compute the longest possible\n  // number of remaining cards, considering the values of longest possible number of remaining cards after it.\n  for (\n    let currentIndex = filteredCards.length - 2;\n    currentIndex >= index;\n    currentIndex--\n  ) {\n    const card = filteredCards[currentIndex];\n\n    // flatten the group routing options to fit progress bar logic\n    const routingOptions = getFlattenRoutingOption(\n      currentIndex,\n      card.props.routingOptions as GroupRoutingOption[],\n    );\n\n    // if there aren't routing options, we have to go to the next question\n    if (routingOptions.length === 0) {\n      cache[currentIndex] = cache[currentIndex + 1] + 1;\n      continue;\n    }\n\n    let maxRemainingCards = 0;\n    let possibleSelectedValues = generatePossibleSelectedValues(card);\n\n    if (possibleSelectedValues === null) {\n      // invalid question options, short-circuit with remaining card count\n      return filteredCards.length - 1 - index;\n    }\n\n    // consider each routing option: if it's possible for it to match,\n    // consider where it leads as part of computing the longest possible number of remaining cards.\n    for (\n      let routingOptionIndex = 0;\n      routingOptionIndex < routingOptions.length;\n      routingOptionIndex++\n    ) {\n      if (possibleSelectedValues.length === 0) {\n        // remaining routingOptions are never considered\n        break;\n      }\n\n      const { comparator, target, value } = routingOptions[\n        routingOptionIndex\n      ] as OldRoutingOption<Comparator>;\n\n      // filter out any remaining possible values that match the current routing option\n      const newPossibleSelectedValues: string[] | string[][] = (\n        possibleSelectedValues as never[]\n      ).filter((selectedValue: unknown) => {\n        const isValueValid = getHasValidAnswer(\n          { value: selectedValue },\n          card.type,\n          selectedValue as never,\n        );\n        const isPartial = getHasPartialAnswer(\n          selectedValue as never,\n          card.type,\n        );\n        return !(\n          (isValueValid && comparator === \"answered\") ||\n          (isPartial && comparator === \"partial\") ||\n          (!isValueValid && !isPartial && comparator === \"skipped\") ||\n          (comparator === \"given_up\" &&\n            hasTaskStatus(selectedValue) &&\n            selectedValue.taskStatus === \"given.up\") ||\n          (isValueValid &&\n            card.type === \"open\" &&\n            (comparator === \"contains\" || comparator === \"notcontains\")) ||\n          (isValueValid &&\n            hasComparator(comparator) &&\n            comparators[comparator](selectedValue as never, value as never))\n        );\n      });\n\n      // if anything was filtered out, it's possible to match the routing options, so use routing target\n      if (newPossibleSelectedValues.length < possibleSelectedValues.length) {\n        const routingTarget = parseInt(String(target), 10);\n        if (\n          (routingTarget !== -1 && routingTarget <= currentIndex) ||\n          routingTarget >= filteredCards.length\n        ) {\n          // invalid routing target, short-circuit with remaining card count\n          return filteredCards.length - 1 - index;\n        }\n        maxRemainingCards = Math.max(\n          cache[routingTarget] + 1,\n          maxRemainingCards,\n        );\n      }\n\n      possibleSelectedValues = newPossibleSelectedValues;\n    }\n\n    if (possibleSelectedValues.length > 0) {\n      // it's possible to not match any of the routing values and go to the next question\n      maxRemainingCards = Math.max(\n        cache[currentIndex + 1] + 1,\n        maxRemainingCards,\n      );\n    }\n\n    cache[currentIndex] = maxRemainingCards;\n  }\n\n  return cache[index];\n};\n","import create from \"zustand\";\n\nimport { getNextCardIndex } from \"./helpers/skipLogicHelpers\";\nimport { APP_ID } from \"../constants/css\";\nimport { DismissReason, SprigEvent } from \"../constants/sprigEvents\";\nimport { DEFAULT_WIDTH_PX } from \"../controller/constants\";\nimport { breadcrumbsLogger as logger } from \"../helpers/BreadcrumbsLogger\";\nimport ConflictingWidgets from \"../helpers/conflicting_widgets\";\nimport { calculateFrameDimensions } from \"../helpers/document\";\nimport eventEmitter from \"../helpers/eventEmitter\";\nimport { shouldDirectEmbed } from \"../helpers/general\";\nimport { sprigFetch } from \"../helpers/network\";\nimport {\n  AppCard,\n  Card,\n  CardType,\n  MultipleChoiceMultiSelectCard,\n} from \"../types/card\";\nimport { AppConfig, ResponseData, Submission } from \"../types/config\";\n\nconst NON_QUESTION_SET = new Set<CardType>([\"thanks\", \"uploading\"]);\nconst isQuestionCard = (card: AppCard): card is Card =>\n  card && !NON_QUESTION_SET.has(card.type);\n\nexport const useConfig = create<AppConfig>()((set, get) => ({\n  allResponses: [],\n  answers: undefined,\n  apiURL: \"\",\n  border: \"#000000\",\n  cards: [],\n  close: async (id = APP_ID) => {\n    const app = get();\n    const { fadeout, remove, trackHistory, studyType } = app;\n    await fadeout(id);\n    if (!skipWriteForAction(app)) {\n      trackHistory({ event: \"closed\" });\n    }\n    logger.info(\"SurveyClosing\", { surveyId: app.surveyId });\n\n    ConflictingWidgets.enable();\n    remove({\n      initiator: DismissReason.Closed,\n      studyType,\n    });\n  },\n  configureExitOnOverlayClick: () => {},\n  customMetadata: {},\n  destroy: async (id) => {\n    const { eventEmitFn, fadeout, remove, studyType, surveyId } = get();\n\n    eventEmitFn(\"survey.complete\", surveyId);\n    await fadeout(id);\n    ConflictingWidgets.enable();\n    remove({\n      initiator: DismissReason.Complete,\n      studyType,\n    });\n  },\n  endCard: { headline: \"\" },\n  envId: \"\",\n  eventEmitFn: eventEmitter.emit.bind(eventEmitter),\n  fadeout: async (id) => {\n    const { eventEmitFn, headers, viewDocument } = get();\n\n    if (shouldDirectEmbed(headers)) return Promise.resolve();\n\n    eventEmitFn(SprigEvent.SurveyFadingOut);\n    return new Promise<void>((resolve) => {\n      const el = viewDocument.getElementById(id);\n      if (el) {\n        el.addEventListener(\"transitionend\", () => {\n          resolve();\n        });\n        el.classList.remove(\"ul-app--visible\");\n      } else {\n        resolve();\n      }\n    });\n  },\n  forceBrandedLogo: false,\n  frame: document.createElement(\"iframe\"),\n  handleClickEmbedButton: (buttonEventName) => {\n    const { cards, eventEmitFn, index } = get();\n\n    eventEmitFn(buttonEventName as \"survey.question\", {\n      qid: cards[index].name,\n      props: cards[index].props, // Only return the upcoming card\n    });\n\n    set(() => ({ hasViewedEmbed: true }));\n  },\n  handleUploadUpdate: ({\n    mediaRecordingUid,\n    isComplete,\n    progressPct,\n    isSubmitted,\n  }) => {\n    const { cards, destroy, index, uploadProgress } = get();\n    const newISComplete =\n      isComplete || uploadProgress[mediaRecordingUid]?.isComplete;\n\n    const newProgress = {\n      ...uploadProgress,\n      [mediaRecordingUid]: {\n        progressPct: newISComplete\n          ? 100\n          : progressPct || uploadProgress[mediaRecordingUid]?.progressPct,\n        isComplete: newISComplete,\n        isSubmitted:\n          isSubmitted || uploadProgress[mediaRecordingUid]?.isSubmitted,\n      },\n    };\n    set({\n      uploadProgress: newProgress,\n    });\n\n    if (cards[index].type !== \"uploading\") {\n      return;\n    }\n    const uploadComplete = Object.entries(uploadProgress).every(\n      ([mRUid, v]) =>\n        !v.isSubmitted ||\n        v.isComplete ||\n        (mediaRecordingUid == mRUid && isComplete),\n    );\n\n    if (uploadComplete && index >= cards.length - 1) {\n      // if upload's complete and there's no end card, close the study. no need to update state\n      return destroy(APP_ID);\n    }\n    set({\n      index: uploadComplete ? index + 1 : index,\n      uploadingCardViewed: true,\n    });\n  },\n  hasViewedEmbed: false,\n  headers: {\n    Authorization: \"\",\n    \"Content-Type\": \"\",\n    \"userleap-platform\": \"web\",\n    \"x-ul-environment-id\": \"\",\n    \"x-ul-installation-method\": \"web-snippet\",\n    \"x-ul-sdk-version\": \"\",\n    \"x-ul-visitor-id\": \"\",\n  },\n  index: 0,\n  isPreview: false,\n  marketingUrl: \"https://sprig.com\",\n  meta: {\n    ch: 0,\n    cw: 0,\n    l: \"\",\n    mode: null,\n    p: \"\",\n    sh: 0,\n    sw: 0,\n  },\n  mode: undefined,\n  next: (params) => {\n    const {\n      allResponses,\n      cards,\n      eventEmitFn,\n      index,\n      responseGroupUid,\n      submit,\n      trackHistory,\n      uploadProgress,\n      viewedCardCount,\n    } = get();\n    set({\n      minScrollableHeight: undefined,\n    });\n    // Store the value into the cards\n    const responses = Array.isArray(params.data) ? params.data : [params.data];\n    const answeredAt = Date.now();\n    const newCards = [...cards];\n\n    const submission: Submission = {\n      response: [],\n      responseGroupUid,\n      questionIndex: index,\n    };\n\n    let routingTarget: number | null = null;\n    // moved outside to allow tracking of all responses\n    const newResponses: unknown[] = allResponses.slice(0);\n\n    (responses as ResponseData[]).forEach((rawResponse, i) => {\n      const card = newCards[index + i];\n      const { type, ...rest } = rawResponse;\n\n      const response: Omit<ResponseData, \"type\"> & {\n        type?: CardType;\n        answeredAt: number;\n      } = {\n        ...rest,\n        answeredAt,\n      };\n      const value = response.value;\n\n      if (isQuestionCard(card)) {\n        card.value = value;\n      }\n\n      submission.response.push(response);\n\n      let routingValue =\n        type === \"multiplechoice\"\n          ? Object.values(value as boolean[]).find((v) => v !== false)\n          : value;\n\n      // MultiChoice Multi Select, should test route based on the selected options\n      if (type === \"multipleselect\") {\n        routingValue = (\n          newCards[index + i] as MultipleChoiceMultiSelectCard\n        ).props.options.reduce<string[]>((accumulator, option) => {\n          if ((value as { [key: number]: string })[option.id]) {\n            accumulator.push(option.value);\n          }\n          return accumulator;\n        }, []);\n      }\n\n      // record response history\n      newResponses[index + i] = routingValue;\n\n      routingTarget = getNextCardIndex({\n        cards: newCards,\n        index: index + i,\n        hasEndCard: !!params.endCard,\n        uploadProgress,\n        allResponses: newResponses,\n      });\n    });\n    // moved the set outside to store them once and keep all values\n    set({\n      allResponses: newResponses,\n    });\n\n    if (\n      routingTarget === null ||\n      NON_QUESTION_SET.has(newCards[routingTarget].type)\n    ) {\n      // no more next index, survey completed\n      submission.completedAt = answeredAt;\n    }\n\n    const p = submit(submission);\n    if (routingTarget === null) {\n      // no more next index, survey completed\n      params.completeSurvey();\n      return;\n    }\n    if (routingTarget && !NON_QUESTION_SET.has(newCards[routingTarget].type)) {\n      p.finally(() => {\n        trackHistory({ event: \"seen\", index: routingTarget });\n      });\n    }\n\n    // Emit current question's property to the configured event subscriber.\n    const newCard = newCards[routingTarget];\n    if (newCards[routingTarget] && eventEmitFn) {\n      eventEmitFn(\"survey.question\", {\n        qid: newCard.name,\n        props: newCard.props, // Only return the upcoming card\n      });\n    }\n\n    set({\n      cards: newCards,\n      hasViewedEmbed: false,\n      index: routingTarget,\n      viewedCardCount: viewedCardCount + 1,\n    });\n  },\n  pendingRemoveIframeReason: null,\n  previewKey: null,\n  previewMode: undefined,\n  recorder: () => {},\n  recorderEventEmitter: eventEmitter,\n  resolveTrackedPromise: () => {\n    const { removeIframeIfReady } = get();\n    set((s) => ({ unresolvedRequestCount: s.unresolvedRequestCount - 1 }));\n    removeIframeIfReady();\n  },\n  responseGroupUid: \"\",\n  remove: ({ initiator, studyType }) => {\n    const { eventEmitFn, removeIframeIfReady, surveyId } = get();\n    set({ pendingRemoveIframeReason: initiator, studyType });\n    eventEmitFn(SprigEvent.SurveyCloseRequested, {\n      name: SprigEvent.SurveyCloseRequested,\n      initiator,\n      studyType,\n      \"survey.id\": surveyId!,\n    });\n    removeIframeIfReady();\n  },\n  removeIframeIfReady: () => {\n    const {\n      eventEmitFn,\n      pendingRemoveIframeReason,\n      unresolvedRequestCount,\n      studyType,\n      surveyId,\n    } = get();\n    /*\n        wait for all requests to finish before removing the iframe, otherwise\n        pending requests will be cancelled\n    */\n    if (pendingRemoveIframeReason && unresolvedRequestCount === 0) {\n      eventEmitFn(SprigEvent.SurveyWillClose, {\n        name: SprigEvent.SurveyWillClose,\n        initiator: pendingRemoveIframeReason,\n        studyType,\n        \"survey.id\": surveyId,\n      });\n      set({ pendingRemoveIframeReason: null, studyType });\n    }\n  },\n  seen: async () => {\n    const { trackHistory } = get();\n    return trackHistory({ event: \"seen\", isNew: true });\n  },\n  slugName: null,\n  showStripes: false,\n  showSurveyBrand: false,\n  styleNonce: \"\",\n  submit: async ({\n    completedAt,\n    questionIndex,\n    response,\n    responseGroupUid,\n  }) => {\n    const app = get();\n    if (!responseGroupUid || skipWriteForAction(app)) {\n      return;\n    }\n\n    const payload = {\n      responseGroupUid,\n      meta: app.meta,\n      customMetadata: app.customMetadata,\n      responses: response,\n      completedAt,\n      previewKey: app.previewKey,\n    };\n\n    const result = await app.trackPromise(\n      sprigFetch(\n        `${app.apiURL}/sdk/1/environments/${app.envId}/visitors/${app.userId}/responses/submit`,\n        {\n          body: JSON.stringify(payload),\n          headers: app.headers,\n          method: \"POST\",\n        },\n      ),\n    );\n\n    if (!result.ok) {\n      if (result.reportError) {\n        console.warn(\n          `[Sprig] (ERR-427) Failed to submit response`,\n          result.error,\n        );\n        await app.trackPromise(\n          reportError(app, \"submitResponse\", result.error),\n        );\n      }\n      return;\n    }\n\n    (response as ResponseData[]).forEach((resp, i) => {\n      app.eventEmitFn(SprigEvent.QuestionAnswered, {\n        ...resp,\n        questionIndex: questionIndex ? questionIndex + i : undefined,\n        \"survey.id\": app.surveyId,\n      });\n    });\n  },\n  surveyId: 0,\n  tabTitle: \"\",\n  trackHistory: async ({ event, index: overrideIndex, isNew = false }) => {\n    const app = get();\n    if (skipWriteForAction(app)) return;\n\n    const { cards, index: currentIndex } = app;\n\n    let index = overrideIndex ?? currentIndex;\n    let card: AppCard = cards[index];\n\n    while (card) {\n      const hist = {\n        sid: app.surveyId,\n        qid: card.name,\n        action: event,\n        vid: app.userId,\n        eid: app.envId,\n        isNew,\n        responseGroupUid: app.responseGroupUid,\n        previewKey: app.previewKey,\n      };\n\n      const result = await app.trackPromise(\n        sprigFetch(\n          `${app.apiURL}/sdk/1/visitors/${app.userId}/surveys/${app.surveyId}/history`,\n          {\n            method: \"POST\",\n            headers: app.headers,\n            body: JSON.stringify(hist),\n          },\n        ),\n      );\n\n      if (!result.ok && result.reportError) {\n        console.warn(\n          `[Sprig] (ERR-428) Failed to track survey event`,\n          result.error,\n        );\n        await app.trackPromise(reportError(app, \"trackHistory\", result.error));\n      }\n\n      // If the next card is in the same group, continue\n      const nextCard = cards[index + 1];\n      if (\n        card.groupId &&\n        nextCard?.groupId &&\n        nextCard.groupId === card.groupId\n      ) {\n        index++;\n        card = nextCard;\n        isNew = false; // Only mark the first card as new\n      } else {\n        break;\n      }\n    }\n  },\n  trackPromise: async (promise) => {\n    const { resolveTrackedPromise } = get();\n    set((s) => ({ unresolvedRequestCount: s.unresolvedRequestCount + 1 }));\n\n    return promise\n      .then((p) => {\n        resolveTrackedPromise();\n        return p;\n      })\n      .catch((err) => {\n        resolveTrackedPromise();\n        throw err;\n      });\n  },\n  unresolvedRequestCount: 0,\n  update: () => {\n    const {\n      cards,\n      index,\n      headers,\n      eventEmitFn,\n      frame,\n      useMobileStyling,\n      surveyId,\n      viewDocument,\n    } = get();\n    const isWeb = headers[\"userleap-platform\"] === \"web\";\n    const directEmbed = shouldDirectEmbed(headers);\n    const card = cards[index];\n    const isTableMatrixCard =\n      card.type === \"matrix\" &&\n      !(card.props.properties.displayMatrixAsAccordion || useMobileStyling);\n\n    set({\n      minScrollableHeight: undefined,\n    });\n    // send height update after the initial animation to show the survey frame\n    setTimeout(() => {\n      const shouldSetFrameWidthBeforeCalculation =\n        !directEmbed && !useMobileStyling;\n      if (shouldSetFrameWidthBeforeCalculation) {\n        frame?.setWidth?.(DEFAULT_WIDTH_PX);\n      }\n      const [height, width, minHeight] = calculateFrameDimensions(\n        viewDocument,\n        isWeb && !useMobileStyling,\n        directEmbed,\n      );\n      if (!directEmbed) {\n        frame.setHeight?.(height);\n        set({\n          minScrollableHeight: minHeight,\n        });\n        if (!useMobileStyling && isTableMatrixCard) {\n          frame.setWidth?.(width);\n        }\n      } else {\n        eventEmitFn(SprigEvent.SurveyHeight, {\n          name: SprigEvent.SurveyHeight,\n          contentFrameHeight: height,\n          \"survey.id\": surveyId,\n        });\n        eventEmitFn(SprigEvent.SurveyWidth, {\n          name: SprigEvent.SurveyWidth,\n          contentFrameWidth: width,\n          \"survey.id\": surveyId,\n        });\n      }\n    }, 100);\n  },\n  uploadingCardViewed: false,\n  uploadProgress: {},\n  useDesktopPrototype: undefined,\n  useMobileStyling: false,\n  userId: \"\",\n  viewDocument: window.document,\n  viewedCardCount: 0,\n  focusedQuestionId: null,\n  setFocusedQuestionId: (id: number | null) => set({ focusedQuestionId: id }),\n}));\nconst skipWriteForAction = (app: AppConfig) => {\n  return (\n    !app.userId ||\n    (app.meta && app.meta.mode === \"test\") ||\n    app.isPreview ||\n    app.previewMode\n  );\n};\n\nconst reportError = async (state: AppConfig, action: string, err?: Error) => {\n  const { mode, userId: vid, envId, apiURL, headers, viewDocument } = state;\n  const pde = viewDocument.documentElement;\n  const meta = {\n    mode,\n    screenWidth: window.screen.width,\n    screenHeight: window.screen.height,\n    clientWidth: pde.clientWidth,\n    clientHeight: pde.clientHeight,\n    location: window.location.href,\n    language: window.navigator.language,\n  };\n  const body = {\n    action,\n    err: { message: `${err?.name} - ${err?.message}`, stack: err?.stack },\n    meta,\n    vid,\n    envId,\n  };\n  const result = await sprigFetch(`${apiURL}/sdk/1/errors`, {\n    method: \"POST\",\n    headers: Object.assign(\n      { \"x-ul-error\": window.btoa(`userleap-${Date.now()}-error`) },\n      headers,\n    ),\n    body: JSON.stringify(body),\n  });\n  if (!result.ok) {\n    console.warn(`[Sprig] (ERR-444) Failed to report error to API`, err);\n  }\n};\n","import * as React from \"react\";\nconst SvgCaret = (props) => /* @__PURE__ */ React.createElement(\"svg\", { fill: \"none\", height: 24, viewBox: \"0 0 24 24\", width: 24, xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17 10L12 15L7 10\", stroke: \"#0B2330\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 1.5 }));\nexport default SvgCaret;\n","import * as React from \"react\";\nconst SvgCheckmark = (props) => /* @__PURE__ */ React.createElement(\"svg\", { fill: \"none\", height: 10, viewBox: \"0 0 10 10\", width: 10, xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9.15377 1.30774L4.07685 8.23082L1.30762 5.00005\", stroke: \"white\", strokeLinecap: \"round\", strokeWidth: 2 }));\nexport default SvgCheckmark;\n","import { forwardRef, ReactNode, useEffect, useRef, useState } from \"react\";\n\nimport Caret from \"../../assets/caret.svg?react\";\nimport CheckSvg from \"../../assets/checkmark.svg?react\";\n\ninterface AccordionProps {\n  animate: boolean;\n  children: ReactNode;\n  header: string;\n  isOpen: boolean;\n  onClick: () => void;\n  showHeaderCheck: boolean;\n}\n\nconst Checkmark = ({ visible }: { visible: boolean }) => {\n  return (\n    <div\n      className=\"sprig-check-background\"\n      style={{ opacity: visible ? 1 : 0 }}\n    >\n      <CheckSvg className=\"sprig-check\" />\n    </div>\n  );\n};\n\nconst ANIMATION_DURATION = \"250ms\";\n\n// eslint-disable-next-line react/display-name\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n  ({ animate, children, header, isOpen, onClick, showHeaderCheck }, ref) => {\n    const wrapperRef = useRef<HTMLDivElement>(null);\n    const [height, setHeight] = useState(0);\n    const [transition, setTransition] = useState(\"none\");\n    const [isInitialRender, setIsInitialRender] = useState(true);\n    useEffect(() => {\n      const rect = wrapperRef.current?.getBoundingClientRect();\n      setHeight(isOpen && rect ? rect.height : 0);\n    }, [isOpen]);\n    useEffect(() => {\n      if ((height || !isOpen) && isInitialRender) {\n        setIsInitialRender(false);\n      }\n      // Do not animate on initial render because this messes up height calculations\n      // as the card is not fully expanded when calculating height\n      // Alternatively if this is too complicated just delete animate altogether\n      setTransition(\n        animate && !isInitialRender\n          ? `height ${ANIMATION_DURATION} ease`\n          : \"none\",\n      );\n    }, [animate, isInitialRender, height, isOpen]);\n    return (\n      <div className=\"sprig-accordion\" ref={ref}>\n        <button\n          className=\"sprig-accordion-header-container\"\n          onClick={onClick}\n          type=\"button\"\n        >\n          <div className=\"sprig-header-label-container\">\n            <span className=\"sprig-header-label\">{header}</span>\n            <Checkmark visible={showHeaderCheck} />\n          </div>\n          <Caret\n            className=\"sprig-caret\"\n            style={{\n              transitionDuration: animate ? ANIMATION_DURATION : \"0\",\n              transform: isOpen ? \"rotate(-180deg)\" : \"none\",\n            }}\n          />\n        </button>\n        <div className=\"sprig-accordion-body\" style={{ transition, height }}>\n          <div ref={wrapperRef}>{children}</div>\n        </div>\n      </div>\n    );\n  },\n);\n","const Arrow = ({\n  style,\n  stroke = \"black\",\n}: {\n  style?: { [key: string]: string };\n  stroke?: string;\n}) => {\n  return (\n    <svg\n      fill=\"none\"\n      height=\"10\"\n      style={style}\n      viewBox=\"0 0 12 10\"\n      width=\"12\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M1.47839 5.2085L10.9384 5.2085\"\n        stroke={stroke}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth=\"1.35\"\n      />\n      <path\n        d=\"M7.0686 1.15845L10.9386 5.20845L7.0686 9.25845\"\n        stroke={stroke}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth=\"1.35\"\n      />\n    </svg>\n  );\n};\n\nexport default Arrow;\n","import { HTMLAttributes } from \"react\";\n\n/**\n * Combine class names\n */\nexport const cc = (\n  ...args: (HTMLAttributes<HTMLElement>[\"className\"] | boolean | null)[]\n): string => args.filter(Boolean).join(\" \");\n\nexport const getClasses = (\n  baseClass: string,\n  useMobileStyling: boolean,\n  studyType?: string,\n) => {\n  const suffix = useMobileStyling ? \"--mobile\" : \"--desktop\";\n  const suffixWithStudyType = studyType ? `${suffix}_${studyType}` : \"\";\n\n  return `${baseClass + suffix} ${\n    baseClass + suffixWithStudyType\n  } ${baseClass}`;\n};\n\nexport const getPlatformClass = (baseClass: string, platform: string) => {\n  return `${baseClass} ${baseClass}__${platform}`;\n};\n","import { HTMLAttributes } from \"preact/compat\";\n\nimport { cc } from \"../helpers/classes\";\n\nconst Button = (props: HTMLAttributes<HTMLButtonElement>) => {\n  return (\n    <button\n      {...props}\n      className={cc(\"ul-card-text__button\", props.className)}\n      id=\"ul-card-text__button\"\n    />\n  );\n};\n\nexport default Button;\n","import { useEffect, useState } from \"react\";\n\nimport { isHTMLElement } from \"./typeguards\";\nimport { useConfig } from \"../view/store\";\n\nexport const useIsCardScrollable = () => {\n  const { viewDocument } = useConfig((s) => ({\n    viewDocument: s.viewDocument,\n  }));\n  const [isScrollable, setIsScrollable] = useState(false);\n\n  useEffect(() => {\n    const target = viewDocument.querySelector(\".sprig-question-body\");\n    const observer = new ResizeObserver(() => {\n      window.requestAnimationFrame(() => {\n        setIsScrollable(\n          !!(\n            target &&\n            isHTMLElement(target) &&\n            target.scrollHeight > target.offsetHeight\n          ),\n        );\n      });\n    });\n\n    if (target) {\n      observer.observe(target);\n    }\n    return () => {\n      if (target) {\n        observer.disconnect();\n      }\n    };\n  }, [viewDocument]);\n  return isScrollable;\n};\n","import { useMemo, useRef } from \"react\";\n\nimport { APP_ID, CssConstant } from \"../../constants/css\";\nimport { useIsCardScrollable } from \"../../helpers/useIsCardScrollable\";\nimport { cc } from \"../helpers/classes\";\nimport { useConfig } from \"../store\";\n\ninterface Props {\n  message?: string;\n  properties?: {\n    questionHtml?: string;\n    captionHtml?: string;\n    captionText?: string;\n  };\n}\n\nconst RichOrPlainTextLabel = ({\n  plainText,\n  richText,\n  id,\n  className,\n  isHeader,\n}: {\n  plainText?: string;\n  richText?: string;\n  id: string;\n  className: string;\n  isHeader?: boolean;\n}) => {\n  if (richText)\n    return (\n      <div\n        className={className}\n        dangerouslySetInnerHTML={{ __html: richText }}\n        id={id}\n      />\n    );\n  if (!plainText) return null;\n  if (isHeader)\n    return (\n      <h1 className={className} id={id}>\n        {plainText}\n      </h1>\n    );\n  return (\n    <p className={className} id={id}>\n      {plainText}\n    </p>\n  );\n};\n\nconst CloseButton = () => {\n  const { cards, close, endCard, headers, index } = useConfig((s) => ({\n    cards: s.cards,\n    close: s.close,\n    endCard: s.endCard,\n    headers: s.headers,\n    index: s.index,\n    useMobileStyling: s.useMobileStyling,\n  }));\n  const steps = cards.length;\n\n  /**\n   * Dispatch to frame parent that app is closing\n   */\n  const closeApp = useMemo(() => () => close(APP_ID), [close]);\n\n  /**\n   * Close app if user uses enter key\n   */\n  const onKeyPressCloseApp = (e: KeyboardEvent) => {\n    if (e.key === \"Enter\") closeApp();\n  };\n\n  const showCloseButton = () => {\n    // don't show close button when we're directly embedded on link/email studies\n    if ([\"email\", \"link\"].includes(headers[\"userleap-platform\"])) return false;\n\n    // if there's an end card and we're on the last step (the end card), hide the close button, else show it.\n    return !endCard || index + 1 !== steps;\n  };\n  return showCloseButton() ? (\n    <div\n      aria-label=\"Close button\"\n      className=\"close-btn\"\n      onClick={closeApp}\n      onKeyPress={onKeyPressCloseApp}\n      role=\"button\"\n      tabIndex={0}\n    >\n      <svg\n        fill=\"none\"\n        height=\"16px\"\n        viewBox=\"0 0 13 13\"\n        width=\"16px\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          d=\"M2.54964 1.78369L1.78369 2.54964L5.73405 6.5L1.78369 10.4504L2.54964 11.2163L6.5 7.26595L10.4504 11.2163L11.2163 10.4504L7.26595 6.5L11.2163 2.54964L10.4504 1.78369L6.5 5.73405L2.54964 1.78369Z\"\n          fill=\"#262136\"\n        />\n      </svg>\n    </div>\n  ) : null;\n};\n\nconst Header = ({ message, properties }: Props) => {\n  const ref = useRef<HTMLDivElement>(null);\n  const caption = properties?.captionText;\n  const isScrollable = useIsCardScrollable();\n  return (\n    <div\n      className={cc(\n        \"question-header-container\",\n        \"sprig-header-container\" satisfies CssConstant,\n        isScrollable ? \"sprig-border-bottom\" : null,\n      )}\n      ref={ref}\n    >\n      <div className=\"question-header-button-container\">\n        <RichOrPlainTextLabel\n          className={\"ul-question\" satisfies CssConstant}\n          id={\"ul-question\" satisfies CssConstant}\n          isHeader\n          plainText={message}\n          richText={properties?.questionHtml}\n        />\n        <CloseButton />\n      </div>\n      <RichOrPlainTextLabel\n        className={\"ul-caption\" satisfies CssConstant}\n        id={\"ul-caption\" satisfies CssConstant}\n        plainText={caption}\n        richText={properties?.captionHtml}\n      />\n    </div>\n  );\n};\n\nexport default Header;\n","import Button from \"./button\";\nconst CheckMark = () => (\n  <svg\n    fill=\"none\"\n    height=\"10\"\n    viewBox=\"0 0 13 10\"\n    width=\"13\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M11.5 1.5L4.5 8.5L1 5\"\n      stroke=\"#FFFFFF\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"1.5\"\n    />\n  </svg>\n);\n\ntype LongformSubmitButtonProps = {\n  isSubmitDisabled: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  handleSubmit: (arg0: any) => void;\n};\n\nconst LongformSubmitButton = ({\n  isSubmitDisabled,\n  handleSubmit,\n}: LongformSubmitButtonProps) => (\n  <div className=\"ul-card-longform__submit-button-container\">\n    <Button\n      className=\"ul-card-longform__submit-button\"\n      disabled={isSubmitDisabled}\n      onClick={handleSubmit}\n    >\n      OK <CheckMark />\n    </Button>\n  </div>\n);\n\nexport default LongformSubmitButton;\n","import { EMBED_MOBILE_MAX_WIDTH } from \"../../constants/css\";\nimport { InternalEventName } from \"../../constants/sprigEvents\";\nimport { ConceptUrl } from \"../../types/card\";\nimport { Platform } from \"../../types/config\";\nimport { useConfig } from \"../store\";\n\nconst ViewEmbedButton = ({\n  buttonText = \"View Prototype\",\n  handleClick,\n}: {\n  buttonText?: string;\n  handleClick: (e: MouseEvent) => void;\n}) => (\n  <button\n    className=\"prototype-button\"\n    key=\"prototype-btn\"\n    onClick={handleClick}\n  >\n    {buttonText}\n  </button>\n);\n\n/*\n  Used for every question type to check if there is any embedded content.\n  The two embedded types are prototype and pdf.\n*/\nconst MobileEmbedView = ({\n  defaultBody,\n  embeddedType = \"prototype\",\n  properties,\n}: {\n  defaultBody: () => React.JSX.Element;\n  embeddedType?: \"prototype\" | \"pdf\";\n  platform?: Platform;\n  properties?: {\n    conceptUrl: ConceptUrl;\n    consentDocument?: {\n      url: string;\n    };\n    viewDocumentText?: string;\n  };\n}) => {\n  const {\n    handleClickEmbedButton,\n    hasViewedEmbed,\n    headers,\n    useDesktopPrototype,\n  } = useConfig((s) => ({\n    handleClickEmbedButton: s.handleClickEmbedButton,\n    hasViewedEmbed: s.hasViewedEmbed,\n    headers: s.headers,\n    useDesktopPrototype: s.useDesktopPrototype,\n  }));\n\n  const hasEmbed = properties?.conceptUrl || properties?.consentDocument?.url;\n  const isMobileEmbedViewportWidth = window.innerWidth < EMBED_MOBILE_MAX_WIDTH;\n  const platform = headers[\"userleap-platform\"];\n\n  /** handles the behavior when end user clicks on \"view prototype\" button in the mobile browser */\n  const handleEmbedButtonClick = (\n    event: MouseEvent,\n    buttonEventName: InternalEventName,\n  ) => {\n    event.preventDefault();\n    handleClickEmbedButton(buttonEventName);\n  };\n\n  if (\n    !useDesktopPrototype &&\n    isMobileEmbedViewportWidth &&\n    !hasViewedEmbed &&\n    hasEmbed &&\n    [\"email\", \"link\"].includes(platform)\n  ) {\n    if (embeddedType === \"prototype\")\n      return (\n        <ViewEmbedButton\n          handleClick={(e) => {\n            handleEmbedButtonClick(e, \"question.prototype.click\");\n          }}\n        />\n      );\n    else if (embeddedType === \"pdf\")\n      return (\n        <ViewEmbedButton\n          buttonText={properties?.viewDocumentText || \"View Document\"}\n          handleClick={(e) => {\n            handleEmbedButtonClick(e, \"question.agreement.click\");\n          }}\n        />\n      );\n  }\n\n  return defaultBody();\n};\n\nexport default MobileEmbedView;\n","import Checkmark from \"../../assets/checkmark.svg?react\";\n\nexport const Checkbox = ({\n  isSelected,\n  id,\n  divId,\n  themeColor,\n}: {\n  isSelected: boolean;\n  id: string | number;\n  divId: string;\n  themeColor: string;\n}) => {\n  return (\n    <div\n      aria-checked={isSelected}\n      aria-labelledby={`label-${id}`}\n      className=\"select-checkbox\"\n      id={divId}\n      role=\"checkbox\"\n      style={\n        isSelected\n          ? {\n              backgroundColor: themeColor,\n              borderColor: themeColor,\n              boxShadow: \"none\",\n            }\n          : {}\n      }\n      tabIndex={0}\n    >\n      {isSelected && <Checkmark />}\n    </div>\n  );\n};\n","import { RefObject, useRef } from \"react\";\n\nexport const useAutoSize = (\n  textAreaRef: RefObject<HTMLTextAreaElement>,\n  sizeUpdate: () => void,\n) => {\n  const heightRef = useRef(0);\n  const autosizeHeight = () => {\n    if (textAreaRef.current) {\n      const elem = textAreaRef.current;\n      // get the computed styles for the element\n      elem.style.height = \"1px\";\n      const scrollHeight = elem.scrollHeight;\n      const extra = elem.offsetHeight - elem.clientHeight;\n      const totalHeight = scrollHeight + extra;\n      const maxHeight = parseInt(\n        window.getComputedStyle(elem).getPropertyValue(\"max-height\"),\n      );\n\n      // calculate the height\n      const height = totalHeight <= maxHeight ? totalHeight : maxHeight;\n\n      // row was added\n      if (heightRef.current !== height) {\n        sizeUpdate();\n      }\n\n      heightRef.current = height;\n      elem.style.height = `${height}px`;\n    }\n  };\n  return autosizeHeight;\n};\n","import { useState, useRef, useEffect, CSSProperties, JSX } from \"react\";\n\nimport { Checkbox } from \"./checkbox\";\nimport { ERROR_BORDER_COLOR } from \"../../constants/css\";\nimport { cc, getClasses } from \"../helpers/classes\";\nimport { useAutoSize } from \"../hooks\";\nimport { useConfig } from \"../store\";\n\nconst Option = ({\n  ariaLabel,\n  border,\n  choiceStyle = {},\n  label,\n  isSelected,\n  value,\n  text,\n  id,\n  isRadio,\n  useMobileStyling,\n  error,\n  allowTextEntry,\n  noneOfTheAbove,\n  promptText,\n  onUserInputChanged,\n}: {\n  ariaLabel?: string;\n  border: string;\n  choiceStyle?: CSSProperties;\n  label?: string;\n  isSelected: boolean;\n  value?: string;\n  text?: string;\n  id: string;\n  isRadio: boolean;\n  noneOfTheAbove?: boolean;\n  useMobileStyling: boolean;\n  error: boolean;\n  allowTextEntry: boolean;\n  promptText?: string;\n  onUserInputChanged: (args: {\n    id: string;\n    selected: boolean;\n    value?: string;\n    userText?: string;\n    noneOfTheAbove?: boolean;\n  }) => void;\n}) => {\n  const { styleNonce, viewDocument } = useConfig((s) => ({\n    styleNonce: s.styleNonce,\n    viewDocument: s.viewDocument,\n  }));\n  const [isActive, setIsActive] = useState(false);\n  createStyles(viewDocument, border, styleNonce);\n\n  const onStateUpdated = ({\n    isSelected: selected,\n    userText,\n  }: {\n    isSelected: boolean;\n    userText?: string;\n  }) => {\n    if (onUserInputChanged) {\n      onUserInputChanged({\n        id: id,\n        selected,\n        value,\n        userText,\n        noneOfTheAbove,\n      });\n    }\n  };\n  const onClickEvent = (e: MouseEvent | KeyboardEvent) => {\n    e.stopPropagation();\n    onStateUpdated({ isSelected: isRadio || !isSelected, userText: text });\n    setIsActive(false);\n  };\n\n  const onActive = () => {\n    if (!isActive) {\n      setIsActive(true);\n    }\n  };\n\n  const onInactive = () => {\n    if (isActive) {\n      setIsActive(false);\n    }\n  };\n\n  const onKeyPress = (e: KeyboardEvent) => {\n    if (e.key === \"Enter\" || e.key === \" \") onClickEvent(e);\n  };\n\n  const clickArgs: Partial<JSX.DOMAttributes<HTMLElement>> = {\n    onClick: (e: MouseEvent) => onClickEvent(e),\n    onKeyPress: (e: KeyboardEvent) => onKeyPress(e),\n  };\n\n  if (\"ontouchstart\" in viewDocument.documentElement) {\n    clickArgs.onTouchStart = onInactive;\n    clickArgs.onTouchCancel = onInactive;\n    clickArgs.onTouchEnd = onInactive;\n  } else {\n    clickArgs.onMouseDown = onActive;\n    clickArgs.onMouseLeave = onInactive;\n  }\n\n  const divId = isRadio ? `radio-${id}` : `checkbox-${id}`;\n  const conditionalSelectedStyles =\n    isSelected || isActive ? [SELECT_ACTIVE_STYLE_CLASS] : [];\n  const additionalContainerStyles = [\n    ...(error ? [SELECT_ERROR_STYLE_CLASS] : []),\n    ...conditionalSelectedStyles,\n  ];\n\n  const optionLabel = label\n    ? { \"aria-labelledby\": `label-${id}` }\n    : { \"aria-label\": ariaLabel };\n  return (\n    <div\n      className={cc(\n        getClasses(\"choice\", useMobileStyling),\n        ...additionalContainerStyles,\n      )}\n      id={`choice-div-${id}`}\n      style={{\n        ...choiceStyle,\n        ...(error ? { borderColor: ERROR_BORDER_COLOR } : {}),\n      }}\n      {...clickArgs}\n    >\n      <div className={cc(\"choice-label-container\")}>\n        {!isRadio ? (\n          <Checkbox\n            divId={divId}\n            id={id}\n            isSelected={isSelected}\n            themeColor={border}\n          />\n        ) : (\n          <div\n            {...optionLabel}\n            className={cc(\"select-radio\", ...conditionalSelectedStyles)}\n            id={divId}\n            role=\"radio\"\n            tabIndex={0}\n          />\n        )}\n        {label && (\n          <label\n            className={cc(getClasses(\"select-label\", useMobileStyling))}\n            htmlFor={divId}\n            id={`label-${id}`}\n          >\n            {label}\n          </label>\n        )}\n      </div>\n      {allowTextEntry && isSelected && (\n        <div\n          className={cc(\n            \"choice-text-entry-container\",\n            ...conditionalSelectedStyles,\n          )}\n        >\n          <TextEntryBox\n            onTextChange={(userText: string) =>\n              onStateUpdated({ isSelected, userText })\n            }\n            promptText={promptText || \"Please specify\"}\n            textValue={text}\n            useMobileStyling={useMobileStyling}\n          />\n        </div>\n      )}\n    </div>\n  );\n};\n\nconst TextEntryBox = ({\n  promptText,\n  textValue,\n  onTextChange,\n  useMobileStyling,\n}: {\n  promptText: string;\n  textValue?: string;\n  onTextChange: (value: string) => void;\n  useMobileStyling: boolean;\n}) => {\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n  const { update } = useConfig((s) => ({\n    update: s.update,\n  }));\n  const autosize = useAutoSize(inputRef, () => update());\n\n  useEffect(() => {\n    autosize();\n    if (inputRef.current) {\n      inputRef.current.focus();\n    }\n    return () => {\n      update();\n    };\n  }, []);\n\n  return (\n    <textarea\n      aria-label={promptText}\n      aria-multiline=\"true\"\n      aria-placeholder={promptText}\n      className={cc(getClasses(\"choice-text-input\", useMobileStyling))}\n      data-gramm=\"false\"\n      maxLength={5000}\n      name=\"text\"\n      onChange={(e) => {\n        autosize();\n        e.stopPropagation();\n        onTextChange(e.currentTarget.value);\n      }}\n      onClick={(e) => {\n        e.stopPropagation();\n      }}\n      onKeyPress={(e) => {\n        e.stopPropagation();\n      }}\n      placeholder={promptText}\n      ref={inputRef}\n      role=\"textbox\"\n      rows={1}\n      value={textValue}\n    />\n  );\n};\n\nconst SELECT_STYLE_ELEM_ID = \"ul-select-style-element\";\nconst SELECT_ACTIVE_STYLE_CLASS = \"ul-select-active-dynamic-style\";\nconst SELECT_ERROR_STYLE_CLASS = \"ul-select-error-dynamic-style\";\n\nconst isHtmlStyleElement = (\n  element: HTMLElement,\n): element is HTMLStyleElement => {\n  return element.tagName.toLowerCase() === \"style\";\n};\n\nconst createStyles = (\n  viewDocument: Document,\n  border: string,\n  nonce?: string,\n) => {\n  let selectStyle = viewDocument.getElementById(SELECT_STYLE_ELEM_ID);\n  let elementCreated = false;\n  if (!selectStyle) {\n    selectStyle = viewDocument.createElement(\"style\");\n    elementCreated = true;\n  }\n  if (isHtmlStyleElement(selectStyle)) {\n    selectStyle.id = SELECT_STYLE_ELEM_ID;\n    if (nonce) selectStyle.nonce = nonce;\n    selectStyle.textContent = getSelectStyle(border);\n    if (elementCreated) {\n      viewDocument.head.appendChild(selectStyle);\n    }\n  }\n};\n\nconst getSelectStyle = (border: string) => {\n  return `\n    .${SELECT_ACTIVE_STYLE_CLASS} {\n      border-color: ${border};\n    }\n    .${SELECT_ACTIVE_STYLE_CLASS} .select-radio, .${SELECT_ACTIVE_STYLE_CLASS}.select-radio {\n      border: 6px solid ${border};\n      box-shadow: none;\n    }\n    .${SELECT_ERROR_STYLE_CLASS} {\n      border-color: ${ERROR_BORDER_COLOR};\n    }\n  `;\n};\n\nexport default Option;\n","import { ReactNode } from \"react\";\n\nimport { CssConstant } from \"../../constants/css\";\n\nexport const QuestionBodyWrapper = ({ children }: { children: ReactNode }) => {\n  return (\n    <div className={\"sprig-question-body\" satisfies CssConstant}>\n      {children}\n    </div>\n  );\n};\n","import { ReactNode } from \"react\";\n\nimport { CssConstant } from \"../../constants/css\";\nimport { useIsCardScrollable } from \"../../helpers/useIsCardScrollable\";\nimport { cc } from \"../helpers/classes\";\n\nexport const QuestionBodyFooterContainer = ({\n  children,\n}: {\n  children: ReactNode;\n}) => {\n  const isScrollable = useIsCardScrollable();\n  return (\n    <div\n      className={cc(\n        \"sprig-question-footer-container\" satisfies CssConstant,\n        isScrollable ? (\"sprig-border-top\" satisfies CssConstant) : null,\n      )}\n    >\n      {children}\n    </div>\n  );\n};\n","/**\n * UserLeap logo component\n * logoOnly: boolean - if true, only the Sprig logo is rendered, otherwise the Sprig logo and \"Powered by\" text is rendered\n */\nconst Logo = ({ logoOnly = false, style = {} }) => {\n  const width = logoOnly ? \"35\" : \"112\";\n  const viewBox = logoOnly ? \"79 0 31 15\" : \"0 0 112 15\";\n  return (\n    <svg alt={`${logoOnly ? \"Powered by \" : \"\"}Sprig`} width={width} height=\"15\" viewBox={viewBox} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ display: \"block\", ...style }}>\n      { !logoOnly && \n          <path d=\"M0.648926 12.0181V2.8584H4.21631C6.0127 2.8584 7.25684 4.06445 7.25684 5.86084V5.87354C7.25684 7.66357 6.0127 8.88867 4.21631 8.88867H2.0708V12.0181H0.648926ZM3.86084 4.05811H2.0708V7.69531H3.86084C5.09229 7.69531 5.80957 7.02881 5.80957 5.87988V5.86719C5.80957 4.72461 5.09229 4.05811 3.86084 4.05811ZM11.6621 12.1514C9.63721 12.1514 8.39941 10.7993 8.39941 8.57764V8.56494C8.39941 6.34961 9.64355 4.99121 11.6621 4.99121C13.6743 4.99121 14.9185 6.34326 14.9185 8.56494V8.57764C14.9185 10.7993 13.6807 12.1514 11.6621 12.1514ZM11.6621 11.0024C12.8428 11.0024 13.5156 10.1011 13.5156 8.57764V8.56494C13.5156 7.03516 12.8428 6.14014 11.6621 6.14014C10.4751 6.14014 9.80859 7.03516 9.80859 8.56494V8.57764C9.80859 10.1074 10.4751 11.0024 11.6621 11.0024ZM17.6226 12.0181L15.7183 5.12451H17.1021L18.3398 10.4438H18.4414L19.8633 5.12451H21.1709L22.5928 10.4438H22.7007L23.9321 5.12451H25.2969L23.3989 12.0181H21.9834L20.5552 6.87646H20.4473L19.0254 12.0181H17.6226ZM29.334 12.1514C27.3154 12.1514 26.0967 10.7739 26.0967 8.59033V8.58398C26.0967 6.43213 27.3408 4.99121 29.2642 4.99121C31.1875 4.99121 32.3682 6.38135 32.3682 8.45068V8.93311H27.4805C27.5059 10.2534 28.2295 11.0215 29.3657 11.0215C30.248 11.0215 30.7749 10.5835 30.9399 10.228L30.9653 10.1772L32.292 10.1709L32.2793 10.228C32.0508 11.1357 31.0986 12.1514 29.334 12.1514ZM29.2705 6.12109C28.3311 6.12109 27.6201 6.76221 27.4995 7.94922H31.0034C30.8955 6.71777 30.2036 6.12109 29.2705 6.12109ZM34.0059 12.0181V5.12451H35.3833V6.16553H35.4849C35.7324 5.43555 36.3735 5.00391 37.2939 5.00391C37.5161 5.00391 37.7573 5.03564 37.897 5.06738V6.33691C37.6494 6.28613 37.4146 6.25439 37.1543 6.25439C36.1006 6.25439 35.3833 6.90186 35.3833 7.89844V12.0181H34.0059ZM41.9277 12.1514C39.9092 12.1514 38.6904 10.7739 38.6904 8.59033V8.58398C38.6904 6.43213 39.9346 4.99121 41.8579 4.99121C43.7812 4.99121 44.9619 6.38135 44.9619 8.45068V8.93311H40.0742C40.0996 10.2534 40.8232 11.0215 41.9595 11.0215C42.8418 11.0215 43.3687 10.5835 43.5337 10.228L43.5591 10.1772L44.8857 10.1709L44.873 10.228C44.6445 11.1357 43.6924 12.1514 41.9277 12.1514ZM41.8643 6.12109C40.9248 6.12109 40.2139 6.76221 40.0933 7.94922H43.5972C43.4893 6.71777 42.7974 6.12109 41.8643 6.12109ZM49.1133 12.1323C47.3804 12.1323 46.2568 10.7422 46.2568 8.57764V8.56494C46.2568 6.38135 47.3613 5.00391 49.1133 5.00391C50.0591 5.00391 50.8652 5.47363 51.2334 6.21631H51.3413V2.42041H52.7124V12.0181H51.3413V10.9326H51.2334C50.8335 11.688 50.0781 12.1323 49.1133 12.1323ZM49.5068 10.958C50.6558 10.958 51.3604 10.0503 51.3604 8.57764V8.56494C51.3604 7.09229 50.6494 6.18457 49.5068 6.18457C48.3516 6.18457 47.6597 7.08594 47.6597 8.56494V8.57764C47.6597 10.0566 48.3516 10.958 49.5068 10.958ZM61.98 12.1323C61.0151 12.1323 60.2598 11.688 59.8599 10.9326H59.7583V12.0181H58.3809V2.42041H59.7583V6.21631H59.8599C60.228 5.47363 61.0342 5.00391 61.98 5.00391C63.7319 5.00391 64.8364 6.38135 64.8364 8.56494V8.57764C64.8364 10.7422 63.7192 12.1323 61.98 12.1323ZM61.5928 10.958C62.7417 10.958 63.4336 10.0566 63.4336 8.57764V8.56494C63.4336 7.08594 62.7417 6.18457 61.5928 6.18457C60.4438 6.18457 59.7329 7.09229 59.7329 8.56494V8.57764C59.7329 10.0503 60.4438 10.958 61.5928 10.958ZM66.8867 14.4429C66.7153 14.4429 66.5122 14.4302 66.3345 14.4111V13.3257C66.4678 13.3447 66.6392 13.3511 66.7979 13.3511C67.439 13.3511 67.8262 13.0781 68.0293 12.3799L68.1309 12.0244L65.6299 5.12451H67.1152L68.8418 10.6343H68.9624L70.6826 5.12451H72.1299L69.5654 12.2847C68.9814 13.9287 68.2832 14.4429 66.8867 14.4429Z\" fill=\"black\" fillOpacity=\"0.7\"/>\n      }\n      <path d=\"M81.1088 6.63629C79.6878 6.32154 78.9672 5.76865 78.9672 4.99369C78.9672 4.19299 79.736 3.5886 80.7556 3.5886C81.8066 3.5886 82.5995 4.25285 82.5995 5.13336V5.20352H84.0518V5.13336C84.0518 3.52424 82.6405 2.30774 80.7693 2.30774C79.8676 2.30774 79.0414 2.58451 78.4433 3.08655C78.1463 3.33144 77.9077 3.63818 77.7448 3.98479C77.5818 4.33141 77.4984 4.70934 77.5005 5.09153C77.4946 5.44197 77.5675 5.78934 77.714 6.10857C77.8605 6.42779 78.0769 6.71092 78.3475 6.93752C78.8512 7.37584 79.5659 7.70024 80.4709 7.90299C81.9949 8.23898 82.7676 8.81054 82.7676 9.60094C82.7676 10.4576 81.9258 11.1032 80.813 11.1032C79.6571 11.1032 78.7854 10.3856 78.7854 9.43424V9.36408H77.3318V9.43424C77.3318 11.1167 78.8219 12.3847 80.7973 12.3847C81.7421 12.3847 82.6093 12.0983 83.2393 11.5769C83.5519 11.3237 83.8034 11.0048 83.9753 10.6433C84.1472 10.2818 84.2352 9.88702 84.2329 9.48766C84.2329 8.05875 83.1833 7.09907 81.1088 6.63629Z\" fill=\"black\" fillOpacity=\"0.7\"/>\n      <path d=\"M89.2394 4.68276C88.6963 4.67605 88.1596 4.79915 87.6751 5.04156C87.1905 5.28397 86.7725 5.63851 86.4566 6.07497V4.85204H85.0747V14.8479H86.4566V11.0356C86.7725 11.472 87.1906 11.8265 87.6751 12.0688C88.1596 12.3111 88.6963 12.434 89.2394 12.4272C91.3836 12.4272 93 10.7627 93 8.55495C93 6.34723 91.3836 4.68276 89.2394 4.68276ZM91.5608 8.84202C91.5057 9.41605 91.2512 9.95356 90.8406 10.3633C90.4299 10.773 89.8883 11.0296 89.3078 11.0896C88.5363 11.1669 87.8177 10.9461 87.2841 10.4692C86.7505 9.99222 86.4566 9.3106 86.4566 8.55495C86.4566 7.10159 87.5538 6.00546 89.0087 6.00546C89.7619 6.00546 90.4421 6.29124 90.9171 6.81002C91.407 7.34232 91.6357 8.06385 91.5608 8.84202Z\" fill=\"black\" fillOpacity=\"0.7\"/>\n      <path d=\"M109.95 4.85407V6.06349C109.298 5.18298 108.292 4.68286 107.153 4.68286C105.017 4.68286 103.406 6.31709 103.406 8.48426C103.406 10.6514 105.017 12.285 107.153 12.285C108.296 12.285 109.303 11.79 109.95 10.9185V11.1046C109.95 12.6101 108.993 13.5826 107.513 13.5826C106.513 13.5826 105.68 13.1494 105.284 12.424L105.264 12.3867H103.838L103.871 12.48C104.112 13.1892 104.583 13.8001 105.211 14.2179C105.841 14.6324 106.637 14.8512 107.513 14.8512C108.637 14.8512 109.594 14.4972 110.28 13.8285C110.967 13.1597 111.332 12.2194 111.332 11.1213V4.85407H109.95ZM109.175 10.3502C108.588 10.905 107.752 11.138 106.879 10.9887C106.361 10.8984 105.886 10.6475 105.523 10.2725C105.16 9.89751 104.927 9.41787 104.859 8.90328C104.736 8.03757 104.999 7.21756 105.581 6.655C106.069 6.19093 106.723 5.93643 107.401 5.94699C107.565 5.94713 107.729 5.96026 107.891 5.98625C108.946 6.15489 109.781 7.01609 109.921 8.0852C110.039 8.96507 109.766 9.78958 109.175 10.3502Z\" fill=\"black\" fillOpacity=\"0.7\"/>\n      <path d=\"M101.89 2.12378C101.63 2.06766 101.358 2.11486 101.133 2.25518C100.908 2.39551 100.747 2.61769 100.687 2.87371C100.626 3.12973 100.67 3.39902 100.809 3.62339C100.947 3.84775 101.17 4.00917 101.428 4.07275C101.503 4.08936 101.58 4.09778 101.657 4.09786C101.906 4.09824 102.146 4.0083 102.331 3.84518C102.517 3.68206 102.636 3.45714 102.664 3.21327C102.693 2.9694 102.63 2.72361 102.487 2.5227C102.344 2.32179 102.132 2.17981 101.89 2.12378Z\" fill=\"black\" fillOpacity=\"0.7\"/>\n      <path d=\"M100.967 10.934H99.7755C98.9285 10.934 98.4196 10.3644 98.4196 9.40982C98.4196 8.4791 98.8757 7.36945 99.8054 6.01778L99.8178 5.99976V5.61807L95.8571 5.06453C95.8585 4.90331 95.8162 4.74466 95.7346 4.60501C95.653 4.46536 95.5352 4.34979 95.3932 4.27027C95.0381 4.07718 94.6498 4.07717 94.3279 4.26383C94.1667 4.35799 94.035 4.4945 93.9476 4.65816C93.8602 4.82182 93.8205 5.00623 93.8328 5.19087C93.8452 5.37552 93.9092 5.55315 94.0176 5.70402C94.1261 5.85489 94.2748 5.97309 94.4472 6.04546L93.2151 12.258H94.5833L95.7196 6.35891L97.8593 6.7155C97.284 7.73439 96.9921 8.68442 96.9921 9.53919C96.9921 11.1168 97.9577 12.1498 99.5187 12.2496V12.258H102.346V4.87723H100.967V10.934Z\" fill=\"black\" fillOpacity=\"0.7\"/>\n    </svg>\n  );\n}\n\nexport default Logo;\n","import Logo from \"../logo\";\nimport Arrow from \"./arrow\";\n\nconst SprigBrandLogo = ({\n  forceBrandedLogo,\n  marketingUrlLink,\n}: {\n  forceBrandedLogo: boolean | undefined;\n  marketingUrlLink: string;\n}) => (\n  <div\n    className={forceBrandedLogo ? \"yellow-footer-logo\" : \"\"}\n    style={{ marginTop: \"4px\", marginBottom: \"4px\" }}\n  >\n    <a href={marketingUrlLink} rel=\"noreferrer\" target=\"_blank\">\n      <div style={{ display: \"flex\" }}>\n        <Logo logoOnly={false} />\n        {forceBrandedLogo && (\n          <Arrow\n            style={{\n              display: \"block\",\n              margin: \"auto 0 auto 4px\",\n              transform: \"rotateY(0deg) rotate(-45deg)\",\n            }}\n          />\n        )}\n      </div>\n    </a>\n  </div>\n);\n\nexport default SprigBrandLogo;\n","import Arrow from \"./arrow\";\nimport Logo from \"../logo\";\n\nconst ThankYouLink = ({ marketingUrlLink }: { marketingUrlLink: string }) => {\n  // Render Sprig upsell on thank you card for free customers\n  return (\n    <a dir=\"ltr\" href={marketingUrlLink} rel=\"noreferrer\" target=\"_blank\">\n      <div className=\"thank-you-card-link\">\n        <div className=\"sprig-box-logo\">\n          <Logo logoOnly={true} style={{ margin: \"auto\" }} />\n        </div>\n        <div>\n          <p>\n            Capture insights about your own product\n            <Arrow\n              style={{\n                display: \"inline-flex\",\n                marginInlineStart: \"4px\",\n                verticalAlign: \"middle\",\n              }}\n            />\n          </p>\n        </div>\n      </div>\n    </a>\n  );\n};\n\nexport default ThankYouLink;\n","export const getButtonText = (properties?: { buttonText?: string }) => {\n  return properties?.buttonText || \"Next\";\n};\n\nexport const getSkipButtonText = (properties?: { skipButtonText?: string }) => {\n  return properties?.skipButtonText || \"Skip\";\n};\n\nexport const buildMarketingUrl = ({\n  marketingUrl,\n  slugName,\n  surveyId,\n  forceBrandedLogo,\n}: {\n  marketingUrl: string | undefined;\n  slugName: string | null;\n  surveyId: number | undefined;\n  forceBrandedLogo: boolean | undefined;\n}) => {\n  return `${marketingUrl}?utm_source=survey_branding&utm_medium=website&utm_campaign=${slugName}&utm_content=${surveyId}${\n    forceBrandedLogo ? \"&utm_term=poweredby_pill\" : \"\"\n  }`;\n};\n","import { JSX, useState } from \"react\";\n\nimport { BaseCardProps } from \"./types\";\nimport {\n  CssConstant,\n  DEFAULT_BORDER_COLOR,\n  ERROR_BORDER_COLOR,\n} from \"../../constants/css\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../helpers/general\";\nimport { ConsentLegalCard as ConsentLegalCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport {\n  Button,\n  Header,\n  MobileEmbedView,\n  Option,\n  QuestionBodyFooterContainer,\n  QuestionBodyWrapper,\n} from \"../components\";\nimport { getSkipButtonText } from \"../helpers/card\";\nimport { cc, getClasses } from \"../helpers/classes\";\n\ntype Props = ConsentLegalCardType[\"props\"] & BaseCardProps;\n\nconst ConsentLegalCard = ({\n  className,\n  message,\n  next,\n  properties,\n  questionId,\n  type,\n}: Props) => {\n  const { useMobileStyling, border, isLongFormSurvey, focusedQuestionId } =\n    useConfig((s) => ({\n      useMobileStyling: s.useMobileStyling,\n      border: s.border,\n      isLongFormSurvey: longFormSurveyCheck(s.studyType),\n      focusedQuestionId: s.focusedQuestionId,\n    }));\n  const [isConsentSelected, setIsConsentSelected] = useState(false);\n  const [name, setName] = useState(\"\");\n  const [hasValidationError, setHasValidationError] = useState(false);\n\n  const isLongFormQuestionFocused =\n    isLongFormSurvey && focusedQuestionId === questionId;\n\n  const collectName = properties?.collectName;\n  const nameLabelText = properties?.nameLabelText || \"Full Name\";\n  const consentText =\n    properties?.consentText || \"I agree to the stated conditions\";\n  const submitButtonText = properties?.submitButtonText || \"Submit\";\n\n  const isNamePresent = !!name.trim();\n  const isSubmitEnabled = isConsentSelected && (!collectName || isNamePresent);\n\n  const handleSubmit = (e: JSX.TargetedEvent, skipped = false) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    let value: { submitted: boolean; name?: string } | null = null;\n    if (!skipped) {\n      if (!isSubmitEnabled) {\n        setHasValidationError(true);\n        return;\n      }\n      value = { submitted: true };\n      if (collectName) value.name = name;\n    }\n\n    next({ value, questionId, type }, isSubmitEnabled);\n  };\n\n  const handleNameChange = (e: JSX.TargetedEvent<HTMLInputElement, Event>) => {\n    e.preventDefault();\n    e.stopPropagation();\n    setName(e.currentTarget.value);\n  };\n\n  const setActiveBorder = (e: JSX.TargetedEvent<HTMLInputElement, Event>) => {\n    e.currentTarget.style.borderColor =\n      hasValidationError && !isNamePresent ? ERROR_BORDER_COLOR : border;\n  };\n  const setDefaultBorder = (e: JSX.TargetedEvent<HTMLInputElement, Event>) => {\n    e.currentTarget.style.borderColor =\n      hasValidationError && !isNamePresent\n        ? ERROR_BORDER_COLOR\n        : DEFAULT_BORDER_COLOR;\n  };\n\n  const footer = () => (\n    <QuestionBodyFooterContainer>\n      <div className={\"sprig-stretch\" satisfies CssConstant}>\n        <Option\n          allowTextEntry={false}\n          border={border}\n          error={hasValidationError && !isConsentSelected}\n          id=\"consent\"\n          isRadio={false}\n          isSelected={isConsentSelected}\n          label={consentText}\n          onUserInputChanged={({ selected }: { selected: boolean }) => {\n            if (selected !== isConsentSelected) {\n              setIsConsentSelected(!isConsentSelected);\n            }\n          }}\n          useMobileStyling={useMobileStyling}\n        />\n        {collectName && (\n          <input\n            aria-label={nameLabelText}\n            aria-placeholder={nameLabelText}\n            className={cc(\n              getClasses(\"ul-consent-legal__name-input\", useMobileStyling),\n            )}\n            data-gramm=\"false\"\n            maxLength={250}\n            name=\"name\"\n            onBlur={setDefaultBorder}\n            onFocus={setActiveBorder}\n            onInput={handleNameChange}\n            placeholder={nameLabelText}\n            style={\n              hasValidationError && !isNamePresent\n                ? { borderColor: ERROR_BORDER_COLOR }\n                : {}\n            }\n            tabIndex={0}\n            value={name}\n          />\n        )}\n      </div>\n      <div className=\"ul-card__button-wrapper ul-card-vertical__button-wrapper\">\n        <Button\n          className={\n            isSubmitEnabled\n              ? \"\"\n              : (\"sprig-button-disabled\" satisfies CssConstant)\n          }\n          onClick={handleSubmit}\n        >\n          {submitButtonText}\n        </Button>\n        {properties.required === false && !isLongFormSurvey && (\n          <button\n            className={\"ul-card-skip__button\" satisfies CssConstant}\n            onClick={(e) => handleSubmit(e, true)}\n          >\n            {getSkipButtonText(properties)}\n          </button>\n        )}\n      </div>\n    </QuestionBodyFooterContainer>\n  );\n\n  const questionBody = () => {\n    return (\n      <>\n        {properties?.richTextBody ? (\n          <QuestionBodyWrapper>\n            <div\n              className=\"ul-rich-text-body\"\n              dangerouslySetInnerHTML={\n                properties?.richTextBody\n                  ? { __html: properties.richTextBody }\n                  : undefined\n              }\n              id=\"ul-card__consent-legal-body-container\"\n            />\n          </QuestionBodyWrapper>\n        ) : null}\n        <MobileEmbedView\n          {...{\n            properties,\n            defaultBody: footer,\n            embeddedType: \"pdf\",\n          }}\n        />\n      </>\n    );\n  };\n\n  return (\n    <div\n      className={cc(\n        className,\n        isLongFormSurvey && !isLongFormQuestionFocused && \"ul-card--unfocused\",\n        \"ul-card__consent-legal\",\n        \"fade-in-transition\" satisfies CssConstant,\n      )}\n      key={questionId}\n    >\n      <Header\n        message={message}\n        properties={{ questionHtml: properties.questionHtml }}\n      />\n      {questionBody()}\n    </div>\n  );\n};\n\nexport default ConsentLegalCard;\n","import { useMemo } from \"react\";\n\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../../helpers/general\";\nimport { ScaleLabelType } from \"../../../types/card\";\nimport { cc, getClasses } from \"../../helpers/classes\";\nimport { useConfig } from \"../../store\";\n\ninterface Props {\n  activeValue: number;\n  border: string;\n  icon: string;\n  isPressed: boolean;\n  onSubmit: () => void;\n  range: number;\n  scaleLabelType: ScaleLabelType;\n  selectedValue: number | null;\n  setSelectedValue: (value: number | null) => void;\n  setActiveValue: (value: number) => void;\n  setIsPressed: (value: boolean) => void;\n  useMobileStyling: boolean;\n  value: number;\n  viewDocument: Document;\n}\n\nconst getModifiedIconSvg = ({\n  icon,\n  scaleLabelType,\n  value,\n  selectedValue,\n}: {\n  icon: string;\n  scaleLabelType: ScaleLabelType;\n  value: number;\n  selectedValue: number | null;\n}): string => {\n  if (scaleLabelType === \"smiley\" && value === selectedValue) {\n    let count = 0;\n    return icon.replace(/black/g, () => (++count === 1 ? \"black\" : \"white\"));\n  }\n  return icon;\n};\n\nconst LikertOption = ({\n  activeValue,\n  border,\n  icon,\n  isPressed,\n  onSubmit,\n  range,\n  scaleLabelType,\n  selectedValue,\n  setSelectedValue,\n  setActiveValue,\n  setIsPressed,\n  useMobileStyling,\n  value,\n  viewDocument,\n}: Props) => {\n  const { isLongFormSurvey } = useConfig((s) => ({\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n  }));\n  const id = `option-${value}`;\n  const isNumber = scaleLabelType === \"number\";\n  const isStar = scaleLabelType === \"star\";\n  const isSmiley = scaleLabelType === \"smiley\";\n  const isNumberActive =\n    (isNumber && value === activeValue) || value === selectedValue;\n  const [activeColor, activeOpacity] = (() => {\n    const isHovered =\n      (isStar && value <= activeValue) || (isSmiley && value === activeValue);\n    const isSelected =\n      isStar && selectedValue !== null && value <= selectedValue;\n\n    if (\n      isHovered ||\n      isSelected ||\n      value === activeValue ||\n      value === selectedValue\n    ) {\n      const solid = isPressed || isSelected || value === selectedValue;\n      return [border, solid ? 1 : 0.3];\n    }\n\n    return [\"\", 1];\n  })();\n\n  const getClass = () => {\n    switch (scaleLabelType) {\n      case \"star\":\n        return cc(\n          getClasses(\"likert-star\", useMobileStyling),\n          getClasses(`likert-star-${value}`, useMobileStyling),\n        );\n      case \"smiley\":\n        return cc(\n          getClasses(\"likert-smiley\", useMobileStyling),\n          getClasses(`likert-smiley-${value}`, useMobileStyling),\n        );\n      default: {\n        if (value === range)\n          return cc(\n            getClasses(\"likert-number\", useMobileStyling),\n            getClasses(`likert-number-${value}`, useMobileStyling),\n            getClasses(`likert-last-option`, useMobileStyling),\n          );\n        return cc(\n          getClasses(\"likert-number\", useMobileStyling),\n          getClasses(`likert-number-${value}`, useMobileStyling),\n        );\n      }\n    }\n  };\n  const clearActive = () => {\n    setActiveValue(-1);\n    setIsPressed(false);\n  };\n\n  const buttonStyles = useMemo(() => {\n    const baseStyles = {\n      borderColor: isNumberActive ? activeColor : \"\",\n      fillOpacity: isNumberActive ? \"\" : activeOpacity,\n      zIndex: isNumberActive ? 3 : \"auto\",\n      color: selectedValue === value ? \"#fff\" : \"\",\n    };\n\n    return isNumber\n      ? {\n          ...baseStyles,\n          backgroundColor: selectedValue === value ? activeColor : \"\",\n        }\n      : {\n          ...baseStyles,\n          color:\n            isStar || isSmiley || selectedValue === value ? activeColor : \"\",\n        };\n  }, [\n    isNumberActive,\n    activeColor,\n    activeOpacity,\n    selectedValue,\n    value,\n    isNumber,\n    isStar,\n    isSmiley,\n  ]);\n\n  return (\n    <button\n      aria-label={!isNumber ? String(value) : undefined}\n      className={getClass()}\n      dangerouslySetInnerHTML={{\n        __html: getModifiedIconSvg({\n          icon,\n          scaleLabelType,\n          value,\n          selectedValue,\n        }),\n      }}\n      id={id}\n      onClick={(e) => {\n        if (isLongFormSurvey) {\n          e.preventDefault();\n          e.stopPropagation();\n          setSelectedValue(value);\n        }\n        onSubmit();\n      }}\n      onKeyDown={(e) => {\n        const buttons = viewDocument.querySelectorAll<HTMLButtonElement>(\n          `.likert-${scaleLabelType ?? \"number\"}`,\n        );\n        const index = value - 1;\n        if (e.key === \"ArrowRight\") {\n          buttons[index + 1]?.focus();\n        } else if (e.key === \"ArrowLeft\") {\n          buttons[index - 1]?.focus();\n        } else if (e.key === \"Enter\" || e.key === \" \") {\n          if (isLongFormSurvey) {\n            e.preventDefault();\n            e.stopPropagation();\n            setSelectedValue(value);\n          }\n          onSubmit();\n        }\n      }}\n      onPointerDown={() => setIsPressed(true)}\n      onPointerEnter={() => setActiveValue(value)}\n      onPointerLeave={clearActive}\n      style={buttonStyles}\n      tabIndex={0}\n    />\n  );\n};\n\nexport default LikertOption;\n","import { useState } from \"react\";\n\nimport LikertOption from \"./likertOption\";\nimport { CssConstant } from \"../../../constants/css\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../../helpers/general\";\nimport { LikertCard as LikertCardType } from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport {\n  Button,\n  Header,\n  MobileEmbedView,\n  QuestionBodyFooterContainer,\n  QuestionBodyWrapper,\n} from \"../../components\";\nimport { getButtonText } from \"../../helpers/card\";\nimport { cc } from \"../../helpers/classes\";\nimport { BaseCardProps } from \"../types\";\n\ntype Props = LikertCardType[\"props\"] & BaseCardProps;\n\nconst LikertCard = ({\n  className,\n  labels,\n  message,\n  next,\n  properties,\n  questionId,\n  type,\n}: Props) => {\n  const {\n    border,\n    useMobileStyling,\n    viewDocument,\n    isLongFormSurvey,\n    focusedQuestionId,\n  } = useConfig((s) => ({\n    border: s.border,\n    useMobileStyling: s.useMobileStyling,\n    viewDocument: s.viewDocument,\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n    focusedQuestionId: s.focusedQuestionId,\n  }));\n  const [activeValue, setActiveValue] = useState(-1);\n  const [isPressed, setIsPressed] = useState(false);\n  const [selectedValue, setSelectedValue] = useState<number | null>(null);\n\n  const isLongFormQuestionFocused =\n    isLongFormSurvey && focusedQuestionId === questionId;\n\n  const leftLabel = labels && labels.left;\n  const rightLabel = labels && labels.right;\n  let scaleRange;\n\n  const { range, scaleLabelType, ratingIcons } = properties;\n  if (range) scaleRange = Number(range);\n\n  const questionRange = scaleRange || 5;\n\n  const getIcon = (index: number) => {\n    switch (scaleLabelType) {\n      case \"star\":\n        return ratingIcons[0]?.svg;\n      case \"smiley\":\n        return ratingIcons[index]?.svg;\n      default:\n        return String(index + 1);\n    }\n  };\n\n  const nums = [...Array(questionRange)].map((_, index) => {\n    const value = index + 1;\n    return (\n      <LikertOption\n        activeValue={activeValue}\n        border={border}\n        icon={getIcon(index)}\n        isPressed={isPressed}\n        key={index}\n        onSubmit={() => next({ value, questionId, type }, true)}\n        range={questionRange}\n        scaleLabelType={scaleLabelType}\n        selectedValue={selectedValue}\n        setActiveValue={setActiveValue}\n        setIsPressed={setIsPressed}\n        setSelectedValue={setSelectedValue}\n        useMobileStyling={useMobileStyling}\n        value={value}\n        viewDocument={viewDocument}\n      />\n    );\n  });\n\n  const handleSkipped = (e: MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    next({ value: null, questionId, type }, true);\n  };\n\n  const questionBody = () => {\n    return (\n      <>\n        <QuestionBodyWrapper>\n          <div\n            aria-label={`Rating (1 - ${questionRange})`}\n            className=\"ul-card--likert__numbers\"\n            role=\"radiogroup\"\n          >\n            {nums}\n          </div>\n          <div className=\"ul-card--likert__labels\">\n            <span>{leftLabel}</span>\n            <span>{rightLabel}</span>\n          </div>\n        </QuestionBodyWrapper>\n        {!properties.required && !isLongFormSurvey && (\n          <QuestionBodyFooterContainer>\n            <div className=\"ul-vertical-centered-container\">\n              <Button onClick={handleSkipped}>\n                {getButtonText(properties)}\n              </Button>\n            </div>\n          </QuestionBodyFooterContainer>\n        )}\n      </>\n    );\n  };\n\n  return (\n    <form\n      className={cc(\n        className,\n        \"ul-card--likert\",\n        \"fade-in-transition\" satisfies CssConstant,\n        isLongFormSurvey && !isLongFormQuestionFocused && \"ul-card--unfocused\",\n      )}\n      key={questionId}\n    >\n      <Header message={message} properties={properties} />\n      <MobileEmbedView\n        {...{\n          properties,\n          defaultBody: questionBody,\n        }}\n      />\n    </form>\n  );\n};\n\nexport default LikertCard;\n","import { useCallback, useRef, useState } from \"react\";\n\nimport { MatrixBodyComponent, MatrixBodyProps } from \"./types\";\nimport { MultipleChoiceOption } from \"../../../types/card\";\nimport { Accordion, Option } from \"../../components\";\nimport { useConfig } from \"../../store\";\n\nconst findScrollable = (\n  e: HTMLElement | null | undefined,\n): HTMLElement | null | undefined => {\n  if (!e) return e;\n  if (e.scrollHeight > e.offsetHeight) return e;\n  return findScrollable(e.parentElement);\n};\n\nconst isHTMLElement = (e: Element): e is HTMLElement => {\n  return e instanceof HTMLElement;\n};\n\nconst getVerticalMargin = (e: Element | null | undefined) => {\n  if (!e || !isHTMLElement(e)) return 0;\n  const s = getComputedStyle(e);\n  const marginHeight = parseFloat(s.marginTop) + parseFloat(s.marginBottom);\n  const borderHeight =\n    parseFloat(s.borderTopWidth) + parseFloat(s.borderBottomWidth);\n  return marginHeight + borderHeight;\n};\n\nexport const MatrixAccordionView: MatrixBodyComponent = ({\n  columns,\n  onSelect,\n  options,\n  selectedOptions,\n}: MatrixBodyProps) => {\n  const refs = useRef<HTMLDivElement[]>([]);\n  const { border, useMobileStyling } = useConfig((s) => ({\n    border: s.border,\n    useMobileStyling: s.useMobileStyling,\n  }));\n  const firstUnansweredIndex = options.findIndex(\n    (o) => selectedOptions[o.id] === null,\n  );\n  const [focusedIndex, setFocusedIndex] = useState(firstUnansweredIndex);\n\n  const select = useCallback(\n    (id: number, column: string) => {\n      onSelect(id, column);\n      const nextIndex = focusedIndex + 1;\n      const nextOption = options[nextIndex];\n      if (nextOption && selectedOptions[nextOption.id] === null) {\n        setFocusedIndex(nextIndex);\n        const accordionRef = refs.current[focusedIndex];\n        if (accordionRef?.firstElementChild) {\n          const scrollableParent = findScrollable(accordionRef);\n          const headerElem = accordionRef.firstElementChild;\n          const heightToScroll =\n            getVerticalMargin(accordionRef) + headerElem.clientHeight;\n          scrollableParent?.scrollTo(\n            0,\n            accordionRef.offsetTop + heightToScroll,\n          );\n        }\n      }\n    },\n    [onSelect, options, selectedOptions, focusedIndex],\n  );\n  const renderAccordion = useCallback(\n    (idx: number, option: MultipleChoiceOption) => {\n      const isFocused = focusedIndex === idx;\n      return (\n        <Accordion\n          animate={true}\n          header={option.label}\n          isOpen={isFocused}\n          key={option.id}\n          // Changing the size of the mobile sdk doesn't animate smoothly, so better to just keep the height\n          //constant and not allow collapsing of all rows\n          onClick={() =>\n            setFocusedIndex(\n              isFocused && !window.UserLeap.isMobileSDK ? -1 : idx,\n            )\n          }\n          ref={(r: HTMLDivElement | null | undefined) => {\n            if (r) {\n              refs.current[idx] = r;\n            }\n          }}\n          showHeaderCheck={selectedOptions[option.id] !== null}\n        >\n          <div style={{ paddingTop: \"12px\" }}>\n            {columns.map((col) => {\n              return (\n                <Option\n                  allowTextEntry={false}\n                  ariaLabel={`${option.label}-${col.label}`}\n                  border={border}\n                  error={false}\n                  id={`${option.id}-${col.value}`}\n                  isRadio\n                  isSelected={selectedOptions[option.id] === col.value}\n                  key={col.label}\n                  label={col.label}\n                  onUserInputChanged={() => select(option.id, col.value)}\n                  useMobileStyling={useMobileStyling}\n                />\n              );\n            })}\n          </div>\n        </Accordion>\n      );\n    },\n    [border, columns, focusedIndex, select, selectedOptions, useMobileStyling],\n  );\n  return <div>{options.map((o, idx) => renderAccordion(idx, o))}</div>;\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nimport { MatrixBodyComponent, MatrixBodyProps } from \"./types\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../../helpers/general\";\nimport { Option } from \"../../components\";\nimport { cc } from \"../../helpers/classes\";\nimport { useConfig } from \"../../store\";\n\nexport const MatrixTableView: MatrixBodyComponent = ({\n  columns,\n  onSelect,\n  options,\n  selectedOptions,\n}: MatrixBodyProps) => {\n  const { border, useMobileStyling, isLongFormSurvey } = useConfig((s) => ({\n    border: s.border,\n    useMobileStyling: s.useMobileStyling,\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n  }));\n  const numRows = options.length;\n  const numColumns = columns.length;\n  const matrixContainerRef = useRef<HTMLDivElement>(null);\n  const [showGradient, setShowGradient] = useState(false);\n\n  const checkCompletelyScrolled = () => {\n    const target = matrixContainerRef.current;\n    if (target) {\n      setShowGradient(\n        target.clientWidth + Math.abs(target.scrollLeft) < target.scrollWidth,\n      );\n    }\n  };\n\n  useEffect(() => {\n    const target = matrixContainerRef.current;\n    const observer = new ResizeObserver((entries) => {\n      window.requestAnimationFrame(() => {\n        if (target) {\n          setShowGradient(\n            Math.round(entries[0].contentRect.width) < target.scrollWidth,\n          );\n        }\n      });\n    });\n\n    if (target) {\n      observer.observe(target);\n    }\n    return () => {\n      if (target) {\n        observer.unobserve(target);\n      }\n    };\n  }, []);\n\n  return (\n    <div className=\"ul-card--matrix_question_container\">\n      <div\n        className={cc(\n          \"ul-card--matrix_container\",\n          showGradient && \"ul-matrix-scroll-gradient\",\n        )}\n        onScroll={() => {\n          checkCompletelyScrolled();\n        }}\n        ref={matrixContainerRef}\n      >\n        <div\n          className={cc(\n            isLongFormSurvey && \"ul-card--matrix_grid_longform\",\n            \"ul-card--matrix_grid\",\n          )}\n          // row label column excluded from count, width calculation different\n          style={`--numColumns: ${numColumns}; --numRows: ${numRows + 1};`}\n        >\n          <div></div> {/*top left cell empty*/}\n          {columns.map((col) => (\n            <div className=\"ul-matrix-column-label\" key={col.label}>\n              {col.label}\n            </div>\n          ))}\n          {options.map((option) => {\n            return (\n              <>\n                <div\n                  aria-label={option.label}\n                  className=\"ul-matrix-row-label\"\n                  key={option.label}\n                >\n                  {option.label}\n                </div>\n                <div className=\"ul-matrix-row-options\" role={\"radiogroup\"}>\n                  {columns.map((col, index) => {\n                    const isLast = index === numColumns - 1;\n                    return (\n                      <div\n                        className={cc(\n                          \"ul-matrix-option-wrapper\",\n                          isLast && \"ul-matrix-last-option\",\n                        )}\n                        key={col.value}\n                      >\n                        <Option\n                          allowTextEntry={false}\n                          ariaLabel={`${option.label}-${col.label}`}\n                          border={border}\n                          choiceStyle={{\n                            background: \"transparent\",\n                            border: \"none\",\n                            marginBottom: \"0\",\n                            padding: \"0\",\n                          }}\n                          error={false}\n                          id={`${option.id}-${col.value}`}\n                          isRadio\n                          isSelected={selectedOptions[option.id] === col.value}\n                          onUserInputChanged={() =>\n                            onSelect(option.id, col.value)\n                          }\n                          useMobileStyling={useMobileStyling}\n                        />\n                      </div>\n                    );\n                  })}\n                </div>\n              </>\n            );\n          })}\n        </div>\n      </div>\n      {showGradient && (\n        <button\n          className=\"ul-matrix-scroll-arrow\"\n          onClick={(e) => {\n            e.preventDefault();\n            const scrollTarget = matrixContainerRef.current;\n\n            if (scrollTarget) {\n              const isRTL = getComputedStyle(scrollTarget).direction === \"rtl\";\n              scrollTarget.scrollLeft = isRTL\n                ? scrollTarget.clientWidth - scrollTarget.scrollWidth\n                : scrollTarget.scrollWidth;\n            }\n          }}\n        >\n          <svg\n            fill=\"currentColor\"\n            height=\"32\"\n            viewBox=\"0 0 256 256\"\n            width=\"32\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n          >\n            <path d=\"M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z\" />\n          </svg>\n        </button>\n      )}\n    </div>\n  );\n};\n","import { useState } from \"react\";\n\nimport { MatrixAccordionView, MatrixTableView } from \"./matrixViews\";\nimport { BaseCardProps } from \"./types\";\nimport { CssConstant } from \"../../constants/css\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../helpers/general\";\nimport {\n  MatrixCard as MatrixCardType,\n  MultipleChoiceOption,\n} from \"../../types/card\";\nimport {\n  Button,\n  Header,\n  MobileEmbedView,\n  QuestionBodyFooterContainer,\n  QuestionBodyWrapper,\n  LongformSubmitButton,\n} from \"../components\";\nimport { getButtonText } from \"../helpers/card\";\nimport { cc } from \"../helpers/classes\";\nimport { useConfig } from \"../store\";\n\ntype MatrixProps = MatrixCardType[\"props\"] & BaseCardProps;\nexport interface MatrixState {\n  [id: string]: null | string;\n}\n\nconst MatrixCard = ({\n  className,\n  message,\n  next,\n  options,\n  properties,\n  questionId,\n  type,\n  showIndividualSubmit = false,\n  onSubmitButtonClick,\n}: MatrixProps) => {\n  const {\n    useMobileStyling,\n    isLongFormSurvey,\n    focusedQuestionId,\n    setFocusedQuestionId,\n  } = useConfig((s) => ({\n    useMobileStyling: s.useMobileStyling,\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n    focusedQuestionId: s.focusedQuestionId,\n    setFocusedQuestionId: s.setFocusedQuestionId,\n  }));\n  const columns = properties.matrixColumn;\n  const isRequired = properties.required;\n\n  const isLongFormQuestionFocused =\n    isLongFormSurvey && focusedQuestionId === questionId;\n\n  const handleCardClick = () => {\n    if (isLongFormQuestionFocused) {\n      setFocusedQuestionId(questionId);\n    }\n  };\n\n  const handleSubmit = (e: SubmitEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    next({ value: optionSelectedMap, questionId, type: type }, true);\n\n    if (onSubmitButtonClick) {\n      onSubmitButtonClick();\n    }\n  };\n\n  const optionsMap = options.reduce(\n    (prevMap: MatrixState, option: MultipleChoiceOption) => {\n      prevMap[option.id] = null;\n      return prevMap;\n    },\n    {},\n  );\n\n  const [optionSelectedMap, setOptionSelectedMap] = useState(optionsMap);\n\n  const isSubmitDisabled = (optionSelectedMap: MatrixState) => {\n    return (\n      isRequired && Object.values(optionSelectedMap).every((v) => v == null)\n    );\n  };\n\n  const setSelectedState = (rowId: number, colValue: string) => {\n    if (isLongFormSurvey) {\n      next(\n        {\n          value: { ...optionSelectedMap, [rowId]: colValue },\n          questionId,\n          type: type,\n        },\n        !isSubmitDisabled({ ...optionSelectedMap, [rowId]: colValue }),\n      );\n    }\n    setOptionSelectedMap((prev) => ({ ...prev, [rowId]: colValue }));\n  };\n\n  const isAccordionDisplay =\n    properties.displayMatrixAsAccordion || useMobileStyling;\n\n  const questionBody = () => {\n    return (\n      <>\n        <QuestionBodyWrapper>\n          {isAccordionDisplay ? (\n            <MatrixAccordionView\n              columns={columns}\n              onSelect={setSelectedState}\n              options={options}\n              selectedOptions={optionSelectedMap}\n            />\n          ) : (\n            <MatrixTableView\n              columns={columns}\n              onSelect={setSelectedState}\n              options={options}\n              selectedOptions={optionSelectedMap}\n            />\n          )}\n          {showIndividualSubmit && (\n            <LongformSubmitButton\n              handleSubmit={handleSubmit}\n              isSubmitDisabled={isSubmitDisabled(optionSelectedMap)}\n            />\n          )}\n        </QuestionBodyWrapper>\n        {!isLongFormSurvey && (\n          <QuestionBodyFooterContainer>\n            <div className=\"ul-card__button-wrapper\">\n              <Button disabled={isSubmitDisabled(optionSelectedMap)}>\n                {getButtonText(properties)}\n              </Button>\n            </div>\n          </QuestionBodyFooterContainer>\n        )}\n      </>\n    );\n  };\n  return (\n    <form\n      className={cc(\n        className,\n        !isLongFormSurvey && \"ul-card__matrix\",\n        \"fade-in-transition\" satisfies CssConstant,\n        isLongFormSurvey && !isLongFormQuestionFocused && \"ul-card--unfocused\",\n      )}\n      id=\"text-form\"\n      key={questionId}\n      onClick={handleCardClick}\n      onSubmit={handleSubmit}\n    >\n      <Header message={message} properties={properties} />\n      <MobileEmbedView\n        {...{\n          properties,\n          defaultBody: questionBody,\n        }}\n      />\n    </form>\n  );\n};\n\nexport default MatrixCard;\n","import { useEffect, useState } from \"react\";\n\nimport Caret from \"../../../assets/caret.svg?react\";\nimport { MultipleChoiceOption } from \"../../../types/card\";\nimport { cc } from \"../../helpers/classes\";\nimport { useConfig } from \"../../store\";\nimport { Checkbox } from \"../checkbox\";\n\nexport interface SelectProps {\n  isMultiSelect: boolean;\n  multiselectText?: string;\n  onChange: (selected: MultipleChoiceOption[]) => void;\n  options: MultipleChoiceOption[];\n  placeholderText: string;\n  value: MultipleChoiceOption[];\n}\n\nconst DropdownPanel = ({\n  options,\n  selectItem,\n  selectedOptions,\n  showCheckbox,\n}: {\n  options: MultipleChoiceOption[];\n  selectItem: (item: MultipleChoiceOption) => void;\n  selectedOptions: MultipleChoiceOption[];\n  showCheckbox: boolean;\n}) => {\n  const { themeColor } = useConfig((s) => ({\n    doc: s.viewDocument,\n    themeColor: s.border,\n  }));\n  const getDivId = (id: number) => `checkbox-div-${id}`;\n  return (\n    <div className=\"select-list\">\n      {options.map((o) => (\n        <div\n          className=\"select-option\"\n          key={o.id}\n          onClick={(ev) => {\n            selectItem(o);\n            ev.stopPropagation();\n          }}\n          role=\"option\"\n        >\n          {showCheckbox && (\n            <Checkbox\n              divId={getDivId(o.id)}\n              id={o.id}\n              isSelected={selectedOptions.includes(o)}\n              themeColor={themeColor}\n            />\n          )}\n          {o.label}\n        </div>\n      ))}\n    </div>\n  );\n};\n\nexport const Select = ({\n  isMultiSelect = false,\n  multiselectText = \"choices selected\",\n  onChange,\n  options,\n  placeholderText,\n  value,\n}: SelectProps) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const { viewDocument, update } = useConfig((s) => ({\n    viewDocument: s.viewDocument,\n    update: s.update,\n  }));\n  const getText = () => {\n    if (value.length === 0) {\n      return placeholderText;\n    } else if (value.length === 1) {\n      return value[0].label;\n    }\n    return `${value.length} ${multiselectText}`;\n  };\n\n  const toggleOpen = () => {\n    setIsOpen(!isOpen);\n    update();\n  };\n\n  useEffect(() => {\n    const handleClickOutside = () => {\n      setIsOpen(false);\n      update();\n    };\n    viewDocument.addEventListener(\"click\", handleClickOutside);\n    try {\n      window.parent?.addEventListener(\"click\", handleClickOutside);\n    } catch (err) {\n      window.addEventListener(\"click\", handleClickOutside);\n    }\n\n    return () => {\n      viewDocument.removeEventListener(\"click\", handleClickOutside);\n      try {\n        window.parent?.removeEventListener(\"click\", handleClickOutside);\n      } catch (err) {\n        window.removeEventListener(\"click\", handleClickOutside);\n      }\n    };\n  }, [viewDocument, update]);\n\n  const toggleItemSelected = (item: MultipleChoiceOption) => {\n    // Is the value currently selected (before toggling)\n    const isSelected = value.some((v) => v.id === item.id);\n    const isNoneOfTheAboveSelected = value.some(\n      (o) => o.optionProperties?.noneOfTheAbove,\n    );\n    if (item.optionProperties?.noneOfTheAbove && !isSelected) {\n      // If the item is none-of-the-above then deselect all other items when selecting it\n      onChange([item]);\n    } else if (isMultiSelect) {\n      if (isSelected) {\n        // Remove item from selected list\n        onChange(value.filter((v) => v.id !== item.id));\n      } else if (isNoneOfTheAboveSelected) {\n        //If none of the above was already selected and the user selected another item\n        //deselect none of the above\n        onChange([item]);\n      } else {\n        // Add item to selected list\n        onChange([...value, item]);\n      }\n    } else if (!isSelected) {\n      onChange([item]);\n    }\n\n    if (!isMultiSelect) {\n      // Close the dropdown when a selection is made if not multiselect\n      toggleOpen();\n    }\n  };\n  const placeholderStyles =\n    value.length === 0 ? [\"select-button-placeholder\"] : [];\n\n  return (\n    <>\n      <button\n        aria-label=\"choice dropdown button\"\n        className={cc(...[\"select-button\", ...placeholderStyles])}\n        onClick={(ev) => {\n          ev.stopPropagation();\n          toggleOpen();\n        }}\n        type=\"button\"\n      >\n        <span>{getText()}</span>\n        <Caret />\n      </button>\n      {isOpen && (\n        <DropdownPanel\n          options={options}\n          selectedOptions={value}\n          selectItem={toggleItemSelected}\n          showCheckbox={isMultiSelect}\n        />\n      )}\n    </>\n  );\n};\n","import { JSX, useState } from \"react\";\n\nimport { CssConstant } from \"../../../constants/css\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../../helpers/general\";\nimport {\n  CommonMultipleChoiceProps,\n  MultipleChoiceOption,\n} from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport {\n  Button,\n  Header,\n  MobileEmbedView,\n  Option,\n  QuestionBodyFooterContainer,\n  QuestionBodyWrapper,\n  LongformSubmitButton,\n} from \"../../components\";\nimport { Select } from \"../../components/select\";\nimport { getButtonText } from \"../../helpers/card\";\nimport { cc, getClasses } from \"../../helpers/classes\";\nimport { BaseCardProps } from \"../types\";\n\ntype MultiOptionProps = CommonMultipleChoiceProps & BaseCardProps & ExtraProps;\n\nexport interface OptionSelectedMap {\n  [id: string]: { isSelected: boolean; userText?: string };\n}\ninterface ExtraProps {\n  onSubmit: (state: OptionSelectedMap, isValidToSubmit: boolean) => void;\n}\n\nexport const BaseMultiChoiceCard = ({\n  className,\n  message,\n  onSubmit,\n  options = [],\n  properties,\n  questionId,\n  type,\n  showIndividualSubmit = false,\n  onSubmitButtonClick,\n}: MultiOptionProps) => {\n  const {\n    border,\n    useMobileStyling,\n    isLongFormSurvey,\n    focusedQuestionId,\n    setFocusedQuestionId,\n  } = useConfig((s) => ({\n    border: s.border,\n    useMobileStyling: s.useMobileStyling,\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n    focusedQuestionId: s.focusedQuestionId,\n    setFocusedQuestionId: s.setFocusedQuestionId,\n  }));\n\n  const isLongFormQuestionFocused =\n    isLongFormSurvey && focusedQuestionId === questionId;\n\n  const handleCardClick = () => {\n    if (\n      isLongFormSurvey &&\n      focusedQuestionId !== questionId &&\n      type === \"multipleselect\"\n    ) {\n      setFocusedQuestionId(questionId);\n    }\n  };\n\n  const optionsMap = options.reduce(\n    (prevMap: OptionSelectedMap, option: MultipleChoiceOption) => {\n      prevMap[option.id] = { isSelected: false };\n      return prevMap;\n    },\n    {},\n  );\n  const [optionSelectedMap, setOptionSelectedMap] = useState(optionsMap);\n\n  const isRadio = type === \"multiplechoice\";\n  const isRequired = properties.required;\n  const noneOfTheAboveOption = options.find(\n    (o) => o.optionProperties?.noneOfTheAbove,\n  );\n\n  const isTextOptionSelectedWithoutTextEntered = (\n    optionSelectedMap: OptionSelectedMap,\n  ) => {\n    return Object.entries(optionSelectedMap).some(([id, s]) => {\n      const opt: MultipleChoiceOption | undefined = options.find(\n        (o) => `${o.id}` === id,\n      );\n      const isTextEmpty = s.userText === undefined || s.userText.trim() === \"\";\n      return (\n        opt?.optionProperties?.allowsTextEntry && isTextEmpty && s.isSelected\n      );\n    });\n  };\n\n  const anyOptionsSelected = (optionSelectedMap: OptionSelectedMap) =>\n    Object.values(optionSelectedMap).some((o) => o.isSelected);\n\n  const isSubmitDisabled = (optionSelectedMap: OptionSelectedMap) => {\n    return (\n      isTextOptionSelectedWithoutTextEntered(optionSelectedMap) ||\n      (isRequired && !anyOptionsSelected(optionSelectedMap))\n    );\n  };\n\n  // Helper to detect if a text-entry choice is currently selected\n  const isTextEntryOptionSelected = Object.entries(optionSelectedMap).some(\n    ([id, s]) =>\n      s.isSelected &&\n      options.find((o) => `${o.id}` === id)?.optionProperties?.allowsTextEntry,\n  );\n\n  // Determine if we should render the individual submit button (needed for\n  // radio questions when a text-entry option like “Other” is chosen).\n  const shouldShowSubmitButton =\n    showIndividualSubmit && (!isRadio || isTextEntryOptionSelected);\n\n  const choices = options.map(({ id, label, value, optionProperties }) => {\n    const idKey = `${id}`;\n\n    const { allowsTextEntry, noneOfTheAbove } = {\n      allowsTextEntry: false,\n      noneOfTheAbove: false,\n      ...optionProperties,\n    };\n\n    return (\n      <Option\n        allowTextEntry={allowsTextEntry}\n        border={border}\n        error={false}\n        id={idKey}\n        isRadio={isRadio}\n        isSelected={!!optionSelectedMap[idKey]?.isSelected}\n        key={idKey}\n        label={label}\n        noneOfTheAbove={noneOfTheAbove}\n        onUserInputChanged={(v) => {\n          setSelectedState(v.id, v.selected, v.userText, v.noneOfTheAbove);\n          // If the user selects an option, focus the question if:\n          // 1. We are in a long form survey\n          // 2. The option is not a radio\n          // 3. The question is not already focused\n          if (\n            v.selected &&\n            isLongFormSurvey &&\n            !isRadio &&\n            !isLongFormQuestionFocused\n          ) {\n            setFocusedQuestionId(questionId);\n          }\n        }}\n        promptText={\"Please specify\"}\n        text={optionSelectedMap[id]?.userText}\n        useMobileStyling={useMobileStyling}\n        value={value}\n      />\n    );\n  });\n\n  const handleSubmit = (e: JSX.TargetedEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    onSubmit(optionSelectedMap, true);\n\n    if (onSubmitButtonClick) {\n      onSubmitButtonClick();\n    }\n  };\n\n  const setSelectedState = (\n    id: string,\n    isSelected: boolean,\n    userText?: string,\n    noneOfTheAbove?: boolean,\n  ) => {\n    const newState: OptionSelectedMap = Object.assign({}, optionSelectedMap);\n    if ((isRadio || noneOfTheAbove) && isSelected) {\n      for (const option of Object.values(newState)) {\n        option.isSelected = false;\n        delete option.userText;\n      }\n    } else if (\n      noneOfTheAboveOption &&\n      !noneOfTheAbove &&\n      optionSelectedMap[noneOfTheAboveOption.id].isSelected\n    ) {\n      newState[noneOfTheAboveOption.id].isSelected = false;\n    }\n\n    newState[id] = { isSelected, userText };\n    // For radio questions, defer submission when a text-entry option is\n    // selected so that the user can type and explicitly click the submit\n    // button. Otherwise, continue the existing auto-submit behavior.\n    const selectedRequiresText =\n      isRadio &&\n      Object.entries(newState).some(\n        ([id, s]) =>\n          s.isSelected &&\n          options.find((o) => `${o.id}` === id)?.optionProperties\n            ?.allowsTextEntry,\n      );\n\n    const submitEnabled = !isSubmitDisabled(newState);\n\n    if (isLongFormSurvey) {\n      onSubmit(newState, submitEnabled);\n      // We do not display a submit button for multiplechoice (radio) questions unless\n      // the user selects \"Other\" (selectedRequiresText)\n      // Therefore we want to auto advance (trigger onSubmitButtonClick)\n      // when a user selects a normal option.\n      if (\n        isRadio &&\n        !selectedRequiresText &&\n        submitEnabled &&\n        onSubmitButtonClick\n      ) {\n        onSubmitButtonClick();\n      }\n    }\n    setOptionSelectedMap(newState);\n  };\n\n  const questionBody = () => {\n    return (\n      <>\n        <QuestionBodyWrapper>\n          {properties.isDropdown ? (\n            <Select\n              isMultiSelect={!isRadio}\n              multiselectText={\n                properties.dropdownMultiselectedText ?? \"choices selected\"\n              }\n              onChange={(items) => {\n                const newState: OptionSelectedMap = { ...optionSelectedMap };\n                for (const op of options) {\n                  if (items.includes(op)) {\n                    newState[op.id].isSelected = true;\n                  } else {\n                    newState[op.id].isSelected = false;\n                  }\n                }\n                if (isLongFormSurvey) {\n                  onSubmit(newState, !isSubmitDisabled(newState));\n                }\n                setOptionSelectedMap(newState);\n              }}\n              options={options}\n              placeholderText={\n                properties.dropdownPlaceholderText ??\n                (isRadio ? \"Select choice\" : \"Select choice(s)\")\n              }\n              value={options.filter((o) => optionSelectedMap[o.id].isSelected)}\n            />\n          ) : (\n            <div\n              className={cc(getClasses(\"ul-card__choices\", useMobileStyling))}\n              role={isRadio ? \"radiogroup\" : \"group\"}\n            >\n              {choices}\n            </div>\n          )}\n          {shouldShowSubmitButton && (\n            <LongformSubmitButton\n              handleSubmit={handleSubmit}\n              isSubmitDisabled={isSubmitDisabled(optionSelectedMap)}\n            />\n          )}\n        </QuestionBodyWrapper>\n        {!isLongFormSurvey && (\n          <QuestionBodyFooterContainer>\n            <div className=\"ul-card__button-wrapper\">\n              <Button\n                disabled={isSubmitDisabled(optionSelectedMap)}\n                onClick={handleSubmit}\n              >\n                {getButtonText(properties)}\n              </Button>\n            </div>\n          </QuestionBodyFooterContainer>\n        )}\n      </>\n    );\n  };\n  return (\n    <form\n      className={cc(\n        className,\n        \"ul-card--multiple\",\n        \"fade-in-transition\" satisfies CssConstant,\n        isLongFormSurvey && !isLongFormQuestionFocused && \"ul-card--unfocused\",\n      )}\n      id=\"text-form\"\n      key={questionId}\n      onClick={type === \"multipleselect\" ? handleCardClick : undefined}\n      onSubmit={handleSubmit}\n    >\n      <Header message={message} properties={properties} />\n      <MobileEmbedView\n        {...{\n          properties,\n          defaultBody: questionBody,\n        }}\n      />\n    </form>\n  );\n};\n","import { BaseMultiChoiceCard, OptionSelectedMap } from \"./baseMultiChoiceCard\";\nimport { MultipleChoiceSingleSelectCard as SingleSelectCardProps } from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport { BaseCardProps } from \"../types\";\n\ntype SingleSelectProps = SingleSelectCardProps[\"props\"] & BaseCardProps;\n\nconst SingleSelectCard = (props: SingleSelectProps) => {\n  const { questionId, type, next, options } = props;\n\n  const { setFocusedQuestionId } = useConfig((s) => ({\n    setFocusedQuestionId: s.setFocusedQuestionId,\n  }));\n\n  const handleSubmit = (\n    optionMap: OptionSelectedMap,\n    isValidToSubmit: boolean,\n  ) => {\n    const selectedEntry = Object.entries(optionMap).find(\n      ([, value]) => value.isSelected,\n    ) || [undefined, undefined];\n\n    const [selectedId, selectedState] = selectedEntry;\n    const selectedOption = options.find((o) => `${o.id}` === selectedId);\n\n    // Prevent auto-advance when the chosen option allows text entry but the user hasn’t provided any text yet.\n    // This ensures the focus doesn’t move away before the secondary input is filled.\n    if (\n      selectedOption?.optionProperties?.allowsTextEntry &&\n      (!selectedState?.userText || selectedState.userText.trim() === \"\")\n    ) {\n      setFocusedQuestionId(questionId);\n    }\n    const secondaryValue = selectedState?.userText\n      ? { [selectedId]: { userText: selectedState.userText } }\n      : null;\n    next(\n      {\n        value:\n          selectedOption && selectedId\n            ? { [selectedId]: selectedOption.value }\n            : {},\n        secondaryValue,\n        questionId,\n        type,\n      },\n      isValidToSubmit,\n    );\n  };\n\n  return <BaseMultiChoiceCard {...props} onSubmit={handleSubmit} />;\n};\n\nexport default SingleSelectCard;\n","import { BaseMultiChoiceCard, OptionSelectedMap } from \"./baseMultiChoiceCard\";\nimport { MultipleChoiceMultiSelectCard as MultiSelectCardProps } from \"../../../types/card\";\nimport {\n  BaseCardProps,\n  MultiChoiceSecondaryValueType,\n  MultiSelectValueType,\n} from \"../types\";\n\ntype MultiSelectProps = MultiSelectCardProps[\"props\"] & BaseCardProps;\n\nconst MultiSelectCard = (props: MultiSelectProps) => {\n  const { questionId, type, next } = props;\n\n  const handleSubmit = (\n    optionMap: OptionSelectedMap,\n    isValidToSubmit: boolean,\n  ) => {\n    const initialSelectedMap: MultiSelectValueType = {};\n    const valueToSubmit = Object.entries(optionMap).reduce(\n      (selectedMap, [key, value]) => {\n        selectedMap[key] = value.isSelected;\n        return selectedMap;\n      },\n      initialSelectedMap,\n    );\n    const secondaryValue = Object.entries(optionMap).reduce(\n      (textMap, [id, option]) => {\n        if (!option.userText) return textMap;\n        const newMap = textMap || {};\n        newMap[id] = { userText: option.userText };\n        return newMap;\n      },\n      null as MultiChoiceSecondaryValueType,\n    );\n    next(\n      { value: valueToSubmit, secondaryValue, questionId, type },\n      isValidToSubmit,\n    );\n  };\n\n  return <BaseMultiChoiceCard {...props} onSubmit={handleSubmit} />;\n};\n\nexport default MultiSelectCard;\n","import { useState } from \"react\";\n\nimport { BaseCardProps } from \"./types\";\nimport { CssConstant, DEFAULT_BORDER_COLOR } from \"../../constants/css\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../helpers/general\";\nimport { NPSCard as NpsCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport {\n  Button,\n  Header,\n  MobileEmbedView,\n  QuestionBodyFooterContainer,\n  QuestionBodyWrapper,\n} from \"../components\";\nimport { getButtonText } from \"../helpers/card\";\nimport { cc, getClasses } from \"../helpers/classes\";\n\ntype Props = NpsCardType[\"props\"] & BaseCardProps;\n\nconst NPSCard = ({\n  className,\n  labels,\n  message,\n  properties,\n  next,\n  questionId,\n  type,\n}: Props) => {\n  const [selectedValue, setSelectedValue] = useState<number | null>(null);\n  const {\n    border,\n    useMobileStyling,\n    viewDocument,\n    isLongFormSurvey,\n    focusedQuestionId,\n  } = useConfig((s) => ({\n    border: s.border,\n    useMobileStyling: s.useMobileStyling,\n    viewDocument: s.viewDocument,\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n    focusedQuestionId: s.focusedQuestionId,\n  }));\n\n  const isLongFormQuestionFocused =\n    isLongFormSurvey && focusedQuestionId === questionId;\n\n  const leftLabel = labels && labels.left;\n  const rightLabel = labels && labels.right;\n\n  const nums = [...Array(11)].map((_, index) => (\n    <button\n      className={cc(\n        getClasses(\"nps-number\", useMobileStyling),\n        getClasses(`nps-number-${index}`, useMobileStyling),\n      )}\n      id={`option-${index}`}\n      key={index}\n      onClick={(e) => {\n        if (isLongFormSurvey) {\n          e.preventDefault();\n          e.stopPropagation();\n          setSelectedValue(index);\n        }\n        next({ value: index, questionId, type }, true);\n      }}\n      onKeyDown={(e) => {\n        const buttons =\n          viewDocument.querySelectorAll<HTMLButtonElement>(\"button.nps-number\");\n        if (e.key === \"ArrowRight\") {\n          buttons[index + 1]?.focus();\n        } else if (e.key === \"ArrowLeft\") {\n          buttons[index - 1]?.focus();\n        } else if (e.key === \"Enter\" || e.key === \" \") {\n          if (isLongFormSurvey) {\n            e.preventDefault();\n            e.stopPropagation();\n            setSelectedValue(index);\n          }\n          next({ value: index, questionId, type }, true);\n        }\n      }}\n      onPointerDown={(e) => {\n        e.currentTarget.style.zIndex = \"2\";\n        e.currentTarget.style.borderColor = border;\n      }}\n      onPointerLeave={(e) => {\n        e.currentTarget.style.zIndex = \"auto\";\n        e.currentTarget.style.borderColor = DEFAULT_BORDER_COLOR;\n      }}\n      style={\n        selectedValue === index\n          ? { backgroundColor: border, color: \"#fff\" }\n          : undefined\n      }\n      tabIndex={0}\n    >\n      {index}\n    </button>\n  ));\n\n  const handleSkipped = (e: MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    next({ value: null, questionId, type }, true);\n  };\n\n  const questionBody = () => {\n    return (\n      <>\n        <QuestionBodyWrapper>\n          <div className=\"ul-card--nps__numbers\">{nums}</div>\n          <div className=\"ul-card--nps__labels\">\n            <span>{leftLabel}</span>\n            <span>{rightLabel}</span>\n          </div>\n        </QuestionBodyWrapper>\n        {!properties.required && !isLongFormSurvey && (\n          <QuestionBodyFooterContainer>\n            <div className=\"ul-vertical-centered-container\">\n              <Button onClick={handleSkipped}>\n                {getButtonText(properties)}\n              </Button>\n            </div>\n          </QuestionBodyFooterContainer>\n        )}\n      </>\n    );\n  };\n\n  return (\n    <form\n      className={cc(\n        className,\n        \"ul-card--nps\",\n        \"fade-in-transition\" satisfies CssConstant,\n        isLongFormSurvey && !isLongFormQuestionFocused && \"ul-card--unfocused\",\n      )}\n      key={questionId}\n    >\n      <Header message={message} properties={properties} />\n      <MobileEmbedView\n        {...{\n          properties,\n          defaultBody: questionBody,\n        }}\n      />\n    </form>\n  );\n};\n\nexport default NPSCard;\n","import { JSX, useRef, useState, useEffect } from \"react\";\n\nimport { BaseCardProps } from \"./types\";\nimport { CssConstant, DEFAULT_BORDER_COLOR } from \"../../constants/css\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../helpers/general\";\nimport { OpenTextCard as OpenTextCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport {\n  Button,\n  Header,\n  MobileEmbedView,\n  QuestionBodyFooterContainer,\n  QuestionBodyWrapper,\n  LongformSubmitButton,\n} from \"../components\";\nimport { getButtonText } from \"../helpers/card\";\nimport { cc, getClasses } from \"../helpers/classes\";\nimport { useAutoSize } from \"../hooks\";\n\ntype Props = OpenTextCardType[\"props\"] & BaseCardProps;\n\nconst OpenTextCard = ({\n  className,\n  message,\n  next,\n  properties,\n  questionId,\n  type,\n  showIndividualSubmit = false,\n  onSubmitButtonClick,\n}: Props) => {\n  const {\n    border,\n    useMobileStyling,\n    update,\n    isLongFormSurvey,\n    focusedQuestionId,\n    setFocusedQuestionId,\n  } = useConfig((s) => ({\n    border: s.border,\n    useMobileStyling: s.useMobileStyling,\n    update: s.update,\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n    focusedQuestionId: s.focusedQuestionId,\n    setFocusedQuestionId: s.setFocusedQuestionId,\n  }));\n  const [value, setValue] = useState(\"\");\n  const textRef = useRef<HTMLTextAreaElement>(null);\n\n  const isLongFormQuestionFocused =\n    isLongFormSurvey && focusedQuestionId === questionId;\n\n  const handleCardClick = () => {\n    if (isLongFormSurvey && focusedQuestionId !== questionId) {\n      setFocusedQuestionId(questionId);\n    }\n  };\n\n  useEffect(() => {\n    if (isLongFormSurvey) {\n      if (isLongFormQuestionFocused) {\n        textRef.current?.focus();\n      } else {\n        textRef.current?.blur();\n      }\n    }\n  }, [isLongFormSurvey, isLongFormQuestionFocused]);\n\n  const trimmedValue = value.trim();\n  const isSubmitDisabled = properties.required === true && !trimmedValue;\n  const autosize = useAutoSize(textRef, () => update());\n  const handleChange = (e: JSX.TargetedEvent<HTMLTextAreaElement, Event>) => {\n    const { value: targetVal } = e.currentTarget;\n    autosize();\n    e.preventDefault();\n    e.stopPropagation();\n    setValue(targetVal);\n    if (isLongFormSurvey) {\n      const isValid = targetVal.trim().length > 0;\n      next({ value: targetVal, questionId, type }, isValid);\n    }\n  };\n\n  const handleSubmit = (e: MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    next({ value, questionId, type }, trimmedValue.length > 0);\n\n    if (onSubmitButtonClick) {\n      onSubmitButtonClick();\n    }\n  };\n\n  const openTextPlaceholder =\n    properties && properties.openTextPlaceholder\n      ? properties.openTextPlaceholder\n      : \"\";\n\n  const handleFocus = (\n    e: React.JSX.TargetedFocusEvent<HTMLTextAreaElement>,\n  ) => {\n    e.currentTarget.style.borderColor = border;\n    setFocusedQuestionId(questionId);\n  };\n  const setDefaultBorder = (\n    e: React.JSX.TargetedFocusEvent<HTMLTextAreaElement>,\n  ) => {\n    e.currentTarget.style.borderColor = DEFAULT_BORDER_COLOR;\n  };\n\n  const questionBody = () => {\n    return (\n      <div className=\"ul-card-text\">\n        <QuestionBodyWrapper>\n          <div className=\"ul-card-text__container\">\n            <textarea\n              aria-describedby=\"ul-caption\"\n              aria-labelledby={\"ul-question\" satisfies CssConstant}\n              aria-multiline=\"true\"\n              aria-placeholder={openTextPlaceholder}\n              className={cc(\n                getClasses(\"ul-card-text__input\", useMobileStyling),\n              )}\n              data-gramm=\"false\" // disable grammarly\n              maxLength={5000}\n              name=\"text\"\n              onBlur={setDefaultBorder}\n              onChange={handleChange}\n              onFocus={handleFocus}\n              placeholder={openTextPlaceholder}\n              ref={textRef}\n              role=\"textbox\"\n              tabIndex={0}\n            />\n          </div>\n          {showIndividualSubmit && (\n            <LongformSubmitButton\n              handleSubmit={handleSubmit}\n              isSubmitDisabled={isSubmitDisabled}\n            />\n          )}\n        </QuestionBodyWrapper>\n        {!isLongFormSurvey && (\n          <QuestionBodyFooterContainer>\n            <Button disabled={isSubmitDisabled} onClick={handleSubmit}>\n              {getButtonText(properties)}\n            </Button>\n            {properties.footerHtml && (\n              <div\n                className=\"footer\"\n                dangerouslySetInnerHTML={{ __html: properties.footerHtml }}\n              />\n            )}\n          </QuestionBodyFooterContainer>\n        )}\n      </div>\n    );\n  };\n\n  return (\n    <form\n      className={cc(\n        className,\n        \"ul-card-text\",\n        \"fade-in-transition\" satisfies CssConstant,\n        isLongFormSurvey && !isLongFormQuestionFocused && \"ul-card--unfocused\",\n      )}\n      id=\"text-form\"\n      key={questionId}\n      onClick={handleCardClick}\n    >\n      <Header message={message} properties={properties} />\n      <MobileEmbedView\n        {...{\n          defaultBody: questionBody,\n          properties,\n        }}\n      />\n    </form>\n  );\n};\n\nexport default OpenTextCard;\n","import { isLongFormSurvey as longFormSurveyCheck } from \"../../../helpers/general\";\nimport {\n  ConsentLegalCard,\n  LikertCard,\n  MatrixCard,\n  MultipleChoiceMultipleSelectCard,\n  MultipleChoiceSingleSelectCard,\n  NPSCard,\n  OpenTextCard,\n  RecordedTask,\n  TextUrlPromptCard,\n  ThanksCard,\n  UploadingCard,\n  VideoVoiceCard,\n} from \"../../cards\";\nimport { useConfig } from \"../../store\";\nimport { NextFnData } from \"../types\";\n\nimport type { AppCard } from \"../../../types/card\";\n\nconst questionsRequireSubmit = new Set([\n  \"open\",\n  \"matrix\",\n  \"multipleselect\",\n  \"multiplechoice\", // only requires submit button when \"Other\" option is selected\n]);\n\ninterface DisplayQuestionProps {\n  cardInstance: AppCard;\n  moveToNextQuestion: (currentQuestionId: number) => void;\n  showIndividualSubmit: boolean;\n  submitQuestion: (response: NextFnData, isValidToSubmit: boolean) => void;\n  updateCardValues: (\n    questionId: number,\n    value: NextFnData,\n    isValid: boolean,\n  ) => void;\n}\n\nexport const DisplayQuestion = ({\n  cardInstance,\n  moveToNextQuestion,\n  showIndividualSubmit,\n  submitQuestion,\n  updateCardValues,\n}: DisplayQuestionProps) => {\n  const { isLongFormSurvey } = useConfig((s) => ({\n    isLongFormSurvey: longFormSurveyCheck(s.studyType),\n  }));\n  if (!cardInstance) {\n    return null;\n  }\n  const { name, type, props } = cardInstance;\n\n  const hasSubmitButton =\n    showIndividualSubmit && questionsRequireSubmit.has(type);\n\n  const baseProps = {\n    className: \"ul-card\",\n    next: (response: NextFnData, isValidToSubmit: boolean) =>\n      submitQuestion(response, isValidToSubmit),\n    questionId: name,\n    type,\n    showIndividualSubmit: showIndividualSubmit,\n    ...(hasSubmitButton\n      ? {\n          next: (response: NextFnData, isValidToSubmit?: boolean) => {\n            updateCardValues(\n              response.questionId,\n              response,\n              isValidToSubmit ?? true, // setting default value here for improved clarity\n            );\n          },\n          onSubmitButtonClick: () => moveToNextQuestion(name),\n        }\n      : {}),\n  };\n\n  const cardComponent = (() => {\n    switch (type) {\n      case \"consentlegal\":\n        return <ConsentLegalCard {...baseProps} {...props} />;\n\n      case \"likert\":\n        return <LikertCard {...baseProps} {...props} />;\n\n      case \"matrix\":\n        return <MatrixCard {...baseProps} {...props} />;\n\n      case \"multiplechoice\":\n        return <MultipleChoiceSingleSelectCard {...baseProps} {...props} />;\n\n      case \"multipleselect\":\n        return <MultipleChoiceMultipleSelectCard {...baseProps} {...props} />;\n\n      case \"nps\":\n        return <NPSCard {...baseProps} {...props} />;\n\n      case \"open\":\n        return <OpenTextCard {...baseProps} {...props} />;\n\n      case \"recordedtask\":\n        return <RecordedTask {...baseProps} {...props} />;\n\n      case \"texturlprompt\":\n        return <TextUrlPromptCard {...baseProps} {...props} />;\n\n      case \"thanks\":\n        return <ThanksCard {...baseProps} {...props} />;\n\n      case \"uploading\":\n        return <UploadingCard {...baseProps} {...props} />;\n\n      case \"videovoice\":\n        return !__NPM_BUNDLED___ ? (\n          <VideoVoiceCard {...baseProps} {...props} />\n        ) : null;\n\n      default:\n        return null;\n    }\n  })();\n\n  if (!cardComponent) {\n    return null;\n  }\n\n  return isLongFormSurvey ? (\n    <div className=\"ul-card-scroll-wrapper\" key={name}>\n      {cardComponent}\n    </div>\n  ) : (\n    cardComponent\n  );\n};\n","import { CssConstant } from \"../../../constants/css\";\nimport { CardType } from \"../../../types/card\";\nimport { Button, ThankYouLink, SprigBrandLogo, Arrow } from \"../../components\";\nimport { buildMarketingUrl } from \"../../helpers/card\";\nimport { cc } from \"../../helpers/classes\";\nimport { useConfig } from \"../../store\";\n\ninterface QuestionsFooterProps {\n  isSubmitDisabled?: boolean;\n  onSubmit: () => void;\n  buttonText?: string;\n}\n\nconst LongFormQuestionsFooter = ({\n  isSubmitDisabled = false,\n  onSubmit,\n  buttonText,\n}: QuestionsFooterProps) => {\n  const {\n    cards,\n    forceBrandedLogo,\n    index,\n    marketingUrl,\n    showSurveyBrand,\n    slugName,\n    surveyId,\n    useMobileStyling,\n  } = useConfig((s) => ({\n    cards: s.cards,\n    forceBrandedLogo: s.forceBrandedLogo,\n    index: s.index,\n    marketingUrl: s.marketingUrl,\n    showSurveyBrand: s.showSurveyBrand,\n    slugName: s.slugName,\n    surveyId: s.surveyId,\n    useMobileStyling: s.useMobileStyling,\n  }));\n\n  const isCurrentlyThankYouCard =\n    cards[index]?.type === (\"thanks\" satisfies CardType);\n\n  const marketingUrlLink = buildMarketingUrl({\n    marketingUrl,\n    slugName,\n    surveyId,\n    forceBrandedLogo,\n  });\n\n  return (\n    <footer\n      className={cc(\n        \"long-form-question-footer-container\" satisfies CssConstant,\n        useMobileStyling && \"long-form-question-footer-container--mobile\",\n        isCurrentlyThankYouCard &&\n          (\"long-form-question-footer-container-center\" satisfies CssConstant),\n      )}\n    >\n      {isCurrentlyThankYouCard && forceBrandedLogo ? (\n        <ThankYouLink marketingUrlLink={marketingUrlLink} />\n      ) : (\n        <div\n          className={\n            \"long-form-question-footer-container-logo\" satisfies CssConstant\n          }\n        >\n          {showSurveyBrand ? (\n            <SprigBrandLogo\n              forceBrandedLogo={forceBrandedLogo}\n              marketingUrlLink={marketingUrlLink}\n            />\n          ) : null}\n        </div>\n      )}\n      {!isCurrentlyThankYouCard && (\n        <div\n          className={cc(\n            \"ul-card__button-wrapper\" satisfies CssConstant,\n            \"ul-card-vertical__button-wrapper\" satisfies CssConstant,\n            \"long-form-question-footer-container-actions\" satisfies CssConstant,\n          )}\n        >\n          <Button\n            className={cc(\n              \"long-form-button\" satisfies CssConstant,\n              isSubmitDisabled &&\n                (\"sprig-button-disabled\" satisfies CssConstant),\n            )}\n            disabled={isSubmitDisabled}\n            onClick={onSubmit}\n          >\n            <span\n              className={\n                \"long-form-button-text-container\" satisfies CssConstant\n              }\n            >\n              {buttonText ?? <Arrow stroke=\"white\" />}\n            </span>\n          </Button>\n        </div>\n      )}\n    </footer>\n  );\n};\n\nexport default LongFormQuestionsFooter;\n","import { useEffect, useState, useRef, useCallback, useMemo } from \"react\";\n\nimport { DisplayQuestion } from \"./DisplayQuestion\";\nimport LongFormQuestionsFooter from \"./longFormQuestionsFooter\";\nimport { isLongFormSurvey as longFormSurveyCheck } from \"../../../helpers/general\";\nimport { useConfig } from \"../../store\";\nimport { NextFnData, MultiNextFn } from \"../types\";\n\nimport type {\n  AppCard,\n  AppCardWithRequired,\n  CardType,\n} from \"../../../types/card\";\n\ntype Props = {\n  cards: AppCard[];\n  next: MultiNextFn;\n};\n\nexport const PageCard = ({ cards, next }: Props) => {\n  const [cardValues, setCardValues] = useState<Record<number, NextFnData>>({});\n  const [questionHasValidState, setQuestionHasValidState] = useState<\n    Record<number, boolean>\n  >({});\n\n  const { isLongFormSurvey, focusedQuestionId, setFocusedQuestionId } =\n    useConfig((s) => ({\n      isLongFormSurvey: longFormSurveyCheck(s.studyType),\n      focusedQuestionId: s.focusedQuestionId,\n      setFocusedQuestionId: s.setFocusedQuestionId,\n    }));\n  const listRef = useRef<HTMLDivElement>(null);\n  const isScrollingProgrammatically = useRef(false);\n  const expectedFocusFromManualScroll = useRef<number | null>(null);\n\n  const scrollToFocusedQuestion = useCallback(\n    (questionId: number | null) => {\n      isScrollingProgrammatically.current = true;\n\n      const index = cards.findIndex((card) => card.name === questionId);\n\n      if (!isLongFormSurvey || questionId === null || index === -1) {\n        isScrollingProgrammatically.current = false;\n        return;\n      }\n\n      const el = listRef.current?.querySelectorAll<HTMLElement>(\n        \".ul-card-scroll-wrapper\",\n      )[index];\n      const scrollContainer = listRef.current?.closest<HTMLElement>(\n        \".ul-card__container\",\n      );\n\n      if (!el || !scrollContainer) {\n        isScrollingProgrammatically.current = false;\n        return;\n      }\n\n      if (el && scrollContainer) {\n        const elRect = el.getBoundingClientRect();\n        const containerRect = scrollContainer.getBoundingClientRect();\n\n        const elRelativeTop =\n          elRect.top - containerRect.top + scrollContainer.scrollTop;\n        const elCenter = elRelativeTop + elRect.height / 2;\n\n        const viewportHeight = window.innerHeight;\n        // the header lives in the websurveys service...\n        // this is not ideal, but it's the best we can do for now\n        const thresholdHeight = viewportHeight - 157; // 80px header + 77px footer buffer\n\n        let targetScrollTop: number;\n        if (elRect.height >= thresholdHeight) {\n          targetScrollTop = elRelativeTop;\n        } else {\n          const containerHeight = scrollContainer.clientHeight;\n          targetScrollTop = elCenter - containerHeight / 2;\n        }\n\n        const containerHeight = scrollContainer.clientHeight;\n        const maxScrollTop = scrollContainer.scrollHeight - containerHeight;\n        const clampedScrollTop = Math.max(\n          0,\n          Math.min(targetScrollTop, maxScrollTop),\n        );\n\n        scrollContainer.scrollTo({\n          top: clampedScrollTop,\n          behavior: \"smooth\",\n        });\n\n        // Reset the flag after smooth scrolling is likely complete\n        setTimeout(() => {\n          isScrollingProgrammatically.current = false;\n        }, 500);\n      }\n    },\n    [isLongFormSurvey, cards],\n  );\n\n  useEffect(() => {\n    if (\n      focusedQuestionId === null ||\n      cards.findIndex((card) => card.name === focusedQuestionId) === -1\n    ) {\n      setFocusedQuestionId(cards[0].name);\n    }\n  }, [cards, focusedQuestionId, setFocusedQuestionId]);\n\n  // handle external focus changes (e.g., individual next button clicks)\n  useEffect(() => {\n    if (!isLongFormSurvey || focusedQuestionId === null) return;\n\n    if (expectedFocusFromManualScroll.current === focusedQuestionId) {\n      expectedFocusFromManualScroll.current = null;\n      return;\n    }\n\n    scrollToFocusedQuestion(focusedQuestionId);\n  }, [focusedQuestionId, isLongFormSurvey, scrollToFocusedQuestion]);\n\n  const handleScroll = useCallback(() => {\n    if (isScrollingProgrammatically.current) {\n      return;\n    }\n\n    const scrollContainer = listRef.current?.closest(\".ul-card__container\");\n    if (!scrollContainer) return;\n\n    const cardElements = listRef.current?.querySelectorAll(\n      \".ul-card-scroll-wrapper\",\n    );\n\n    if (!cardElements || cardElements.length === 0) {\n      return;\n    }\n\n    const scrollContainerRect = scrollContainer.getBoundingClientRect();\n    const centerY = scrollContainerRect.top + scrollContainerRect.height / 2;\n\n    let closestIndex = 0;\n    let closestDistance = Infinity;\n\n    cardElements.forEach((cardElement, index) => {\n      const cardRect = cardElement.getBoundingClientRect();\n      const cardCenterY = cardRect.top + cardRect.height / 2;\n      const distance = Math.abs(centerY - cardCenterY);\n\n      if (distance < closestDistance) {\n        closestDistance = distance;\n        closestIndex = index;\n      }\n    });\n\n    const closestQuestion = cards[closestIndex];\n    expectedFocusFromManualScroll.current = closestQuestion.name;\n    setFocusedQuestionId(closestQuestion.name);\n  }, [cards, setFocusedQuestionId]);\n\n  useEffect(() => {\n    if (!isLongFormSurvey) return;\n\n    const scrollContainer: HTMLElement | null =\n      listRef.current?.closest(\".ul-card__container\") || null;\n\n    if (scrollContainer) {\n      scrollContainer.addEventListener(\"scroll\", handleScroll, {\n        passive: true,\n      });\n    }\n\n    return () => {\n      if (scrollContainer) {\n        scrollContainer.removeEventListener(\"scroll\", handleScroll);\n      }\n    };\n  }, [handleScroll, isLongFormSurvey]);\n\n  const canSubmit = useMemo(() => {\n    return Object.values(questionHasValidState).every((isValid) => isValid);\n  }, [questionHasValidState]);\n\n  const updateCardValues = (\n    questionId: number,\n    value: NextFnData,\n    isValid: boolean,\n  ) => {\n    setCardValues((prev) => ({ ...prev, [questionId]: value }));\n    setQuestionHasValidState((prev) => ({\n      ...prev,\n      [questionId]: isValid,\n    }));\n  };\n\n  useEffect(() => {\n    if (!isLongFormSurvey) {\n      return;\n    }\n\n    const initialValues: Record<\n      number,\n      {\n        value: null;\n        questionId: number;\n        type: CardType;\n      }\n    > = {};\n\n    cards.forEach((card) => {\n      const c = card as AppCardWithRequired;\n      if (!c.props?.properties?.required) {\n        initialValues[c.name] = {\n          value: null,\n          questionId: c.name,\n          type: c.type,\n        };\n      }\n    });\n\n    setCardValues(initialValues);\n    setQuestionHasValidState({});\n  }, [cards, isLongFormSurvey]);\n\n  const moveToNextQuestion = (currentQuestionId: number) => {\n    if (!isLongFormSurvey) {\n      return;\n    }\n\n    const currentIndex = cards.findIndex(\n      (card) => card.name === currentQuestionId,\n    );\n    const nextIndex = currentIndex + 1;\n\n    if (nextIndex < cards.length) {\n      const nextQuestionId = cards[nextIndex].name;\n      setFocusedQuestionId(nextQuestionId);\n    } else {\n      setFocusedQuestionId(currentQuestionId);\n    }\n  };\n\n  const questionsSubmit = () => {\n    const orderedValues = cards.map((card) => {\n      return cardValues[card.name];\n    });\n    next(orderedValues);\n  };\n\n  const submitQuestion = (response: NextFnData, isValidToSubmit: boolean) => {\n    if (isLongFormSurvey) {\n      // Store for batch submit later\n      updateCardValues(response.questionId, response, isValidToSubmit);\n\n      // FOCUS LOGIC:\n      // - Questions WITH submit buttons (open text, matrix, multiselect): Focus advances only when submit button is clicked\n      // - Questions WITHOUT submit buttons (NPS, Likert, single-select): Focus advances immediately when answered\n      const shouldAutoAdvance = shouldAutoAdvanceFocus(response.type);\n      // && isValidToSubmit here too?\n      if (shouldAutoAdvance) {\n        moveToNextQuestion(response.questionId);\n      }\n    } else {\n      next([response]);\n    }\n  };\n\n  const shouldAutoAdvanceFocus = (cardType: CardType): boolean => {\n    // Auto-advance focus ONLY for question types that submit immediately and DON'T have submit/next buttons\n    // These questions advance focus as soon as they're answered/selected.\n    // Questions NOT in this list (open, matrix, multipleselect) have submit/next buttons\n    // and only advance focus when those buttons are clicked\n    return new Set([\"nps\", \"likert\", \"multiplechoice\"]).has(cardType);\n  };\n\n  const isSubmitDisabled = () => {\n    // Check if we have the same number of valid responses as cards\n    return Object.keys(cardValues).length < cards.length || !canSubmit;\n  };\n\n  const isThanksCard = cards[0]?.type === \"thanks\";\n\n  return isLongFormSurvey ? (\n    <div className=\"ul-card-list-container--longform\" ref={listRef}>\n      {cards.map((c, i) => (\n        <DisplayQuestion\n          cardInstance={c}\n          key={c?.name || i}\n          moveToNextQuestion={moveToNextQuestion}\n          showIndividualSubmit={\n            isLongFormSurvey && cards.length > 1 && i < cards.length - 1\n          }\n          submitQuestion={submitQuestion}\n          updateCardValues={updateCardValues}\n        />\n      ))}\n\n      {!isThanksCard && (\n        <LongFormQuestionsFooter\n          isSubmitDisabled={isSubmitDisabled()}\n          onSubmit={questionsSubmit}\n        />\n      )}\n    </div>\n  ) : (\n    <>\n      {cards.map((c, i) => (\n        <DisplayQuestion\n          cardInstance={c}\n          key={c?.name || i}\n          moveToNextQuestion={moveToNextQuestion}\n          showIndividualSubmit={\n            isLongFormSurvey && cards.length > 1 && i < cards.length - 1\n          }\n          submitQuestion={submitQuestion}\n          updateCardValues={updateCardValues}\n        />\n      ))}\n    </>\n  );\n};\n","export const AvStreamStatus = {\n  RequestNeeded: 1,\n  TryAgain: 2,\n  Ready: 3,\n} as const;\n","import { AvStreamStatus } from \"./constants\";\nimport {\n  RecordedTaskPage,\n  PermissionTaskPage,\n  ScreenTaskPage,\n} from \"../../../types/card\";\n\nexport const isPermissionTaskPage = (\n  page: RecordedTaskPage,\n): page is PermissionTaskPage => page.type === \"av_permission\";\n\nexport const isScreenTaskPage = (\n  page: RecordedTaskPage,\n): page is ScreenTaskPage => page.type === \"screen_permission\";\n\nexport const avStreamHasRequiredPermissions = (\n  avstream: MediaStream,\n  page: RecordedTaskPage,\n) => {\n  const permissions = isPermissionTaskPage(page)\n    ? page.permissionDescriptors\n    : [];\n  const requiresVideo = permissions.includes(\"camera\");\n  return !requiresVideo || avstream.getVideoTracks().length > 0;\n};\n\nexport const getAvStreamRequestStatus = (\n  avstream: MediaStream | null | undefined,\n  page: RecordedTaskPage,\n) => {\n  if (avstream === undefined) {\n    return AvStreamStatus.RequestNeeded;\n  } else if (!avstream) {\n    return AvStreamStatus.TryAgain;\n  } else if (!avStreamHasRequiredPermissions(avstream, page)) {\n    return AvStreamStatus.RequestNeeded;\n  }\n  return AvStreamStatus.Ready;\n};\n","import create from \"zustand\";\n\nimport {\n  MediaType,\n  PassthroughData,\n} from \"../../../constants/sprigRecordingEvents\";\nimport {\n  CardType,\n  RecordedTaskPage,\n  RecordedTaskPageType,\n} from \"../../../types/card\";\nimport { RecordedTaskResponseValueType } from \"../types\";\n\nexport interface RecordedTaskResponseType {\n  questionId: number;\n  type: CardType;\n  value: RecordedTaskResponseValueType;\n}\nexport interface RecordedTaskState {\n  avStream: MediaStream | null | undefined;\n  captureStream?: MediaStream | null;\n  currentPage: RecordedTaskPage | null;\n  mediaRecordingUids: UUID[] | null;\n  nextQuestion: (response: RecordedTaskResponseType) => void;\n  passthroughData?: PassthroughData;\n  recordingMediaTypes?: MediaType[];\n  screenPermissionRequested: boolean;\n  type?: RecordedTaskPageType;\n}\n\nexport interface RecordedTaskActions {\n  reset: () => void;\n  updatePage: (newState: Partial<RecordedTaskState>) => void;\n}\n\nconst initialState = {\n  avStream: null,\n  currentPage: null,\n  mediaRecordingUids: null,\n  nextQuestion: () => {},\n  passthroughData: undefined,\n  recordingMediaTypes: undefined,\n  screenPermissionRequested: false,\n  type: undefined,\n};\n\nexport type RecordedTaskStore = RecordedTaskState & RecordedTaskActions;\n\nexport const useRecordedTaskStore = create<RecordedTaskStore>((set) => ({\n  ...initialState,\n  reset: () => {\n    set(initialState);\n  },\n  updatePage: (newState: Partial<RecordedTaskState>) => {\n    set(newState);\n  },\n}));\n","import { isPermissionTaskPage, isScreenTaskPage } from \"./helpers\";\nimport { RecordedTaskResponseType, useRecordedTaskStore } from \"./store\";\nimport { MediaType, TaskStatus } from \"../../../constants/sprigRecordingEvents\";\nimport { PermissionTaskPage, RecordedTaskPage } from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\n\nexport function requestAVPermissions({\n  currentPage,\n  pages,\n}: {\n  currentPage: PermissionTaskPage;\n  pages: RecordedTaskPage[];\n}) {\n  const {\n    avStream: existingAvStream,\n    recordingMediaTypes,\n    updatePage,\n  } = useRecordedTaskStore.getState();\n  const { recorderEventEmitter } = useConfig.getState();\n  recorderEventEmitter.emit(\"av.permission\", {\n    \"permission.descriptors\": currentPage.permissionDescriptors,\n    \"stream.ready\": (avStream, captureStream) => {\n      if (existingAvStream === avStream) return; // no update to current stream\n      let destinationPage: RecordedTaskPage = currentPage;\n      if (avStream && !currentPage.permissionDescriptors.includes(\"camera\")) {\n        // obtained stream skip to next page if we requested only audio\n        const currentPageIndex = pages.indexOf(currentPage);\n        const nextPageTarget = captureStream?.active\n          ? currentPageIndex + 2\n          : currentPageIndex + 1;\n        // start recording when we have both streams active already\n        captureStream?.active &&\n          recordingMediaTypes &&\n          recorderEventEmitter.emit(\"begin.recording\", {\n            \"recording.media.types\": recordingMediaTypes,\n            \"start.recording.callback\": (mediaRecordingUids: UUID[]) =>\n              updatePage({ mediaRecordingUids }),\n          });\n        destinationPage = pages[nextPageTarget];\n      }\n      updatePage({ currentPage: destinationPage, avStream });\n    },\n  });\n}\n\nexport function initializeRecordTask({\n  pages,\n  userId: visitorId,\n  responseGroupUid,\n  surveyId,\n  questionId,\n  next,\n}: {\n  questionId: number;\n  surveyId: number;\n  responseGroupUid: UUID;\n  userId: UUID | null;\n  next: (response: RecordedTaskResponseType) => void;\n  pages: RecordedTaskPage[];\n}) {\n  const { updatePage } = useRecordedTaskStore.getState();\n  const { eventEmitFn, recorderEventEmitter } = useConfig.getState();\n  const passthroughData = {\n    questionId,\n    surveyId,\n    visitorId,\n    responseGroupUid,\n  };\n  let currentPageIndex = 0;\n  recorderEventEmitter.emit(\"recorded.task.permission.screen\");\n  eventEmitFn(\"recorded.task.permission.screen\");\n\n  // check if we already have obtained necessary permissions\n  recorderEventEmitter.emit(\"permission.status\", {\n    \"permission.status.callback\": (\n      avStream,\n      hasVideoPermission,\n      hasScreenPermission,\n      captureStream,\n    ) => {\n      const currentPage = pages[currentPageIndex];\n      const { type } = currentPage;\n      const recordingMediaTypes: MediaType[] = [\"screen\"];\n      if (isPermissionTaskPage(currentPage)) {\n        const { permissionDescriptors } = currentPage;\n        const audioPermissionRequired =\n          permissionDescriptors?.includes(\"microphone\");\n        const videoPermissionRequired =\n          permissionDescriptors?.includes(\"camera\");\n\n        //configure the types of recordings we are doing for the task\n        audioPermissionRequired && recordingMediaTypes.push(\"audio\");\n        videoPermissionRequired && recordingMediaTypes.push(\"video\");\n\n        // go to next page if we already have stream and video permission is not required\n        const obtainedAudioStream =\n          avStream?.active && !videoPermissionRequired;\n        const obtainedExistingVideoStream =\n          avStream?.active && hasVideoPermission;\n        (obtainedAudioStream || obtainedExistingVideoStream) &&\n          currentPageIndex++;\n      }\n      // go to next page if we already obtained screen permission previously\n      if (isScreenTaskPage(pages[currentPageIndex]) && hasScreenPermission) {\n        currentPageIndex++;\n        recorderEventEmitter.emit(\"begin.recording\", {\n          \"recording.media.types\": recordingMediaTypes,\n          \"start.recording.callback\": (mediaRecordingUids: UUID[]) =>\n            updatePage({ mediaRecordingUids }),\n        });\n      }\n      updatePage({\n        currentPage: pages[currentPageIndex],\n        avStream,\n        screenPermissionRequested: hasScreenPermission,\n        nextQuestion: next,\n        type,\n        passthroughData,\n        recordingMediaTypes,\n        captureStream,\n      });\n    },\n  });\n  const currentPage = pages[currentPageIndex];\n  // check if first page requests for av\n  currentPage.type === \"av_permission\" &&\n    requestAVPermissions({\n      currentPage,\n      pages,\n    });\n  return currentPage;\n}\n\nexport function completeTask({ status }: { status: TaskStatus }) {\n  const { nextQuestion, passthroughData, mediaRecordingUids, reset } =\n    useRecordedTaskStore.getState();\n  const { recorderEventEmitter, handleUploadUpdate, index } =\n    useConfig.getState();\n  const responseValues: RecordedTaskResponseType = {\n    value: {\n      taskStatus: status,\n    },\n    type: \"recordedtask\",\n    questionId: passthroughData?.questionId || 1,\n  };\n\n  if (!passthroughData) return;\n  recorderEventEmitter.emit(\"finish.task\", {\n    \"begin.callback\": (mediaRecordingUid) => {\n      handleUploadUpdate({\n        mediaRecordingUid,\n        isSubmitted: true,\n        progressPct: 0,\n        isComplete: false,\n      });\n    },\n    \"progress.callback\": (\n      mediaRecordingUid: UUID,\n      data: { detail: number },\n    ) => {\n      handleUploadUpdate({\n        mediaRecordingUid,\n        progressPct: data.detail,\n        isSubmitted: false,\n        isComplete: false,\n      });\n    },\n    \"upload.callback\": (mediaRecordingUid: UUID | null) => {\n      if (mediaRecordingUid) {\n        handleUploadUpdate({\n          mediaRecordingUid,\n          isComplete: true,\n          isSubmitted: true,\n          progressPct: 100,\n        });\n      }\n    },\n    \"passthrough.data\": passthroughData,\n    \"current.index\": index,\n    \"task.response\": responseValues,\n    \"task.complete.callback\": (taskDurationMillisecond: number) => {\n      responseValues.value.taskDurationMillisecond = taskDurationMillisecond;\n      if (mediaRecordingUids) {\n        responseValues.value.mediaRecordingUids = mediaRecordingUids;\n      }\n      reset();\n      nextQuestion(responseValues);\n    },\n  });\n}\n\nexport function nextPage({\n  pages,\n  setIsRequestingPermission,\n}: {\n  pages: RecordedTaskPage[];\n  setIsRequestingPermission?: (data: boolean) => void | undefined;\n}) {\n  const { recorderEventEmitter, eventEmitFn } = useConfig.getState();\n  const {\n    updatePage,\n    currentPage,\n    recordingMediaTypes,\n    screenPermissionRequested,\n  } = useRecordedTaskStore.getState();\n  if (!currentPage) return;\n  const currentPageIndex = pages.indexOf(currentPage);\n\n  switch (currentPage.type) {\n    case \"av_permission\": {\n      // if we didn't successfully obtain a stream then page transition to next question otherwise go to screen recording page\n      const nextPageTarget = screenPermissionRequested\n        ? currentPageIndex + 2\n        : currentPageIndex + 1;\n      screenPermissionRequested &&\n        recordingMediaTypes &&\n        recorderEventEmitter.emit(\"begin.recording\", {\n          \"recording.media.types\": recordingMediaTypes,\n          \"start.recording.callback\": (mediaRecordingUids: UUID[]) => {\n            updatePage({ mediaRecordingUids });\n          },\n        });\n      updatePage({ currentPage: pages[nextPageTarget] });\n      return;\n    }\n    case \"screen_permission\":\n      recorderEventEmitter.emit(\"screen.permission\", {\n        \"screen.permission.requested\": setIsRequestingPermission,\n        \"stream.ready.callback\": (avStream, captureStream) => {\n          const nextPage = captureStream\n            ? pages[currentPageIndex + 1]\n            : currentPage;\n          captureStream &&\n            recordingMediaTypes &&\n            recorderEventEmitter.emit(\"begin.recording\", {\n              \"recording.media.types\": recordingMediaTypes,\n              \"start.recording.callback\": (mediaRecordingUids: UUID[]) => {\n                updatePage({ captureStream, mediaRecordingUids });\n              },\n            });\n          updatePage({\n            currentPage: nextPage,\n            screenPermissionRequested: true,\n            captureStream,\n          });\n        },\n      });\n      return;\n    case \"start_task\":\n      eventEmitFn(\"recorded.task.start\");\n      recorderEventEmitter.emit(\"recorded.task.start\");\n      recorderEventEmitter.emit(\"start.task\");\n      updatePage({\n        currentPage: pages[currentPageIndex + 1],\n        screenPermissionRequested: true,\n      });\n      return;\n    case \"complete_task\":\n      return;\n  }\n}\n","import { useEffect, useState } from \"react\";\n\nimport { nextPage, completeTask, requestAVPermissions } from \"./actions\";\nimport { AvStreamStatus } from \"./constants\";\nimport { getAvStreamRequestStatus, isPermissionTaskPage } from \"./helpers\";\nimport { useRecordedTaskStore } from \"./store\";\nimport { CssConstant } from \"../../../constants/css\";\nimport {\n  CompleteTaskPage,\n  PermissionTaskPage,\n  RecordedTaskCardProperties,\n  RecordedTaskPage,\n  ScreenTaskPage,\n  StartTaskPage,\n} from \"../../../types/card\";\nimport { Button, MobileEmbedView } from \"../../components\";\nimport { cc } from \"../../helpers/classes\";\nimport { useConfig } from \"../../store\";\n\nconst PERMISSION_GRAPHICS_CONTAINER = \"ul-permission-graphics-container\";\nconst PERMISSION_BODY = \"ul-permission-body\";\nconst PERMISSION_GRAPHICS_CLASSES = cc(\n  PERMISSION_GRAPHICS_CONTAINER,\n  \"ul_recorded-task-inset-spacing\",\n);\nconst BUTTON_CONTAINER_CLASSES_LEFT = cc(\n  \"ul-horizontal-button-container\",\n  \"ul-horizontal-button-container-left\",\n);\n\nconst RichTextCaption = ({ richTextBody }: { richTextBody: string }) => {\n  return (\n    <div\n      className=\"ul-rich-text-body\"\n      dangerouslySetInnerHTML={{ __html: richTextBody }}\n      id=\"ul-task-detail-container\"\n    />\n  );\n};\n\nconst SkipButton = ({\n  required,\n  skipButtonText,\n  bottom = false,\n}: {\n  required: boolean;\n  skipButtonText?: string;\n  bottom?: boolean;\n}) => {\n  if (required) return null;\n  return (\n    <Button\n      className={cc(\n        bottom && \"ul-skip-button-below\",\n        \"ul-button-inactive\" satisfies CssConstant,\n      )}\n      onClick={completeTask.bind(null, { status: \"abandoned\" })}\n    >\n      {skipButtonText || \"Skip\"}\n    </Button>\n  );\n};\n\nconst ListenForFailedStreams = (pages: RecordedTaskPage[]) => {\n  const { avStream, captureStream, recordingMediaTypes, updatePage } =\n    useRecordedTaskStore.getState();\n  const hasAVMedia =\n    recordingMediaTypes?.includes(\"audio\") ||\n    recordingMediaTypes?.includes(\"video\");\n\n  useEffect(() => {\n    // Listens for AV stream failing\n    const interval = setInterval(() => {\n      if (hasAVMedia && avStream && !avStream.active)\n        updatePage({ avStream: null, currentPage: pages[0] });\n      else if (!captureStream || !captureStream.active)\n        updatePage({\n          captureStream: undefined,\n          currentPage: pages[hasAVMedia ? 1 : 0],\n        });\n    }, 1000);\n    return () => clearInterval(interval);\n  }, [\n    avStream,\n    captureStream,\n    hasAVMedia,\n    pages,\n    recordingMediaTypes,\n    updatePage,\n  ]);\n};\n\nexport const StartTaskPageContent = ({\n  content,\n  pages,\n  required,\n}: {\n  content: StartTaskPage;\n  pages: RecordedTaskPage[];\n  required: boolean;\n}) => {\n  const { buttonText, skipButtonText, taskDetail } = content;\n  ListenForFailedStreams(pages);\n  return (\n    <div className=\"ul-task-page\" key=\"start-task\">\n      {taskDetail && <RichTextCaption richTextBody={taskDetail} />}\n      <div className={BUTTON_CONTAINER_CLASSES_LEFT}>\n        <Button onClick={nextPage.bind(null, { pages })}>{buttonText}</Button>\n        <SkipButton required={required} skipButtonText={skipButtonText} />\n      </div>\n    </div>\n  );\n};\n\nexport const CompleteTaskPageContent = ({\n  content,\n  pages,\n  properties,\n}: {\n  content: CompleteTaskPage;\n  pages: RecordedTaskPage[];\n  properties: RecordedTaskCardProperties;\n}) => {\n  const { buttonText, skipButtonText } = content;\n  ListenForFailedStreams(pages);\n\n  const finishTaskButtons = () => (\n    <div className={BUTTON_CONTAINER_CLASSES_LEFT}>\n      <Button\n        className=\"ul-complete-task-button\"\n        onClick={completeTask.bind(null, { status: \"completed\" })}\n      >\n        {buttonText}\n      </Button>\n      <Button\n        className={cc(\"ul-button-inactive\" satisfies CssConstant)}\n        onClick={completeTask.bind(null, { status: \"given.up\" })}\n      >\n        {skipButtonText}\n      </Button>\n    </div>\n  );\n\n  const finishTaskButtonViewPrototypeWrapper = (\n    <MobileEmbedView\n      {...{\n        properties,\n        defaultBody: finishTaskButtons,\n      }}\n    />\n  );\n  return (\n    <div className=\"ul-task-page\" key=\"complete-task\">\n      {content.taskDetail && (\n        <RichTextCaption richTextBody={content.taskDetail} />\n      )}\n      {finishTaskButtonViewPrototypeWrapper}\n    </div>\n  );\n};\n\nexport const ScreenPermissionPageContent = ({\n  content,\n  pages,\n  required,\n}: {\n  content: ScreenTaskPage;\n  required: boolean;\n  pages: RecordedTaskPage[];\n}) => {\n  const { buttonText, skipButtonText } = content;\n  const [tabTitle] = useConfig((c) => [c.tabTitle]);\n  const [isRequestingPermission, setIsRequestingPermission] = useState(false);\n  return (\n    <div>\n      <div className={PERMISSION_GRAPHICS_CLASSES}>\n        <p style={{ marginTop: \"auto\" }}>{content.selectTabText}</p>\n        <div className=\"ul-select-tab-container\">\n          <p className={PERMISSION_BODY}>{tabTitle}</p>\n        </div>\n      </div>\n      <div className={!required ? BUTTON_CONTAINER_CLASSES_LEFT : \"\"}>\n        <Button\n          disabled={isRequestingPermission}\n          onClick={nextPage.bind(null, { pages, setIsRequestingPermission })}\n        >\n          {buttonText}\n        </Button>\n        <SkipButton required={required} skipButtonText={skipButtonText} />\n      </div>\n    </div>\n  );\n};\n\nexport const AVPermissionRequestPageContent = ({\n  content,\n}: {\n  content: PermissionTaskPage;\n}) => {\n  return (\n    <div\n      className={cc(\n        PERMISSION_GRAPHICS_CONTAINER,\n        \"ul_permission_svg_container\",\n        \"ul_recorded-task-inset-spacing\",\n        \"ul-center-horizontally\",\n      )}\n      dangerouslySetInnerHTML={{ __html: content.svg }}\n      key=\"ul-permission-request-graphic\"\n    />\n  );\n};\n\nexport const AVPermissionFailurePageContent = ({\n  content,\n  pages,\n  required,\n}: {\n  content: PermissionTaskPage;\n  required: boolean;\n  pages: RecordedTaskPage[];\n}) => {\n  const {\n    permissionDeniedHeadline,\n    permissionDeniedBody,\n    skipButtonText,\n    tryAgainButtonText,\n  } = content;\n  const permissionPage = isPermissionTaskPage(pages[0]) ? pages[0] : null;\n\n  useEffect(() => {\n    // If the page fail, continue to request for AV permission in the background every second\n    const interval = setInterval(() => {\n      if (permissionPage !== null)\n        requestAVPermissions({\n          currentPage: permissionPage,\n          pages,\n        });\n    }, 1000);\n    return () => clearInterval(interval);\n  }, [permissionPage, pages]);\n\n  if (!permissionPage) return null;\n\n  return (\n    <div>\n      <div className={PERMISSION_GRAPHICS_CLASSES}>\n        <p className=\"ul-av-permission-denied-paragraph\">\n          <span className=\"ul-av-permission-denied-headline\">\n            {permissionDeniedHeadline}\n          </span>\n          <span className={PERMISSION_BODY}>{permissionDeniedBody}</span>\n        </p>\n      </div>\n      <div className={BUTTON_CONTAINER_CLASSES_LEFT}>\n        <Button\n          onClick={requestAVPermissions.bind(null, {\n            currentPage: permissionPage,\n            pages,\n          })}\n        >\n          {tryAgainButtonText}\n        </Button>\n        <SkipButton required={required} skipButtonText={skipButtonText} />\n      </div>\n    </div>\n  );\n};\n\nconst StreamVideo = ({\n  stream,\n}: {\n  stream: MediaStream | null | undefined;\n}) => {\n  return (\n    <video\n      autoPlay\n      className={cc(\"ul_recorded-task-inset-spacing\")}\n      id=\"ul-record-task-video-preview\"\n      muted\n      ref={(video) => {\n        if (video) {\n          video.srcObject = stream || null;\n        }\n      }}\n    />\n  );\n};\n\nexport const AVPermissionGrantedPageContent = ({\n  content,\n  pages,\n  required,\n}: {\n  content: PermissionTaskPage;\n  required: boolean;\n  pages: RecordedTaskPage[];\n}) => {\n  const { skipButtonText } = content;\n  const { avStream } = useRecordedTaskStore.getState();\n  ListenForFailedStreams(pages);\n\n  return (\n    <div>\n      <StreamVideo stream={avStream} />\n      <div className={\"ul-vertical-button-container-center\"}>\n        <Button onClick={nextPage.bind(null, { pages })}>\n          {content.buttonText}\n        </Button>\n        <SkipButton\n          bottom\n          required={required}\n          skipButtonText={skipButtonText}\n        />\n      </div>\n    </div>\n  );\n};\n\nexport const PageContent = ({\n  properties,\n}: {\n  properties: RecordedTaskCardProperties;\n}) => {\n  const { pages, required } = properties;\n  const { avStream, currentPage } = useRecordedTaskStore.getState();\n\n  if (currentPage === undefined) return null;\n\n  switch (currentPage?.type) {\n    case \"av_permission\": {\n      const permissionStatus = getAvStreamRequestStatus(avStream, currentPage);\n\n      if (permissionStatus === AvStreamStatus.RequestNeeded) {\n        return <AVPermissionRequestPageContent content={currentPage} />;\n      } else if (permissionStatus === AvStreamStatus.TryAgain) {\n        return (\n          <AVPermissionFailurePageContent\n            content={currentPage}\n            pages={pages}\n            required={required}\n          />\n        );\n      } else {\n        return (\n          <AVPermissionGrantedPageContent\n            content={currentPage}\n            pages={pages}\n            required={required}\n          />\n        );\n      }\n    }\n    case \"screen_permission\":\n      return (\n        <ScreenPermissionPageContent\n          content={currentPage}\n          pages={pages}\n          required={required}\n        />\n      );\n    case \"start_task\":\n      return (\n        <StartTaskPageContent\n          content={currentPage}\n          pages={pages}\n          required={required}\n        />\n      );\n    case \"complete_task\":\n      return (\n        <CompleteTaskPageContent\n          content={currentPage}\n          pages={pages}\n          properties={properties}\n        />\n      );\n    default:\n      return null;\n  }\n};\n","import { initializeRecordTask } from \"./actions\";\nimport { PageContent } from \"./components\";\nimport { AvStreamStatus } from \"./constants\";\nimport {\n  getAvStreamRequestStatus,\n  isPermissionTaskPage,\n  isScreenTaskPage,\n} from \"./helpers\";\nimport { RecordedTaskResponseType, useRecordedTaskStore } from \"./store\";\nimport { CssConstant } from \"../../../constants/css\";\nimport { RecordedTaskCard as RecordedTaskCardType } from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport { QuestionBodyWrapper } from \"../../components\";\nimport Header from \"../../components/header\";\nimport { cc } from \"../../helpers/classes\";\nimport { BaseCardProps } from \"../types\";\n\ntype Props = RecordedTaskCardType[\"props\"] & BaseCardProps;\n\nconst RecordedTaskCard = ({\n  className,\n  properties,\n  next,\n  questionId,\n}: Props) => {\n  const appStore = useConfig();\n  const { surveyId, responseGroupUid, userId } = appStore;\n  const store = useRecordedTaskStore();\n  const { screenPermissionRequested } = store;\n  const avStream = useRecordedTaskStore((state) => state.avStream);\n  let currentPage = useRecordedTaskStore((state) => state.currentPage);\n  if (!currentPage) {\n    // check if we have already obtained permission from previous session\n    currentPage = initializeRecordTask({\n      questionId,\n      surveyId,\n      next: (response: RecordedTaskResponseType) => {\n        next(response, true);\n      },\n      pages: properties.pages,\n      responseGroupUid,\n      userId,\n    });\n  }\n\n  // screen permission page changes headline and caption upon request failure\n  let headline: string | undefined = currentPage.headline;\n  let captionText: string | undefined = currentPage.captionText;\n  const permissionRequestStatus = getAvStreamRequestStatus(\n    avStream,\n    currentPage,\n  );\n  if (isScreenTaskPage(currentPage) && screenPermissionRequested) {\n    headline = currentPage.permissionDeniedHeadline;\n    captionText = currentPage.permissionDeniedCaptionText;\n  }\n  if (\n    isPermissionTaskPage(currentPage) &&\n    permissionRequestStatus === AvStreamStatus.Ready\n  ) {\n    headline = currentPage.permissionGrantedHeadline;\n    captionText = currentPage.permissionGrantedCaptionText;\n  }\n\n  return (\n    <div\n      className={cc(\n        className,\n        \"ul-center-horizontally\",\n        \"fade-in-transition\" satisfies CssConstant,\n      )}\n    >\n      <Header message={headline} properties={{ captionText }} />\n      <QuestionBodyWrapper>\n        <PageContent properties={properties} />\n      </QuestionBodyWrapper>\n    </div>\n  );\n};\n\nexport default RecordedTaskCard;\n","const ATTRIBUTE_URL_TO_PROPERTY_MAP = {\n  \"{{user_id}}\": \"externalUserId\",\n  \"{{email}}\": \"email\",\n};\n\n/**\n * Set visitor attributes and returns url with substitutions made\n * @param rawUrl - url possibly containing tags like {{user_id}}\n * @param visitorAttributes - attributes to substitute in the url\n */\nexport const getAttributedUrl = (\n  rawUrl: string | undefined = undefined,\n  visitorAttributes: Record<string, string> = {}\n) => {\n  if (!rawUrl) return rawUrl;\n  try {\n    const testUrl = new URL(rawUrl);\n    if (testUrl.protocol !== \"http:\" && testUrl.protocol !== \"https:\") {\n      return undefined;\n    }\n  } catch (e) {\n    return undefined;\n  }\n  let attributedUrl = rawUrl;\n  const unmatchedUrlTags: string[] = [];\n  for (const [urlKey, propertyKey] of Object.entries(\n    ATTRIBUTE_URL_TO_PROPERTY_MAP,\n  )) {\n    if (attributedUrl.toLowerCase().includes(urlKey)) {\n      if (visitorAttributes[propertyKey]) {\n        const regex = new RegExp(urlKey, \"gi\");\n        attributedUrl = attributedUrl.replace(\n          regex,\n          visitorAttributes[propertyKey],\n        );\n      } else {\n        unmatchedUrlTags.push(urlKey);\n      }\n    }\n  }\n\n  if (unmatchedUrlTags.length === 0) return attributedUrl;\n\n  // some attributes were not matched; if they're part of query params, attempt to remove them\n  // rather than returning 'https://example.com?user_id={{user_id}}' or 'https://example.com?user_id='\n  if (!attributedUrl.includes(\"?\")) return attributedUrl;\n\n  // source: https://masteringjs.io/tutorials/fundamentals/query-string\n  const baseUrl = attributedUrl.slice(0, attributedUrl.indexOf(\"?\"));\n  const queryParams = attributedUrl\n    .slice(attributedUrl.indexOf(\"?\") + 1)\n    .split(\"&\")\n    .map((str) => str.split(\"=\"));\n  const filteredQueryParams = queryParams.filter(\n    (queryParam) => !unmatchedUrlTags.includes(queryParam[1])\n  );\n\n  if (filteredQueryParams.length === 0) return baseUrl;\n  const joinedQueryParams = filteredQueryParams\n    .map((queryParam) => queryParam.join(\"=\"))\n    .join(\"&\");\n  return `${baseUrl}?${joinedQueryParams}`;\n};\n","import { BaseCardProps } from \"./types\";\nimport { CssConstant } from \"../../constants/css\";\nimport { TextUrlPromptCard as TextUrlPromptCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport {\n  Header,\n  MobileEmbedView,\n  QuestionBodyFooterContainer,\n  QuestionBodyWrapper,\n} from \"../components\";\nimport { getButtonText, getSkipButtonText } from \"../helpers/card\";\nimport { cc } from \"../helpers/classes\";\nimport { getAttributedUrl } from \"../helpers/getAttributedUrl\";\n\ntype Props = TextUrlPromptCardType[\"props\"] & BaseCardProps;\n\nconst TextUrlPromptCard = ({\n  className,\n  message,\n  next,\n  properties,\n  questionId,\n  type,\n}: Props) => {\n  const { visitorAttributes } = useConfig((s) => ({\n    visitorAttributes: s.visitorAttributes,\n  }));\n\n  const handleLinkButtonTap = (_: unknown, skipped = false) => {\n    const optionalValue = skipped ? { skipped: true } : undefined;\n    next({ value: optionalValue, questionId, type }, true);\n  };\n\n  const handleKeyPressLinkButton = (e: KeyboardEvent) => {\n    if (e.key === \"Enter\" || e.key === \" \")\n      next({ value: undefined, questionId, type }, true);\n  };\n\n  // TODO consider extracting CSS\n  const getBody = (richTextBody: string, plaintextBody: string) => {\n    if (richTextBody) {\n      return (\n        <div\n          className=\"ul-rich-text-body\"\n          dangerouslySetInnerHTML={{ __html: richTextBody }}\n          id=\"ul-card__text-url-body-container\"\n        />\n      );\n    }\n    if (!plaintextBody) return null;\n\n    return (\n      <div className=\"ul-rich-text-body\" id=\"ul-card__text-url-body-container\">\n        {(plaintextBody ? plaintextBody.split(/\\n\\s*\\n/g) : []).map(\n          (line, index) => {\n            return <p key={index}>{line}</p>;\n          },\n        )}\n      </div>\n    );\n  };\n\n  const href = getAttributedUrl(\n    properties && properties.buttonUrl,\n    visitorAttributes,\n  );\n  const footer = () => (\n    <QuestionBodyFooterContainer>\n      <div className=\"ul-card-button-group\">\n        <a\n          className=\"ul-card-text__button ul-card__text-url-prompt-button\"\n          href={href}\n          id=\"ul-card-text__button\"\n          onClick={handleLinkButtonTap}\n          onKeyPress={handleKeyPressLinkButton}\n          rel=\"noreferrer\"\n          role={href ? \"link\" : \"button\"}\n          tabIndex={0}\n          target=\"_blank\"\n        >\n          {getButtonText(properties)}\n        </a>\n        {properties.required === false && (\n          <button\n            className={\"ul-card-skip__button\" satisfies CssConstant}\n            onClick={(e) => handleLinkButtonTap(e, true)}\n          >\n            {getSkipButtonText(properties)}\n          </button>\n        )}\n      </div>\n    </QuestionBodyFooterContainer>\n  );\n\n  return (\n    <div\n      className={cc(\n        className,\n        \"ul-card__text-url-prompt\",\n        \"fade-in-transition\" satisfies CssConstant,\n      )}\n      key={questionId}\n    >\n      <Header\n        message={message}\n        properties={{ questionHtml: properties.questionHtml }}\n      />\n      <QuestionBodyWrapper>\n        {getBody(properties?.richTextBody, properties?.body)}\n      </QuestionBodyWrapper>\n      <MobileEmbedView\n        {...{\n          defaultBody: footer,\n          properties,\n        }}\n      />\n    </div>\n  );\n};\n\nexport default TextUrlPromptCard;\n","import { useEffect } from \"react\";\n\nimport { BaseCardProps } from \"./types\";\nimport { APP_ID, CssConstant } from \"../../constants/css\";\nimport { ThanksCard as ThanksCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { Header } from \"../components\";\nimport { cc } from \"../helpers/classes\";\n\ntype Props = ThanksCardType[\"props\"] & BaseCardProps;\n\nconst ThanksCard = ({ className, questionId }: Props) => {\n  const { border, destroy, endCard, forceBrandedLogo } = useConfig((s) => ({\n    border: s.border,\n    destroy: s.destroy,\n    endCard: s.endCard,\n    forceBrandedLogo: s.forceBrandedLogo,\n  }));\n\n  useEffect(() => {\n    // Free plans longer time to timeout to show logo branding at the end\n    const timeoutTime = forceBrandedLogo ? 4000 : 2000;\n    setTimeout(() => {\n      destroy(APP_ID);\n    }, timeoutTime);\n  }, [destroy, forceBrandedLogo]);\n\n  const caption =\n    endCard && endCard.subheader ? (\n      <p className={\"ul-caption\" satisfies CssConstant}>{endCard.subheader}</p>\n    ) : null;\n  const headline = endCard && endCard.headline ? endCard.headline : \"\";\n\n  return (\n    <div\n      className={cc(\n        className,\n        \"ul-card--thanks\",\n        \"fade-in-transition\" satisfies CssConstant,\n      )}\n      key={questionId}\n    >\n      <div>\n        <div className=\"ul-card--thanks-content\">\n          <div className=\"ul-thanks-check\">\n            <svg\n              aria-labelledby=\"title\"\n              fill=\"none\"\n              height=\"99\"\n              viewBox=\"0 0 81 99\"\n              width=\"81\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                clipRule=\"evenodd\"\n                d=\"M40.5 77C60.9345 77 77.5 60.4345 77.5 40C77.5 19.5655 60.9345 3 40.5 3C20.0655 3 3.5 19.5655 3.5 40C3.5 60.4345 20.0655 77 40.5 77ZM80.5 40C80.5 62.0914 62.5914 80 40.5 80C18.4086 80 0.5 62.0914 0.5 40C0.5 17.9086 18.4086 0 40.5 0C62.5914 0 80.5 17.9086 80.5 40Z\"\n                fill={border}\n                fillRule=\"evenodd\"\n              />\n              <path\n                clipRule=\"evenodd\"\n                d=\"M55.025 22.9046C55.6299 23.4705 55.6616 24.4198 55.0956 25.0247C54.8724 25.2634 54.6109 25.5285 54.3157 25.8277C52.2547 27.9168 48.5549 31.667 44.8135 39.6658C43.2818 42.9406 42.0864 45.8386 41.0823 48.2729C40.6539 49.3116 40.2603 50.2659 39.8902 51.129C39.287 52.5359 38.7248 53.7508 38.1744 54.625C37.8997 55.0613 37.5806 55.4905 37.2017 55.8245C36.8201 56.1607 36.2613 56.5 35.5457 56.5C34.6742 56.5 34.0892 55.9692 33.7774 55.6083C33.4502 55.2296 33.1752 54.7511 32.9396 54.301C32.7305 53.9013 32.5088 53.4367 32.2797 52.9565C32.2429 52.8794 32.2059 52.8019 32.1688 52.7243C31.8942 52.1499 31.5959 51.534 31.2537 50.8868C29.8886 48.305 27.8539 45.2878 24.2343 43.1382C23.522 42.7152 23.2875 41.7949 23.7105 41.0826C24.1335 40.3703 25.0539 40.1358 25.7662 40.5588C30.0556 43.1062 32.4149 46.6647 33.9058 49.4845C34.2776 50.1876 34.5973 50.8487 34.8753 51.4302C34.9147 51.5124 34.9529 51.5926 34.9902 51.6707C35.2222 52.1567 35.4164 52.5637 35.5978 52.9102C35.6151 52.9434 35.6321 52.9754 35.6485 53.0061C36.0565 52.3531 36.5341 51.3434 37.133 49.9468C37.4781 49.1418 37.8572 48.2229 38.2761 47.2074C39.2886 44.7532 40.5339 41.7347 42.0961 38.3948C46.0591 29.9221 50.0641 25.8648 52.1535 23.7482C52.4423 23.4556 52.6944 23.2002 52.9048 22.9753C53.4708 22.3703 54.42 22.3387 55.025 22.9046ZM35.1994 53.5892C35.1994 53.5892 35.2 53.5888 35.2012 53.5879C35.2 53.5889 35.1994 53.5893 35.1994 53.5892ZM36.0666 53.6682C36.0732 53.674 36.0765 53.6775 36.0765 53.6777C36.0765 53.678 36.0732 53.6751 36.0666 53.6682Z\"\n                fill={border}\n                fillRule=\"evenodd\"\n              />\n              <path\n                d=\"M69.5 97C69.5 98.1046 56.2924 99 40 99C23.7076 99 10.5 98.1046 10.5 97C10.5 95.8954 23.7076 95 40 95C56.2924 95 69.5 95.8954 69.5 97Z\"\n                fill=\"black\"\n                fillOpacity=\"0.2\"\n              />\n            </svg>\n          </div>\n          <Header message={headline} />\n          {caption}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default ThanksCard;\n","import { BaseCardProps } from \"./types\";\nimport { CssConstant } from \"../../constants/css\";\nimport { UploadingCard as UploadingCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { Header } from \"../components\";\nimport { cc } from \"../helpers/classes\";\n\ntype Props = UploadingCardType[\"props\"] & BaseCardProps;\n\nconst UploadingCard = ({ className }: Props) => {\n  const { uploadProgress } = useConfig((s) => ({\n    uploadProgress: s.uploadProgress,\n  }));\n\n  let headline;\n  let caption;\n  if (Object.values(uploadProgress).filter((v) => v.isSubmitted).length > 1) {\n    headline = \"Your responses are processing\";\n    caption =\n      \"Please keep this tab open until your responses are fully processed.\";\n  } else {\n    headline = \"Your response is processing\";\n    caption =\n      \"Please keep this tab open until your response is fully processed.\";\n  }\n\n  // use the lowest value of any upload (rather than, say, the average), otherwise it might start too close to 100, this way it'll go up more quickly.\n  // cap this at 99, because there's a time between the \"100%\" upload progress notification and the upload success notification. Better to encourage them\n  // to keep the tab open until we get the upload success notification\n  const uploadProgressPct = Math.round(\n    Math.min(\n      99,\n      ...Object.values(uploadProgress)\n        .filter((v) => v.isSubmitted)\n        .map((v) => v.progressPct || 0),\n    ),\n  );\n\n  return (\n    <div\n      className={cc(\n        className,\n        \"ul-card--uploading\",\n        \"fade-in-transition\" satisfies CssConstant,\n      )}\n    >\n      <div\n        aria-busy=\"true\"\n        aria-label=\"Processing...\"\n        aria-live=\"polite\"\n        className={\"ul-loading-spinner-container\" satisfies CssConstant}\n        role=\"progressbar\"\n      >\n        <div className={\"ul-loading-spinner\" satisfies CssConstant}>\n          <div className=\"first\" />\n          <div className=\"second\" />\n          <div className=\"third\" />\n          <div className=\"fourth\" />\n        </div>\n      </div>\n      <Header message={`${headline} (${uploadProgressPct}% complete)`} />\n      <p className={\"ul-caption\" satisfies CssConstant}>{caption}</p>\n    </div>\n  );\n};\n\nexport default UploadingCard;\n","import { useEffect, useRef } from \"react\";\n\nimport { getMaxRemainingCards } from \"./helpers/skipLogicHelpers\";\nimport { ThankYouLink, SprigBrandLogo } from \"./components\";\nimport { useConfig } from \"./store\";\nimport { buildMarketingUrl } from \"./helpers/card\";\n\nconst Footer = () => {\n  const {\n    border,\n    cards,\n    forceBrandedLogo,\n    headers,\n    index,\n    marketingUrl,\n    showSurveyBrand,\n    slugName,\n    surveyId,\n    viewedCardCount,\n  } = useConfig((s) => ({\n    border: s.border,\n    cards: s.cards,\n    forceBrandedLogo: s.forceBrandedLogo,\n    headers: s.headers,\n    index: s.index,\n    marketingUrl: s.marketingUrl,\n    showSurveyBrand: s.showSurveyBrand,\n    slugName: s.slugName,\n    surveyId: s.surveyId,\n    viewedCardCount: s.viewedCardCount,\n  }));\n\n  const progressRef = useRef<HTMLDivElement>(null);\n\n  const questionSteps = cards.filter(\n    (step) => step.type !== \"uploading\" && step.type !== \"thanks\",\n  );\n  const maxRemainingCards = getMaxRemainingCards(cards, index);\n\n  // count the current card as viewed so there is not 0 progress for first question.\n  // note this increases total denominator by 1\n  // ex: if there are 2 questions, it will look 1/3 done for the first question, and 2/3 done for the second.\n  const paddedViewedCardCount = viewedCardCount + 1;\n  const fractionCompleted =\n    paddedViewedCardCount / (paddedViewedCardCount + maxRemainingCards);\n\n  const marketingUrlLink = buildMarketingUrl({\n    marketingUrl,\n    slugName,\n    surveyId,\n    forceBrandedLogo,\n  });\n\n  useEffect(() => {\n    if (progressRef.current) {\n      progressRef.current.style.width = `${fractionCompleted * 100}%`;\n    }\n  }, [fractionCompleted]);\n\n  // Render progress bar and \"Powered by Sprig\" logo\n  const renderBrandedLogo = () => {\n    return (\n      <>\n        {/* Progress bar */}\n        {questionSteps.length > 1 && (\n          <div className=\"ul-progress-bar-container ul-progress-bar-container__footer\">\n            <div\n              className=\"ul-progress-bar-current\"\n              ref={progressRef}\n              style={{\n                border: `1px solid ${border ? border : \"#000\"}`,\n              }}\n            />\n          </div>\n        )}\n        {/* Sprig Brand Logo */}\n        {showSurveyBrand ? (\n          <SprigBrandLogo\n            forceBrandedLogo={forceBrandedLogo}\n            marketingUrlLink={marketingUrlLink}\n          />\n        ) : null}\n      </>\n    );\n  };\n\n  const isCurrentlyThankYouCard = cards[index]?.type === \"thanks\";\n  return (\n    <footer\n      className={`ul-footer ${\n        headers[\"userleap-platform\"] === \"link\" ? \"ul-footer__link\" : \"\"\n      }`}\n    >\n      {isCurrentlyThankYouCard && forceBrandedLogo ? (\n        <ThankYouLink marketingUrlLink={marketingUrlLink} />\n      ) : (\n        renderBrandedLogo()\n      )}\n    </footer>\n  );\n};\n\nexport default Footer;\n","import { useMemo } from \"react\";\nimport { useConfig } from \"./store\";\n\nconst ProgressBar = () => {\n  const border = useConfig((s) => s.border);\n  const cards = useConfig((s) => s.cards);\n  const index = useConfig((s) => s.index);\n  const focusedQuestionId = useConfig((s) => s.focusedQuestionId);\n\n  const { totalQuestions, fraction } = useMemo(() => {\n    const questionCards = cards.filter(\n      (c) => c.type !== \"uploading\" && c.type !== \"thanks\",\n    );\n\n    const totalQuestions = questionCards.length;\n    if (totalQuestions <= 1) return { totalQuestions, fraction: 0 };\n\n    // Show full bar on thanks card\n    if (cards[index]?.type === \"thanks\") {\n      return { totalQuestions, fraction: 1 };\n    }\n\n    const position = questionCards.findIndex((c) => c.name === focusedQuestionId);\n    const completed = position >= 0 ? position : 0;\n\n    return { totalQuestions, fraction: completed / totalQuestions };\n  }, [cards, index, focusedQuestionId]);\n\n  if (totalQuestions <= 1) return null;\n\n  return (\n    <div className=\"ul-progress-bar-container ul-progress-bar-container__header\">\n      <div\n        className=\"ul-progress-bar-current\"\n        style={{\n          width: `${fraction * 100}%`,\n          border: `1px solid ${border ?? \"#000\"}`,\n        }}\n      />\n    </div>\n  );\n};\n\nexport default ProgressBar;\n","import { useEffect, useRef, useMemo, useCallback } from \"react\";\n\nimport { PageCard } from \"./cards\";\nimport Footer from \"./footer\";\nimport { cc, getClasses, getPlatformClass } from \"./helpers/classes\";\nimport ProgressBar from \"./progressBar\";\nimport { useConfig } from \"./store\";\nimport { APP_ID, CssConstant } from \"../constants/css\";\nimport { SprigEvent } from \"../constants/sprigEvents\";\nimport { resetScrollPosition } from \"../helpers/document\";\nimport {\n  shouldDirectEmbed,\n  groupCards,\n  isLongFormSurvey,\n} from \"../helpers/general\";\nimport { ResponseData } from \"../types/config\";\n\nconst App = () => {\n  const {\n    answers,\n    border,\n    cards,\n    close,\n    configureExitOnOverlayClick,\n    destroy,\n    endCard,\n    eventEmitFn,\n    fontFamily,\n    headers,\n    index,\n    minScrollableHeight,\n    next,\n    previewMode,\n    productConfig,\n    seen,\n    showStripes,\n    studyType,\n    surveyId,\n    update,\n    useMobileStyling,\n    viewDocument,\n  } = useConfig((s) => ({\n    answers: s.answers,\n    border: s.border,\n    cards: s.cards,\n    close: s.close,\n    configureExitOnOverlayClick: s.configureExitOnOverlayClick,\n    destroy: s.destroy,\n    endCard: s.endCard,\n    eventEmitFn: s.eventEmitFn,\n    fontFamily: s.fontFamily,\n    headers: s.headers,\n    index: s.index,\n    previewMode: s.previewMode,\n    productConfig: s.productConfig,\n    minScrollableHeight: s.minScrollableHeight,\n    next: s.next,\n    seen: s.seen,\n    showStripes: s.showStripes,\n    studyType: s.studyType,\n    surveyId: s.surveyId,\n    update: s.update,\n    useMobileStyling: s.useMobileStyling,\n    viewDocument: s.viewDocument,\n  }));\n\n  const appRef = useRef<HTMLDivElement>(null);\n  const firedAppeared = useRef(false);\n  const platform = headers[\"userleap-platform\"];\n\n  const { props, type, name } = cards[index];\n\n  useEffect(() => {\n    if (!window.Sprig) return;\n    window.Sprig.trackHistory = (args) => {\n      return useConfig.getState().trackHistory(args);\n    };\n    return () => {\n      window.Sprig.trackHistory = undefined;\n    };\n  }, []);\n\n  useEffect(() => {\n    if (appRef.current) {\n      if (!appRef.current.classList.contains(\"ul-app--visible\")) {\n        appRef.current.classList.add(\"ul-app--visible\");\n      }\n      if (!firedAppeared.current && eventEmitFn) {\n        firedAppeared.current = true;\n        eventEmitFn(SprigEvent.SurveyAppeared, {\n          name: SprigEvent.SurveyAppeared,\n          \"survey.id\": surveyId,\n        });\n      }\n    }\n  }, [eventEmitFn, surveyId]);\n\n  useEffect(() => {\n    const handleVisibilityChange = () => {\n      if (viewDocument.visibilityState === \"visible\") {\n        seen();\n        viewDocument.removeEventListener(\n          \"visibilitychange\",\n          handleVisibilityChange,\n        );\n      }\n    };\n\n    viewDocument.addEventListener(\"visibilitychange\", handleVisibilityChange);\n    handleVisibilityChange();\n    return () => {\n      viewDocument.removeEventListener(\n        \"visibilitychange\",\n        handleVisibilityChange,\n      );\n    };\n  }, [seen, viewDocument]);\n\n  useEffect(() => {\n    update();\n  }, [index, update]);\n\n  useEffect(() => {\n    configureExitOnOverlayClick(() => close());\n  }, [close, configureExitOnOverlayClick]);\n\n  const groupedCards = useMemo(() => groupCards(cards, index), [cards, index]);\n\n  // nextFunction includes the normal next function with a completeSurvey\n  // routine to call when we are at the end of the survey\n  const nextFunction = useCallback(\n    (data: ResponseData | ResponseData[]) => {\n      next({\n        data,\n        completeSurvey: () => destroy(APP_ID),\n        endCard,\n      });\n      resetScrollPosition(viewDocument);\n    },\n    [next, destroy, endCard, viewDocument],\n  );\n  // for email surveys, skip to next question\n  if (answers) {\n    for (const answer of answers) {\n      if (answer.questionId === name) {\n        let data;\n        if (type === \"multiplechoice\") {\n          const option = props.options.find(\n            ({ value }) => value === answer.value,\n          );\n          if (!option) break;\n          data = { [option.id]: option.value };\n        } else {\n          data = answer.value;\n        }\n\n        nextFunction({ value: data, type, questionId: answer.questionId });\n        break;\n      }\n    }\n  }\n\n  const onClickUrl = (event: MouseEvent) => {\n    const api = window.sprigAPI;\n    const target = event.target as HTMLElement;\n    if (!api || !target) return;\n\n    const tagCheck = [target, target.parentElement];\n    for (const tag of tagCheck) {\n      if (tag?.tagName?.toLowerCase() === \"a\") {\n        event.preventDefault();\n        try {\n          // @ts-expect-error - href is not a property on HTMLElement\n          const url = new URL(tag.href);\n          // Only allow http/https protocols\n          if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n            api?.openUrl(url.toString());\n          }\n        } catch (e) {\n          console.error(e);\n        }\n        return;\n      }\n    }\n  };\n\n  const isStudyCenteredPosition =\n    !useMobileStyling &&\n    (productConfig?.framePosition === \"center\" ||\n      productConfig?.desktopDisplay === \"center-modal\" ||\n      (productConfig?.placement || \"\").includes(\"center\"));\n\n  return (\n    <div\n      className={cc(\n        \"ul-app\",\n        shouldDirectEmbed(headers) ? \"ul-app--visible\" : \"ul-app--overlay\",\n      )}\n      dir=\"auto\"\n      id={APP_ID}\n      onClick={onClickUrl}\n      ref={appRef}\n      style={{\n        \"--theme\": border,\n        ...(fontFamily ? { fontFamily: fontFamily.replace(\";\", \"\") } : {}),\n        ...(isStudyCenteredPosition ? { position: \"relative\" } : {}),\n      }}\n    >\n      <div className=\"ul-app__container\">\n        <div\n          className={cc(\n            getClasses(\n              \"ul-card__container\" satisfies CssConstant,\n              useMobileStyling,\n              studyType,\n            ),\n          )}\n          style={{\n            ...(studyType !== \"feedbackButton\" ||\n            productConfig?.desktopDisplay === \"center-modal\"\n              ? { borderColor: border }\n              : {}),\n            ...(productConfig?.desktopDisplay === \"slider\"\n              ? { margin: \"0px\" }\n              : {}),\n          }}\n        >\n          <div\n            className={\"sprig-container\" satisfies CssConstant}\n            style={{\n              minHeight: minScrollableHeight,\n            }}\n          >\n            {showStripes && (\n              <div className=\"ul-header__container\" dir=\"ltr\">\n                <div className=\"ul-header\">For development purposes only</div>\n              </div>\n            )}\n            {previewMode && (\n              <div className=\"ul-header__container\" dir=\"ltr\">\n                <div className=\"ul-header\">\n                  Preview Mode: Response will not be recorded.\n                </div>\n              </div>\n            )}\n            {isLongFormSurvey(studyType) && <ProgressBar />}\n            <div\n              className={cc(getPlatformClass(\"ul-card-main-content\", platform))}\n            >\n              <PageCard cards={groupedCards} next={nextFunction} />\n            </div>\n            {!isLongFormSurvey(studyType) && <Footer />}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default App;\n","import { v4 as uuid } from \"uuid\";\n\nimport { MediaType } from \"../../constants/sprigRecordingEvents\";\nimport { SprigEventEmitter, EventPayload } from \"../../helpers/eventEmitter\";\nimport { AppCard } from \"../../types/card\";\nimport { RecordedTaskResponseType } from \"../../view/cards/recordedTask/store\";\nimport { useConfig } from \"../../view/store\";\nimport { getNextCardIndex } from \"../helpers/skipLogicHelpers\";\n\ntype UuidDecoratedMediaRecorder = MediaRecorder & {\n  currentMediaRecordingUid?: UUID;\n};\n\n// media recorder state\ntype VideoFormat = \"video/webm\" | \"video/mp4\";\n\nconst createUploadUrl = async (body: unknown, uploadApiEndpoint: string) => {\n  const response = await fetch(uploadApiEndpoint, {\n    method: \"POST\",\n    cache: \"no-cache\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify(body),\n  });\n\n  if (response.ok) {\n    const uploadResponse = await response.json();\n    return uploadResponse?.upload?.url;\n  } else {\n    return null;\n  }\n};\n\nconst getSupportedMimeType = (): VideoFormat => {\n  return MediaRecorder.isTypeSupported(\"video/webm\")\n    ? \"video/webm\"\n    : \"video/mp4\";\n};\n\nconst createRecorder = (stream: MediaStream) => {\n  const recordingOptions = {\n    audioBitsPerSecond: 128000, //standard setting based on documentation's example\n    videoBitsPerSecond: 2500000,\n    mimeType: getSupportedMimeType(),\n  };\n  const recorder: UuidDecoratedMediaRecorder = new MediaRecorder(\n    stream,\n    recordingOptions,\n  );\n  return recorder;\n};\n\nconst startRecording = (\n  recorder: UuidDecoratedMediaRecorder,\n  mediaRecordingUid: UUID,\n  chunks: Record<string, Blob[]>,\n) => {\n  chunks[mediaRecordingUid] = [];\n  recorder.ondataavailable = function (e) {\n    chunks[mediaRecordingUid].push(e.data);\n  };\n  recorder.currentMediaRecordingUid = mediaRecordingUid;\n  recorder.start();\n};\n\nfunction stopRecorderAndUpload(\n  recorder: UuidDecoratedMediaRecorder,\n  uploadApiEndpoint: string,\n  mediaType: MediaType,\n  payload: EventPayload[\"finish.task\"],\n  UpChunk: Window[\"UpChunk\"],\n  chunkData: Blob[],\n) {\n  if (recorder && recorder.state !== \"inactive\") {\n    const { \"begin.callback\": beginCallback } = payload;\n    const uuid = recorder.currentMediaRecordingUid;\n    if (!uuid) return;\n    if (beginCallback) {\n      beginCallback(uuid);\n    }\n    recorder.onstop = () =>\n      createUpload(\n        uploadApiEndpoint,\n        recorder,\n        mediaType,\n        payload,\n        uuid,\n        UpChunk,\n        chunkData,\n      );\n    recorder.stop();\n  }\n}\n\nasync function createUpload(\n  uploadApiEndpoint: string,\n  recorder: UuidDecoratedMediaRecorder,\n  mediaType: MediaType,\n  payload: EventPayload[\"finish.task\"],\n  mediaRecordingUid: string,\n  UpChunk: Window[\"UpChunk\"],\n  chunkData: Blob[],\n) {\n  const viewDocument = useConfig.getState().viewDocument;\n\n  const {\n    \"upload.callback\": uploadCallback,\n    \"progress.callback\": progressCallback,\n  } = payload;\n  const body = {\n    mediaType,\n    updatedAt: new Date().toISOString(),\n    mediaRecordingUid,\n    ...payload[\"passthrough.data\"],\n  };\n  const url = await createUploadUrl(body, uploadApiEndpoint);\n  if (!url) {\n    uploadCallback &&\n      uploadCallback(null, { message: \"failed to get upload url\" });\n    return;\n  }\n  const blob = new Blob(chunkData, { type: getSupportedMimeType() });\n  if (!viewDocument.defaultView) {\n    return;\n  }\n  const file = new viewDocument.defaultView.File(\n    [blob],\n    `recording video ${Date.now()}`,\n  );\n\n  const upload = UpChunk.createUpload({\n    // endpoint computed from backend separately and hacked together\n    endpoint: url,\n    file,\n    chunkSize: 5120, // Uploads the file in ~5mb chunks\n  });\n\n  // subscribe to events\n  upload.on(\"error\", (err) => {\n    uploadCallback && uploadCallback(null, err);\n  });\n\n  upload.on(\"progress\", (progress) => {\n    progressCallback && progressCallback(mediaRecordingUid, progress);\n  });\n\n  upload.on(\"success\", () => {\n    uploadCallback && uploadCallback(mediaRecordingUid, true);\n  });\n}\n\ninterface RecorderState {\n  uploadApiEndpoint?: string;\n  avRecorder?: UuidDecoratedMediaRecorder;\n  screenRecorder?: UuidDecoratedMediaRecorder;\n  UpChunk?: Window[\"UpChunk\"];\n  avStream?: MediaStream;\n  captureStream?: MediaStream;\n  chunks: Record<string, Blob[]>;\n  startTime?: Date;\n  cards?: AppCard[];\n  hasEndCard?: boolean;\n}\n\nconst initialRecorderState: RecorderState = { chunks: {} };\n\nconst ULRecorder = {\n  state: { ...initialRecorderState },\n  stopRecording(payload: EventPayload[\"finish.task\"]) {\n    const { uploadApiEndpoint, avRecorder, screenRecorder, UpChunk } =\n      this.state;\n    const mediaType: MediaType =\n      this.state.avStream && this.state.avStream.getVideoTracks().length > 0\n        ? \"video\"\n        : \"audio\";\n    if (this.state.chunks && uploadApiEndpoint && UpChunk) {\n      if (avRecorder?.currentMediaRecordingUid) {\n        stopRecorderAndUpload(\n          avRecorder,\n          uploadApiEndpoint,\n          mediaType,\n          payload,\n          UpChunk,\n          this.state.chunks[avRecorder?.currentMediaRecordingUid],\n        );\n      }\n      if (screenRecorder?.currentMediaRecordingUid) {\n        stopRecorderAndUpload(\n          screenRecorder,\n          uploadApiEndpoint,\n          \"screen\",\n          payload,\n          UpChunk,\n          this.state.chunks[screenRecorder?.currentMediaRecordingUid],\n        );\n      }\n    }\n  },\n\n  handleCancelledStream(stream: MediaStream) {\n    const videoTracks = stream.getVideoTracks();\n    const audioTracks = stream.getAudioTracks();\n    let track = videoTracks.length && videoTracks[0];\n    track = track || (audioTracks.length && audioTracks[0]);\n    if (track) {\n      track.addEventListener(\"ended\", () => {\n        [this.state.avRecorder, this.state.screenRecorder].map((recorder) => {\n          if (recorder) {\n            recorder.state === \"recording\" && recorder.stop();\n            recorder.stream.getTracks().map((track) => {\n              track.readyState === \"live\" && track.stop();\n            });\n          }\n        });\n        Object.assign(this.state, {\n          avStream: null,\n          captureStream: null,\n          avRecorder: null,\n          screenRecorder: null,\n        });\n      });\n    }\n  },\n  taskDurationMillisecond() {\n    if (!this.state.startTime) return 0;\n    const currentTime = new Date();\n    return currentTime.getTime() - this.state.startTime.getTime();\n  },\n  setUpChunk(UpChunk: Window[\"UpChunk\"]) {\n    this.state.UpChunk = UpChunk;\n  },\n  configure(\n    eventEmitter: SprigEventEmitter,\n    initialState: Partial<RecorderState> & {\n      cards: AppCard[];\n      hasEndCard: boolean;\n      apiURL: string;\n    },\n  ) {\n    Object.assign(this.state, initialState); // options may be used to augment the settings for videos\n    this.state.uploadApiEndpoint = `${initialState.apiURL}/2/environments/integrations/upload`;\n    this.state.chunks = {};\n\n    // defining event listener callbacks into object to reference once stream is done\n    eventEmitter.on(\n      \"permission.status\",\n      this.permissionStatusCallback.bind(this),\n    );\n    eventEmitter.on(\"av.permission\", async (payload) => {\n      // handle request AV permission\n      this.avPermissionCallback(payload);\n    });\n    eventEmitter.on(\"begin.recording\", this.beginRecordingCallback.bind(this));\n    eventEmitter.on(\"start.task\", this.startTaskCallback.bind(this));\n    eventEmitter.on(\"screen.permission\", async (payload) => {\n      // handle request screen permission\n      this.screenPermissionCallback(payload);\n    });\n    eventEmitter.on(\"finish.task\", async (payload) => {\n      // handle stop recording due to various reasons\n      this.finishTaskCallback(payload);\n    });\n  },\n  async avPermissionCallback(payload: EventPayload[\"av.permission\"]) {\n    const {\n      \"stream.ready\": streamReady,\n      \"permission.descriptors\": permissionDescriptors,\n    } = payload;\n    try {\n      if (this.state.avStream?.active) {\n        // stop previous stream before opening a new one\n        this.state.avStream\n          .getTracks()\n          .map((track) => track.readyState === \"live\" && track.stop());\n\n        // remove track from capture stream and add it back again after getting new user media object below\n        this.state.captureStream?.getAudioTracks().length === 1 &&\n          this.state.captureStream.removeTrack(\n            this.state.captureStream.getAudioTracks()[0],\n          );\n      }\n\n      this.state.avStream = await navigator.mediaDevices.getUserMedia({\n        video: permissionDescriptors.includes(\"camera\"),\n        audio: true,\n      });\n\n      this.state.captureStream?.getAudioTracks().length === 0 &&\n        this.state.captureStream.addTrack(\n          this.state.avStream.getAudioTracks()[0],\n        );\n\n      this.handleCancelledStream(this.state.avStream);\n    } catch (err) {\n      console.warn(\"Error: failed to get permissions: \" + err);\n      streamReady && streamReady(null, null);\n      return;\n    }\n    streamReady && streamReady(this.state.avStream, this.state.captureStream);\n  },\n  async screenPermissionCallback(payload: EventPayload[\"screen.permission\"]) {\n    const {\n      \"screen.permission.requested\": setIsRequestingPermission,\n      \"stream.ready.callback\": streamReady,\n    } = payload;\n    setIsRequestingPermission?.(true);\n    try {\n      this.state.captureStream = await navigator.mediaDevices.getDisplayMedia({\n        video: true,\n        cursor: \"always\",\n        displaySurface: \"browser\",\n        preferCurrentTab: true,\n      } as MediaStreamConstraints); //typings do not support the cursor property\n    } catch (err) {\n      setIsRequestingPermission?.(false);\n      console.warn(\"Error: failed to get permissions: \" + err);\n      streamReady && streamReady(null, null);\n      return;\n    }\n    setIsRequestingPermission?.(false);\n    this.state.avStream &&\n      this.state.avStream.getAudioTracks().length > 0 &&\n      this.state.captureStream.addTrack(\n        this.state.avStream.getAudioTracks()[0],\n      );\n    this.handleCancelledStream(this.state.captureStream);\n    streamReady &&\n      streamReady(this.state.avStream || null, this.state.captureStream);\n  },\n  beginRecordingCallback(payload: EventPayload[\"begin.recording\"]) {\n    const {\n      \"recording.media.types\": mediaTypes,\n      \"start.recording.callback\": startRecordingCallback = () => {},\n    } = payload;\n    if (!mediaTypes) return;\n    const mediaRecordingUids = [];\n    if (mediaTypes.includes(\"video\") && this.state.avStream) {\n      // only need to record video if video is specified\n      this.state.avRecorder = createRecorder(this.state.avStream);\n      const mediaRecordingUid = uuid();\n      startRecording(\n        this.state.avRecorder,\n        mediaRecordingUid,\n        this.state.chunks,\n      );\n      mediaRecordingUids.push(mediaRecordingUid);\n    }\n    if (mediaTypes.includes(\"screen\") && this.state.captureStream) {\n      this.state.screenRecorder = createRecorder(this.state.captureStream);\n      const mediaRecordingUid = uuid();\n      startRecording(\n        this.state.screenRecorder,\n        mediaRecordingUid,\n        this.state.chunks,\n      );\n      mediaRecordingUids.push(mediaRecordingUid);\n    }\n    mediaRecordingUids &&\n      startRecordingCallback &&\n      startRecordingCallback(mediaRecordingUids);\n  },\n  async finishTaskCallback(payload: EventPayload[\"finish.task\"]) {\n    const {\n      \"current.index\": currentIndex,\n      \"task.response\": response,\n      \"task.complete.callback\": taskCompleteCallback,\n    } = payload;\n    await this.stopRecording(payload);\n    taskCompleteCallback &&\n      taskCompleteCallback(this.taskDurationMillisecond());\n    this.state.cards &&\n      this.state.hasEndCard !== undefined &&\n      this.lookAheadAndStopStream(\n        currentIndex,\n        response,\n        this.state.cards,\n        this.state.hasEndCard,\n      );\n  },\n  startTaskCallback() {\n    this.state.startTime = new Date();\n  },\n  permissionStatusCallback(payload: EventPayload[\"permission.status\"]) {\n    const { [\"permission.status.callback\"]: permissionStatusCallback } =\n      payload;\n    const avStream = this.state.avStream;\n    permissionStatusCallback &&\n      permissionStatusCallback(\n        avStream,\n        avStream ? avStream?.getVideoTracks().length > 0 : false,\n        !!this.state.captureStream?.active,\n        this.state.captureStream,\n      );\n  },\n  lookAheadAndStopStream(\n    currentIndex: number,\n    response: RecordedTaskResponseType,\n    cards: AppCard[],\n    hasEndCard: boolean,\n  ) {\n    // we don't have access to uploadProgress, but we don't need to pass it into getNextCardIndex\n    // because uploadProgress is only used if currentIndex is the last question index\n    // (in which case there's no recorded task after this question anyway)\n    // TODO we need to revisit this scenario when we refactor skip logic to display logic.. quite buggy here..\n    const { avRecorder, screenRecorder } = this.state;\n    const { allResponses } = useConfig.getState();\n    const nextCardIndex = getNextCardIndex({\n      cards: cards,\n      index: currentIndex,\n      hasEndCard: hasEndCard,\n      allResponses,\n    });\n    if (\n      nextCardIndex !== null &&\n      cards[nextCardIndex].type === \"recordedtask\"\n    ) {\n      // if the next card is a recorded task then don't stop the stream\n      return;\n    }\n    // stops the active stream because the next question is not a recorded question\n    [avRecorder, screenRecorder].map((recorder) => {\n      if (recorder) {\n        recorder.state === \"recording\" && recorder.stop();\n        recorder.stream.getTracks().map((track) => {\n          track.readyState === \"live\" && track.stop();\n        });\n      }\n    });\n  },\n};\n\nconst instance = Object.create(ULRecorder);\nObject.freeze(instance);\nexport default instance;\n","import { render } from \"preact\";\n\nimport App from \"./app\";\nimport { useConfig } from \"./store\";\nimport css from \"./styles/index.css?inline\";\nimport { SprigEvent } from \"../constants/sprigEvents\";\nimport { setSurveyStyles } from \"../helpers/document\";\nimport eventEmitter from \"../helpers/eventEmitter\";\nimport { shouldDirectEmbed } from \"../helpers/general\";\nimport { AppCard, Card, CardType } from \"../types/card\";\nimport { Config } from \"../types/config\";\nimport recorder from \"../view/recorder/recorder\";\nimport { unmountComponentAtNode } from \"preact/compat\";\n\nconst addNonQuestionCards = (initialCards: Card[], hasEndCard: boolean) => {\n  const cards: AppCard[] = [...initialCards];\n  const uploadSet = new Set<CardType>([\"videovoice\", \"recordedtask\"]);\n\n  if (initialCards.some((card) => uploadSet.has(card.type))) {\n    cards.push({\n      name: -2,\n      props: {\n        routingOptions: [],\n      },\n      type: \"uploading\",\n    });\n  }\n\n  if (hasEndCard) {\n    cards.push({\n      name: -1,\n      props: {\n        routingOptions: [],\n      },\n      type: \"thanks\",\n    });\n  }\n\n  return cards;\n};\n\nconst getUserMeta = ({\n  mode = null,\n  viewWindow,\n  viewDocument,\n  trackPageViewUrl,\n}: {\n  mode: Config[\"mode\"] | null;\n  viewWindow: Config[\"viewWindow\"];\n  viewDocument: Config[\"viewDocument\"];\n  trackPageViewUrl: Config[\"trackPageViewUrl\"];\n}) => {\n  const pde = viewDocument.documentElement;\n  let parentHref: string;\n  try {\n    parentHref = viewWindow.parent.location.href;\n  } catch (err) {\n    // Calling parent throws if inside cross-origin iframe (CORS)\n    parentHref = viewWindow.location.href;\n  }\n  return {\n    mode,\n    sw: viewWindow.screen.width,\n    sh: viewWindow.screen.height,\n    cw: pde.clientWidth,\n    ch: pde.clientHeight,\n    p: trackPageViewUrl ?? parentHref,\n    l: viewWindow.navigator.language,\n  };\n};\n\nfunction configure(config: Window[\"__cfg\"], shouldRender = true) {\n  const {\n    answers,\n    apiURL,\n    endCard,\n    eventEmitFn,\n    fontFamilyURL,\n    frame,\n    previewKey,\n    viewDocument,\n    viewWindow,\n  } = config;\n  const container = shouldDirectEmbed(config.headers)\n    ? config.frame\n    : viewDocument.body;\n  const UpChunk = config.UpChunk || window.UpChunk;\n  const recorderEventEmitter = eventEmitter;\n\n  const updatedCards = addNonQuestionCards(config.cards, !!endCard);\n  recorder.configure(recorderEventEmitter, {\n    cards: updatedCards,\n    hasEndCard: !!endCard,\n    apiURL,\n    UpChunk,\n  });\n  // load store / context\n  useConfig.setState({\n    apiURL,\n    answers,\n    border: config.border,\n    index: config.startingQuestionIdx || 0,\n    cards: updatedCards,\n    configureExitOnOverlayClick: config.configureExitOnOverlayClick,\n    customMetadata: config.customMetadata,\n    endCard: config.endCard,\n    envId: config.envId,\n    eventEmitFn,\n    fontFamily: config.fontFamily,\n    forceBrandedLogo: config.forceBrandedLogo,\n    frame,\n    headers: config.headers,\n    hasViewedEmbed: false,\n    isPreview: config.isPreview,\n    marketingUrl: \"https://sprig.com\",\n    meta: getUserMeta({\n      mode: config.mode,\n      viewWindow,\n      viewDocument,\n      trackPageViewUrl: config.trackPageViewUrl,\n    }),\n    mode: config.mode,\n    previewKey,\n    previewMode: config.previewMode,\n    productConfig: config.productConfig,\n    recorder,\n    recorderEventEmitter,\n    responseGroupUid: config.responseGroupUid,\n    showStripes: config.showStripes,\n    showSurveyBrand: config.showSurveyBrand,\n    slugName: config.slugName,\n    styleNonce: config.styleNonce,\n    studyType: config.studyType,\n    surveyId: config.surveyId,\n    tabTitle: config.tabTitle,\n    uploadingCardViewed: false,\n    uploadProgress: {},\n    useMobileStyling: config.useMobileStyling,\n    useDesktopPrototype: config.useDesktopPrototype,\n    userId: config.userId,\n    viewDocument: config.viewDocument,\n    visitorAttributes: config.visitorAttributes,\n    viewedCardCount: config.startingQuestionIdx || 0,\n  });\n\n  const { head } = viewDocument;\n\n  // Inject default Sprig styles\n  setSurveyStyles({\n    document: viewDocument,\n    elementId: \"sprig-style\",\n    styleString: css,\n  });\n\n  // I imagine you already have unsafe-inline turned on for style-src in CSP\n  if (config.customStyles) {\n    setSurveyStyles({\n      document: viewDocument,\n      elementId: \"ul-custom-style\",\n      styleString: config.customStyles,\n      nonce: config.styleNonce,\n    });\n  }\n\n  // Inject brand fonts\n  if (config.fontFamily && fontFamilyURL && parent) {\n    // parent comes from the DOM\n    const links = viewDocument.createElement(\"link\");\n    links.rel = \"stylesheet\";\n    links.href = fontFamilyURL;\n    head.appendChild(links);\n  }\n\n  if (!__NPM_BUNDLED___ && !UpChunk) {\n    const hasRecordedTaskCard = config.cards.some(\n      (card) => card.type === \"recordedtask\",\n    );\n    if (hasRecordedTaskCard) {\n      const hostedUpChunk = viewDocument.createElement(\"script\");\n      hostedUpChunk.src =\n        config.upchunkLibraryURL ??\n        \"https://cdn.sprig.com/userleap-web-upchunk-v2.2.2.js\";\n      hostedUpChunk.onload = () => {\n        recorder.setUpChunk(viewWindow.UpChunk);\n      };\n      hostedUpChunk.onerror = () => {\n        console.warn(\n          \"[Sprig] - recording functionality not configured due to UpChunk library load failure\",\n        );\n      };\n      head.appendChild(hostedUpChunk);\n    }\n  }\n\n  const viewSdkVersion = __SDK_VERSION__;\n  const backwardCompatibleEventEmitterFn =\n    eventEmitFn || frame.eventEmitter?.emit;\n  backwardCompatibleEventEmitterFn?.(\"verify.view.version\", {\n    \"view.version\": viewSdkVersion,\n  });\n\n  if (container && shouldRender) {\n    render(<App />, container);\n    eventEmitter.once(SprigEvent.SurveyClosed, () => {\n      unmountComponentAtNode(container);\n    });\n  }\n}\n\nexport default { configure };\n"],"names":["n","l","u","i","o","r","f","e","c","s","a","h","Array","isArray","v","p","parentNode","removeChild","y","t","arguments","length","children","call","defaultProps","d","type","props","key","ref","__k","__","__b","__e","__d","__c","constructor","__v","__i","__u","vnode","_","current","g","b","this","context","m","k","base","w","push","x","__r","debounceRendering","sort","shift","__P","L","__n","ownerSVGElement","M","C","String","H","N","z","S","nextSibling","insertBefore","$","some","I","setProperty","test","T","style","cssText","replace","toLowerCase","slice","Date","now","addEventListener","D","A","removeEventListener","removeAttribute","setAttribute","event","P","contextType","value","__E","prototype","render","O","sub","state","__h","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","forEach","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","indexOf","j","diffed","localName","nodeType","document","createTextNode","createElementNS","createElement","is","data","childNodes","attributes","name","__html","innerHTML","unmount","componentWillUnmount","q","firstChild","B","E","F","Consumer","Provider","splice","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","Promise","then","bind","resolve","setTimeout","__source","__self","__H","__V","__N","filter","every","concat","useDebugValue","V","__m","requestAnimationFrame","clearTimeout","cancelAnimationFrame","displayName","isReactComponent","__f","isPureReactComponent","R","Symbol","for","$$typeof","map","count","only","toArray","appendChild","U","__a","default","__R","__O","pop","fallback","delete","revealOrder","size","W","containerInfo","get","Map","reverse","set","Z","Y","textContent","G","Object","defineProperty","configurable","writable","J","K","Q","cancelBubble","X","defaultPrevented","persist","isPropagationStopped","isDefaultPrevented","nativeEvent","nn","tn","enumerable","class","en","multiple","selected","defaultValue","className","rn","un","on","ReactCurrentDispatcher","readContext","cn","fn","an","sn","apply","hn","vn","dn","pn","mn","yn","_n","bn","Sn","gn","Cn","En","wn","useState","useId","useReducer","useEffect","useLayoutEffect","useInsertionEffect","useTransition","useDeferredValue","useSyncExternalStore","startTransition","useRef","useImperativeHandle","useMemo","useCallback","useContext","version","Children","hydrate","unmountComponentAtNode","createPortal","createContext","createFactory","cloneElement","createRef","Fragment","isValidElement","isElement","isFragment","findDOMNode","Component","PureComponent","memo","forwardRef","flushSync","unstable_batchedUpdates","StrictMode","Suspense","SuspenseList","lazy","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createStoreImpl","createState","listeners","Set","partial","nextState","previousState","assign","listener","getState","api","subscribe","add","destroy","clear","shimModule","exports","require$$0","getSnapshot","window","inst","useSyncExternalStoreShim_production_min","withSelectorModule","require$$1","withSelector_production_min","useSyncExternalStoreWithSelector","hasValue","useSyncExternalStoreExports","createImpl","useBoundStore","selector","equalityFn","getServerState","create","BOOLEAN_OPERATOR","comparators","eq","gt","gte","lt","lte","list_exact","join","list_all","val","transformA","aSet","has","setA","aLower","bLower","includes","contains","getHasValidAnswer","response","routingValue","Boolean","keys","taskStatus","values","getHasPartialAnswer","numRows","numAnswered","getNextCardIndex","cards","index","hasEndCard","allResponses","uploadProgress","card","nextIndex","routingOptions","group","target","questionIndex","matches","evaluateRule","comparator","op","rule","ruleMatches","uploadCardIndex","findIndex","lastQuestionIndex","isSubmitted","isComplete","submitted","Number","isInteger","mediaRecordingUid","skipped","generatePossibleSelectedValues","options","option","array","allowEmpty","properties","required","reduce","subsets","arr","possibleValues","matrixColumns","matrixColumn","matrixRows","emptyResponse","prevMap","id","range","from","res","hasComparator","hasTaskStatus","getFlattenRoutingOption","acc","flattenGroup","item","NON_QUESTION_SET","useConfig","answers","apiURL","border","close","async","APP_ID","app","fadeout","remove","trackHistory","studyType","skipWriteForAction","logger","breadcrumbsLogger","info","surveyId","ConflictingWidgets","enable","initiator","DismissReason","Closed","configureExitOnOverlayClick","customMetadata","eventEmitFn","Complete","endCard","headline","envId","eventEmitter","emit","headers","viewDocument","shouldDirectEmbed","SprigEvent","SurveyFadingOut","el","getElementById","classList","forceBrandedLogo","frame","handleClickEmbedButton","buttonEventName","qid","hasViewedEmbed","handleUploadUpdate","progressPct","newISComplete","newProgress","uploadComplete","entries","mRUid","uploadingCardViewed","Authorization","isPreview","marketingUrl","meta","ch","cw","mode","sh","sw","next","params","responseGroupUid","submit","viewedCardCount","minScrollableHeight","responses","answeredAt","newCards","submission","routingTarget","newResponses","rawResponse","rest","isQuestionCard","find","accumulator","completedAt","completeSurvey","finally","newCard","pendingRemoveIframeReason","previewKey","previewMode","recorder","recorderEventEmitter","resolveTrackedPromise","removeIframeIfReady","unresolvedRequestCount","SurveyCloseRequested","SurveyWillClose","seen","isNew","slugName","showStripes","showSurveyBrand","styleNonce","payload","result","trackPromise","sprigFetch","userId","body","JSON","stringify","method","ok","resp","QuestionAnswered","reportError","console","warn","error","tabTitle","overrideIndex","currentIndex","hist","sid","action","vid","eid","nextCard","groupId","promise","catch","err","update","useMobileStyling","isWeb","directEmbed","isTableMatrixCard","displayMatrixAsAccordion","setWidth","DEFAULT_WIDTH_PX","height","width","minHeight","calculateFrameDimensions","SurveyHeight","contentFrameHeight","SurveyWidth","contentFrameWidth","setHeight","useDesktopPrototype","focusedQuestionId","setFocusedQuestionId","pde","documentElement","screenWidth","screen","screenHeight","clientWidth","clientHeight","location","href","language","navigator","message","stack","btoa","SvgCaret","React.createElement","fill","viewBox","xmlns","stroke","strokeLinecap","strokeLinejoin","strokeWidth","SvgCheckmark","Checkmark","visible","jsx","opacity","CheckSvg","ANIMATION_DURATION","Accordion","animate","header","isOpen","onClick","showHeaderCheck","wrapperRef","transition","setTransition","isInitialRender","setIsInitialRender","rect","getBoundingClientRect","jsxs","Caret","transitionDuration","transform","Arrow","cc","args","getClasses","baseClass","suffix","getPlatformClass","platform","Button","useIsCardScrollable","isScrollable","setIsScrollable","querySelector","observer","ResizeObserver","isHTMLElement","scrollHeight","offsetHeight","observe","disconnect","RichOrPlainTextLabel","plainText","richText","isHeader","dangerouslySetInnerHTML","CloseButton","steps","closeApp","onKeyPress","role","tabIndex","Header","caption","captionText","questionHtml","captionHtml","CheckMark","LongformSubmitButton","isSubmitDisabled","handleSubmit","disabled","ViewEmbedButton","buttonText","handleClick","MobileEmbedView","defaultBody","embeddedType","hasEmbed","conceptUrl","consentDocument","url","isMobileEmbedViewportWidth","innerWidth","EMBED_MOBILE_MAX_WIDTH","handleEmbedButtonClick","preventDefault","viewDocumentText","Checkbox","isSelected","divId","themeColor","backgroundColor","borderColor","boxShadow","useAutoSize","textAreaRef","sizeUpdate","heightRef","elem","totalHeight","maxHeight","parseInt","getComputedStyle","getPropertyValue","Option","ariaLabel","choiceStyle","label","text","isRadio","allowTextEntry","noneOfTheAbove","promptText","onUserInputChanged","isActive","setIsActive","createStyles","onStateUpdated","userText","onClickEvent","stopPropagation","onActive","onInactive","clickArgs","onTouchStart","onTouchCancel","onTouchEnd","onMouseDown","onMouseLeave","conditionalSelectedStyles","SELECT_ACTIVE_STYLE_CLASS","additionalContainerStyles","SELECT_ERROR_STYLE_CLASS","optionLabel","ERROR_BORDER_COLOR","htmlFor","TextEntryBox","onTextChange","textValue","inputRef","autosize","focus","maxLength","onChange","currentTarget","placeholder","rows","SELECT_STYLE_ELEM_ID","nonce","selectStyle","elementCreated","tagName","getSelectStyle","head","QuestionBodyWrapper","QuestionBodyFooterContainer","Logo","logoOnly","alt","display","fillOpacity","SprigBrandLogo","marketingUrlLink","marginTop","marginBottom","rel","margin","ThankYouLink","dir","marginInlineStart","verticalAlign","getButtonText","getSkipButtonText","skipButtonText","buildMarketingUrl","ConsentLegalCard","questionId","isLongFormSurvey","longFormSurveyCheck","isConsentSelected","setIsConsentSelected","setName","hasValidationError","setHasValidationError","isLongFormQuestionFocused","collectName","nameLabelText","consentText","submitButtonText","isNamePresent","trim","isSubmitEnabled","handleNameChange","setActiveBorder","setDefaultBorder","DEFAULT_BORDER_COLOR","footer","onBlur","onFocus","onInput","richTextBody","getModifiedIconSvg","icon","scaleLabelType","selectedValue","LikertOption","activeValue","isPressed","onSubmit","setSelectedValue","setActiveValue","setIsPressed","isNumber","isStar","isSmiley","isNumberActive","activeColor","activeOpacity","buttonStyles","baseStyles","zIndex","color","onKeyDown","buttons","querySelectorAll","onPointerDown","onPointerEnter","onPointerLeave","LikertCard","labels","leftLabel","left","rightLabel","right","scaleRange","ratingIcons","questionRange","getIcon","svg","nums","handleSkipped","findScrollable","parentElement","getVerticalMargin","HTMLElement","parseFloat","borderTopWidth","borderBottomWidth","MatrixAccordionView","columns","onSelect","selectedOptions","refs","firstUnansweredIndex","focusedIndex","setFocusedIndex","select","column","nextOption","accordionRef","firstElementChild","scrollableParent","headerElem","heightToScroll","scrollTo","offsetTop","renderAccordion","idx","isFocused","UserLeap","isMobileSDK","paddingTop","col","MatrixTableView","numColumns","matrixContainerRef","showGradient","setShowGradient","Math","round","contentRect","scrollWidth","unobserve","onScroll","abs","scrollLeft","checkCompletelyScrolled","background","padding","scrollTarget","isRTL","direction","MatrixCard","showIndividualSubmit","onSubmitButtonClick","isRequired","optionSelectedMap","optionsMap","setOptionSelectedMap","setSelectedState","rowId","colValue","prev","isAccordionDisplay","DropdownPanel","selectItem","showCheckbox","doc","ev","Select","isMultiSelect","multiselectText","placeholderText","setIsOpen","toggleOpen","handleClickOutside","parent","placeholderStyles","isNoneOfTheAboveSelected","optionProperties","BaseMultiChoiceCard","noneOfTheAboveOption","opt","isTextEmpty","allowsTextEntry","isTextOptionSelectedWithoutTextEntered","isTextEntryOptionSelected","shouldShowSubmitButton","choices","idKey","newState","selectedRequiresText","submitEnabled","isDropdown","dropdownMultiselectedText","items","dropdownPlaceholderText","SingleSelectCard","optionMap","isValidToSubmit","selectedEntry","selectedId","selectedState","selectedOption","secondaryValue","MultiSelectCard","valueToSubmit","selectedMap","textMap","newMap","NPSCard","OpenTextCard","setValue","textRef","blur","trimmedValue","handleChange","targetVal","isValid","openTextPlaceholder","handleFocus","footerHtml","questionsRequireSubmit","DisplayQuestion","cardInstance","moveToNextQuestion","submitQuestion","updateCardValues","hasSubmitButton","baseProps","cardComponent","MultipleChoiceSingleSelectCard","MultipleChoiceMultipleSelectCard","RecordedTask","TextUrlPromptCard","ThanksCard","UploadingCard","LongFormQuestionsFooter","isCurrentlyThankYouCard","PageCard","cardValues","setCardValues","questionHasValidState","setQuestionHasValidState","listRef","isScrollingProgrammatically","expectedFocusFromManualScroll","scrollToFocusedQuestion","scrollContainer","closest","elRect","containerRect","elRelativeTop","top","scrollTop","elCenter","thresholdHeight","innerHeight","targetScrollTop","containerHeight","maxScrollTop","clampedScrollTop","max","min","behavior","handleScroll","cardElements","scrollContainerRect","centerY","closestIndex","closestDistance","Infinity","cardElement","cardRect","cardCenterY","distance","closestQuestion","passive","canSubmit","initialValues","currentQuestionId","nextQuestionId","shouldAutoAdvanceFocus","cardType","isThanksCard","orderedValues","AvStreamStatus","isPermissionTaskPage","page","isScreenTaskPage","getAvStreamRequestStatus","avstream","permissionDescriptors","getVideoTracks","initialState","avStream","currentPage","mediaRecordingUids","nextQuestion","passthroughData","recordingMediaTypes","screenPermissionRequested","useRecordedTaskStore","reset","updatePage","requestAVPermissions","pages","existingAvStream","captureStream","destinationPage","currentPageIndex","nextPageTarget","active","completeTask","status","responseValues","detail","taskDurationMillisecond","nextPage","setIsRequestingPermission","PERMISSION_GRAPHICS_CONTAINER","PERMISSION_BODY","PERMISSION_GRAPHICS_CLASSES","BUTTON_CONTAINER_CLASSES_LEFT","RichTextCaption","SkipButton","bottom","ListenForFailedStreams","hasAVMedia","interval","setInterval","clearInterval","StartTaskPageContent","content","taskDetail","CompleteTaskPageContent","finishTaskButtonViewPrototypeWrapper","ScreenPermissionPageContent","isRequestingPermission","selectTabText","AVPermissionRequestPageContent","AVPermissionFailurePageContent","permissionDeniedHeadline","permissionDeniedBody","tryAgainButtonText","permissionPage","StreamVideo","stream","autoPlay","muted","video","srcObject","AVPermissionGrantedPageContent","PageContent","permissionStatus","RecordedTaskCard","appStore","store","visitorId","hasVideoPermission","hasScreenPermission","audioPermissionRequired","videoPermissionRequired","permissionRequestStatus","permissionDeniedCaptionText","permissionGrantedHeadline","permissionGrantedCaptionText","ATTRIBUTE_URL_TO_PROPERTY_MAP","visitorAttributes","handleLinkButtonTap","handleKeyPressLinkButton","rawUrl","testUrl","URL","protocol","attributedUrl","unmatchedUrlTags","urlKey","propertyKey","regex","RegExp","baseUrl","filteredQueryParams","split","str","queryParam","buttonUrl","plaintextBody","line","subheader","clipRule","fillRule","uploadProgressPct","Footer","progressRef","questionSteps","step","maxRemainingCards","invalidCardTypes","filteredCards","cache","possibleSelectedValues","routingOptionIndex","newPossibleSelectedValues","isValueValid","isPartial","paddedViewedCardCount","fractionCompleted","ProgressBar","totalQuestions","fraction","questionCards","position","App","fontFamily","productConfig","appRef","firedAppeared","Sprig","SurveyAppeared","handleVisibilityChange","visibilityState","groupedCards","groupCards","nextFunction","resetScrollPosition","answer","isStudyCenteredPosition","framePosition","desktopDisplay","placement","sprigAPI","tagCheck","tag","openUrl","toString","getSupportedMimeType","MediaRecorder","isTypeSupported","createRecorder","recordingOptions","audioBitsPerSecond","videoBitsPerSecond","mimeType","startRecording","chunks","ondataavailable","currentMediaRecordingUid","start","stopRecorderAndUpload","uploadApiEndpoint","mediaType","UpChunk","chunkData","beginCallback","uuid","onstop","uploadCallback","progressCallback","updatedAt","toISOString","fetch","uploadResponse","json","upload","blob","Blob","defaultView","file","File","createUpload","endpoint","chunkSize","progress","stop","ULRecorder","avRecorder","screenRecorder","videoTracks","audioTracks","getAudioTracks","track","getTracks","readyState","startTime","getTime","permissionStatusCallback","avPermissionCallback","beginRecordingCallback","startTaskCallback","screenPermissionCallback","finishTaskCallback","streamReady","removeTrack","mediaDevices","getUserMedia","audio","addTrack","handleCancelledStream","getDisplayMedia","cursor","displaySurface","preferCurrentTab","mediaTypes","startRecordingCallback","taskCompleteCallback","stopRecording","lookAheadAndStopStream","nextCardIndex","instance","freeze","getUserMeta","viewWindow","trackPageViewUrl","parentHref","view","configure","config","shouldRender","fontFamilyURL","container","updatedCards","initialCards","uploadSet","startingQuestionIdx","setSurveyStyles","elementId","styleString","customStyles","links","backwardCompatibleEventEmitterFn","once","SurveyClosed"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}