@sprig-technologies/sprig-bundled 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index-_6NzDQiF.js → index-BnOajwL7.js} +3096 -3699
- package/dist/index-BnOajwL7.js.map +1 -0
- package/dist/index-MkVSshrN.cjs +67 -0
- package/dist/index-MkVSshrN.cjs.map +1 -0
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +41 -6
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -0
- package/dist/view-UeZsENA_.js +1960 -0
- package/dist/view-UeZsENA_.js.map +1 -0
- package/dist/view-VQ3LPBC1.cjs +13 -0
- package/dist/view-VQ3LPBC1.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/index-CY2H9MX9.cjs +0 -66
- package/dist/view-C4MmvYWa.cjs +0 -12
- package/dist/view-IAeZSBGR.js +0 -1916
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-UeZsENA_.js","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=\""\";break;case 38:f=\"&\";break;case 60:f=\"<\";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","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","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]}
|