@explorer02/cfm-survey-sdk 0.2.1 → 0.2.2

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.
Files changed (88) hide show
  1. package/dist/cli/index.js +18 -18
  2. package/dist/cli/index.mjs +14 -14
  3. package/dist/index.d.mts +465 -580
  4. package/dist/index.d.ts +465 -580
  5. package/dist/index.js +1 -1
  6. package/dist/index.mjs +1 -1
  7. package/package.json +6 -4
  8. package/postinstall.js +96 -69
  9. package/templates/AGENT.md +14 -8
  10. package/templates/docs/00-integration/answer-logic-and-navigation.md +50 -0
  11. package/templates/docs/00-integration/aws-deploy.md +281 -0
  12. package/templates/docs/00-integration/client-integration-guide.md +351 -0
  13. package/templates/docs/00-integration/component-checklist.md +45 -22
  14. package/templates/docs/00-integration/constraints.md +49 -4
  15. package/templates/docs/00-integration/custom-field-logic-and-navigation.md +174 -0
  16. package/templates/docs/00-integration/display-logic-and-navigation.md +49 -0
  17. package/templates/docs/00-integration/end-page-logic.md +64 -0
  18. package/templates/docs/00-integration/partial-save-and-recovery.md +74 -0
  19. package/templates/docs/00-integration/placeholders-and-tokens.md +116 -0
  20. package/templates/docs/00-integration/progress.md +61 -0
  21. package/templates/docs/00-integration/question-display-variants.md +65 -0
  22. package/templates/docs/00-integration/question-numbering.md +51 -0
  23. package/templates/docs/00-integration/question-type-sdk-matrix.md +242 -0
  24. package/templates/docs/00-integration/setup.md +84 -0
  25. package/templates/docs/00-integration/skip-logic-and-navigation.md +80 -0
  26. package/templates/docs/00-integration/survey-lifecycle-analytics.md +94 -0
  27. package/templates/docs/00-integration/useSurveySDK.md +151 -23
  28. package/templates/docs/01-components/01-survey-page.md +76 -54
  29. package/templates/docs/01-components/02-question.md +61 -58
  30. package/templates/docs/01-components/03-rating-scale.md +11 -1
  31. package/templates/docs/01-components/04-star-rating-scale.md +45 -0
  32. package/templates/docs/01-components/05-csat-matrix-scale.md +20 -11
  33. package/templates/docs/01-components/06-likert-matrix-scale.md +12 -3
  34. package/templates/docs/01-components/07-slider-matrix-scale.md +11 -2
  35. package/templates/docs/01-components/08-file-upload-scale.md +10 -1
  36. package/templates/docs/01-components/09-custom-slider-track.md +2 -2
  37. package/templates/docs/01-components/11-progress-bar.md +10 -4
  38. package/templates/docs/01-components/13-matrix-dropdown.md +3 -1
  39. package/templates/docs/01-components/14-intro-page.md +34 -0
  40. package/templates/docs/01-components/15-end-page.md +31 -0
  41. package/templates/docs/01-components/16-paused-page.md +27 -0
  42. package/templates/docs/01-components/17-heatmap-scale.md +75 -0
  43. package/templates/docs/01-components/18-rank-order-scale.md +100 -0
  44. package/templates/docs/01-components/README.md +42 -36
  45. package/templates/docs/02-reference/config-field-index.md +141 -139
  46. package/templates/docs/02-reference/exports.md +149 -0
  47. package/templates/docs/02-reference/question-types/01-rating.md +31 -32
  48. package/templates/docs/02-reference/question-types/04-csat.md +51 -42
  49. package/templates/docs/02-reference/question-types/05-rating-scale.md +16 -11
  50. package/templates/docs/02-reference/question-types/06-slider.md +2 -2
  51. package/templates/docs/02-reference/question-types/07-matrix-cfm.md +44 -30
  52. package/templates/docs/02-reference/question-types/08-matrix-csat.md +4 -26
  53. package/templates/docs/02-reference/question-types/09-matrix-rating.md +29 -13
  54. package/templates/docs/02-reference/question-types/10-slider-matrix.md +15 -4
  55. package/templates/docs/02-reference/question-types/11-file-upload.md +13 -2
  56. package/templates/docs/02-reference/question-types/12-heatmap.md +59 -0
  57. package/templates/docs/02-reference/question-types/13-rank-order.md +101 -0
  58. package/templates/docs/02-reference/question-types/README.md +86 -47
  59. package/templates/docs/02-reference/routing-table.md +33 -18
  60. package/templates/docs/02-reference/value-derivation.md +63 -0
  61. package/templates/docs/03-ui-specs/00-question-shell.md +19 -88
  62. package/templates/docs/03-ui-specs/01-rating.md +12 -54
  63. package/templates/docs/03-ui-specs/02-radio.md +21 -33
  64. package/templates/docs/03-ui-specs/03-text.md +2 -2
  65. package/templates/docs/03-ui-specs/04-csat.md +38 -33
  66. package/templates/docs/03-ui-specs/05-rating-scale.md +21 -18
  67. package/templates/docs/03-ui-specs/06-slider.md +3 -1
  68. package/templates/docs/03-ui-specs/07-matrix-cfm.md +24 -21
  69. package/templates/docs/03-ui-specs/08-matrix-csat-rating.md +17 -45
  70. package/templates/docs/03-ui-specs/09-slider-matrix.md +1 -1
  71. package/templates/docs/03-ui-specs/10-file-upload.md +1 -1
  72. package/templates/docs/03-ui-specs/11-text-and-media.md +29 -29
  73. package/templates/docs/03-ui-specs/12-survey-chrome.md +20 -14
  74. package/templates/docs/03-ui-specs/13-heatmap.md +73 -0
  75. package/templates/docs/03-ui-specs/14-rank-order.md +59 -0
  76. package/templates/docs/03-ui-specs/README.md +13 -13
  77. package/templates/docs/03-ui-specs/shared/custom-slider-track.md +2 -2
  78. package/templates/docs/03-ui-specs/shared/matrix-dropdown.md +5 -0
  79. package/templates/docs/MANIFEST.json +451 -69
  80. package/templates/docs/index.md +80 -29
  81. package/templates/docs/templates/Question.tsx +221 -154
  82. package/templates/docs/templates/deploy-to-aws.sh +114 -0
  83. package/templates/docs/templates/heatmapCoords.ts +58 -0
  84. package/templates/docs/templates/implementation_plan.md +108 -69
  85. package/templates/docs/templates/survey-inventory.schema.json +72 -0
  86. package/templates/docs/templates/verify-agent-build.sh +53 -0
  87. package/templates/docs/01-components/04-csat-scale.md +0 -40
  88. package/templates/docs/02-question-types/01-rating.md +0 -44
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{useCallback as F4}from"react";import{useMemo as a4}from"react";import{useQuery as l4}from"@tanstack/react-query";import{QueryClient as _2}from"@tanstack/react-query";var W=!1,W2={debug:"background: #7f8c8d; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",info:"background: #2980b9; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",warn:"background: #f1c40f; color: #000; padding: 2px 5px; border-radius: 3px; font-weight: bold;",error:"background: #e74c3c; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",success:"background: #2ecc71; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",perf:"background: #9b59b6; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",analytics:"background: #e20074; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;"};function b(c,t,a){if(!W&&c!=="analytics")return;let l=new Date().toLocaleTimeString(),i=`%c[SDK:${c.toUpperCase()}]`,r=W2[c];a!==void 0?console.log(`[${l}] ${i}`,r,t,a):console.log(`[${l}] ${i}`,r,t)}var M={setEnabled:c=>{W=c},isEnabled:()=>W,debug:(c,t)=>b("debug",c,t),info:(c,t)=>b("info",c,t),warn:(c,t)=>b("warn",c,t),error:(c,t)=>b("error",c,t),success:(c,t)=>b("success",c,t),analytics:(c,t)=>b("analytics",c,t),perf:c=>{b("perf",`${c.apiName} completed in ${c.durationMs.toFixed(2)}ms | Status: ${c.status}`,c)}};var I=new _2({defaultOptions:{queries:{staleTime:1/0,refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchInterval:!1,retryDelay:5e3,retry:(c,t)=>{if(c>=3)return M.error("Query failed permanently after 3 attempts. Stopping retries.",t),!1;if(t instanceof Error){let a=t.message;if(a.includes("400")||a.includes("401")||a.includes("403")||a.includes("404")||a.includes("422"))return M.error(`Query failed permanently due to client error (${a}). Skipping retry.`,t),!1}return M.warn(`Query failed. Retrying attempt ${c+1}/3...`,t),!0}},mutations:{networkMode:"always",retryDelay:5e3,retry:(c,t)=>{if(c>=3)return M.error("Mutation failed permanently after 3 attempts. Stopping retries.",t),!1;if(t instanceof Error){let a=t.message;if(a.includes("400")||a.includes("401")||a.includes("403")||a.includes("422"))return M.error("Mutation failed permanently due to validation/client error. Skipping retry.",t),!1}return M.warn(`Mutation failed. Retrying attempt ${c+1}/3...`,t),!0}}}});var m1="https://custom-p0.feedbook.me/api/feedback/survey/cfm",C1="eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJBY2Nlc3MgVG9rZW4gR2VuZXJhdGVkIEJ5IFNwcmlua2xyIiwic3VydmV5SWQiOiI2YTJlNWM2NDFiOGRiMmY5MDQ2Nzg4ODUiLCJpc3MiOiJTUFJJTktMUiIsInR5cCI6IkpXVCIsInN1cnZleU1vZGUiOiJTVEFOREFSRCIsInN1cnZleUF1dGhlbnRpY2F0aW9uU3RhdGUiOiJOT1RfUkVRVUlSRUQiLCJkaXN0cmlidXRpb25FbnRpdHlJZCI6IjZhMmU1ZDEzNDRjYTkzZjc3YTVlMzcyNyIsImF1ZCI6IlNQUklOS0xSIiwibmJmIjoxNzgxNDIyMTc5LCJzY29wZSI6WyJSRUFEIiwiV1JJVEUiXSwic3RhdGljU3VydmV5IjoidHJ1ZSIsInN1cnZleVJlc3BvbmRlclNuVHlwZSI6IkVYVEVSTkFMX0FQUExJQ0FUSU9OIiwic3VydmV5TGFuZ3VhZ2UiOiJlbiIsInBhcnRuZXJJZCI6OTAwNCwidG9rZW5UeXBlIjoiQUNDRVNTIiwiYXV0aFR5cGUiOiJTVVJWRVlfUkVTUE9OU0UiLCJpYXQiOjE3ODE0MjMzNzksImp0aSI6InNwcmlua2xyIn0.B4ffi1szwM_xQKXTlr0kQc9mVOS4qVbB5e6ir4NFuCoOmNmsl3PB1QeFJ5jPaQ42s0KTpbufPam9ja0Z84CJ620l2WtuS1RModEv7ZtuMNLWOixzRxZMduC5-V7WV85H6gr1e-HzX7wgqrxTk2Z9iTr-8AVuczlwScarCfqLhA-JE_EXkFScHoehmH7QB5q5-BfcxU32iQNYOk5NyeEHGAAWkkyiGPdrbE27njPnhTunB3kKgCBvHHLq0KmgoN9x_KnrB53O_0Xai419TT5vkBWlu5a_uotZckX014eQpxYH02w_LeOF8iWEKYe6R9ge-6DSbelaJSt6U6O8Fq-aXw";function j2(c){return`${m1}?instanceId=${encodeURIComponent(c)}&draftPreview=false`}function f1(c){let t=typeof c=="string"&&c.trim().length>0?c.trim():C1;return j2(t)}var J2={en:"English",hi:"Hindi",de:"Deutsch",es:"Espa\xF1ol",fr:"Fran\xE7ais",bn:"Bengali",gu:"Gujarati",it:"Italiano",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",mr:"Marathi",pa:"Punjabi",ta:"Tamil",te:"Telugu",ur:"Urdu",zh:"\u4E2D\u6587"};function X2(c){let t=c.toLowerCase().trim();return J2[t]||c.toUpperCase()}function w1(c){let t=c.cfmSurveyDTO,a=new Set,l=t?.baseLanguage??"en";return a.add(l),t&&Array.isArray(t.surveyPages)&&t.surveyPages.forEach(i=>{(i.questionHolders??[]).forEach(r=>{let e=r.question;e&&e.translations&&Object.keys(e.translations).forEach(h=>{a.add(h)})})}),Array.from(a).map(i=>({code:i,name:X2(i)}))}var K2=new Set(["CFM_MATRIX","CSAT_MATRIX"]);function _(c){let t=(c??"").toUpperCase();return t==="TEXTFIELD"?"text":t==="NPS_SCALE"||t==="RATING"||t==="SCALE"?"rating":K2.has(t)?"matrix":t==="RATING_MATRIX"?"rating_matrix":t==="SLIDER_MATRIX"?"slider_matrix":t==="TEXT_AND_MEDIA"||t==="CONTENT"?"text_and_media":t==="FILE_UPLOAD"?"file_upload":"radio"}function j(c,t,a){if(c.toUpperCase()==="NPS_SCALE")return"nps";let i=t.find(e=>e.key==="SCALE_TYPE")?.value?.[0]?.toUpperCase();return t.find(e=>e.key==="INPUT_TYPE")?.value?.[0]?.toUpperCase()==="SLIDER"?"slider":i==="CSAT"||i==="STAR"||i==="EMOJI"||a>0&&a<=5?"csat":"nps"}function Z(c=[],t){let a=c.filter(l=>l.additional?.isHintText&&!l.hidden).map(l=>t&&l.translations?.[t]?.answerText||l.answerText||"").filter(Boolean);return a.length>=3?{minLabel:a[0],midLabel:a[1],maxLabel:a[2]}:{minLabel:a[0],maxLabel:a[1]}}var Y2=["#e2001a","#e4251b","#ec610a","#f18b00","#f7b200","#fcd900","#d2dc00","#9fca00","#6bb300","#339a00","#008000"];function R(c){return Y2[c]??"#e20074"}function T(c,t,a){if(t==="text")return[];let i=(c.answerDetails??[]).filter(r=>!r.hidden&&!r.additional?.isHintText);return i.length>0?i.map((r,e)=>{let h=a&&r.translations?.[a]?.answerText||r.answerText||"",s=r.answerText??"",v=Number(s),o=Number.isFinite(v)&&s.trim()!==""?v:s,n={id:r.id??String(e),label:h,value:o};return t==="rating"&&typeof o=="number"&&(n.color=R(o)),n}):t==="rating"?Array.from({length:11},(r,e)=>({id:String(e),label:String(e),value:e,color:R(e)})):[]}function J(c){let t=c.questionConfigs??[],a=c.additional??{},l=t.find(n=>n.key==="SLIDER_MIN")?.value?.[0]??t.find(n=>n.key==="MIN_VALUE")?.value?.[0]??a.sliderMin,i=t.find(n=>n.key==="SLIDER_MAX")?.value?.[0]??t.find(n=>n.key==="MAX_VALUE")?.value?.[0]??a.sliderMax,r=t.find(n=>n.key==="SLIDER_STEP")?.value?.[0]??a.sliderStep,e=t.find(n=>n.key==="DEFAULT_VALUE")?.value?.[0]??a.defaultValue,h=l!==void 0?Number(l):0,s=i!==void 0?Number(i):10,v=r!==void 0&&Number(r)>0?Number(r):1,o=e!==void 0?Number(e):void 0;return{min:Number.isFinite(h)?h:0,max:Number.isFinite(s)?s:10,step:Number.isFinite(v)?v:1,...o!==void 0&&Number.isFinite(o)?{defaultValue:o}:{}}}function F1(c,t,a,l){let i=(c.answerDetails??[]).filter(d=>!d.hidden&&!d.additional?.isHintText),r=j(c.answerType??"",a,i.length);if(r==="csat"){let{minLabel:d,maxLabel:g}=Z(c.answerDetails,l),z=T(c,"radio",l),L=a.map(m=>m.value?.[0]||"").join(" ").toUpperCase(),u=(c.dataSubType||"").toUpperCase(),p=`${L} ${u}`,x=a.find(m=>m.key==="BUTTON_TYPE")?.value?.[0]?.toLowerCase()||void 0;x||(p.includes("EMOJI")||p.includes("CSAT")||p.includes("SMILEY")||p.includes("FACE")?x="emoji":p.includes("STAR")?x="star":p.includes("GRAPHIC")||p.includes("SLIDER")?x="graphics":p.includes("DROP")?x="dropdown":p.includes("SELECT")?x="selectbox":p.includes("RADIO")?x="radio":p.includes("NUMBER")&&(x="numbered"));let f=a.find(m=>m.key==="ENABLE_NON_APPLICABLE")?.value?.[0]==="true",H=a.find(m=>m.key.includes("REVERSE"))?.value?.[0]?.toLowerCase()==="true"||c.additional?.reverseScaleOrder===!0||c.additional?.reverseScale===!0,P=a.find(m=>m.key==="LABEL_POSITIONING")?.value?.[0]?.toLowerCase()||void 0;if(H){z=[...z].reverse();let m=d;d=g,g=m}return f&&z.push({id:"na",label:"N/A",value:null}),{...t,type:"csat",options:z,...d?{minLabel:d}:{},...g?{maxLabel:g}:{},...x?{buttonType:x}:{},...f?{hasNotApplicable:f}:{},...H?{reverseScaleOrder:H}:{},...P?{labelPosition:P}:{}}}if(r==="slider"){let{minLabel:d,maxLabel:g}=Z(c.answerDetails,l),z=J(c);return{...t,type:"slider",...z,...d?{minLabel:d}:{},...g?{maxLabel:g}:{}}}if(r==="rating_scale"){let{minLabel:d,midLabel:g,maxLabel:z}=Z(c.answerDetails,l),L=T(c,"radio",l),u=a.find(f=>f.key.includes("REVERSE"))?.value?.[0]?.toLowerCase()==="true"||c.additional?.reverseScaleOrder===!0||c.additional?.reverseScale===!0;if(u){L=[...L].reverse();let f=d;d=z,z=f}let p;return g&&L.length>0&&(p=(L.length-1)/2),{...t,type:"rating_scale",options:L,...d?{minLabel:d}:{},...g?{midLabel:g}:{},...p!==void 0?{midLabelIndex:p}:{},...z?{maxLabel:z}:{},...u?{reverseScaleOrder:u}:{}}}let{minLabel:e,midLabel:h,maxLabel:s}=Z(c.answerDetails,l),v=T(c,"rating",l),o=a.find(d=>d.key.includes("REVERSE"))?.value?.[0]?.toLowerCase()==="true"||c.additional?.reverseScaleOrder===!0||c.additional?.reverseScale===!0;if(o){v=[...v].reverse();let d=e;e=s,s=d}let n;return h&&(n=v.length===11?o?2.5:7.5:(v.length-1)/2),{...t,type:"rating",options:v,...e?{minLabel:e}:{},...h?{midLabel:h}:{},...n!==void 0?{midLabelIndex:n}:{},...s?{maxLabel:s}:{},...o?{reverseScaleOrder:o}:{}}}function B1(c,t,a){let l=T(c,"radio",a);return{...t,type:"radio",options:l}}function H1(c,t,a,l){let r=a.find(v=>v.key==="CONTENT_TYPE")?.childConfigs?.find(v=>v.key==="MAX_CHARACTER_COUNT"),e=r?.value?.[0]?Number(r.value[0]):void 0,h=c.answerDetails?.[0],s=h?l&&h.translations?.[l]?.answerText||h.answerText:void 0;return{...t,type:"text",...e!==void 0?{maxCharacterCount:e}:{},...s?{placeholder:s}:{}}}function V1(c,t,a){let l=c;if(a&&l.answerDetails&&l.answerDetails.length>=2){let r=t&&l.answerDetails[0].translations?.[t]?.answerText||l.answerDetails[0].answerText||"";if(r)return r}let i=t&&c.translations?.[t]?.questionText||c.questionText||c.answerText||"";return a&&i.includes(":")?i.split(":")[0].trim():i}function $2(c,t,a){let l=c;if(a&&l.answerDetails&&l.answerDetails.length>=2){let e=t&&l.answerDetails[1].translations?.[t]?.answerText||l.answerDetails[1].answerText||"";if(e)return e}let i=t&&c.translations?.[t]?.description||c.description||c.additional?.rightLabel||c.additional?.rightStatement||c.additional?.rightText;if(typeof i=="string"&&i.trim()!=="")return i;let r=t&&c.translations?.[t]?.questionText||c.questionText||c.answerText||"";if(a&&r.includes(":"))return r.split(":").slice(1).join(":").trim()}function U(c,t,a){let l=(c.matrixRowQuestions?.length??0)>0?c.matrixRowQuestions:c.childSurveyQuestions;return l&&l.length>0?l.filter(i=>i.id).map(i=>({id:i.id,text:V1(i,t,a),rightText:$2(i,t,a)})):(c.answerDetails??[]).filter(i=>!i.hidden&&!i.additional?.isHintText).map((i,r)=>({id:`row_${r}`,text:t&&i.translations?.[t]?.answerText||i.answerText||"",rightText:i.additional?.rightLabel||i.additional?.rightStatement||i.additional?.rightText}))}function X(c,t,a){return c.matrixColumnQuestions&&c.matrixColumnQuestions.length>0?c.matrixColumnQuestions.filter(l=>l.id).map(l=>{let i=a&&l.translations?.[a]?.answerText||l.answerText||V1(l,a),r=l.answerText??i,e=Number(r),h=Number.isFinite(e)&&String(r).trim()!==""?e:r,s={id:l.id,label:i,value:h};return t&&typeof h=="number"&&(s.color=R(h)),s}):(c.answerDetails??[]).filter(l=>!l.hidden&&!l.additional?.isHintText).map((l,i)=>{let r=a&&l.translations?.[a]?.answerText||l.answerText||"",e=Number(r),h=Number.isFinite(e)&&r.trim()!==""?e:r,s={id:`col_${i}`,label:r,value:h};return t&&typeof h=="number"&&(s.color=R(h)),s})}function K(c,t){let a=Number(c.additional?.sliderMin??0),l=Number(c.additional?.sliderMax??10),i=Number(c.additional?.sliderStep??1);return U(c,t).map(e=>({...e,min:Number.isFinite(a)?a:0,max:Number.isFinite(l)?l:10,step:Number.isFinite(i)&&i>0?i:1}))}function S1(c,t){let a=(c.answerType??"").toUpperCase(),l=a==="RATING_MATRIX"?"RATING_MATRIX":a==="CSAT_MATRIX"?"CSAT_MATRIX":"CFM_MATRIX",i=c.questionConfigs??[],r=i.find(o=>o.key==="MATRIX_TYPE"),e=r?.value?.[0]?.toLowerCase(),h=e==="bipolar",s=U(c,t,h),v=X(c,l==="RATING_MATRIX",t);return{apiType:a,subType:l,configs:i,matrixTypeConfig:r,matrixType:e,isBipolar:h,rows:s,columns:v}}function A1(c,t){let{rows:a,columns:l}=t,i=l.map(o=>Number(o.value)).filter(o=>!isNaN(o)),r=i.length>0?Math.min(...i):1,e=i.length>0?Math.max(...i):l.length,h=1,s=l.length,v=a.map(o=>({...o,min:r,max:e,step:h}));return{...c,type:"slider_matrix",rows:v,ticks:s}}function y1(c,t,a,l){let{subType:i,configs:r,rows:e}=a,h=[...a.columns],s=r.map(u=>u.value?.[0]||"").join(" ").toUpperCase(),v=(c.dataSubType||"").toUpperCase(),o=`${s} ${v}`,n;o.includes("EMOJI")||o.includes("CSAT")||o.includes("SMILEY")||o.includes("FACE")?n="emoji":o.includes("STAR")?n="star":o.includes("GRAPHIC")||o.includes("SLIDER")?n="graphics":o.includes("DROP")?n="dropdown":o.includes("SELECT")?n="selectbox":o.includes("RADIO")?n="radio":o.includes("NUMBER")&&(n="numbered");let C=r.find(u=>u.key==="NOT_APPLICABLE_OPTIONS")?.value?.[0]==="true"||r.find(u=>u.key==="ENABLE_NON_APPLICABLE")?.value?.[0]==="true",d=r.find(u=>u.key.includes("REVERSE"))?.value?.[0]?.toLowerCase()==="true"||c.additional?.reverseScaleOrder===!0||c.additional?.reverseScale===!0,g=(c.answerDetails??[]).filter(u=>u.additional?.isHintText&&!u.hidden).map(u=>l&&u.translations?.[l]?.answerText||u.answerText||"").filter(Boolean);d&&(h=[...h].reverse(),g=[...g].reverse()),C&&h.push({id:"na",label:"N/A",value:null});let z=JSON.stringify(r).toUpperCase(),L="standard";return z.includes("CAROUSEL")?L="carousel":z.includes("DROPDOWN")&&(L="dropdown"),{...t,type:"matrix",subType:i,rows:e,columns:h,...n?{buttonType:n}:{},...C?{hasNotApplicable:C}:{},...d?{reverseScaleOrder:d}:{},...g.length>0?{labels:g}:{},...L!=="standard"?{matrixFormat:L}:{}}}function b1(c,t,a,l){let{subType:i,configs:r,matrixType:e,rows:h}=a,s=[...a.columns],v=JSON.stringify(r).toUpperCase(),o="standard";v.includes("CAROUSEL")?o="carousel":v.includes("DROPDOWN")&&(o="dropdown"),console.log("CFM_MATRIX Configs:",JSON.stringify(r,null,2)),console.log("Detected matrixFormat:",o);let C=r.some(x=>x.key.includes("MULTI")||x.value?.[0]?.toUpperCase().includes("MULTI")||x.key.includes("ANSWER")&&x.value?.[0]?.toUpperCase().includes("MULTI")||x.key.includes("SELECT")&&x.value?.[0]?.toUpperCase().includes("MULTI"))?"multiple":"single",d=r.find(x=>x.key==="TRANSPOSE_TABLE")?.value?.[0]?.toLowerCase()==="true",g=r.find(x=>x.key==="REPEAT_SCALE")?.value?.[0]?.toLowerCase()==="true",z=r.find(x=>x.key==="NOT_APPLICABLE_OPTIONS")?.value?.[0]==="true"||r.find(x=>x.key==="ENABLE_NON_APPLICABLE")?.value?.[0]==="true",L=z?!1:d;z&&s.push({id:"na",label:"N/A",value:null});let u=r.find(x=>x.key==="ENABLE_SCALE")?.value?.[0]?.toLowerCase()!=="false",p;return e==="bipolar"&&(p=(c.answerDetails??[]).filter(x=>x.additional?.isHintText&&!x.hidden).map(x=>l&&x.translations?.[l]?.answerText||x.answerText||"").filter(Boolean)),{...t,type:"matrix",subType:i,rows:h,columns:s,...e?{matrixType:e}:{},matrixFormat:o,...C?{answerType:C}:{},...L?{transposeTable:L}:{},...g?{repeatScale:g}:{},...z?{hasNotApplicable:z}:{},...p&&p.length>0?{labels:p}:{},enableScale:u}}function R1(c,t,a){let l=S1(c,a);return l.matrixTypeConfig?.childConfigs?.find(e=>e.key==="MATRIX_FORMAT")?.value?.[0]?.toUpperCase()==="SLIDER"?A1(t,l):l.subType==="CSAT_MATRIX"||l.subType==="RATING_MATRIX"?y1(c,t,l,a):b1(c,t,l,a)}function T1(c,t,a){let l=c.questionConfigs||[],i=l.find(m=>m.key==="SLIDER_TICKS_AND_VALUES"),r=i?.childConfigs||[],e=r.find(m=>m.key==="TICK_START")?.value?.[0],h=r.find(m=>m.key==="TICK_END")?.value?.[0],s=r.find(m=>m.key==="STEP_SIZE")?.value?.[0],v=i?.value?.[0],o=e!==void 0?Number(e):0,n=h!==void 0?Number(h):10,C=s!==void 0?Number(s):1,d=v!==void 0?Number(v):void 0,g={...c,additional:{...c.additional,sliderMin:o,sliderMax:n,sliderStep:C}},z=K(g,a),L=(c.answerDetails||[]).filter(m=>m.additional?.isHintText).map(m=>a&&m.translations?.[a]?.answerText||m.answerText||"").filter(Boolean),u=m=>{for(let V of m){let S=l.find(y=>y.key===V)||r.find(y=>y.key===V);if(S&&S.value!==void 0&&S.value!==null&&S.value.length>0)return S.value[0]?.toString().toLowerCase()==="true"}return!1},p=l.find(m=>m.key==="SCALE_TYPE"||m.key==="VIEW_VARIANT")?.value?.[0]?.toUpperCase().includes("GRAPHIC"),x=u(["ENABLE_INPUT_BOX","SHOW_INPUT_BOX","INPUT_BOX","ENABLE_INPUT"]),f=u(["SHOW_VALUE","DISPLAY_VALUES"]),H=u(["NOT_APPLICABLE","NOT_APPLICABLE_OPTIONS"]),P=(c.answerDetails||[]).filter(m=>!m.additional?.isHintText&&!m.hidden).map(m=>m.translations?.[a||""]?.answerText||m.answerText||""),B;if(d!==void 0&&d>1){B=[];let m=(n-o)/(d-1);for(let V=0;V<d;V++){let S=o+V*m,y=Number(S.toFixed(2)),G2=P[V]||y.toString(),Q2=`hsl(${Math.round(V/(d-1)*120)}, 90%, 40%)`;B.push({value:y,label:G2,color:Q2})}}return{...t,type:"slider_matrix",rows:z,...L.length>0?{labels:L}:{},...d!==void 0&&Number.isFinite(d)?{ticks:d}:{},...B?{tickValues:B}:{},enableInputBox:x,displayValues:f,enableNotApplicable:H,...p?{sliderType:"graphics"}:{}}}function Y(c){let t=c.additional??{},a=t.mediaUrl??t.previewUrl,l=t.mediaMimeType,i=t.title,r=c.questionContainerAssets;if(Array.isArray(r)&&r.length>0){let e=r[0];(e.source||e.previewImageUrl)&&(a=e.source||e.previewImageUrl),e.type&&(e.type==="PHOTO"||e.type==="IMAGE"?l="image/*":e.type==="VIDEO"?l="video/*":l=e.type)}return{mediaUrl:a,mediaMimeType:l,mediaTitle:i}}function k1(c,t){let{mediaUrl:a,mediaMimeType:l,mediaTitle:i}=Y(c),r=c.questionConfigs||[],e=r.find(n=>n.key==="TEXT_AND_MEDIA_ALIGNMENT"),h=r.find(n=>n.key==="TEXT_AND_MEDIA_SIZE"),s=e?.value?.[0],v=h?.value?.[0]?Number(h.value[0]):void 0,o=t.text;if(Array.isArray(c.answerDetails)){let n=c.answerDetails.find(C=>C.additional?.textAndMediaFieldType==="HEADER");n&&n.answerText&&(o=n.answerText)}return{...t,text:o,type:"text_and_media",...a?{mediaUrl:a}:{},...l?{mediaMimeType:l}:{},...i?{mediaTitle:i}:{},...s?{mediaAlignment:s}:{},...v?{mediaSize:v}:{}}}function P1(c,t,a){let l=c.questionConfigs||[],i=c.answerDetails?.find(z=>z.additional?.fieldType==="UPLOAD_MESSAGE"),r=a&&i?.translations?.[a]?.answerText||i?.answerText||"",h=l.find(z=>z.key==="SUPPORTED_FILE_FORMAT")?.value?.map(z=>z.toUpperCase().replace(/^\./,""))||[],s=l.find(z=>z.key==="MAX_FILE_COUNT"),v=s?.value?.[0]?Number(s.value[0]):void 0,o=l.find(z=>z.key==="FILE_SIZE_LIMIT"),n=o?.childConfigs?.find(z=>z.key==="SIZE_LIMIT_ID")?.value?.[0],C=o?.childConfigs?.find(z=>z.key==="SIZE_FORMAT_ID")?.value?.[0],d=n?Number(n):void 0,g=C==="PER_FILE"||C==="IN_TOTAL"?C:void 0;return{...t,type:"file_upload",...r?{uploadMessage:r}:{},...h.length>0?{supportedFileFormats:h}:{},...v!==void 0?{maxFileCount:v}:{},...d!==void 0?{fileSizeLimit:d}:{},...g?{fileSizeLimitType:g}:{}}}function c4(c,t,a,l){let i=t.find(u=>u.key==="REQUIRED")?.value?.[0]==="true",r=t.find(u=>u.key==="REQUIRED_ERROR_MESSAGE"),e=r?.value?.[0];a&&r?.translations?.[a]?.value?.[0]&&(e=r.translations[a].value[0]);let h=a&&c.translations?.[a]?.questionRichText||a&&c.translations?.[a]?.questionText||c.questionRichText||c.questionText||"";l&&(h=h.replace(/\{\{(\w+)\}\}/g,(u,p)=>l[p]!==void 0?l[p]:u));let s=a&&c.translations?.[a]?.descriptionRichText||a&&c.translations?.[a]?.description||c.descriptionRichText||c.description||(typeof c.additional?.descriptionRichText=="string"?c.additional.descriptionRichText:"")||(typeof c.additional?.description=="string"?c.additional.description:"")||"";if(!s){let u=t.find(p=>p.key.includes("DESCRIPTION"));s=u?.value?.[0]||"",a&&u?.translations?.[a]?.valueRichText?.[0]?s=u.translations[a].valueRichText[0]:a&&u?.translations?.[a]?.value?.[0]&&(s=u.translations[a].value[0])}s&&l&&(s=s.replace(/\{\{(\w+)\}\}/g,(u,p)=>l[p]!==void 0?l[p]:u));let o=c.questionContainerAssets?.[0],n=o?.source||o?.mediaUrl||o?.previewImageUrl,C=o?.mediaMimeType,g=t.find(u=>u.key==="QUESTION_CONTAINER_MEDIA_ALIGNMENT")?.value?.[0],z=t.find(u=>u.key==="TEXT_AND_MEDIA_SIZE"),L=z?.value?.[0]?Number(z.value[0]):void 0;return{id:c.id??"",text:h,...s?{description:s}:{},required:i,...e?{requiredErrorMessage:e}:{},...c.questionNumber!==void 0?{questionNumber:c.questionNumber}:{},...n?{containerMediaUrl:n}:{},...C?{containerMediaMimeType:C}:{},...g?{containerMediaAlignment:g}:{},...L!==void 0?{containerMediaSize:L}:{}}}function Z1(c,t,a){let l=c.questionConfigs??[],i=c4(c,l,t,a);switch(_(c.answerType)){case"rating":return F1(c,i,l,t);case"text":return H1(c,i,l,t);case"matrix":case"rating_matrix":return R1(c,i,t);case"slider_matrix":return T1(c,i,t);case"text_and_media":return k1(c,i);case"file_upload":return P1(c,i,t);default:return B1(c,i,t)}}function E1(c,t,a){let l=c.cfmSurveyDTO;return!l||!Array.isArray(l.surveyPages)?[]:l.surveyPages.map((i,r)=>{let e=(i.questionHolders??[]).map(h=>h.question).filter(h=>!!h).map(h=>Z1(h,t,a));return{id:`page_${r}`,title:`Page ${r+1}`,questions:e}})}function D1(c){return c.instanceId?.trim()?{instanceId:c.instanceId.trim(),language:c.surveyLanguage??c.cfmSurveyDTO?.baseLanguage??"en"}:null}function t4(c,t){return t??c.surveyLanguage??c.cfmSurveyDTO?.baseLanguage??"en"}function I1(c,t,a){let l=t4(c,t),i=w1(c),r=E1(c,l,a);return{id:c.cfmSurveyDTO?.id??"",language:l,languages:i,pages:r}}function U1(c){M.info("Starting survey layout API fetch...",{url:c})}function $(c,t,a){M.perf({apiName:"GET Survey Layout",durationMs:c,status:t,url:a,success:!1})}function q1(c,t,a,l){M.perf({apiName:"GET Survey Layout",durationMs:c,status:t,url:a,payloadSize:l,success:!0})}function N1(c){M.success("Raw survey layout fetched successfully",c)}function O1(c){M.error("Failed to fetch raw survey layout",c)}function G1(){M.warn("Cannot map survey: apiResponse is null or undefined")}function Q1(c){M.success("Mapped survey layout successfully",c)}function W1(c){M.error("Failed to map survey layout",c)}function F(c){if(c.eventName==="survey_session_summary"){let{completed:t,totalDurationMs:a,maxVisitedPageIndex:l,totalQuestionsCount:i,answeredQuestionsCount:r,skippedQuestionsCount:e,skippedQuestionIds:h,validationErrorsCount:s,backtrackCount:v}=c.metadata;M.analytics(`Event: ${c.eventName} - SESSION SUMMARY TABLE:`);let o=[{Metric:"Completion Status",Value:t?"COMPLETED \u2705":"ABANDONED \u274C"},{Metric:"Total Time Spent",Value:`${(a/1e3).toFixed(2)} seconds`},{Metric:"Max Page Index Reached",Value:`${l}`},{Metric:"Total Questions",Value:i},{Metric:"Answered Questions",Value:r},{Metric:"Skipped Optional Questions",Value:e},{Metric:"Skipped Question IDs",Value:h.join(", ")||"None"},{Metric:"Validation Errors Triggered",Value:s},{Metric:"Backtrack Count",Value:v},{Metric:"Validation Error History",Value:c.metadata.validationHistory?.map(n=>`[Page ${n.pageIndex}] Attempt ${n.attemptNumber}: ${Object.keys(n.errors).join(", ")}`).join(" | ")||"NO Validation Erros Occurred"}];console.table(o)}else M.analytics(`Event: ${c.eventName}`,c.metadata)}function _1(c,t,a,l){F({eventName:"survey_fetch_latency",metadata:{durationMs:c,status:t,success:!0,url:a,payloadSize:l}})}function c1(c,t,a){F({eventName:"api_error",metadata:{apiName:"GET Survey Layout",status:c,url:t,errorMessage:a}})}async function r4(c){let t=performance.now();U1(c);try{let a=await fetch(c,{method:"GET",headers:{Accept:"application/json"},cache:"force-cache"}),l=performance.now()-t;if(!a.ok)throw $(l,a.status,c),c1(a.status,c,`Survey fetch failed (${a.status})`),new Error(`Survey fetch failed (${a.status})`);let i=await a.json(),r=JSON.stringify(i),h=`${(new Blob([r]).size/1024).toFixed(2)} KB`;return q1(l,a.status,c,h),_1(l,a.status,c,h),N1(i),i}catch(a){let l=performance.now()-t;throw $(l,"FAILED",c),c1("FAILED",c,a?.message||String(a)),O1(a),a}}function j1(c){let t=f1(c?.instanceId),a=c?.language,l=c?.placeholders,{data:i,error:r,isLoading:e,isSuccess:h}=l4({queryKey:["survey",t],queryFn:()=>r4(t),enabled:!!t},I),s=a4(()=>{if(!h)return{survey:null,session:null};if(!i)return G1(),{survey:null,session:null};try{let v=I1(i,a,l),o=D1(i),n=o?{...o,language:v.language}:null;return Q1(v),{survey:v,session:n}}catch(v){return W1(v),{survey:null,session:null}}},[i,h,a]);return{survey:s.survey,session:s.session,fetching:e,fetchError:r}}import{useState as g1,useRef as w4}from"react";import{useCallback as e4}from"react";import{useMutation as h4}from"@tanstack/react-query";function J1(c,t){M.info("Starting survey response HTTP POST...",{url:c,requestBody:t})}function X1(c,t){M.warn(c,t)}function K1(c,t,a,l,i){M.perf({apiName:"POST Submit Response",durationMs:c,status:t,url:a,requestSize:l,responseSize:i,success:!0})}function t1(c,t,a,l){M.perf({apiName:"POST Submit Response",durationMs:c,status:t,url:a,requestSize:l,success:!1})}function Y1(c){M.success("Survey response submitted successfully",{responseId:c})}function $1(c,t){M.error(c,t)}function c2(c){M.debug("Resolved raw inputs to submit schema:",c)}function t2(c){M.debug("Constructed JSON request body:",c)}function a2(c){M.error("Failed to execute submit callback",c)}function l2(c,t,a,l,i){F({eventName:"survey_submit_latency",metadata:{durationMs:c,status:t,success:!0,url:a,requestSize:l,responseSize:i}})}function a1(c,t,a){F({eventName:"api_error",metadata:{apiName:"POST Submit Response",status:c,url:t,errorMessage:a}})}var r2="https://custom-p0.feedbook.me/api/feedback/survey/responseV2";function i2(c,t="en"){let a=new URLSearchParams({instanceId:c,surveySubmitted:"true",surveyLanguage:t});return`${r2}?${a.toString()}`}function e2(c,t){let a={},l={},i={};for(let r of t)r.type==="file_upload"&&(i[r.id]=[]);for(let r of t){let e=c[r.id];if(e!=null)switch(r.type){case"text_and_media":break;case"file_upload":{Array.isArray(e)&&(i[r.id]=e);break}case"matrix":case"rating_matrix":case"slider_matrix":{if(typeof e=="object"&&!Array.isArray(e)){let h=e;for(let[s,v]of Object.entries(h))if(v!=null){let o=`${r.id}_${s}`;a[o]=[String(v)]}}break}default:(typeof e=="string"||typeof e=="number")&&(a[r.id]=[String(e)]);break}}return{questionToAnswers:a,quesIdVsAttachmentDetails:i,optionLevelAnswers:l,conjointTasks:[]}}function i4(c){return typeof c=="object"&&c!==null&&"instanceId"in c&&"answers"in c}function h2(c,t,a){if(i4(c))return{...c,surveyLanguage:c.surveyLanguage??t?.language??"en",questions:c.questions??a?.pages.flatMap(l=>l.questions)??[]};if(!t?.instanceId)throw new Error("Survey session not ready. Fetch survey before submitting.");return{answers:c,instanceId:t.instanceId,surveyLanguage:t.language??"en",questions:a?.pages.flatMap(l=>l.questions)??[]}}async function s4({url:c,requestBody:t}){let a=performance.now(),i=`${(new Blob([JSON.stringify(t)]).size/1024).toFixed(2)} KB`;J1(c,t);try{let r=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),e=await r.json().catch(n=>(X1("Failed to parse JSON response during submission",n),null)),h=performance.now()-a,v=`${((e?new Blob([JSON.stringify(e)]).size:0)/1024).toFixed(2)} KB`;if(!r.ok)throw t1(h,r.status,c,i),a1(r.status,c,`Submit failed (${r.status}): ${JSON.stringify(e)}`),new Error(`Submit failed (${r.status}): ${JSON.stringify(e)}`);let o=e?.responseId??"";return K1(h,r.status,c,i,v),l2(h,r.status,c,i,v),Y1(o),{success:!0,responseId:o}}catch(r){let e=performance.now()-a;throw t1(e,"FAILED",c,i),a1("FAILED",c,r?.message||String(r)),$1("Failed to submit survey response",r),r}}function s2(c,t){let a=h4({mutationFn:({url:i,requestBody:r})=>s4({url:i,requestBody:r})},I);return{submit:e4(async i=>{try{let r=h2(i,c,t);c2(r);let e=r.surveyLanguage??"en",h=e2(r.answers,r.questions??[]);t2(h);let s=i2(r.instanceId,e);return await a.mutateAsync({url:s,requestBody:h})}catch(r){throw a2(r),r}},[c,t,a]),data:a.data??null,loading:a.isPending,error:a.error}}import{useState as n4,useEffect as v4,useMemo as z4}from"react";function o2(c){return c.type==="text_and_media"}function o4(c,t){return c.rows.every(a=>{let l=t[a.id];return l!==void 0&&l!==""})}function l1(c,t){if(o2(c))return!0;let a=t[c.id];switch(c.type){case"matrix":case"rating_matrix":case"slider_matrix":return typeof a!="object"||Array.isArray(a)?!1:o4(c,a);default:return a!==void 0&&a!==""}}function r1(c,t,a){let l={},i=a?.startsWith("de")?"Beantworten Sie bitte diese Frage bevor Sie fortfahren.":"Please answer this question before you proceed.";return c.forEach(r=>{o2(r)||r.required&&!l1(r,t)&&(l[r.id]=r.requiredErrorMessage??i)}),l}function n2(c,t,a){let l={},i="",r=-1;for(let e=0;e<c.length;e++){let h=r1(c[e].questions,t,a);Object.keys(h).length>0&&(l={...l,...h},r===-1&&(r=e,i=Object.keys(h)[0]))}return r!==-1?{errors:l,errorPageIndex:r,firstErrorId:i}:null}function v2(c){return c.type==="text_and_media"}function z2(c){return!c||!Array.isArray(c.pages)?0:c.pages.reduce((t,a)=>{let l=(a.questions??[]).filter(i=>!v2(i));return t+l.length},0)}function d2(c,t,a=0){if(!c||!t||!Array.isArray(c.pages))return 0;let l=0;return c.pages.forEach((i,r)=>{let e=(i.questions??[]).filter(h=>!v2(h));r<a?l+=e.length:e.forEach(h=>{l1(h,t)&&l++})}),l}function g2(c,t){return t<=0?0:Math.min(100,Math.max(0,Math.round(c/t*100)))}function u2({survey:c,values:t,currentPageIndex:a=0}){let[l,i]=n4(0);return v4(()=>{a>l&&i(a)},[a,l]),z4(()=>{let r=z2(c),e=d2(c,t,l),h=g2(e,r),s=r>0&&e===r;return{totalQuestionsCount:r,answeredQuestionsCount:e,progressPercentage:h,isComplete:s}},[c,t,l])}import{useEffect as d4}from"react";function i1(c){let{currentPageIndex:t,paginationRefs:a}=c;d4(()=>{a.current&&(a.current.pageStartTime=performance.now())},[t,a])}import{useEffect as g4}from"react";function e1(c){let{currentPageIndex:t,paginationRefs:a}=c;g4(()=>{a.current&&t>a.current.maxVisitedPageIndex&&(a.current.maxVisitedPageIndex=t)},[t,a])}import{useCallback as p4}from"react";function p2(c,t){M.info(`Answer changed for question: ${c}`,{value:t})}function k(c,t){M.warn(c,t)}function M2(){M.info("Initiating survey submission...")}function x2(c){M.info(`Navigating back from page index: ${c}`)}function L2(c){M.info(`Navigating next from page index: ${c}`)}function m2(c){M.error("Error encountered during pagination submit trigger",c)}function E(c){return typeof document>"u"?null:document.getElementById(c)||null}function u4(c){return c.closest("main")||c.closest("form")||c.parentElement||c}function q(c,t){try{let l=c[t]?.questions?.[0];l?setTimeout(()=>{try{let i=E(l.id);i?u4(i).scrollIntoView({behavior:"smooth",block:"start"}):window.scrollTo({top:0,behavior:"smooth"})}catch(i){k("Failed to scroll page first question into view",i)}},50):window.scrollTo({top:0,behavior:"smooth"})}catch(a){k("Failed to trigger scroll navigation",a)}}function h1(c){let{currentPageIndex:t,setCurrentPageIndex:a,trackPageTime:l,pages:i,values:r,paginationRefs:e}=c;return p4(()=>{if(t>0){x2(t),l(t);let h=e.current;if(h){h.backtrackCount+=1;let v=t-1,o=i[v]?.questions??[],n={};o.forEach(C=>{n[C.id]=r[C.id]}),h.backtrackSnapshots[v]={fromPageIndex:t,snapshot:n}}let s=t-1;a(s),q(i,s)}},[t,a,l,i,r,e])}import{useCallback as M4}from"react";function s1(c){let{setValues:t,setValidationErrors:a}=c;return M4((l,i)=>{p2(l,i),t(r=>({...r,[l]:i})),a(r=>({...r,[l]:""}))},[t,a])}import{useCallback as x4}from"react";function C2(){M.success("Survey validation passed on submit")}function f2(c){M.warn("Full survey validation failed on submit",{validation:c})}function N(c){M.error("Failed to run survey validation on submit",c)}function w2(c){M.warn("Page validation failed",{errors:c})}function F2(c,t){F({eventName:"page_time_spent",metadata:{pageIndex:c,durationMs:t}})}function O(c,t,a){F({eventName:"validation_error",metadata:{pageIndex:c,errors:t,attemptNumber:a}})}function o1(c,t){let{survey:a,pages:l,values:i,currentPageIndex:r,setCurrentPageIndex:e,setValidationErrors:h,trackPageTime:s,trackOptionalSkips:v,checkBacktrackChanges:o,paginationRefs:n}=c,C=l[r],d=C?.questions??[];return x4(()=>{if(!a||!C)return;let g={};try{g=r1(d,i,a.language)}catch(L){N(L)}let z=n.current;if(z){if(Object.keys(g).length>0){w2(g);let L=(z.validationAttempt[r]||0)+1;z.validationAttempt[r]=L,z.validationErrorsCount+=1,z.validationHistory.push({pageIndex:r,errors:g,attemptNumber:L}),O(r,g,L),h(g);let u=Object.keys(g)[0];setTimeout(()=>{try{let p=E(u);p&&p.scrollIntoView({behavior:"smooth",block:"center"})}catch(p){k("Failed to scroll validation error element into view",p)}},50);return}h({}),delete z.validationAttempt[r],s(r),v(r),o(r),r<l.length-1?(L2(r),e(L=>L+1),q(l,r+1)):t()}},[a,C,d,i,r,e,h,s,v,o,l,t,n])}import{useCallback as L4}from"react";function B2(c,t,a,l,i,r,e,h,s,v){F({eventName:"survey_session_summary",metadata:{maxVisitedPageIndex:t,totalDurationMs:a,completed:c,totalQuestionsCount:l,answeredQuestionsCount:i,skippedQuestionsCount:r,skippedQuestionIds:e,validationErrorsCount:h,backtrackCount:s,validationHistory:v}})}function H2(c,t){F({eventName:"optional_question_skipped",metadata:{questionId:c,pageIndex:t}})}function V2(c,t,a){F({eventName:"backtrack_revisited",metadata:{fromPageIndex:c,toPageIndex:t,changedAnswers:a}})}function n1(c){let{survey:t,pages:a,values:l,submit:i,currentPageIndex:r,setCurrentPageIndex:e,setValidationErrors:h,trackPageTime:s,trackOptionalSkips:v,checkBacktrackChanges:o,totalQuestionsCount:n,paginationRefs:C}=c;return L4(async()=>{if(!t)return;M2();let d=null;try{d=n2(a,l,t.language),d||C2()}catch(z){N(z)}let g=C.current;if(g){if(d){f2(d);let z=(g.validationAttempt[d.errorPageIndex]||0)+1;g.validationAttempt[d.errorPageIndex]=z,g.validationErrorsCount+=1,g.validationHistory.push({pageIndex:d.errorPageIndex,errors:d.errors,attemptNumber:z}),O(d.errorPageIndex,d.errors,z),h(d.errors),e(d.errorPageIndex),setTimeout(()=>{try{let L=E(d.firstErrorId);L&&L.scrollIntoView({behavior:"smooth",block:"center"})}catch(L){k("Failed to scroll validation error element into view",L)}},100);return}h({}),delete g.validationAttempt[r],s(r),v(r),o(r);try{let z=await i(l);if(z&&z.success&&!g.hasLoggedSummary){let L=performance.now()-g.sessionStartTime,u=[];a.forEach(x=>{x.questions.forEach(f=>{if(!f.required){let H=l[f.id];(H===void 0||H==="")&&u.push(f.id)}})});let p=u.length;B2(!0,g.maxVisitedPageIndex,L,n,n-p,p,u,g.validationErrorsCount,g.backtrackCount,g.validationHistory),g.hasLoggedSummary=!0}}catch(z){m2(z)}}},[t,a,l,i,r,e,h,s,v,o,n,C])}import{useCallback as m4}from"react";function v1(c,t,a){return m4(l=>{if(!a.current)return;let i=a.current.backtrackSnapshots[l];if(i){let r=c[l]?.questions??[],e={},h=!1;r.forEach(s=>{let v=i.snapshot[s.id],o=t[s.id];v!==o&&(e[s.id]={oldValue:v??null,newValue:o??null},h=!0)}),h&&V2(i.fromPageIndex,l,e),delete a.current.backtrackSnapshots[l]}},[c,t,a])}import{useCallback as C4}from"react";function z1(c,t){return C4(a=>{(c[a]?.questions??[]).forEach(i=>{let r=!i.required,e=t[i.id];r&&(e===void 0||e==="")&&H2(i.id,a)})},[c,t])}import{useCallback as f4}from"react";function d1(c){return f4(t=>{if(!c.current)return;let a=performance.now()-c.current.pageStartTime;F2(t,a)},[c])}function S2({survey:c,session:t}){let[a,l]=g1({}),[i,r]=g1({}),[e,h]=g1(0),s=c?.pages??[],o=s[e]?.questions??[],{submit:n,data:C,loading:d,error:g}=s2(t,c),{progressPercentage:z,totalQuestionsCount:L,answeredQuestionsCount:u,isComplete:p}=u2({survey:c,values:a,currentPageIndex:e}),x=w4({pageStartTime:performance.now(),sessionStartTime:performance.now(),maxVisitedPageIndex:0,validationAttempt:{},backtrackSnapshots:{},hasLoggedSummary:!1,validationErrorsCount:0,backtrackCount:0,validationHistory:[]}),f=d1(x),H=z1(s,a),P=v1(s,a,x),B={survey:c,session:t,pages:s,currentPageIndex:e,setCurrentPageIndex:h,values:a,setValues:l,validationErrors:i,setValidationErrors:r,paginationRefs:x,trackPageTime:f,trackOptionalSkips:H,checkBacktrackChanges:P,submit:n,totalQuestionsCount:L};e1(B),i1(B);let m=s1(B),V=h1(B),S=n1(B),y=o1(B,S);return{currentPageIndex:e,values:a,validationErrors:i,currentQuestions:o,pages:s,onChange:m,onBack:V,onNext:y,onSubmit:S,progressPercentage:z,totalQuestionsCount:L,answeredQuestionsCount:u,isComplete:p,submitting:d,submitError:g,submitData:C}}var u1=(i=>(i.NEXT="NEXT",i.PREVIOUS="PREVIOUS",i.SUBMIT="SUBMIT",i.CHANGE="CHANGE",i))(u1||{});function B4({options:c}={}){M.setEnabled(c?.debug??!1);let{survey:t,session:a,fetching:l,fetchError:i}=j1({instanceId:c?.instanceId,language:c?.language,placeholders:c?.placeholders}),{currentPageIndex:r,values:e,validationErrors:h,currentQuestions:s,onBack:v,onNext:o,onSubmit:n,onChange:C,progressPercentage:d,submitting:g,submitError:z,submitData:L}=S2({survey:t,session:a}),u=F4(p=>{p.type==="NEXT"&&t&&r===t.pages.length-1&&(p={type:"SUBMIT"}),M.info(`Action dispatched: ${p.type}`,p);try{switch(p.type){case"NEXT":o();break;case"PREVIOUS":v();break;case"SUBMIT":n();break;case"CHANGE":C(p.payload.questionId,p.payload.value);break;default:break}}catch(x){M.error(`Error executing action: ${p.type}`,x)}},[o,v,n,C,t,r]);return{surveyQueryResults:{data:t,error:i,isLoading:l},submitSurveyResults:{data:L,error:z,isLoading:g},state:{currentPageIndex:r,currentQuestions:s,values:e,validationErrors:h,progressPercentage:d},onAction:u}}import L1 from"react";import D from"react";import A2 from"react";var p1={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},M1=A2.createContext&&A2.createContext(p1);var H4=["attr","size","title"];function V4(c,t){if(c==null)return{};var a,l,i=S4(c,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(c);for(l=0;l<r.length;l++)a=r[l],t.indexOf(a)===-1&&{}.propertyIsEnumerable.call(c,a)&&(i[a]=c[a])}return i}function S4(c,t){if(c==null)return{};var a={};for(var l in c)if({}.hasOwnProperty.call(c,l)){if(t.indexOf(l)!==-1)continue;a[l]=c[l]}return a}function G(){return G=Object.assign?Object.assign.bind():function(c){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var l in a)({}).hasOwnProperty.call(a,l)&&(c[l]=a[l])}return c},G.apply(null,arguments)}function y2(c,t){var a=Object.keys(c);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(c);t&&(l=l.filter(function(i){return Object.getOwnPropertyDescriptor(c,i).enumerable})),a.push.apply(a,l)}return a}function Q(c){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?y2(Object(a),!0).forEach(function(l){A4(c,l,a[l])}):Object.getOwnPropertyDescriptors?Object.defineProperties(c,Object.getOwnPropertyDescriptors(a)):y2(Object(a)).forEach(function(l){Object.defineProperty(c,l,Object.getOwnPropertyDescriptor(a,l))})}return c}function A4(c,t,a){return(t=y4(t))in c?Object.defineProperty(c,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):c[t]=a,c}function y4(c){var t=b4(c,"string");return typeof t=="symbol"?t:t+""}function b4(c,t){if(typeof c!="object"||!c)return c;var a=c[Symbol.toPrimitive];if(a!==void 0){var l=a.call(c,t||"default");if(typeof l!="object")return l;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(c)}function b2(c){return c&&c.map((t,a)=>D.createElement(t.tag,Q({key:a},t.attr),b2(t.child)))}function w(c){return t=>D.createElement(R4,G({attr:Q({},c.attr)},t),b2(c.child))}function R4(c){var t=a=>{var{attr:l,size:i,title:r}=c,e=V4(c,H4),h=i||a.size||"1em",s;return a.className&&(s=a.className),c.className&&(s=(s?s+" ":"")+c.className),D.createElement("svg",G({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},a.attr,l,e,{className:s,style:Q(Q({color:c.color||a.color},a.style),c.style),height:h,width:h,xmlns:"http://www.w3.org/2000/svg"}),r&&D.createElement("title",null,r),c.children)};return M1!==void 0?D.createElement(M1.Consumer,null,a=>t(a)):t(p1)}function R2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"},child:[]}]})(c)}function T2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zm53.5-96.7s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z"},child:[]}]})(c)}function k2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm240 80c0-8.8 7.2-16 16-16c45 0 85.6 20.5 115.7 53.1c6 6.5 5.6 16.6-.9 22.6s-16.6 5.6-22.6-.9c-25-27.1-57.4-42.9-92.3-42.9c-8.8 0-16-7.2-16-16zm-80 80c-26.5 0-48-21-48-47c0-20 28.6-60.4 41.6-77.7c3.2-4.4 9.6-4.4 12.8 0C179.6 308.6 208 349 208 369c0 26-21.5 47-48 47zM367.6 208a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"},child:[]}]})(c)}function x1(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM160 336l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z"},child:[]}]})(c)}function P2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"},child:[]}]})(c)}function Z2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM208 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm128 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z"},child:[]}]})(c)}function E2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm407.4 75.5c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM160 120c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L160 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L226.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6zm192 0c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L352 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L418.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6z"},child:[]}]})(c)}function D2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.3 388.7c-2.6 8.4-11.6 13.2-20 10.5s-13.2-11.6-10.5-20C145.2 326.1 196.3 288 256 288s110.8 38.1 127.3 91.3c2.6 8.4-2.1 17.4-10.5 20s-17.4-2.1-20-10.5C340.5 349.4 302.1 320 256 320s-84.5 29.4-96.7 68.7zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"},child:[]}]})(c)}function I2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-122 174.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8z"},child:[]}]})(c)}function U2(c){return w({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM338.7 395.9c6.6-5.9 7.1-16 1.2-22.6C323.8 355.4 295.7 336 256 336s-67.8 19.4-83.9 37.3c-5.9 6.6-5.4 16.7 1.2 22.6s16.7 5.4 22.6-1.2c11.7-13 31.6-26.7 60.1-26.7s48.4 13.7 60.1 26.7c5.9 6.6 16 7.1 22.6 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z"},child:[]}]})(c)}function q2(c){return w({tag:"svg",attr:{viewBox:"0 0 576 512"},child:[{tag:"path",attr:{d:"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"},child:[]}]})(c)}function N2(c){return w({tag:"svg",attr:{viewBox:"0 0 576 512"},child:[{tag:"path",attr:{d:"M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"},child:[]}]})(c)}var T4=["#dc2626","#e04832","#ea580c","#f59e0b","#eab308","#a3a323","#84cc16","#65a30d","#22c55e","#16a34a","#059669"],k4=[U2,k2,D2,I2,x1,x1,R2,T2,P2,Z2,E2],A={};for(let c=0;c<11;c++){let t=k4[c],a=T4[c];A[c+1]=L1.createElement(t,{className:"transition-transform",style:{color:a,fontSize:"28px"}})}var O2={3:[3,6,8],4:[3,4,7,9],5:[3,4,6,7,9],6:[3,4,6,7,9,11]};function P4(c,t){if(t<=1)return A[6];if(O2[t]){let i=O2[t][c];if(i)return A[i]}let a=c/(t-1),l=Math.min(11,Math.max(1,Math.round(a*10)+1));return A[l]}var Z4={1:A[1],2:A[4],3:A[6],4:A[8],5:A[11]},E4={filled:L1.createElement(q2,{style:{color:"#e20074",fontSize:"28px"}}),empty:L1.createElement(N2,{style:{color:"#d1d5db",fontSize:"28px",stroke:"#d1d5db",strokeWidth:"16px"}})};export{u1 as ACTIONS,Z4 as CsatEmojiMapping,A as CsatEmojiSet,E4 as CsatStarIcons,P4 as getEmojiForIndex,B4 as useSurveySDK};
1
+ import{useCallback as So,useMemo as sa,useRef as vo}from"react";import{useMemo as Xo}from"react";import{useQuery as Go}from"@tanstack/react-query";import{QueryClient as Ro}from"@tanstack/react-query";var At=!1,Io={debug:"background: #7f8c8d; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",info:"background: #2980b9; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",warn:"background: #f1c40f; color: #000; padding: 2px 5px; border-radius: 3px; font-weight: bold;",error:"background: #e74c3c; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",success:"background: #2ecc71; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",perf:"background: #9b59b6; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",analytics:"background: #e20074; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;"};function oe(e,t,r){if(!At&&e!=="analytics")return;let n=new Date().toLocaleTimeString(),i=`%c[SDK:${e.toUpperCase()}]`,o=Io[e];r!==void 0?console.log(`[${n}] ${i}`,o,t,r):console.log(`[${n}] ${i}`,o,t)}var S={setEnabled:e=>{At=e},isEnabled:()=>At,debug:(e,t)=>oe("debug",e,t),info:(e,t)=>oe("info",e,t),warn:(e,t)=>oe("warn",e,t),error:(e,t)=>oe("error",e,t),success:(e,t)=>oe("success",e,t),analytics:(e,t)=>oe("analytics",e,t),perf:e=>{oe("perf",`${e.apiName} completed in ${e.durationMs.toFixed(2)}ms | Status: ${e.status}`,e)}};function Ye(e){return e instanceof Error?e.message:String(e)}function P(e){return e instanceof Error?e:String(e)}var me=new Ro({defaultOptions:{queries:{staleTime:1/0,refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchInterval:!1,retryDelay:5e3,retry:(e,t)=>{if(e>=3)return S.error("Query failed permanently after 3 attempts. Stopping retries.",{err:P(t)}),!1;if(t instanceof Error){let r=t.message;if(r.includes("400")||r.includes("401")||r.includes("403")||r.includes("404")||r.includes("422"))return S.error(`Query failed permanently due to client error (${r}). Skipping retry.`,{err:P(t)}),!1}return S.warn(`Query failed. Retrying attempt ${e+1}/3...`,{err:P(t)}),!0}},mutations:{networkMode:"always",retryDelay:5e3,retry:(e,t)=>{if(e>=3)return S.error("Mutation failed permanently after 3 attempts. Stopping retries.",{err:P(t)}),!1;if(t instanceof Error){let r=t.message;if(r.includes("400")||r.includes("401")||r.includes("403")||r.includes("422"))return S.error("Mutation failed permanently due to validation/client error. Skipping retry.",{err:P(t)}),!1}return S.warn(`Mutation failed. Retrying attempt ${e+1}/3...`,{err:P(t)}),!0}}}});var Tr="https://custom-p0.feedbook.me/api/feedback/survey/cfm",Er="eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJBY2Nlc3MgVG9rZW4gR2VuZXJhdGVkIEJ5IFNwcmlua2xyIiwic3VydmV5SWQiOiI2YTJlNWM2NDFiOGRiMmY5MDQ2Nzg4ODUiLCJpc3MiOiJTUFJJTktMUiIsInR5cCI6IkpXVCIsInN1cnZleU1vZGUiOiJTVEFOREFSRCIsInN1cnZleUF1dGhlbnRpY2F0aW9uU3RhdGUiOiJOT1RfUkVRVUlSRUQiLCJkaXN0cmlidXRpb25FbnRpdHlJZCI6IjZhMmU1ZDEzNDRjYTkzZjc3YTVlMzcyNyIsImF1ZCI6IlNQUklOS0xSIiwibmJmIjoxNzgxNDIyMTc5LCJzY29wZSI6WyJSRUFEIiwiV1JJVEUiXSwic3RhdGljU3VydmV5IjoidHJ1ZSIsInN1cnZleVJlc3BvbmRlclNuVHlwZSI6IkVYVEVSTkFMX0FQUExJQ0FUSU9OIiwic3VydmV5TGFuZ3VhZ2UiOiJlbiIsInBhcnRuZXJJZCI6OTAwNCwidG9rZW5UeXBlIjoiQUNDRVNTIiwiYXV0aFR5cGUiOiJTVVJWRVlfUkVTUE9OU0UiLCJpYXQiOjE3ODE0MjMzNzksImp0aSI6InNwcmlua2xyIn0.B4ffi1szwM_xQKXTlr0kQc9mVOS4qVbB5e6ir4NFuCoOmNmsl3PB1QeFJ5jPaQ42s0KTpbufPam9ja0Z84CJ620l2WtuS1RModEv7ZtuMNLWOixzRxZMduC5-V7WV85H6gr1e-HzX7wgqrxTk2Z9iTr-8AVuczlwScarCfqLhA-JE_EXkFScHoehmH7QB5q5-BfcxU32iQNYOk5NyeEHGAAWkkyiGPdrbE27njPnhTunB3kKgCBvHHLq0KmgoN9x_KnrB53O_0Xai419TT5vkBWlu5a_uotZckX014eQpxYH02w_LeOF8iWEKYe6R9ge-6DSbelaJSt6U6O8Fq-aXw";function Lo(e){return`${Tr}?instanceId=${encodeURIComponent(e)}&draftPreview=false`}function hr(e){let t=typeof e=="string"&&e.trim().length>0?e.trim():Er;return Lo(t)}var l={MCQ:"MCQ",TEXTFIELD:"TEXTFIELD",NPS_SCALE:"NPS_SCALE",CFM_MATRIX:"CFM_MATRIX",CSAT_MATRIX:"CSAT_MATRIX",RATING_MATRIX:"RATING_MATRIX",SLIDER_MATRIX:"SLIDER_MATRIX",FILE_UPLOAD:"FILE_UPLOAD",TEXT_AND_MEDIA:"TEXT_AND_MEDIA",HEATMAP:"HEATMAP",RANK_ORDER:"RANK_ORDER"};function Ir(e,t,r,n){let i=t.find(h=>h.key==="REQUIRED")?.value?.[0]==="true",o=t.find(h=>h.key==="REQUIRED_ERROR_MESSAGE"),s=o?.value?.[0];r&&o?.translations?.[r]?.value?.[0]&&(s=o.translations[r].value[0]);let a=r&&e.translations?.[r]?.questionRichText||r&&e.translations?.[r]?.questionText||e.questionRichText||e.questionText||"";n&&(a=a.replace(/\{\{(\w+)\}\}/g,(h,C)=>n[C]!==void 0?n[C]:h));let u=r&&e.translations?.[r]?.descriptionRichText||r&&e.translations?.[r]?.description||e.descriptionRichText||e.description||e.descriptionText||(typeof e.additional?.descriptionRichText=="string"?e.additional.descriptionRichText:"")||(typeof e.additional?.description=="string"?e.additional.description:"")||"";if(!u){let h=t.find(C=>C.key.includes("DESCRIPTION"));u=h?.value?.[0]||"",r&&h?.translations?.[r]?.valueRichText?.[0]?u=h.translations[r].valueRichText[0]:r&&h?.translations?.[r]?.value?.[0]&&(u=h.translations[r].value[0])}u&&n&&(u=u.replace(/\{\{(\w+)\}\}/g,(h,C)=>n[C]!==void 0?n[C]:h));let p=e.questionHint,c=t.find(h=>h.key==="QUESTION_HINT");c?.value?.[0]&&c.value[0]!=="true"&&c.value[0]!=="false"&&(p=c.value[0]);let y=e.questionContainerAssets?.[0],g=y?.source||y?.mediaUrl||y?.previewImageUrl,b=y?.mediaMimeType,T=t.find(h=>h.key==="QUESTION_CONTAINER_MEDIA_ALIGNMENT")?.value?.[0],A=t.find(h=>h.key==="TEXT_AND_MEDIA_SIZE"),f=A?.value?.[0]?Number(A.value[0]):void 0,m=g||b||T||f!==void 0?{...g?{url:g}:{},...b?{mimeType:b}:{},...T?{alignment:T}:{},...f!==void 0?{size:f}:{}}:void 0,R=e.additionalInfo?.associatedPlaceholderQuestionIds,k=Array.isArray(R)?R.filter(h=>typeof h=="string"&&h.length>0):void 0;return{id:e.id??"",questionText:a,...u?{questionDescription:u}:{},...p?{questionHint:p}:{},required:i,...s?{requiredErrorMessage:s}:{},...e.questionNumber!==void 0?{questionNumber:e.questionNumber}:{},...m?{containerMedia:m}:{},...k&&k.length>0?{referencedQuestionIds:k}:{}}}var Po=new Set(["TEXT","TEXT_MULTI","TEXTAREA","NUMBER","PICKLIST","PICKLIST_MULTISELECT","DATETIME"]);function Co(e){return Array.isArray(e.filters)&&e.filters.length>0}function Rr(e){return e==="AND"||e==="OR"}function ko(e){return e!==void 0&&Po.has(e)}function wo(e){return!e?.id||e.entityType!=="QUESTION"?null:{id:e.id,entityType:"QUESTION",...e.answerType?{answerType:e.answerType}:{}}}function Oo(e){return!e?.id||e.entityType!=="CUSTOM_FIELD"||!ko(e.fieldType)?null:{id:e.id,entityType:"CUSTOM_FIELD",fieldType:e.fieldType,...e.assetClass?{assetClass:e.assetClass}:{}}}function Mo(e){return wo(e)??Oo(e)}function Qo(e){return!e?.id||e.entityType!=="OPTION"?null:{id:e.id,entityType:"OPTION"}}function No(e){if(!e.filterType||Rr(e.filterType))return null;let t=Mo(e.details?.conditionEntity);if(!t)return null;let r=Qo(e.details?.subConditionEntity),n={filterType:e.filterType,details:{conditionEntity:t,...r?{subConditionEntity:r}:{}}},i=e.details?.valueAdditional?.timezone;return i&&(n.details.valueAdditional={timezone:i}),e.field&&(n.field=e.field),e.values&&(n.values=e.values),n}function _o(e){if(!Rr(e.filterType))return null;let t=e.filters.map(r=>Lr(r)).filter(r=>r!==null);return t.length===0?null:{filterType:e.filterType,filters:t}}function Lr(e){return Co(e)?_o(e):No(e)}function Fo(e){return"filters"in e}function fe(e){if(!e)return null;let t=Lr(e);return t?Fo(t)?t:{filterType:"AND",filters:[t]}:null}function Pr(e){if(!e?.length)return;let t=e.map(r=>{let n=r.id?.trim(),i=r.skipTo?.id?.trim(),o=r.skipTo?.entityType,s=fe(r.condition);return!n||!i||!o||!s||o!=="QUESTION"&&o!=="END_OF_SURVEY"?null:{id:n,skipTo:{id:i,entityType:o},condition:s}}).filter(r=>r!==null);return t.length>0?t:void 0}function ge(e){if(!e)return;let t=fe(e.condition);if(t)return{condition:t,isDynamicAppearanceEnabled:e.isDynamicAppearanceEnabled===!0}}function Vo(e,t,r){let n=t&&e.translations?.[t]?.questionRichText||t&&e.translations?.[t]?.questionText||e.questionRichText||e.questionText||"";return r&&(n=n.replace(/\{\{(\w+)\}\}/g,(i,o)=>r[o]!==void 0?r[o]:i)),n}function Cr(e,t,r){let n=e.questionDisplayVariants;if(!n?.length)return;let i=[];for(let o of n){let s=o.id;if(!s)continue;let a=Vo(o,t,r);if(!a)continue;let u=ge(o.controlConfig?.displayLogic);u&&i.push({id:s,questionText:a,...u?{displayLogic:u}:{}})}return i.length>0?i:void 0}function kr(e,t,r,n){return{...e,...t?.length?{skipLogics:t}:{},...r?{displayLogic:r}:{},...n?.length?{displayVariants:n}:{}}}function H(e){if(!e)return;let t=fe(e.condition);if(t)return{condition:t}}function Tt(e,t){return(e.answerDetails??[]).filter(r=>!r.hidden&&!r.additional?.isHintText).map((r,n)=>{let i=H(r.controlConfig?.displayLogic);return{id:r.id??String(n),optionLabel:t&&r.translations?.[t]?.answerText||r.answerText||"",...i?{answerLogic:i}:{}}})}function wr(e){let t=e.find(u=>u.key==="ANSWER_CONDITION");if(t?.value?.[0]?.toLowerCase()!=="true")return{};let r=t.childConfigs?.find(u=>u.key==="MIN_MAX_ANSWER"),n=r?.childConfigs?.find(u=>u.key==="MIN_ANSWER")?.value?.[0],i=r?.childConfigs?.find(u=>u.key==="MAX_ANSWER")?.value?.[0],o=t.childConfigs?.find(u=>u.key==="ERROR_MESSAGE")?.value?.[0],s=n!==void 0?Number(n):void 0,a=i!==void 0?Number(i):void 0;return{...s!==void 0&&Number.isFinite(s)?{minSelections:s}:{},...a!==void 0&&Number.isFinite(a)?{maxSelections:a}:{},...o?{answerConditionErrorMessage:o}:{}}}function Or(e,t){let r=e.find(o=>o.key==="DEFAULT_ANSWER");if(r?.value?.[0]?.toLowerCase()!=="true")return;let i=r.childConfigs?.find(o=>o.key==="DEFAULT_ANSWERS")?.value?.filter(Boolean)??[];if(i.length!==0){if(t&&t.length>0){let o=new Set(t),s=i.filter(a=>o.has(a));return s.length>0?s:void 0}return i}}function Et(e,t,r){let n=e.questionConfigs??[],o=(n.find(b=>b.key==="MCQ_VARIANT")?.value?.[0]?.toUpperCase()??"SINGLESELECT").includes("MULTI")?"multiple":"single",a=(n.find(b=>b.key==="MCQ_FORMAT_TYPE")?.value?.[0]?.toUpperCase()??"LIST").includes("GRID")?"grid":"list",u=n.find(b=>b.key==="SHUFFLE_ORDER")?.value?.[0]?.toLowerCase()==="true",p=n.find(b=>b.key==="COLUMNS")?.value?.[0],c=p?Number(p):void 0,d=Tt(e,r),y=Or(n,d.map(b=>b.id)),g=wr(n);return{...t,type:l.MCQ,options:d,selectionMode:o,displayFormat:a,shuffleOptions:u,...c!==void 0&&Number.isFinite(c)?{columnCount:c}:{},...y?{defaultOptionIds:y}:{},...g}}function Oe(e=[],t){let r=e.filter(n=>n.additional?.isHintText&&!n.hidden).map(n=>t&&n.translations?.[t]?.answerText||n.answerText||"").filter(Boolean);return r.length>=3?{minLabel:r[0],midLabel:r[1],maxLabel:r[2]}:{minLabel:r[0],maxLabel:r[1]}}function ht(e,t){let r=(e.answerDetails??[]).filter(n=>!n.hidden&&!n.additional?.isHintText);return r.length>0?r.map((n,i)=>({id:n.id??String(i),optionLabel:t&&n.translations?.[t]?.answerText||n.answerText||String(i)})):Array.from({length:11},(n,i)=>({id:String(i),optionLabel:String(i)}))}function Mr(e,t,r,n){let{minLabel:i,midLabel:o,maxLabel:s}=Oe(e.answerDetails,n),a=ht(e,n),u=r.find(y=>y.key.includes("REVERSE"))?.value?.[0]?.toLowerCase()==="true"||e.additional?.reverseScaleOrder===!0||e.additional?.reverseScale===!0;if(u){a=[...a].reverse();let y=i;i=s,s=y}let p;o&&(p=a.length===11?u?2.5:7.5:(a.length-1)/2);let c="numbered",d=r.find(y=>y.key==="NPS_BUTTON_VARIANT")?.value?.[0]?.toLowerCase();return d==="emoji"?c="emoji":d==="radio"&&(c="standard"),{...t,type:l.NPS_SCALE,options:a,...i?{minLabel:i}:{},...o?{midLabel:o}:{},...p!==void 0?{midLabelIndex:p}:{},...s?{maxLabel:s}:{},reverseScaleOrder:!!u,buttonStyle:c}}function Qr(e,t,r,n){let i=r.find(d=>d.key==="CONTENT_TYPE"),o=i?.childConfigs?.find(d=>d.key==="MAX_CHARACTER_COUNT"),s=o?.value?.[0]?Number(o.value[0]):void 0,u=(i?.value?.[0]?.toUpperCase()??"LONG").includes("SHORT")?"short":"long",p=e.answerDetails?.[0],c=p?n&&p.translations?.[n]?.answerText||p.answerText:void 0;return{...t,type:l.TEXTFIELD,inputVariant:u,...s!==void 0?{maxCharacterCount:s}:{},...c?{placeholder:c}:{}}}function se(e){let t=JSON.stringify(e).toUpperCase();return t.includes("CAROUSEL")?"carousel":t.includes("DROPDOWN")?"dropdown":"standard"}function ye(e,t,r){let n=e;if(r&&n.answerDetails&&n.answerDetails.length>=2){let o=t&&n.answerDetails[0].translations?.[t]?.answerText||n.answerDetails[0].answerText||"";if(o)return o}let i=t&&e.translations?.[t]?.questionText||e.questionText||e.answerText||"";return r&&i.includes(":")?i.split(":")[0].trim():i}function Do(e,t,r){let n=e;if(r&&n.answerDetails&&n.answerDetails.length>=2){let a=t&&n.answerDetails[1].translations?.[t]?.answerText||n.answerDetails[1].answerText||"";if(a)return a}let i=e.additional,o=t&&e.translations?.[t]?.description||e.description||i?.rightLabel||i?.rightStatement||i?.rightText;if(typeof o=="string"&&o.trim()!=="")return o;let s=t&&e.translations?.[t]?.questionText||e.questionText||e.answerText||"";if(r&&s.includes(":"))return s.split(":").slice(1).join(":").trim()}function It(e,t,r){let n=(e.matrixRowQuestions?.length??0)>0?e.matrixRowQuestions:e.childSurveyQuestions;return n&&n.length>0?n.filter(i=>i.id).map(i=>{let o=H(i.controlConfig?.displayLogic),s=Do(i,t,r);return{id:i.id,statementText:ye(i,t,r),...s?{oppositeStatementText:s}:{},...o?{answerLogic:o}:{}}}):(e.answerDetails??[]).filter(i=>!i.hidden&&!i.additional?.isHintText).map((i,o)=>({id:`row_${o}`,statementText:t&&i.translations?.[t]?.answerText||i.answerText||""}))}function ae(e,t){return e.matrixColumnQuestions&&e.matrixColumnQuestions.length>0?e.matrixColumnQuestions.filter(r=>r.id).map(r=>{let n=t&&r.translations?.[t]?.answerText||r.answerText||ye(r,t),i=H(r.controlConfig?.displayLogic);return{id:r.id,label:n,...i?{answerLogic:i}:{}}}):(e.answerDetails??[]).filter(r=>!r.hidden&&!r.additional?.isHintText).map((r,n)=>{let i=t&&r.translations?.[t]?.answerText||r.answerText||"",o=H(r.controlConfig?.displayLogic);return{id:r.id??`col_${n}`,label:i,...o?{answerLogic:o}:{}}})}function Nr(e,t,r){let n=e.questionConfigs??[],o=n.find(f=>f.key==="MATRIX_TYPE")?.value?.[0]?.toLowerCase()==="bipolar"?"bipolar":"likert",a=It(e,r,o==="bipolar"),u=ae(e,r),p=se(n),d=n.some(f=>f.key.includes("MULTI")||f.value?.[0]?.toUpperCase().includes("MULTI")||f.key.includes("ANSWER")&&f.value?.[0]?.toUpperCase().includes("MULTI")||f.key.includes("SELECT")&&f.value?.[0]?.toUpperCase().includes("MULTI"))?"multiple":"single",y=n.find(f=>f.key==="TRANSPOSE_TABLE")?.value?.[0]?.toLowerCase()==="true",g=n.find(f=>f.key==="REPEAT_SCALE")?.value?.[0]?.toLowerCase()==="true",b=n.find(f=>f.key==="NOT_APPLICABLE_OPTIONS")?.value?.[0]==="true"||n.find(f=>f.key==="ENABLE_NON_APPLICABLE")?.value?.[0]==="true",x=b?!1:y;b&&u.push({id:"na",label:"N/A"});let T=n.find(f=>f.key==="ENABLE_SCALE")?.value?.[0]?.toLowerCase()!=="false",A;return o==="bipolar"&&(A=(e.answerDetails??[]).filter(f=>f.additional?.isHintText&&!f.hidden).map(f=>r&&f.translations?.[r]?.answerText||f.answerText||"").filter(Boolean),A.length===0&&(A=void 0)),{...t,type:l.CFM_MATRIX,statementRows:a,scaleColumns:u,statementLayout:o,selectionMode:d,gridLayout:p,transposeTable:x,repeatColumnHeaders:!!g,hasNotApplicableOption:!!b,showColumnHeaders:T,...A?{scaleAnchorLabels:A}:{}}}function Me(e,t){let n=`${e.map(o=>o.value?.[0]||"").join(" ").toUpperCase()} ${(t||"").toUpperCase()}`,i=e.find(o=>o.key==="BUTTON_TYPE")?.value?.[0]?.toLowerCase();return i==="radio"&&(i="standard"),i==="emoji"||i==="star"||i==="standard"||i==="numbered"||i==="dropdown"||i==="selectbox"||i==="graphics"?i:n.includes("EMOJI")||n.includes("CSAT")||n.includes("SMILEY")||n.includes("FACE")?"emoji":n.includes("STAR")?"star":n.includes("GRAPHIC")||n.includes("SLIDER")?"graphics":n.includes("DROP")?"dropdown":n.includes("SELECT")?"selectbox":n.includes("RADIO")?"standard":n.includes("NUMBER")?"numbered":"standard"}function ue(e,t){let r=(e.matrixRowQuestions?.length??0)>0?e.matrixRowQuestions:e.childSurveyQuestions;return r&&r.length>0?r.filter(n=>n.id).map(n=>{let i=H(n.controlConfig?.displayLogic);return{id:n.id,statementText:ye(n,t),...i?{answerLogic:i}:{}}}):(e.answerDetails??[]).filter(n=>!n.hidden&&!n.additional?.isHintText).map((n,i)=>({id:`row_${i}`,statementText:t&&n.translations?.[t]?.answerText||n.answerText||""}))}function _r(e,t,r){let n=e.questionConfigs??[],i=ae(e,r),o=n.find(u=>u.key==="NOT_APPLICABLE_OPTIONS")?.value?.[0]==="true"||n.find(u=>u.key==="ENABLE_NON_APPLICABLE")?.value?.[0]==="true",s=n.find(u=>u.key.includes("REVERSE"))?.value?.[0]?.toLowerCase()==="true"||e.additional?.reverseScaleOrder===!0||e.additional?.reverseScale===!0,a=(e.answerDetails??[]).filter(u=>u.additional?.isHintText&&!u.hidden).map(u=>r&&u.translations?.[r]?.answerText||u.answerText||"").filter(Boolean);return s&&(i=[...i].reverse(),a=[...a].reverse()),o&&i.push({id:"na",label:"N/A"}),{...t,type:l.CSAT_MATRIX,statementRows:ue(e,r),scaleColumns:i,displayStyle:Me(n,e.dataSubType),hasNotApplicableOption:!!o,reverseScaleOrder:!!s,gridLayout:se(n),...a.length>0?{scaleAnchorLabels:a}:{}}}function Fr(e,t,r){let n=e.questionConfigs??[],i=ae(e,r),o=n.find(c=>c.key==="NOT_APPLICABLE_OPTIONS")?.value?.[0]==="true"||n.find(c=>c.key==="ENABLE_NON_APPLICABLE")?.value?.[0]==="true",s=n.find(c=>c.key.includes("REVERSE"))?.value?.[0]?.toLowerCase()==="true"||e.additional?.reverseScaleOrder===!0||e.additional?.reverseScale===!0,a=(e.answerDetails??[]).filter(c=>c.additional?.isHintText&&!c.hidden).map(c=>r&&c.translations?.[r]?.answerText||c.answerText||"").filter(Boolean);s&&(i=[...i].reverse(),a=[...a].reverse()),o&&i.push({id:"na",label:"N/A"});let{minLabel:u,maxLabel:p}=Oe(e.answerDetails,r);return{...t,type:l.RATING_MATRIX,statementRows:ue(e,r),scaleColumns:i,...u?{minLabel:u}:{},...p?{maxLabel:p}:{},displayStyle:Me(n,e.dataSubType),hasNotApplicableOption:!!o,reverseScaleOrder:!!s,gridLayout:se(n),...a.length>0?{scaleAnchorLabels:a}:{}}}function Rt(e,t){let r=Number(e.additional?.sliderMin??0),n=Number(e.additional?.sliderMax??10),i=Number(e.additional?.sliderStep??1);return ue(e,t).map(s=>({...s,min:Number.isFinite(r)?r:0,max:Number.isFinite(n)?n:10,step:Number.isFinite(i)&&i>0?i:1}))}function Vr(e,t,r){let n=e.questionConfigs||[],i=n.find(E=>E.key==="SLIDER_TICKS_AND_VALUES"),o=i?.childConfigs||[],s=o.find(E=>E.key==="TICK_START")?.value?.[0],a=o.find(E=>E.key==="TICK_END")?.value?.[0],u=o.find(E=>E.key==="STEP_SIZE")?.value?.[0],p=i?.value?.[0],c=s!==void 0?Number(s):0,d=a!==void 0?Number(a):10,y=u!==void 0?Number(u):1,g=p!==void 0?Number(p):10,b={...e,additional:{...e.additional,sliderMin:c,sliderMax:d,sliderStep:y}},x=Rt(b,r),T=(e.answerDetails||[]).filter(E=>E.additional?.isHintText).map(E=>r&&E.translations?.[r]?.answerText||E.answerText||"").filter(Boolean),A=E=>{for(let N of E){let B=n.find(_=>_.key===N)||o.find(_=>_.key===N);if(B?.value?.length)return B.value[0]?.toString().toLowerCase()==="true"}return!1},f=n.find(E=>E.key==="SCALE_TYPE"||E.key==="VIEW_VARIANT")?.value?.[0]?.toUpperCase().includes("GRAPHIC"),m=A(["ENABLE_INPUT_BOX","SHOW_INPUT_BOX","INPUT_BOX","ENABLE_INPUT"]),R=A(["SHOW_VALUE","DISPLAY_VALUES"]),k=A(["NOT_APPLICABLE","NOT_APPLICABLE_OPTIONS"]),h=(e.answerDetails||[]).filter(E=>!E.additional?.isHintText&&!E.hidden).map(E=>E.translations?.[r||""]?.answerText||E.answerText||""),C=[];if(g>1){let E=(d-c)/(g-1);for(let N=0;N<g;N++){let B=Number((c+N*E).toFixed(2)),_=h[N]||B.toString();C.push({tickPosition:B,tickLabel:_})}}return{...t,type:l.SLIDER_MATRIX,statementRows:x,ticks:{count:g,marks:C},enableInputBox:m,displayValues:R,hasNotApplicableOption:k,sliderStyle:f?"graphics":"standard",...T.length>0?{scaleAnchorLabels:T}:{}}}function Lt(e){let t=e.additional??{},r=t.mediaUrl??t.previewUrl,n=t.mediaMimeType,i=t.title,o=e.questionContainerAssets;if(Array.isArray(o)&&o.length>0){let d=o[0];(d.source||d.previewImageUrl)&&(r=d.source||d.previewImageUrl),d.type&&(d.type==="PHOTO"||d.type==="IMAGE"?n="image/*":d.type==="VIDEO"?n="video/*":n=d.type)}let s=e.questionConfigs||[],a=s.find(d=>d.key==="TEXT_AND_MEDIA_ALIGNMENT"),u=s.find(d=>d.key==="TEXT_AND_MEDIA_SIZE"),p=a?.value?.[0],c=u?.value?.[0]?Number(u.value[0]):void 0;return{...r?{url:r}:{},...n?{mimeType:n}:{},...i?{title:i}:{},...p?{alignment:p}:{},...c!==void 0?{size:c}:{}}}function Dr(e,t){let r=Lt(e),{containerMedia:n,...i}=t,o=t.questionText;if(Array.isArray(e.answerDetails)){let a=e.answerDetails.find(u=>u.additional?.textAndMediaFieldType==="HEADER");a?.answerText&&(o=a.answerText)}let s=Object.keys(r).length>0;return{...i,questionText:o,type:l.TEXT_AND_MEDIA,...s?{media:r}:{}}}function Ur(e,t,r){let n=e.questionConfigs||[],i=e.answerDetails?.find(x=>x.additional?.fieldType==="UPLOAD_MESSAGE"),o=r&&i?.translations?.[r]?.answerText||i?.answerText||"",a=n.find(x=>x.key==="SUPPORTED_FILE_FORMAT")?.value?.map(x=>x.toUpperCase().replace(/^\./,""))||[],u=n.find(x=>x.key==="MAX_FILE_COUNT"),p=u?.value?.[0]?Number(u.value[0]):void 0,c=n.find(x=>x.key==="FILE_SIZE_LIMIT"),d=c?.childConfigs?.find(x=>x.key==="SIZE_LIMIT_ID")?.value?.[0],y=c?.childConfigs?.find(x=>x.key==="SIZE_FORMAT_ID")?.value?.[0],g=d?Number(d):void 0,b=y==="IN_TOTAL"?"IN_TOTAL":"PER_FILE";return{...t,type:l.FILE_UPLOAD,supportedFileFormats:a,fileSizeLimitType:b,...o?{uploadMessage:o}:{},...p!==void 0?{maxFileCount:p}:{},...g!==void 0?{fileSizeLimit:g}:{}}}function Pt(e,t,r){let n=t>0?t:Math.max(...e.map(s=>s.coordinateX+s.width),1),i=r>0?r:Math.max(...e.map(s=>s.coordinateY+s.height),1);return{regions:e.map(s=>({id:s.id,label:s.label??s.id,x:s.coordinateX/n,y:s.coordinateY/i,width:s.width/n,height:s.height/i,...s.color?{color:s.color}:{}})),referenceWidth:n,referenceHeight:i}}function qr(e,t){let r=e.surveyHeatmapMetadata,n=e.questionAssets?.[0],i=n?.source||n?.previewImageUrl||"",o=r?.totalClickAllowed??20,s=Math.min(20,Math.max(1,o)),{regions:a,referenceWidth:u,referenceHeight:p}=Pt(r?.heatmapRegions??[],r?.imageWidth??0,r?.imageHeight??0);return{...t,type:l.HEATMAP,imageUrl:i,regions:a,maxClicksAllowed:s,referenceWidth:u,referenceHeight:p}}function Br(e,t){return(e.answerDetails??[]).filter(r=>!r.hidden&&!r.additional?.isHintText).map((r,n)=>{let i=H(r.controlConfig?.displayLogic),o=r.answerAsset,s=o?.source||o?.previewImageUrl,a=o?.previewImageUrl||o?.source;return{id:r.id??String(n),optionLabel:t&&r.translations?.[t]?.answerText||r.answerText||"",...s?{imageUrl:s}:{},...a?{previewImageUrl:a}:{},...i?{answerLogic:i}:{}}})}function Hr(e,t){return e.find(r=>r.key===t)?.value?.[0]?.toLowerCase()==="true"}function Uo(e){return e?.toUpperCase()==="DRAG_AND_DROP"?"dragAndDrop":"dropdown"}function qo(e){switch(e?.toUpperCase()){case"TEXT_ONLY":return"textOnly";case"IMAGE_ONLY":return"imageOnly";default:return"textAndImage"}}function Xr(e,t,r,n){let i=r.find(s=>s.key==="RANK_ORDER_ANSWER_TYPE"),o=r.find(s=>s.key==="OPTION_TYPE");return{...t,type:l.RANK_ORDER,options:Br(e,n),interactionMode:Uo(i?.value?.[0]),optionDisplay:qo(o?.value?.[0]),requireRankAll:Hr(r,"REQUIRE_RANK_ALL"),shuffleOptions:Hr(r,"SHUFFLE_ORDER")}}function Ct(e,t,r){let n=e.questionConfigs??[],i=Ir(e,n,t,r),o=Pr(e.controlConfig?.skipLogics),s=ge(e.controlConfig?.displayLogic),a=Cr(e,t,r);function u(p){return kr(p,o,s,a)}switch(e.answerType){case l.NPS_SCALE:case"SCALE":return u(Mr(e,i,n,t));case l.TEXTFIELD:return u(Qr(e,i,n,t));case l.CFM_MATRIX:return u(Nr(e,i,t));case l.CSAT_MATRIX:return u(_r(e,i,t));case l.RATING_MATRIX:return u(Fr(e,i,t));case l.SLIDER_MATRIX:return u(Vr(e,i,t));case l.TEXT_AND_MEDIA:return u(Dr(e,i));case l.FILE_UPLOAD:return u(Ur(e,i,t));case l.HEATMAP:return u(qr(e,i));case l.RANK_ORDER:return u(Xr(e,i,n,t));case l.MCQ:return u(Et(e,i,t));default:return u(Et(e,i,t))}}function Gr(e){let t=e.trim();if(!t)return null;let r=t.split(".");if(r.length<2)return null;try{let n=r[1].replace(/-/g,"+").replace(/_/g,"/"),i=n.padEnd(n.length+(4-n.length%4)%4,"="),o=atob(i),s=JSON.parse(o);if(typeof s!="object"||s===null)return null;let a=s;return{surveyResponseId:typeof a.surveyResponseId=="string"?a.surveyResponseId:void 0}}catch{return null}}var Bo={en:"English",hi:"Hindi",de:"Deutsch",es:"Espa\xF1ol",fr:"Fran\xE7ais",bn:"Bengali",gu:"Gujarati",it:"Italiano",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",mr:"Marathi",pa:"Punjabi",ta:"Tamil",te:"Telugu",ur:"Urdu",zh:"\u4E2D\u6587"};function Ho(e){let t=e.toLowerCase().trim();return Bo[t]||e.toUpperCase()}function zr(e){let t=e.cfmSurveyDTO,r=new Set,n=t?.baseLanguage??"en";return r.add(n),t&&Array.isArray(t.surveyPages)&&t.surveyPages.forEach(i=>{(i.questionHolders??[]).forEach(o=>{let s=o.question;s&&s.translations&&Object.keys(s.translations).forEach(a=>{r.add(a)})})}),Array.from(r).map(i=>({code:i,name:Ho(i)}))}function Yr(e,t,r){let n=e.cfmSurveyDTO;return!n||!Array.isArray(n.surveyPages)?[]:n.surveyPages.map((i,o)=>{let s=(i.questionHolders??[]).map(a=>a.question).filter(a=>!!a).map(a=>Ct(a,t,r));return{id:i.id??`page_${o}`,title:i.title??`Page ${o+1}`,questions:s}})}function kt(e,t){if(!e?.id||e.disabled)return;let r=e.translations?.[t??""],n=r?.headerRichText||r?.header||e.headerRichText||e.header||e.title||"",i=r?.descriptionRichText||r?.description||e.descriptionRichText||e.description,o=e.ctaConfig?.others?.start,s=t&&o?.translations?.[t]?.buttonText||o?.buttonText;if(!n.trim())return;let a=ge(e.controlConfig?.displayLogic),u=r?.title||e.title;return{id:e.id,header:n,...u?{title:u}:{},...i?{description:i}:{},...s?{ctaLabel:s}:{},...e.disabled!==void 0?{disabled:e.disabled}:{},...a?{displayLogic:a}:{}}}function jr(e,t){let r=e.cfmSurveyDTO;if(!r)return{endPages:[]};let n=(r.endPages??[]).map(i=>kt(i,t)).filter(i=>!!i);return{introPage:kt(r.introPage,t),endPages:n,pausedPage:kt(r.pausedPage,t)}}function Kr(e){let r=e.cfmSurveyDTO?.status==="PAUSED";return{expired:!!e.expired,alreadyFilled:!!(e.alreadyFilled||e.surveySubmitted),quotaFulfilled:!!e.quotaFulfilled,paused:r}}function $r(e){let{phaseFlags:t}=e;return t.expired?{kind:"expired"}:t.quotaFulfilled?{kind:"quota_fulfilled"}:t.alreadyFilled?{kind:"submitted"}:t.paused?{kind:"paused"}:e.introPage?{kind:"intro"}:{kind:"content",pageIndex:0}}function wt(e){if(!e.instanceId?.trim())return null;let t=e.instanceId.trim(),r=Gr(t);return{instanceId:t,language:e.surveyLanguage??e.cfmSurveyDTO?.baseLanguage??"en",responseId:r?.surveyResponseId,...e.instanceCreatedTime!==void 0?{instanceCreatedTime:e.instanceCreatedTime}:{}}}function Jr(e,t){return t??e.surveyLanguage??e.cfmSurveyDTO?.baseLanguage??"en"}function Ot(e,t,r){let n=Jr(e,t),i=zr(e),o=Yr(e,n,r),{introPage:s,endPages:a,pausedPage:u}=jr(e,n),p=Kr(e);return{id:e.cfmSurveyDTO?.id??"",language:n,languages:i,pages:o,...s?{introPage:s}:{},endPages:a,...u?{pausedPage:u}:{},phaseFlags:p}}function Wr(e){S.info("Starting survey layout API fetch...",{url:e})}function Mt(e,t,r){S.perf({apiName:"GET Survey Layout",durationMs:e,status:t,url:r,success:!1})}function Zr(e,t,r,n){S.perf({apiName:"GET Survey Layout",durationMs:e,status:t,url:r,payloadSize:n,success:!0})}function en(e){S.success("Raw survey layout fetched successfully",{apiResponse:e})}function tn(e){S.error("Failed to fetch raw survey layout",{err:e})}function rn(){S.warn("Cannot map survey: apiResponse is null or undefined")}function nn(e){S.success("Mapped survey layout successfully",{mappedSurvey:e})}function on(e){S.error("Failed to map survey layout",{err:e})}function w(e){if(e.eventName==="survey_session_summary"){let{completed:t,totalDurationMs:r,maxVisitedPageIndex:n,totalQuestionsCount:i,answeredQuestionsCount:o,skippedQuestionsCount:s,skippedQuestionIds:a,validationErrorsCount:u,backtrackCount:p}=e.metadata;S.analytics(`Event: ${e.eventName} - SESSION SUMMARY TABLE:`);let c=[{Metric:"Completion Status",Value:t?"COMPLETED \u2705":"ABANDONED \u274C"},{Metric:"Total Time Spent",Value:`${(r/1e3).toFixed(2)} seconds`},{Metric:"Max Page Index Reached",Value:`${n}`},{Metric:"Total Questions",Value:i},{Metric:"Answered Questions",Value:o},{Metric:"Skipped Optional Questions",Value:s},{Metric:"Skipped Question IDs",Value:a.join(", ")||"None"},{Metric:"Validation Errors Triggered",Value:u},{Metric:"Backtrack Count",Value:p},{Metric:"Validation Error History",Value:e.metadata.validationHistory?.map(d=>`[Page ${d.pageIndex}] Attempt ${d.attemptNumber}: ${Object.keys(d.errors).join(", ")}`).join(" | ")||"NO Validation Erros Occurred"}];console.table(c)}else if(e.eventName==="logic_session_summary"){S.analytics("Event: logic_session_summary - LOGIC ANALYSIS TABLE:");let t=[{"Logic Kind":"Display logic matches",Count:e.metadata.displayLogicMatches.length},{"Logic Kind":"Answer logic matches",Count:e.metadata.answerLogicMatches.length},{"Logic Kind":"Variant matches",Count:e.metadata.variantMatches.length},{"Logic Kind":"End page changes",Count:e.metadata.endPageResolution.changeCount},{"Logic Kind":"Skip logic triggers",Count:e.metadata.skipLogicTriggers.length},{"Logic Kind":"Questions viewed",Count:e.metadata.viewedCount},{"Logic Kind":"On-path questions not viewed",Count:e.metadata.notViewedOnPathCount}];console.table(t),e.metadata.logicEventTimeline.length>0&&console.table(e.metadata.logicEventTimeline)}else S.analytics(`Event: ${e.eventName}`,e.metadata)}function sn(e,t,r,n){w({eventName:"survey_fetch_latency",metadata:{durationMs:e,status:t,success:!0,url:r,payloadSize:n}})}function Qt(e,t,r){w({eventName:"api_error",metadata:{apiName:"GET Survey Layout",status:e,url:t,errorMessage:r}})}async function zo(e){let t=performance.now();Wr(e);try{let r=await fetch(e,{method:"GET",headers:{Accept:"application/json"},cache:"force-cache"}),n=performance.now()-t;if(!r.ok)throw Mt(n,r.status,e),Qt(r.status,e,`Survey fetch failed (${r.status})`),new Error(`Survey fetch failed (${r.status})`);let i=await r.json(),o=JSON.stringify(i),a=`${(new Blob([o]).size/1024).toFixed(2)} KB`;return Zr(n,r.status,e,a),sn(n,r.status,e,a),en(i),i}catch(r){let n=performance.now()-t;throw Mt(n,"FAILED",e),Qt("FAILED",e,Ye(r)),tn(P(r)),r}}function an(e){let t=hr(e?.instanceId),r=e?.language,n=e?.placeholders,{data:i,error:o,isLoading:s,isSuccess:a}=Go({queryKey:["survey",t],queryFn:()=>zo(t),enabled:!!t},me),u=Xo(()=>{if(!a)return{survey:null,session:null};if(!i)return rn(),{survey:null,session:null};try{let p=Ot(i,r,n),c=wt(i),d=c?{...c,language:p.language}:null;return nn(p),{survey:p,session:d}}catch(p){return on(P(p)),{survey:null,session:null}}},[i,a,r]);return{survey:u.survey,session:u.session,fetching:s,fetchError:o}}import{useState as Xe,useRef as gr,useEffect as yr,useMemo as le,useCallback as Sr}from"react";import{useCallback as is}from"react";import{useMutation as os}from"@tanstack/react-query";function un(e){S.debug("Resolved raw inputs to submit schema:",{resolved:e})}function pn(e){S.debug("Constructed JSON request body:",{body:e})}function cn(e){S.error("Failed to execute submit callback",{err:e})}var Se="https://custom-p0.feedbook.me/api/feedback/survey";var ln=`${Se}/responseV2`;function je(e,t="en",r=!0){let n=new URLSearchParams({instanceId:e,surveySubmitted:r?"true":"false",surveyLanguage:t});return`${ln}?${n.toString()}`}function Yo(e){return typeof e=="object"&&e!==null&&typeof e.id=="string"&&typeof e.x=="number"&&typeof e.y=="number"}function z(e){if(typeof e=="string")try{return z(JSON.parse(e))}catch{return[]}if(!Array.isArray(e))return[];let t=[];for(let r of e)Yo(r)&&t.push({id:r.id,x:Math.min(1,Math.max(0,r.x)),y:Math.min(1,Math.max(0,r.y))});return t}function jo(e,t){let r=t.x+t.width,n=t.y+t.height;return e.x>=t.x&&e.x<=r&&e.y>=t.y&&e.y<=n}function Ke(e,t){let r=[];for(let n of t)for(let i of e)if(jo(i,n)){r.includes(n.label)||r.push(n.label);break}return r}function Ko(e){return e.id==="na"?null:e.id}function $o(e,t){let r=Number(e.optionLabel);return Number.isFinite(r)&&e.optionLabel.trim()!==""?r:t}function Jo(e,t){let r=String(t),n=e.find(o=>o.id===t||o.id===r);if(!n)return r;let i=Number(n.label);return Number.isFinite(i)&&n.label.trim()!==""?String(i):n.label}function dn(e,t){let r=Array.isArray(t)?t.filter(n=>typeof n=="string"):typeof t=="string"?[t]:[];return r.length===0?null:r.map(n=>e.options.find(o=>o.id===n)?.optionLabel??String(n))}function mn(e,t){if(t==null)return null;let n=(Array.isArray(t)?t:[t]).filter(i=>i!=null).map(i=>Jo(e,i));return n.length>0?n:null}function fn(e,t){let r=e.find((n,i)=>$o(n,i)===t);if(r){let n=Number(r.optionLabel);return Number.isFinite(n)&&r.optionLabel.trim()!==""?String(n):r.optionLabel}return String(t)}function gn(e){return typeof e!="string"||e===""?null:[e]}function D(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let t={};for(let[r,n]of Object.entries(e)){let i=typeof n=="number"?n:typeof n=="string"&&n.trim()!==""?Number(n):NaN;Number.isFinite(i)&&i>0&&(t[r]=i)}return t}function V(e,t){let r=e[t];return typeof r=="number"&&Number.isFinite(r)?r:void 0}function yn(e,t,r){if(t.length===0)return!0;let n=t.filter(i=>V(e,i)!==void 0).length;return r?n<t.length:n===0}function Sn(e,t){let r=new Set;for(let n of t){let i=V(e,n);if(i!==void 0){if(r.has(i))return!0;r.add(i)}}return!1}function Wo(e){let t={};return e.forEach((r,n)=>{t[r]=n+1}),t}function Nt(e,t){return[...t].filter(r=>V(e,r)!==void 0).sort((r,n)=>{let i=V(e,r)??Number.MAX_SAFE_INTEGER,o=V(e,n)??Number.MAX_SAFE_INTEGER;return i-o})}function Zo(e,t,r){let n={...e};if(r===void 0)return delete n[t],n;for(let[i,o]of Object.entries(n))i!==t&&o===r&&delete n[i];return n[t]=r,n}function es(e,t){return`${e}-:-${t}`}function vn(e,t){let r=D(t),n=e.options.map(s=>s.id),i=Nt(r,n);if(i.length===0)return null;let o={};for(let s of i){let a=r[s];a!==void 0&&(o[es(e.id,s)]=[String(a)])}return{orderedOptionIds:i,optionLevelAnswers:o}}function $e(e,t,r){if(r.length===0)return!0;let n=D(t),i=r.filter(o=>n[o]!==void 0).length;if(e.requireRankAll||e.required){if(i<r.length)return!1;let o=new Set;for(let s of r){let a=n[s];if(a===void 0||o.has(a))return!1;o.add(a)}return!0}return!e.required||i>0}function ts(e){return typeof e=="object"&&e!==null&&"id"in e&&"mediaUrl"in e}function rs(e){return e.scaleColumns}function xn(e,t,r,n){for(let[i,o]of Object.entries(r)){let s=n(o);s&&(e[`${t}_${i}`]=s)}}function Je(e,t){let r={},n={},i={};for(let o of t)o.type===l.FILE_UPLOAD&&(i[o.id]=[]);for(let o of t){let s=e[o.id];if(s!=null)switch(o.type){case l.TEXT_AND_MEDIA:break;case l.FILE_UPLOAD:{Array.isArray(s)&&s.every(ts)&&(i[o.id]=s);break}case l.CFM_MATRIX:case l.CSAT_MATRIX:case l.RATING_MATRIX:{if(typeof s=="object"&&!Array.isArray(s)){let a=s,u=o;xn(r,o.id,a,p=>mn(rs(u),p))}break}case l.SLIDER_MATRIX:{if(typeof s=="object"&&!Array.isArray(s)){let a=s;xn(r,o.id,a,u=>u==null?null:typeof u=="number"?[String(u)]:typeof u=="string"?[u]:null)}break}case l.MCQ:{let a=dn(o,s);a&&(r[o.id]=a);break}case l.NPS_SCALE:{if(typeof s=="number"){let a=o;r[o.id]=[fn(a.options,s)]}break}case l.TEXTFIELD:{let a=gn(s);a&&(r[o.id]=a);break}case l.HEATMAP:{let a=z(s);a.length>0&&(r[o.id]=[JSON.stringify(a)]);break}case l.RANK_ORDER:{let a=vn(o,s);a&&(r[o.id]=a.orderedOptionIds,Object.assign(n,a.optionLevelAnswers));break}}}return{questionToAnswers:r,quesIdVsAttachmentDetails:i,optionLevelAnswers:n}}function ns(e){return typeof e=="object"&&e!==null&&"instanceId"in e&&"answers"in e}function We(e,t,r){if(ns(e))return{...e,surveyLanguage:e.surveyLanguage??t?.language??"en",questions:e.questions??r?.pages.flatMap(n=>n.questions)??[]};if(!t?.instanceId)throw new Error("Survey session not ready. Fetch survey before submitting.");return{answers:e,instanceId:t.instanceId,surveyLanguage:t.language??"en",questions:r?.pages.flatMap(n=>n.questions)??[]}}function bn(e,t){S.info("Starting survey response HTTP POST...",{url:e,requestBody:t})}function An(e,t){S.warn(e,{err:t})}function Tn(e,t,r,n,i){S.perf({apiName:"POST Submit Response",durationMs:e,status:t,url:r,requestSize:n,responseSize:i,success:!0})}function _t(e,t,r,n){S.perf({apiName:"POST Submit Response",durationMs:e,status:t,url:r,requestSize:n,success:!1})}function En(e){S.success("Survey response submitted successfully",{responseId:e})}function hn(e,t){S.error(e,{err:t})}function In(e,t,r,n,i){w({eventName:"survey_submit_latency",metadata:{durationMs:e,status:t,success:!0,url:r,requestSize:n,responseSize:i}})}function Ft(e,t,r){w({eventName:"api_error",metadata:{apiName:"POST Submit Response",status:e,url:t,errorMessage:r}})}async function Ze({url:e,requestBody:t}){let r=performance.now(),i=`${(new Blob([JSON.stringify(t)]).size/1024).toFixed(2)} KB`;bn(e,t);try{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),s=await o.json().catch(d=>(An("Failed to parse JSON response during submission",P(d)),null)),a=performance.now()-r,p=`${((s?new Blob([JSON.stringify(s)]).size:0)/1024).toFixed(2)} KB`;if(!o.ok)throw _t(a,o.status,e,i),Ft(o.status,e,`Submit failed (${o.status}): ${JSON.stringify(s)}`),new Error(`Submit failed (${o.status}): ${JSON.stringify(s)}`);let c=s?.responseId??"";return Tn(a,o.status,e,i,p),In(a,o.status,e,i,p),En(c),{success:!0,responseId:c}}catch(o){let s=performance.now()-r;_t(s,"FAILED",e,i);let a=Ye(o);throw Ft("FAILED",e,a),hn("Failed to submit survey response",P(o)),o}}function Rn(e,t){let r=os({mutationFn:({url:i,requestBody:o})=>Ze({url:i,requestBody:o})},me);return{submit:is(async i=>{try{let o=We(i,e,t);un(o);let s=o.surveyLanguage??"en",a=Je(o.answers,o.questions??[]);pn(a);let u=je(o.instanceId,s);return await r.mutateAsync({url:u,requestBody:a})}catch(o){throw cn(P(o)),o}},[e,t,r]),data:r.data??null,loading:r.isPending,error:r.error}}import{useMemo as Cs}from"react";function ss(e=[]){return new Map(e.map(t=>[t.id,t]))}function I(e,t=[],r={}){return{answers:e,questionsById:ss(t),customFieldValues:r}}function Qe(e){return e===l.CFM_MATRIX||e===l.CSAT_MATRIX||e===l.RATING_MATRIX||e===l.SLIDER_MATRIX}function Ne(e){return e===l.CFM_MATRIX||e===l.CSAT_MATRIX}function _e(e){return Qe(e.type)?e.statementRows??[]:[]}function Fe(e){return Ne(e.type)?e.scaleColumns??[]:[]}function Vt(e){return _e(e).some(t=>t.answerLogic!==void 0)}function as(e){return e.type===l.MCQ?e.options.some(t=>t.answerLogic!==void 0):e.type===l.RANK_ORDER?e.options.some(t=>t.answerLogic!==void 0):!1}function us(e){return Fe(e).some(t=>t.answerLogic!==void 0)}function Dt(e){return Vt(e)||as(e)||us(e)}var v={TEN_POINT_SCALE:"TEN_POINT_SCALE",SLIDER:"SLIDER",SELECTED_OPTIONS:"SELECTED_OPTIONS",NUM_OF_SELECTED_OPTIONS:"NUM_OF_SELECTED_OPTIONS",TEXT:"TEXT",CASE_SENSITIVE_TEXT:"CASE_SENSITIVE_TEXT",MATRIX_OPTIONS:"MATRIX_OPTIONS",FILE_UPLOAD:"FILE_UPLOAD",HEATMAP:"HEATMAP",HEATMAP_REGION:"HEATMAP_REGION",NUMBER:"NUMBER",SELECTED_DATETIME:"SELECTED_DATETIME",RANK_ORDER:"RANK_ORDER"};function et(e){return!e||e.type!==l.CSAT_MATRIX&&e.type!==l.CFM_MATRIX&&e.type!==l.RATING_MATRIX&&e.type!==l.SLIDER_MATRIX?!1:Array.isArray(e.statementRows)&&e.statementRows.length>0}function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ps(e){return Object.values(e).some(t=>t==null?!1:Array.isArray(t)?t.length>0:!0)}function Ln(e){return U(e)?!ps(e):!0}function ve(e){if(typeof e!="string"||!e.includes("_"))return null;let t=e.lastIndexOf("_"),r=e.slice(0,t),n=e.slice(t+1);return!r||!n?null:{rowId:r,suffix:n}}function Ut(e,t,r){r==null||r===""||e.add(`${t}_${r}`)}function Pn(e,t,r){r==null||r===""||Ut(e,t,r)}function tt(e,t,r){let n=r.questionsById.get(e),i=new Set;if(n?.type===l.SLIDER_MATRIX){for(let[o,s]of Object.entries(t))s!=null&&(Array.isArray(s)?s.forEach(a=>Ut(i,o,a)):Ut(i,o,s));return i}for(let[o,s]of Object.entries(t))if(s!=null){if(Array.isArray(s)){for(let a of s)Pn(i,o,a);continue}Pn(i,o,s)}return i}function cs(e){return typeof e=="string"&&e!==""}function xe(e){if(Array.isArray(e)){let t=[];for(let r of e)typeof r=="string"&&r!==""&&t.push(r);return t}return cs(e)?[e]:[]}function be(e){if(typeof e=="string")return e;if(e!=null)return String(e)}function ls(e){return typeof e=="object"&&e!==null}function Cn(e){if(!Array.isArray(e))return[];let t=[];for(let r of e)ls(r)&&t.push(r);return t}function Y(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()!==""){let t=Number(e);return Number.isFinite(t)?t:null}return null}function Ve(e,t,r,n){if(!e||!t)return;let i=r.answers[t],o=r.questionsById.get(t);switch(e){case v.TEN_POINT_SCALE:return Y(i);case v.SLIDER:return o?.type===l.SLIDER_MATRIX&&U(i)?i:void 0;case v.SELECTED_OPTIONS:return xe(i);case v.NUM_OF_SELECTED_OPTIONS:return xe(i).length;case v.TEXT:case v.CASE_SENSITIVE_TEXT:return be(i);case v.MATRIX_OPTIONS:return U(i)?tt(t,i,r):new Set;case v.FILE_UPLOAD:return Cn(i);case v.HEATMAP:return z(i);case v.HEATMAP_REGION:{let s=z(i);if(o?.type!==l.HEATMAP)return new Set;let a=o;return new Set(Ke(s,a.regions))}case v.RANK_ORDER:{if(!n)return;let s=D(i);return V(s,n)}default:return i}}function kn(e){return!!(e==null||e===""||Array.isArray(e)&&e.length===0||e instanceof Set&&e.size===0)}function ds(e){return e==null||e===""?!0:Array.isArray(e)?e.length===0:!1}function ms(e,t){return e==null||e===""?!0:Array.isArray(e)?!e.some(r=>String(r)===t):String(e)!==t}function fs(e,t,r,n){let i=r.answers[n];if(!U(i))return!0;let o=i[e];return t?ms(o,t):ds(o)}function qt(e,t,r,n){if(!e||!t)return!0;let i=r.questionsById.get(t);if(e===v.NUM_OF_SELECTED_OPTIONS){let o=Ve(e,t,r);return typeof o!="number"||o===0}if(i&&et(i)){let o=n?.[0];if(o!==void 0&&(e===v.MATRIX_OPTIONS||e===v.SLIDER)){let s=ve(o);if(s)return fs(s.rowId,s.suffix,r,t)}return Ln(r.answers[t])}if(e===v.HEATMAP||e===v.HEATMAP_REGION){if(!t)return!0;let o=z(r.answers[t]);if(e===v.HEATMAP)return o.length===0;let s=n?.[0];return s!==void 0&&i?.type===l.HEATMAP?!Ke(o,i.regions).includes(String(s)):o.length===0}if(e===v.RANK_ORDER&&i?.type===l.RANK_ORDER){let o=i,s=o.options.map(u=>u.id),a=D(r.answers[t]);return yn(a,s,o.requireRankAll)}return kn(Ve(e,t,r))}function gs(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"){let t=e.trim();if(t==="")return null;let r=Number(t);if(Number.isFinite(r)&&/^\d+$/.test(t))return r;let n=Date.parse(t);return Number.isFinite(n)?n:null}return null}function wn(e,t){if(e==null||Array.isArray(e))return;let r=gs(e);return r===null?void 0:r}function Bt(e,t,r,n){let i=r.customFieldValues?.[t];if(i!=null)switch(e){case v.TEXT:case v.CASE_SENSITIVE_TEXT:return be(i);case v.NUMBER:return Y(i);case v.SELECTED_OPTIONS:return xe(i);case v.SELECTED_DATETIME:return wn(i,n?.details?.valueAdditional?.timezone);default:return i}}function On(e,t,r,n){let i=r.customFieldValues?.[t];if(i==null)return!0;if(e===v.NUMBER)return typeof i=="string"&&i.trim()==="";if(e===v.SELECTED_OPTIONS)return xe(i).length===0;if(e===v.SELECTED_DATETIME)return wn(i,n?.details?.valueAdditional?.timezone)===void 0;if(e===v.TEXT||e===v.CASE_SENSITIVE_TEXT)return be(i)===void 0||be(i)==="";let o=Bt(e,t,r,n);return!!(o==null||o===""||Array.isArray(o)&&o.length===0)}function Ht(e,t,r,n){return On(e,t,r,n)}var L={AND:"AND",OR:"OR",MISSING:"MISSING",EXISTS:"EXISTS",CONTAINS:"CONTAINS",DOES_NOT_CONTAIN:"DOES_NOT_CONTAIN",EQUALS:"EQUALS",NOT_EQUALS:"NOT_EQUALS",GT:"GT",GTE:"GTE",LT:"LT",LTE:"LTE",BEFORE:"BEFORE",AFTER:"AFTER"};var ys=new Set(["CFM_MATRIX","CSAT_MATRIX","RATING_MATRIX"]);function Mn(e){return e===L.EXISTS||e===L.MISSING}function Ss(e){return e===L.CONTAINS||e===L.DOES_NOT_CONTAIN}function vs(e){switch(e){case"MCQ":return v.SELECTED_OPTIONS;case"TEXTFIELD":return v.TEXT;case"NPS_SCALE":case"SCALE":return v.TEN_POINT_SCALE;case"CFM_MATRIX":case"CSAT_MATRIX":case"RATING_MATRIX":return v.MATRIX_OPTIONS;case"SLIDER_MATRIX":return v.SLIDER;case"FILE_UPLOAD":return v.FILE_UPLOAD;case"HEATMAP":return v.HEATMAP;case"RANK_ORDER":return v.RANK_ORDER;default:return}}function xs(e){return typeof e!="string"?!1:!e.includes("_")||e.startsWith("Region ")}function bs(e,t,r){if(!e||!r?.length)return;let n=r[0],i=ve(n);if(e==="HEATMAP"&&Ss(t)&&r.every(xs))return v.HEATMAP_REGION;if(e==="SLIDER_MATRIX"&&i)return v.SLIDER;if(ys.has(e)&&i)return v.MATRIX_OPTIONS}function Qn(e,t,r,n){if(e)return e;if(!t)return;let i=bs(t,r,n);if(i)return i;if(Mn(r))return vs(t)}function As(e){switch(e){case"TEXT":case"TEXT_MULTI":case"TEXTAREA":return v.TEXT;case"NUMBER":return v.NUMBER;case"PICKLIST":case"PICKLIST_MULTISELECT":return v.SELECTED_OPTIONS;case"DATETIME":return v.SELECTED_DATETIME;default:return}}function Nn(e,t,r){if(e)return e;if(t&&Mn(r))return As(t)}function Ts(e,t,r){switch(r){case L.GT:return e>t;case L.GTE:return e>=t;case L.LT:return e<t;case L.LTE:return e<=t;case L.EQUALS:return e===t;case L.NOT_EQUALS:return e!==t;default:return!1}}function _n(e,t,r,n,i){if(!e||!t)return null;let o=ve(n);if(!o)return null;let s=r.answers[t];if(!U(s))return!1;if(e===v.MATRIX_OPTIONS){let u=tt(t,s,r).has(String(n));return i===L.EQUALS?u:i===L.NOT_EQUALS?!u:!1}if(e===v.SLIDER){let a=s[o.rowId];if(a==null)return!1;let u=Array.isArray(a)?Y(a[0]):Y(a),p=Y(o.suffix);return u!==null&&p!==null?Ts(u,p,i):i===L.EQUALS?String(a)===o.suffix:i===L.NOT_EQUALS?String(a)!==o.suffix:!1}return!1}function rt(e,t,r){let n=i=>e instanceof Set?e.has(String(i)):Array.isArray(e)?e.some(o=>o===i||String(o)===String(i)):e===i||String(e)===String(i);return r?t.every(n):t.some(n)}function Un(e,t,r){let n=Y(e);if(n===null)return!1;let i=Y(t[0]);if(i===null)return!1;switch(r){case L.GT:return n>i;case L.GTE:return n>=i;case L.LT:return n<i;case L.LTE:return n<=i;case L.EQUALS:return n===i;case L.NOT_EQUALS:return n!==i;default:return!1}}function Fn(e,t){return t.length===0?!1:Un(e,t,L.EQUALS)||e===t[0]||String(e)===String(t[0])}function Vn(e,t,r){if(typeof e!="string"||t.length===0)return!1;let n=String(t[0]);return r?e===n:e.toLowerCase()===n.toLowerCase()}function Dn(e,t,r){if(typeof e!="string"||t.length===0)return!1;let n=String(t[0]);return r?e!==n:e.toLowerCase()!==n.toLowerCase()}function nt(e,t,r){return typeof e!="string"?!1:t.some(n=>{let i=String(n);return r?e.includes(i):e.toLowerCase().includes(i.toLowerCase())})}function Xt(e,t,r,n,i){return n.length?_n(e,t,r,n[0],i):null}function Gt(e,t,r){return!(!e||!t||!(e===v.SLIDER||e===v.MATRIX_OPTIONS)||!et(r.questionsById.get(t)))}function zt(e,t,r,n,i,o,s){switch(e){case L.CONTAINS:return n===v.TEXT?nt(t,r,!1):n===v.CASE_SENSITIVE_TEXT?nt(t,r,!0):n===v.HEATMAP_REGION?rt(t,r,!1):rt(t,r,n===v.SELECTED_OPTIONS);case L.DOES_NOT_CONTAIN:return n===v.TEXT?!nt(t,r,!1):n===v.CASE_SENSITIVE_TEXT?!nt(t,r,!0):n===v.HEATMAP_REGION?!rt(t,r,!1):!rt(t,r,n===v.SELECTED_OPTIONS);case L.EQUALS:{if(Gt(n,i,o)){let a=Xt(n,i,o,r,L.EQUALS);if(a!==null)return a}return n===v.TEXT?Vn(t,r,!1):n===v.CASE_SENSITIVE_TEXT?Vn(t,r,!0):Fn(t,r)}case L.NOT_EQUALS:{if(Gt(n,i,o)){let a=Xt(n,i,o,r,L.NOT_EQUALS);if(a!==null)return a}return n===v.TEXT?Dn(t,r,!1):n===v.CASE_SENSITIVE_TEXT?Dn(t,r,!0):!Fn(t,r)}case L.GT:case L.GTE:case L.LT:case L.LTE:return Gt(n,i,o)&&U(t)?Xt(n,i,o,r,e)??!1:Un(t,r,e);case L.BEFORE:case L.AFTER:{if(n!==v.RANK_ORDER||!i||!s||r.length===0)return!1;let a=D(o.answers[i]),u=V(a,s),p=V(a,String(r[0]));return u===void 0||p===void 0?!1:e===L.BEFORE?u<p:u>p}default:return!1}}function qn(e,t){let r=e.details?.conditionEntity,n=r?.entityType,i=r?.id,o=e.filterType,s=e.values??[],a=e.field;if(!n||!i)return!1;let u=n==="CUSTOM_FIELD"?Nn(a,r.entityType==="CUSTOM_FIELD"?r.fieldType:void 0,o):Qn(a,r.entityType==="QUESTION"?r.answerType:void 0,o,s);if(n==="CUSTOM_FIELD"){if(o==="MISSING")return Ht(u,i,t,e);if(o==="EXISTS")return!Ht(u,i,t,e);let d=Bt(u,i,t,e);return zt(o,d,s,u,void 0,t)}let p=n==="QUESTION"?i:void 0;if(o==="MISSING")return qt(u,p,t,s);if(o==="EXISTS")return!qt(u,p,t,s);let c=p?Ve(u,p,t,e.details?.subConditionEntity?.id):void 0;return zt(o,c,s,u,p,t,e.details?.subConditionEntity?.id)}function Es(e){return"filters"in e&&Array.isArray(e.filters)}function ne(e,t){return Es(e)?e.filterType==="AND"?e.filters.every(r=>ne(r,t)):e.filterType==="OR"?e.filters.some(r=>ne(r,t)):!1:qn(e,t)}function Bn(e,t){return e?ne(e.condition,t):!0}function $(e,t){return Bn(e,t)}function Hn(e,t){return $(e.answerLogic,t)}function q(e,t){let r=_e(e);return r.length===0?[]:r.filter(n=>Hn(n,t))}function j(e,t){return e.type!==l.MCQ?[]:e.options.filter(n=>$(n.answerLogic,t))}function X(e,t){return e.type!==l.RANK_ORDER?[]:e.options.filter(n=>$(n.answerLogic,t))}function J(e,t){let r=Fe(e);return r.length===0?[]:r.filter(n=>$(n.answerLogic,t))}function ie(e,t){return e?ne(e.condition,t):!0}function W(e,t){return e.type===l.MCQ?j(e,t).length>0:e.type===l.RANK_ORDER?X(e,t).length>0:Qe(e.type)?q(e,t).length===0?!1:Ne(e.type)?J(e,t).length>0:!0:!0}function pe(e,t){return!(e.displayLogic&&!ie(e.displayLogic,t)||Vt(e)&&q(e,t).length===0||Dt(e)&&!W(e,t))}function G(e,t){return e.filter(r=>pe(r,t))}function O(e,t){return e.length===0?!1:G(e,t).length>0}function Xn(e,t,r,n={}){let i=I(t,r,n);return q(e,i)}function Gn(e,t,r,n={}){let i=I(t,r,n);return j(e,i)}function zn(e,t,r,n={}){let i=I(t,r,n);return X(e,i)}function Yn(e,t,r,n={}){let i=I(t,r,n);return J(e,i)}function jn(e,t,r,n={}){let i=I(t,r,n);return{statementRows:q(e,i),scaleColumns:J(e,i)}}function Kn(e){return e.type===l.TEXT_AND_MEDIA}function hs(e){return e===l.CFM_MATRIX||e===l.CSAT_MATRIX||e===l.RATING_MATRIX||e===l.SLIDER_MATRIX}function Is(e,t){return e.every(r=>{let n=t[r.id];return n!==void 0&&n!==""})}function $n(e,t){return e.selectionMode==="multiple"?Array.isArray(t)?t.length:0:t!=null&&t!==""?1:0}function Jn(e){return e.minSelections!==void 0||e.maxSelections!==void 0}function Wn(e,t){return!(e.minSelections!==void 0&&t<e.minSelections||e.maxSelections!==void 0&&t>e.maxSelections)}function De(e,t,r,n={}){if(Kn(e))return!0;let i=t[e.id];if(e.type===l.MCQ){let o=e;if(r){let a=I(t,r,n);if(!W(o,a))return!0}let s=$n(o,i);return Jn(o)?Wn(o,s)&&s>0:o.selectionMode==="multiple"?s>0:i!=null&&i!==""}if(e.type===l.RANK_ORDER){let o=e;if(r){let a=I(t,r,n);if(!W(o,a))return!0;let u=X(o,a).map(p=>p.id);return $e(o,i,u)}let s=o.options.map(a=>a.id);return $e(o,i,s)}if(hs(e.type)){if(typeof i!="object"||Array.isArray(i))return!1;let o=e,s=o.statementRows;if(r){let a=I(t,r,n);s=q(o,a)}return s.length===0?!0:Is(s,i)}return e.type===l.HEATMAP?z(i).length>0:i!==void 0&&i!==""}function Ue(e,t,r,n,i={}){let o={},s=r?.startsWith("de")?"Beantworten Sie bitte diese Frage bevor Sie fortfahren.":"Please answer this question before you proceed.";return e.forEach(a=>{if(!Kn(a)){if(a.type===l.MCQ){let u=a,p=n?I(t,n,i):void 0;if(p&&!W(u,p))return;let c=p?j(u,p):u.options,d=new Set(c.map(x=>x.id)),y=t[a.id],g=$n(u,y);p&&u.selectionMode==="multiple"&&Array.isArray(y)?g=y.filter(x=>typeof x=="string"&&d.has(x)).length:p&&u.selectionMode==="single"&&typeof y=="string"&&(g=d.has(y)?1:0);let b=u.answerConditionErrorMessage??u.requiredErrorMessage??s;if(Jn(u)&&!Wn(u,g)){o[a.id]=b;return}if(a.required&&c.length>0&&g===0){o[a.id]=a.requiredErrorMessage??s;return}return}if(a.type===l.RANK_ORDER){let u=a,p=n?I(t,n,i):void 0;if(p&&!W(u,p))return;let d=(p?X(u,p):u.options).map(y=>y.id);a.required&&d.length>0&&!$e(u,t[a.id],d)&&(o[a.id]=a.requiredErrorMessage??s);return}a.required&&!De(a,t,n,i)&&(o[a.id]=a.requiredErrorMessage??s)}}),o}function Zn(e,t){return t<=0?0:Math.min(100,Math.max(0,Math.round(e/t*100)))}function ei(e,t){return e.findIndex(r=>r.questions.some(n=>n.id===t))}function qe(e,t,r,n){S.info("Skip logic matched",{questionId:e,skipLogicId:t,targetType:r,fromPageIndex:n})}function ti(e,t,r){S.info("Display logic matched",{questionId:e,pageIndex:t,triggerQuestionId:r})}function ri(e,t,r,n,i){S.info("Answer logic matched",{questionId:e,entityType:t,entityId:r,pageIndex:n,triggerQuestionId:i})}function ni(e,t,r,n){S.info("Question variant matched",{questionId:e,variantId:t,variantText:r,triggerQuestionId:n})}function ii(e,t,r,n){S.info("End page logic matched",{endPageId:e,matchType:t,previousEndPageId:r,triggerQuestionId:n})}function it(e,t,r){if(t.type==="END_OF_SURVEY"){qe(e,t.skipLogicId,"END_OF_SURVEY",r);return}qe(e,t.skipLogicId,"QUESTION",r)}function Yt(e,t,r){S.warn("Skip logic rejected",{questionId:e,skipLogicId:t,reason:r})}function Rs(e,t,r,n,i,o){if(!e?.length)return null;let s=o?.silent??!1;for(let a of e)if(ne(a.condition,t)){if(a.skipTo.entityType==="END_OF_SURVEY")return s||qe(i,a.id,"END_OF_SURVEY",n),{type:"END_OF_SURVEY",skipLogicId:a.id};if(a.skipTo.entityType==="QUESTION"){let u=ei(r,a.skipTo.id);if(u===-1){s||Yt(i,a.id,"target_not_found");continue}if(u<n){s||Yt(i,a.id,"backward_target");continue}return s||qe(i,a.id,"QUESTION",n),{type:"QUESTION",questionId:a.skipTo.id,pageIndex:u,skipLogicId:a.id}}}return null}function Z(e,t,r,n,i){return Rs(e.skipLogics,t,r,n,e.id,i)}function Ls(e,t){let r=t;for(;r<e.length&&e[r].questions.length===0;)r+=1;return r}function jt(e,t){return Ls(e,t+1)}function ee(e,t,r){let n=jt(e,t);for(;n<e.length;){let o=e[n]?.questions??[];if(O(o,r))return n;n=jt(e,n)}return n}function Ae(e,t){for(let r=e.length-1;r>=0;r-=1){let n=e[r]?.questions??[];if(n.length>0&&O(n,t))return r}return-1}function ot(e,t,r){let n=e[t]?.questions??[];return O(n,r)?t:ee(e,t,r)}function Q(e,t,r,n={}){if(e.length===0)return[];let i=I(t,r,n),o=[],s=0;for(;s<e.length;){let u=e[s]?.questions??[];if(!O(u,i)){let d=ee(e,s,i);if(d>=e.length)break;s=d;continue}o.push(s);let p=u[u.length-1];if(p?.skipLogics?.length){let d=Z(p,i,e,s,{silent:!0});if(d?.type==="END_OF_SURVEY")break;if(d?.type==="QUESTION"){if(d.pageIndex<=s)break;let y=ot(e,d.pageIndex,i);if(y>=e.length)break;s=y;continue}}let c=ee(e,s,i);if(c>=e.length)break;s=c}return o}function st(e,t,r,n,i={}){let o=I(r,n,i),s=new Set;return t.forEach(a=>{at(e[a],o).forEach(u=>s.add(u))}),s}function oi(e,t,r,n,i={}){return st(e,t,r,n,i).size}function si(e,t){let r=0;return e.forEach(n=>{t.has(n)&&(r+=1)}),r}function Kt(e,t){return e.length!==t.length?!1:e.every((r,n)=>r===t[n])}function $t(e,t,r,n,i={}){let o=Q(t,r,n,i),s=st(t,o,r,n,i),a=!1;return e.earnedQuestionIds.forEach(u=>{s.has(u)||(e.earnedQuestionIds.delete(u),a=!0)}),a}function Ps(e){return e.type===l.TEXT_AND_MEDIA}function pt(e,t){let r=(e.questions??[]).filter(n=>!Ps(n));return t?G(r,t):r}function at(e,t){return pt(e,t).map(r=>r.id)}function ut(e,t){e.earnedQuestionIds.add(t)}function Jt(e,t,r,n,i={}){if(!t)return;let o=n?I(r,n,i):void 0;pt(t,o).forEach(s=>{if(!s.required){ut(e,s.id);return}De(s,r,n,i)&&ut(e,s.id)})}function ai(e,t,r,n,i={}){let o=Q(e,t,r,i),s=st(e,o,t,r,i),a=oi(e,o,t,r,i),u=si(n,s),p=Zn(u,a),c=a>0&&u>=a;return{totalQuestionsCount:a,answeredQuestionsCount:u,progressPercentage:p,isComplete:c}}function ui({pages:e=[],values:t,allQuestions:r=[],earnedQuestionIds:n,progressRevision:i=0,customFieldValues:o={}}){return Cs(()=>ai(e,t??{},r,n??new Set,o),[e,t,r,n,i,o])}import{useEffect as ks}from"react";function Wt(e){let{currentPageIndex:t,paginationRefs:r}=e;ks(()=>{r.current&&(r.current.pageStartTime=performance.now())},[t,r])}import{useEffect as ws}from"react";function Zt(e){let{currentPageIndex:t,paginationRefs:r}=e;ws(()=>{r.current&&t>r.current.maxVisitedPageIndex&&(r.current.maxVisitedPageIndex=t)},[t,r])}import{useCallback as Qs}from"react";function pi(e,t){S.info(`Answer changed for question: ${e}`,{value:t})}function ce(e,t){S.warn(e,{err:t})}function ci(){S.info("Initiating survey submission...")}function er(e){S.info(`Navigating back from page index: ${e}`)}function li(e){S.info(`Navigating next from page index: ${e}`)}function di(e){S.error("Error encountered during pagination submit trigger",{err:e})}function Be(e){return typeof document>"u"?null:document.getElementById(e)||null}function Os(e){return e.closest("main")||e.closest("form")||e.parentElement||e}function ct(e,t){try{let n=e[t]?.questions?.[0];n?setTimeout(()=>{try{let i=Be(n.id);i?Os(i).scrollIntoView({behavior:"smooth",block:"start"}):window.scrollTo({top:0,behavior:"smooth"})}catch(i){ce("Failed to scroll page first question into view",P(i))}},50):window.scrollTo({top:0,behavior:"smooth"})}catch(r){ce("Failed to trigger scroll navigation",P(r))}}function tr(e,t,r){let n=t-1;for(;n>=0;){for(;n>=0&&(e[n]?.questions??[]).length===0;)n-=1;if(n<0)return 0;let i=e[n]?.questions??[];if(O(i,r))return n;n-=1}return 0}function Te(e,t,r){let n=e.pageHistory,i=n.lastIndexOf(t);e.pageHistory=i>=0?[...n.slice(0,i+1),r]:[...n,t,r]}function mi(e){return e.pageHistory.length<=1?null:(e.pageHistory=e.pageHistory.slice(0,-1),e.pageHistory.at(-1)??null)}function fi(e,t){let r=e.pageHistory.lastIndexOf(t);if(r>=0){e.pageHistory=e.pageHistory.slice(0,r+1);return}e.pageHistory=[t]}function Ms(e,t,r){let n=t;for(;n>0;){let i=e[n]?.questions??[];if(O(i,r))return n;n=tr(e,n,r)}return 0}function gi(e,t,r,n){if(e.pageHistory.length>1){let i=mi(e);if(i===null)return null;let o=Ms(t,i,n);return fi(e,o),o}if(r>0){let i=tr(t,r,n);return i>=r?null:(fi(e,i),i)}return null}function rr(e){let{currentPageIndex:t,setCurrentPageIndex:r,setPhase:n,trackPageTime:i,pages:o,values:s,paginationRefs:a,survey:u,bumpProgressRevision:p,customFieldValues:c}=e;return Qs(()=>{let d=a.current;if(!d||!u)return;let y=o.flatMap(x=>x.questions),g=I(s,y,c),b=gi(d,o,t,g);if(b!==null){er(t),i(t),d.backtrackCount+=1;for(let T=b+1;T<o.length;T+=1)d.skippedPageIndices.delete(T),d.visitedPageIndices.delete(T);d.maxVisitedPageIndex=Math.min(d.maxVisitedPageIndex,b);let x={};for(let T of o[b]?.questions??[])x[T.id]=s[T.id];d.backtrackSnapshots[b]={fromPageIndex:t,snapshot:x},r(b),n({kind:"content",pageIndex:b}),p(),ct(o,b);return}t===0&&u?.introPage&&(er(t),i(t),n({kind:"intro"}),p())},[t,r,n,i,o,s,a,u,p,c])}import{useCallback as Gs}from"react";function Ns(e,t){return e==null||e===""?!1:Array.isArray(e)?e.some(r=>!t.has(String(r))):!t.has(String(e))}function _s(e,t){let r={...e},n=!1;return Object.entries(r).forEach(([i,o])=>{if(o!=null){if(Array.isArray(o)){let s=o.filter(a=>t.has(String(a)));s.length!==o.length&&(s.length===0?delete r[i]:r[i]=s,n=!0);return}t.has(String(o))||(delete r[i],n=!0)}}),n?Object.keys(r).length>0?r:void 0:e}function Fs(e,t,r,n,i){let o={...e};if(n&&Object.keys(o).forEach(s=>{t.has(s)||delete o[s]}),i&&Object.keys(o).length>0&&Object.entries(o).forEach(([s,a])=>{if(Ns(a,r))if(Array.isArray(a)){let u=a.filter(p=>p!==null&&r.has(String(p)));u.length===0?delete o[s]:o[s]=u}else delete o[s]}),Object.keys(o).length!==0)return i?_s(o,r):o}function yi(e,t,r){if(!U(t))return t;let n=q(e,r),i=e.statementRows??[],o=e.type===l.CSAT_MATRIX||e.type===l.CFM_MATRIX?J(e,r):[],s=e.scaleColumns??[],a=i.length>0&&n.length!==i.length,u=s.length>0&&o.length!==s.length;return!a&&!u?t:Fs(t,new Set(n.map(p=>p.id)),new Set(o.map(p=>p.id)),a,u)}function Vs(e,t,r){if(t!==void 0){if(e.selectionMode==="multiple"){if(!Array.isArray(t))return t;let n=t.filter(i=>typeof i=="string"&&r.has(i));return n.length>0?n:void 0}if(!(typeof t=="string"&&!r.has(t)))return t}}function Si(e,t,r){let n=j(e,r);return e.options.length===0||n.length===e.options.length?t:Vs(e,t,new Set(n.map(i=>i.id)))}function vi(e,t,r){let n=X(e,r),i=new Set(n.map(a=>a.id));if(i.size===0)return;let o=D(t),s={};for(let a of i){let u=V(o,a);u!==void 0&&(s[a]=u)}if(Object.keys(s).length!==0){if(Sn(s,[...i])){let a=new Set,u={};for(let p of n){let c=V(s,p.id);c===void 0||a.has(c)||(a.add(c),u[p.id]=c)}return Object.keys(u).length>0?u:void 0}return s}}function Ds(e,t,r){if(r===void 0){let{[t]:n,...i}=e;return i}return{...e,[t]:r}}function Us(e,t,r){if(!(!pe(e,r)||!W(e,r)))return e.type===l.MCQ?Si(e,t,r):e.type===l.RANK_ORDER?vi(e,t,r):Qe(e.type)?yi(e,t,r):t}function xi(e,t,r,n={}){let i=I(t,r,n),o={...t},s=!1;for(let a of e)for(let u of a.questions){let p=Us(u,o[u.id],i);p!==o[u.id]&&(o=Ds(o,u.id,p),s=!0)}return s?o:t}function bi(e,t,r,n){if(n<=r)return t;let i=new Set;for(let s=r+1;s<n;s+=1)e[s]?.questions.forEach(a=>i.add(a.id));if(i.size===0)return t;let o={...t};return i.forEach(s=>{delete o[s]}),o}function Ee(e,t,r){let n=new Set;for(let o=r+1;o<e.length;o+=1)e[o]?.questions.forEach(s=>n.add(s.id));if(n.size===0)return t;let i={...t};return n.forEach(o=>{delete i[o]}),i}function he(e,t){let r=e?.endPages.filter(i=>!i.disabled)??[];if(r.length===0)return{endPageId:void 0,matchType:"fallback"};for(let i of r)if(i.displayLogic&&ie(i.displayLogic,t))return{endPageId:i.id,matchType:"conditional"};let n=r.find(i=>!i.displayLogic);return n?{endPageId:n.id,matchType:"default"}:{endPageId:r[0]?.id,matchType:"fallback"}}function Ai(e,t){return he(e,t).endPageId}function qs(e,t){switch(e){case"display_logic_matched":return`display: ${t.questionId} (page ${t.pageIndex})`;case"answer_logic_matched":return`answer: ${t.questionId} ${t.entityType} ${t.entityId}`;case"question_variant_matched":return`variant: ${t.questionId} \u2192 ${t.variantId}`;case"end_page_logic_matched":return`end page: ${t.endPageId} (${t.matchType})`;case"question_viewed":return`viewed: ${t.questionId}`;case"skip_logic_triggered":return`skip: ${t.questionId} \u2192 ${t.targetId}`;default:return e}}function Bs(e,t){switch(t){case"display_logic_matched":e.logicMatchCounts.display+=1;break;case"answer_logic_matched":e.logicMatchCounts.answer+=1;break;case"question_variant_matched":e.logicMatchCounts.variant+=1;break;case"end_page_logic_matched":e.logicMatchCounts.endPage+=1;break;case"question_viewed":e.logicMatchCounts.viewed+=1;break;case"skip_logic_triggered":e.logicMatchCounts.skip+=1;break;default:break}}function Ti(e,t,r){if(!e)return;let n=typeof r.timestampMs=="number"?r.timestampMs:performance.now(),i={eventName:t,timestampMs:n,metadata:{...r,timestampMs:n}};e.logicEventHistory.push(i),Bs(e,t)}function He(e,t){Ti(e,t.eventName,t.metadata),w(t)}function Ei(e,t){let r=performance.now();He(e,{eventName:"display_logic_matched",metadata:{...t,logicKind:"display",timestampMs:r}})}function hi(e,t){let r=performance.now();He(e,{eventName:"answer_logic_matched",metadata:{...t,logicKind:"answer",timestampMs:r}})}function Ii(e,t){let r=performance.now();He(e,{eventName:"question_variant_matched",metadata:{...t,logicKind:"variant",timestampMs:r}})}function Ri(e,t){let r=performance.now();He(e,{eventName:"end_page_logic_matched",metadata:{...t,logicKind:"end_page",timestampMs:r}})}function Li(e,t){let r=performance.now();He(e,{eventName:"question_viewed",metadata:{...t,timestampMs:r}})}function Pi(e,t){let r=performance.now();Ti(e,"skip_logic_triggered",{...t,timestampMs:r}),w({eventName:"skip_logic_triggered",metadata:{questionId:t.questionId,skipLogicId:t.skipLogicId,targetType:t.targetType,targetId:t.targetId,fromPageIndex:t.fromPageIndex}})}function Ci(e,t,r,n,i,o,s){let a=Q(r,i,n,o),u=I(i,n,o),p=new Set;for(let m of a){let R=r[m];if(R)for(let k of at(R,u))p.add(k)}let c=e.logicEventHistory.filter(m=>m.eventName==="question_viewed").map(m=>String(m.metadata.questionId??"")).filter(Boolean),d=new Set(c),y=[...p].filter(m=>!d.has(m)).length,g=e.logicEventHistory.filter(m=>m.eventName==="display_logic_matched").map(m=>({questionId:String(m.metadata.questionId??""),pageIndex:Number(m.metadata.pageIndex??0)})),b=e.logicEventHistory.filter(m=>m.eventName==="answer_logic_matched").map(m=>({questionId:String(m.metadata.questionId??""),entityType:m.metadata.entityType,entityId:String(m.metadata.entityId??""),pageIndex:Number(m.metadata.pageIndex??0)})),x=e.logicEventHistory.filter(m=>m.eventName==="question_variant_matched").map(m=>({questionId:String(m.metadata.questionId??""),variantId:String(m.metadata.variantId??"")})),T=e.logicEventHistory.filter(m=>m.eventName==="skip_logic_triggered").map(m=>({questionId:String(m.metadata.questionId??""),skipLogicId:String(m.metadata.skipLogicId??""),targetType:m.metadata.targetType,targetId:String(m.metadata.targetId??""),fromPageIndex:Number(m.metadata.fromPageIndex??0)})),A=he(t,u),f=e.logicEventHistory.map(m=>({timestampMs:m.timestampMs,eventName:m.eventName,summary:qs(m.eventName,m.metadata)}));w({eventName:"logic_session_summary",metadata:{displayLogicMatches:g,answerLogicMatches:b,variantMatches:x,endPageResolution:{finalEndPageId:s,matchType:s?A.matchType:"fallback",changeCount:e.endPageChangeCount},skipLogicTriggers:T,viewedQuestionIds:c,viewedCount:d.size,notViewedOnPathCount:y,logicEventTimeline:f}})}function ki(e,t){return e.findIndex(r=>r.questions.some(n=>n.id===t))}function Hs(e,t){let r=[];for(let n of t){let i=e[n];i&&r.push(...i.questions)}return r}function wi(e,t){let r=new Set;if(e.type===l.MCQ){let n=e;for(let i of n.options)i.answerLogic&&$(i.answerLogic,t)&&r.add(`${e.id}:option:${i.id}`);return r}for(let n of _e(e))n.answerLogic&&$(n.answerLogic,t)&&r.add(`${e.id}:row:${n.id}`);if(Ne(e.type))for(let n of Fe(e))n.answerLogic&&$(n.answerLogic,t)&&r.add(`${e.id}:column:${n.id}`);return r}function Oi(e,t){let r=e.displayVariants;if(!r?.length)return null;for(let n of r)if(n.displayLogic&&ie(n.displayLogic,t))return{variantId:n.id,variantText:n.questionText};return null}function Xs(e){let t=e.split(":");if(t.length!==3)return null;let[r,n,i]=t;return n!=="option"&&n!=="row"&&n!=="column"?null:{questionId:r,entityType:n,entityId:i}}function Mi(e){let{survey:t,pages:r,allQuestions:n,previousValues:i,nextValues:o,customFieldValues:s,previousContext:a,nextContext:u,refs:p,triggerQuestionId:c}=e,d=Q(r,i,n,s),y=Q(r,o,n,s),g=[...new Set([...d,...y])].sort((A,f)=>A-f),b=Hs(r,g);for(let A of b){if(!A.displayLogic)continue;let f=pe(A,a),m=pe(A,u);if(f||!m)continue;let R=ki(r,A.id);ti(A.id,R,c),Ei(p,{questionId:A.id,pageIndex:R,triggerQuestionId:c})}for(let A of b){let f=wi(A,a),m=wi(A,u),R=ki(r,A.id);for(let k of m){if(f.has(k))continue;let h=Xs(k);h&&(ri(h.questionId,h.entityType,h.entityId,R,c),hi(p,{questionId:h.questionId,entityType:h.entityType,entityId:h.entityId,pageIndex:R,triggerQuestionId:c}))}}for(let A of b){if(!A.displayVariants?.length)continue;let f=Oi(A,a),m=Oi(A,u),R=f?.variantId??"base",k=m?.variantId??"base";p.lastResolvedVariantByQuestionId.set(A.id,k),!(k===R||!m)&&(ni(A.id,m.variantId,m.variantText,c),Ii(p,{questionId:A.id,variantId:m.variantId,variantText:m.variantText,triggerQuestionId:c}))}let x=he(t,a),T=he(t,u);T.endPageId&&T.endPageId!==p.lastResolvedEndPageId&&(p.endPageChangeCount+=1,p.lastResolvedEndPageId=T.endPageId,ii(T.endPageId,T.matchType,x.endPageId,c),Ri(p,{endPageId:T.endPageId,matchType:T.matchType,previousEndPageId:x.endPageId,triggerQuestionId:c}))}function zs(e,t,r,n){let{survey:i,pages:o,paginationRefs:s,customFieldValues:a}=e,u=s.current;if(!u||!i)return;let p=i.pages.flatMap(y=>y.questions),c=I(r,p,a),d=I(n,p,a);Mi({survey:i,pages:o,allQuestions:p,previousValues:r,nextValues:n,customFieldValues:a,previousContext:c,nextContext:d,refs:u,triggerQuestionId:t})}function nr(e){let{values:t,setValues:r,setValidationErrors:n,paginationRefs:i,bumpProgressRevision:o,pages:s,survey:a,currentPageIndex:u,customFieldValues:p}=e;return Gs((c,d)=>{pi(c,d);let y={...t,[c]:d},g=i.current,b=a?.pages.flatMap(m=>m.questions)??[],x=s.flatMap(m=>m.questions).find(m=>m.id===c),T=!1,A=m=>{zs(e,c,t,m)};if(!g||!a){r(y),n(m=>({...m,[c]:""}));return}let f=Q(s,t,b,p);if(x?.required&&De(x,y,b,p)&&(ut(g,c),T=!0),x?.skipLogics?.length){let m=Z(x,I(t,b,p),s,u,{silent:!0}),R=Z(x,I(y,b,p),s,u,{silent:!0});R&&!m&&(it(x.id,R,u),g.lastLoggedOriginSkipKey=`${u}:${R.skipLogicId}`,Pi(g,{questionId:x.id,skipLogicId:R.skipLogicId,targetType:R.type==="END_OF_SURVEY"?"END_OF_SURVEY":"QUESTION",targetId:R.type==="END_OF_SURVEY"?"END_OF_SURVEY":R.questionId,fromPageIndex:u,triggerQuestionId:c}));let k=Q(s,y,b,p),h=!Kt(f,k);if($t(g,s,y,b,p),h){for(let E=u+1;E<s.length;E+=1)g.skippedPageIndices.delete(E),g.visitedPageIndices.delete(E);let C=Ee(s,y,u);A(C),r(C),o(),n(E=>({...E,[c]:""}));return}}else{let m=xi(s,y,b,p),R=Q(s,m,b,p),k=!Kt(f,R),h=$t(g,s,m,b,p);if(k){for(let E=u+1;E<s.length;E+=1)g.skippedPageIndices.delete(E),g.visitedPageIndices.delete(E);let C=Ee(s,m,u);A(C),r(C),o(),n(E=>({...E,[c]:""}));return}if(m!==y){A(m),r(m),h&&(T=!0),n(C=>({...C,[c]:""}));return}h&&(T=!0)}A(y),r(y),T&&o(),n(m=>({...m,[c]:""}))},[t,r,n,i,o,s,a,u,p,e])}import{useCallback as Ws}from"react";function Qi({context:e,onSubmit:t,currentPageIndex:r,rawCurrentQuestions:n}){let{survey:i,pages:o,values:s,paginationRefs:a,customFieldValues:u}=e,p=o[r],c=a.current;if(!i||!p||!c)return null;c.visitedPageIndices.add(r);let d=i.pages.flatMap(b=>b.questions),y=I(s,d,u),g=G(n,y);return{survey:i,pages:o,currentPage:p,currentPageIndex:r,values:s,allQuestions:d,logicContext:y,currentQuestions:g,refs:c,setValues:e.setValues,setCurrentPageIndex:e.setCurrentPageIndex,setPhase:e.setPhase,setValidationErrors:e.setValidationErrors,trackPageTime:e.trackPageTime,trackOptionalSkips:e.trackOptionalSkips,checkBacktrackChanges:e.checkBacktrackChanges,bumpProgressRevision:e.bumpProgressRevision,onSubmit:t}}function ir(e){w({eventName:"skip_logic_triggered",metadata:e})}function Ie(e){w({eventName:"page_skipped",metadata:e})}function Ni(e){w({eventName:"survey_started",metadata:e})}function Re(e){e.trackPageTime(e.currentPageIndex),e.trackOptionalSkips(e.currentPageIndex),e.checkBacktrackChanges(e.currentPageIndex)}function _i(e,t,r){for(let n=t+1;n<r;n+=1)e.skippedPageIndices.add(n),e.visitedPageIndices.delete(n)}function or(e,t,r,n,i){for(let o=r+1;o<n;o+=1){let s=t[o]?.questions??[];O(s,i)||(e.skippedPageIndices.add(o),e.visitedPageIndices.delete(o))}}function sr(e,t,r){for(let n=t+1;n<r;n+=1)e.skippedPageIndices.add(n),e.visitedPageIndices.delete(n)}function Le(e,t){li(e.currentPageIndex),Te(e.refs,e.currentPageIndex,t),e.setCurrentPageIndex(t),e.setPhase({kind:"content",pageIndex:t}),e.refs.visitedPageIndices.add(t),e.bumpProgressRevision(),ct(e.pages,t)}function Fi(e){Re(e);let t=ee(e.pages,e.currentPageIndex,e.logicContext),r=Ae(e.pages,e.logicContext),n=r>=0&&e.currentPageIndex>=r;if(t>=e.pages.length||n){or(e.refs,e.pages,e.currentPageIndex,e.pages.length,e.logicContext),e.onSubmit();return}t!==e.currentPageIndex+1&&(or(e.refs,e.pages,e.currentPageIndex,t,e.logicContext),Ie({fromPageIndex:e.currentPageIndex,toPageIndex:t,reason:"empty_page"})),e.refs.skippedPageIndices.delete(t),Le(e,t)}function Vi(e,t,r){let n=e[t]?.questions??[];if(O(n,r))return null;let i=ee(e,t,r);if(i<e.length)return{action:"navigate",pageIndex:i};let o=Ae(e,r);return o>=0&&t>o?{action:"submit"}:o>=0&&t!==o?{action:"navigate",pageIndex:o}:{action:"submit"}}function Ys(e,t,r){for(let n=t+1;n<r;n+=1)e.skippedPageIndices.add(n),e.visitedPageIndices.delete(n)}function lt(e,t,r,n){let i=Vi(t,r,n);if(!i||i.action==="submit")return i;let{pageIndex:o}=i;return o!==r+1&&Ie({fromPageIndex:r,toPageIndex:o,reason:"empty_page"}),Ys(e,r,o),e.skippedPageIndices.delete(o),Te(e,r,o),e.visitedPageIndices.add(o),i}function Di(e){if(e.currentQuestions.length>0)return!1;let t=lt(e.refs,e.pages,e.currentPageIndex,e.logicContext);return t?.action==="submit"?(e.onSubmit(),!0):t?.action==="navigate"?(Le(e,t.pageIndex),!0):!1}function Ui(e){let t=e.currentQuestions[e.currentQuestions.length-1];if(!t?.skipLogics?.length)return!1;let r=Z(t,e.logicContext,e.pages,e.currentPageIndex,{silent:!0});return r?r.type==="END_OF_SURVEY"?js(e,t.id,r.skipLogicId):Ks(e,t.id,r):!1}function js(e,t,r){ir({questionId:t,skipLogicId:r,targetType:"END_OF_SURVEY",targetId:"END_OF_SURVEY",fromPageIndex:e.currentPageIndex});let n=Ee(e.pages,e.values,e.currentPageIndex);return e.setValues(n),sr(e.refs,e.currentPageIndex,e.pages.length),Re(e),e.setValidationErrors({}),e.bumpProgressRevision(),e.onSubmit({skipValidation:!0,answersOverride:n}),!0}function Ks(e,t,r){ir({questionId:t,skipLogicId:r.skipLogicId,targetType:"QUESTION",targetId:r.questionId,fromPageIndex:e.currentPageIndex});let n=ot(e.pages,r.pageIndex,e.logicContext),i=n>=e.pages.length?r.pageIndex:n,o=bi(e.pages,e.values,e.currentPageIndex,i);if(e.setValues(o),n>=e.pages.length){let s=Ee(e.pages,o,e.currentPageIndex);return e.setValues(s),sr(e.refs,e.currentPageIndex,e.pages.length),Re(e),e.setValidationErrors({}),e.bumpProgressRevision(),e.onSubmit({skipValidation:!0,answersOverride:s}),!0}return _i(e.refs,e.currentPageIndex,n),Ie({fromPageIndex:e.currentPageIndex,toPageIndex:n,reason:"skip_logic"}),Re(e),e.setValidationErrors({}),Le(e,n),!0}function qi(e,t){w({eventName:"page_time_spent",metadata:{pageIndex:e,durationMs:t}})}function dt(e,t,r){w({eventName:"validation_error",metadata:{pageIndex:e,errors:t,attemptNumber:r}})}function Bi(){S.success("Survey validation passed on submit")}function Hi(e){S.warn("Full survey validation failed on submit",{validation:e})}function mt(e){S.error("Failed to run survey validation on submit",{err:e})}function Xi(e){S.warn("Page validation failed",{errors:e})}function $s(e,t){return e.selectionMode==="multiple"?Array.isArray(t)&&t.length>0:t!=null&&t!==""}function Js(e){return e.selectionMode==="multiple"?[...e.defaultOptionIds]:e.defaultOptionIds[0]}function Pe(e,t){let r=!1,n={...t};for(let i of e)for(let o of i.questions){if(o.type!==l.MCQ)continue;let s=o;s.defaultOptionIds?.length&&($s(s,n[s.id])||(n[s.id]=Js(s),r=!0))}return r?n:t}function Gi(e){let t=Pe(e.pages,e.values);t!==e.values&&e.setValues(t);let r={};try{r=Ue(e.currentQuestions,t,e.survey.language,e.allQuestions,e.logicContext.customFieldValues??{})}catch(o){mt(P(o))}if(Object.keys(r).length===0)return e.setValidationErrors({}),delete e.refs.validationAttempt[e.currentPageIndex],!0;Xi(r);let n=(e.refs.validationAttempt[e.currentPageIndex]||0)+1;e.refs.validationAttempt[e.currentPageIndex]=n,e.refs.validationErrorsCount+=1,e.refs.validationHistory.push({pageIndex:e.currentPageIndex,errors:r,attemptNumber:n}),dt(e.currentPageIndex,r,n),e.setValidationErrors(r);let i=Object.keys(r)[0];return setTimeout(()=>{try{let o=Be(i);o&&o.scrollIntoView({behavior:"smooth",block:"center"})}catch(o){ce("Failed to scroll validation error element into view",P(o))}},50),!1}function ft(e,t){let{pages:r,currentPageIndex:n}=e,o=r[n]?.questions??[];return Ws(()=>{let s=Qi({context:e,onSubmit:t,currentPageIndex:n,rawCurrentQuestions:o});s&&(Di(s)||Ui(s)||Gi(s)&&Fi(s))},[e,n,o,t])}import{useCallback as Zs}from"react";function zi(e,t,r,n,i,o,s,a,u,p){w({eventName:"survey_session_summary",metadata:{maxVisitedPageIndex:t,totalDurationMs:r,completed:e,totalQuestionsCount:n,answeredQuestionsCount:i,skippedQuestionsCount:o,skippedQuestionIds:s,validationErrorsCount:a,backtrackCount:u,validationHistory:p}})}function Yi(e,t){w({eventName:"optional_question_skipped",metadata:{questionId:e,pageIndex:t}})}function ji(e,t,r){w({eventName:"backtrack_revisited",metadata:{fromPageIndex:e,toPageIndex:t,changedAnswers:r}})}function Ki(e,t,r,n,i={}){let o={},s="",a=-1;for(let u of t){let p=e[u];if(!p)continue;let c=Ue(p.questions,r,n,void 0,i);Object.keys(c).length>0&&(o={...o,...c},a===-1&&(a=u,s=Object.keys(c)[0]))}return a!==-1?{errors:o,errorPageIndex:a,firstErrorId:s}:null}function $i(e,t,r,n={}){let i=e.flatMap(c=>c.questions),o=I(t,i,n),s=Q(e,t,i,n),a={},u="",p=-1;for(let c of s){let d=e[c];if(!d)continue;let y=G(d.questions,o),g=Ue(y,t,r,i,n);Object.keys(g).length>0&&(a={...a,...g},p===-1&&(p=c,u=Object.keys(g)[0]))}return p!==-1?{errors:a,errorPageIndex:p,firstErrorId:u}:null}function Ji(e,t){if(e)switch(t.kind){case"intro":return e.introPage;case"paused":return e.pausedPage;case"end":return e.endPages.find(n=>n.id===t.endPageId)??e.endPages[0];default:return}}function Wi(e,t,r,n){return t.kind!=="content"?!1:r>1||n>0?!0:!!e?.introPage}function Zi(e,t,r,n,i){if(t.kind!=="content"||!e)return"next";let o=Ae(n,i);return o===-1||r>=o?"submit":"next"}function eo(e,t){return Ai(e,t??I({},[]))}function ar(e){let{survey:t,pages:r,values:n,submit:i,currentPageIndex:o,setCurrentPageIndex:s,setValidationErrors:a,setPhase:u,trackPageTime:p,trackOptionalSkips:c,checkBacktrackChanges:d,totalQuestionsCount:y,paginationRefs:g,customFieldValues:b}=e;return Zs(async x=>{if(!t)return;let T=Pe(r,x?.answersOverride??n),A=g.current;if(!A)return;ci();let f=null;try{x?.skipValidation||(x?.pageIndicesToValidate?f=Ki(r,x.pageIndicesToValidate,T,t.language):f=$i(r,T,t.language,b)),f||Bi()}catch(m){mt(P(m))}if(f){Hi(f);let m=(A.validationAttempt[f.errorPageIndex]||0)+1;A.validationAttempt[f.errorPageIndex]=m,A.validationErrorsCount+=1,A.validationHistory.push({pageIndex:f.errorPageIndex,errors:f.errors,attemptNumber:m}),dt(f.errorPageIndex,f.errors,m),a(f.errors),f.errorPageIndex!==o&&Te(A,o,f.errorPageIndex),s(f.errorPageIndex),u({kind:"content",pageIndex:f.errorPageIndex}),setTimeout(()=>{try{let R=Be(f.firstErrorId);R&&R.scrollIntoView({behavior:"smooth",block:"center"})}catch(R){ce("Failed to scroll validation error element into view",P(R))}},100);return}a({}),delete A.validationAttempt[o],p(o),c(o),d(o);try{let m=await i(T);if(m&&typeof m=="object"&&"success"in m&&m.success){let R=r.flatMap(C=>C.questions),k=I(T,R,b),h=eo(t,k);if(h&&u({kind:"end",endPageId:h}),!A.hasLoggedSummary){Ci(A,t,r,R,T,b,h);let C=performance.now()-A.sessionStartTime,E=[];r.forEach(B=>{B.questions.forEach(_=>{if(!_.required){let de=T[_.id];(de===void 0||de==="")&&E.push(_.id)}})});let N=E.length;zi(!0,A.maxVisitedPageIndex,C,y,y-N,N,E,A.validationErrorsCount,A.backtrackCount,A.validationHistory),A.hasLoggedSummary=!0}}}catch(m){di(P(m))}},[t,r,n,i,o,s,a,u,p,c,d,y,g,b])}import{useCallback as ea}from"react";function ur(e,t,r){return ea(n=>{if(!r.current)return;let i=r.current.backtrackSnapshots[n];if(i){let o=e[n]?.questions??[],s={},a=!1;o.forEach(u=>{let p=i.snapshot[u.id],c=t[u.id];p!==c&&(s[u.id]={oldValue:p??null,newValue:c??null},a=!0)}),a&&ji(i.fromPageIndex,n,s),delete r.current.backtrackSnapshots[n]}},[e,t,r])}import{useCallback as ta}from"react";function pr(e,t){return ta(r=>{(e[r]?.questions??[]).forEach(i=>{let o=!i.required,s=t[i.id];o&&(s===void 0||s==="")&&Yi(i.id,r)})},[e,t])}import{useCallback as ra}from"react";function cr(e){return ra(t=>{if(!e.current)return;let r=performance.now()-e.current.pageStartTime;qi(t,r)},[e])}function to(e,t){let r=e.displayVariants;if(!r?.length)return e.questionText;for(let n of r)if(n.displayLogic&&ie(n.displayLogic,t))return n.questionText;return e.questionText}function lr(e,t){let r=!1,n=e.map(i=>{let o=to(i,t);return o===i.questionText?i:(r=!0,{...i,questionText:o})});return r?n:e}function dr(e,t,r,n={}){let i=I(t,r,n),o=Q(e,t,r,n),s=new Map,a=0;for(let u of o){let p=e[u];if(p)for(let c of pt(p,i))a+=1,s.set(c.id,a)}return s}function mr(e,t){let r=!1,n=e.map(i=>{let o=t.get(i.id);return o===void 0?i.questionNumber===void 0?i:(r=!0,{...i,questionNumber:void 0}):i.questionNumber===o?i:(r=!0,{...i,questionNumber:o})});return r?n:e}function ro(){return{display:0,answer:0,variant:0,endPage:0,skip:0,viewed:0}}function fr(){return{logicEventHistory:[],logicMatchCounts:ro(),lastVisibleQuestionIds:new Set,lastVisibleAnswerEntityKeys:new Set,lastResolvedVariantByQuestionId:new Map,lastResolvedEndPageId:void 0,endPageChangeCount:0}}var gt={};function no({survey:e,session:t,customFieldValues:r=gt}){let[n,i]=Xe({}),[o,s]=Xe({}),[a,u]=Xe(0),[p,c]=Xe({kind:"content",pageIndex:0}),[d,y]=Xe(0),g=e?.pages??[],b=g[a],x=le(()=>e?.pages.flatMap(M=>M.questions)??[],[e]),T=le(()=>I(n,x,r),[n,x,r]),A=le(()=>{if(p.kind!=="content")return[];let M=b?.questions??[],K=G(M,T),we=lr(K,T),re=dr(g,n,x,r);return mr(we,re)},[p.kind,b,T,g,n,x,r,d]),f=gr({pageStartTime:performance.now(),sessionStartTime:performance.now(),maxVisitedPageIndex:0,validationAttempt:{},backtrackSnapshots:{},hasLoggedSummary:!1,validationErrorsCount:0,backtrackCount:0,validationHistory:[],visitedPageIndices:new Set([0]),skippedPageIndices:new Set,pageHistory:[0],earnedQuestionIds:new Set,lastLoggedOriginSkipKey:null,...fr()}),m=Sr(()=>{y(M=>M+1)},[]),R=gr(a);yr(()=>{e&&(i(M=>Pe(e.pages,M)),c($r(e)),u(0),R.current=0,f.current.pageHistory=[0],f.current.skippedPageIndices.clear(),f.current.visitedPageIndices=new Set([0]),f.current.earnedQuestionIds.clear(),f.current.lastLoggedOriginSkipKey=null,Object.assign(f.current,fr()),y(0))},[e]),yr(()=>{if(p.kind!=="content"||!e)return;let M=f.current,K=g[a],we=R.current!==a;R.current=a;let re=M.earnedQuestionIds.size;if(Jt(M,K,n,x,r),M.earnedQuestionIds.size!==re&&m(),!we)return;M.lastLoggedOriginSkipKey=null;let xt=K?.questions?.[K.questions.length-1];if(xt?.skipLogics?.length){let bt=Z(xt,I(n,x,r),g,a,{silent:!0});bt&&(it(xt.id,bt,a),M.lastLoggedOriginSkipKey=`${a}:${bt.skipLogicId}`)}},[a,p.kind,e,g,x,n,m,r]);let{submit:k,data:h,loading:C,error:E}=Rn(t,e),N=le(()=>new Set(f.current.earnedQuestionIds),[d,a]),{progressPercentage:B,totalQuestionsCount:_,answeredQuestionsCount:de,isComplete:Ge}=ui({pages:g,values:n,allQuestions:x,earnedQuestionIds:N,customFieldValues:r,progressRevision:d}),Ce=cr(f),yt=pr(g,n),ze=ur(g,n,f),te={survey:e,session:t,pages:g,phase:p,setPhase:c,currentPageIndex:a,setCurrentPageIndex:u,values:n,setValues:i,validationErrors:o,setValidationErrors:s,paginationRefs:f,trackPageTime:Ce,trackOptionalSkips:yt,checkBacktrackChanges:ze,submit:k,totalQuestionsCount:_,bumpProgressRevision:m,customFieldValues:r};Zt(te),Wt(te);let ke=nr(te),St=rr(te),F=ar(te),vt=ft(te,F),bo=Sr(()=>{c({kind:"content",pageIndex:0}),u(0),f.current.pageHistory=[0],f.current.visitedPageIndices=new Set([0]),f.current.earnedQuestionIds.clear(),Jt(f.current,g[0],n,x,r),m(),Ni({source:"intro"})},[g,n,x,m,r]),Ar=gr(F);Ar.current=F,yr(()=>{if(p.kind!=="content"||!e)return;let K=g[a]?.questions??[];if(O(K,T))return;let we=f.current,re=lt(we,g,a,T);if(re){if(re.action==="submit"){m(),Ar.current();return}u(re.pageIndex),c({kind:"content",pageIndex:re.pageIndex}),m()}},[p.kind,a,T,g,e,m]);let Ao=le(()=>Wi(e,p,f.current.pageHistory.length,a),[e,p,a]),To=le(()=>Zi(e,p,a,g,T),[e,p,a,g,T]),Eo=le(()=>Ji(e,p),[e,p]),ho=Sr((M,K)=>{Li(f.current,{questionId:M,pageIndex:K})},[]);return{phase:p,setPhase:c,currentPageIndex:a,values:n,validationErrors:o,currentQuestions:A,pages:g,canGoBack:Ao,primaryButtonType:To,specialPage:Eo,onChange:ke,onBack:St,onNext:vt,onSubmit:F,onStartSurvey:bo,progressPercentage:B,totalQuestionsCount:_,answeredQuestionsCount:de,isComplete:Ge,submitting:C,submitError:E,submitData:h,recordQuestionViewAnalytics:ho}}import{useCallback as so,useRef as ao}from"react";function io(e){let t=new URLSearchParams({instanceId:e});return`${Se}/markResponseInstanceAsStarted?${t.toString()}`}async function oo(e){let t=io(e);try{let r=await fetch(t,{method:"GET",headers:{Accept:"application/json"}});if(!r.ok)return S.warn(`markResponseInstanceAsStarted failed (${r.status})`,{url:t}),!1;let i=await r.json().catch(()=>null)===!0;return i&&S.info("Survey response instance marked as started",{instanceId:e}),i}catch(r){return S.warn("markResponseInstanceAsStarted request failed",{err:P(r)}),!1}}function uo(e){let t=ao(!1),r=ao(void 0),n=so(()=>{let o=e?.instanceId?.trim();!o||t.current||(t.current=!0,r.current=Date.now(),oo(o))},[e?.instanceId]),i=so(()=>r.current,[]);return{markOnce:n,getInstanceCreatedTime:i}}import{useEffect as po,useRef as vr}from"react";import{useMutation as na}from"@tanstack/react-query";function co({session:e,survey:t,answers:r,enabled:n,debounceMs:i,hasUserInteractedRef:o,isFinalSubmitting:s}){let a=vr(""),u=vr(s);po(()=>{u.current=s},[s]);let p=na({mutationFn:({url:d,requestBody:y})=>Ze({url:d,requestBody:y})},me),c=vr(p.mutateAsync);return c.current=p.mutateAsync,po(()=>{if(!n||!e?.instanceId||!t||!o.current||u.current)return;let d=JSON.stringify(r);if(d===a.current)return;let y=setTimeout(()=>{if(!u.current)try{let g=We(r,e,t),b=Je(g.answers,g.questions??[]),x=je(g.instanceId,g.surveyLanguage??"en",!1);c.current({url:x,requestBody:b}).then(()=>{a.current=d,S.info("Partial survey response saved")}).catch(T=>{S.warn("Partial survey response save failed",{err:P(T)})})}catch(g){S.warn("Partial survey response save skipped",{err:P(g)})}},i);return()=>clearTimeout(y)},[r,i,n,o,e,t]),{data:p.data??null,error:p.error??null,isLoading:p.isPending}}import{useCallback as ia,useRef as oa}from"react";var xr={VIEWED:"VIEWED"};function lo(e){let t=new URLSearchParams({instanceId:e});return`${Se}/cfm/recordQuestionActivityV2?${t.toString()}`}async function mo(e,t){let r=lo(e);try{let n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return n.ok?(S.info("Question activity recorded",{questionIds:t.questionIds}),!0):(S.warn(`recordQuestionActivity failed (${n.status})`,{url:r,requestBody:t}),!1)}catch(n){return S.warn("recordQuestionActivity request failed",{err:P(n)}),!1}}function fo({session:e,survey:t,getInstanceCreatedTime:r,onQuestionViewed:n}){let i=oa(new Set);return{recordView:ia(s=>{let a=e?.instanceId?.trim(),u=t?.id?.trim(),p=e?.responseId?.trim(),c=e?.instanceCreatedTime??r();if(!a||!u||!p||!c){S.warn("Skipping question activity record \u2014 missing context",{hasInstanceId:!!a,hasSurveyId:!!u,hasResponseId:!!p,hasInstanceCreatedTime:!!c});return}let d=s.filter(y=>{let g=y.trim();return!g||i.current.has(g)?!1:(i.current.add(g),!0)});if(d.length!==0){for(let y of d){let g=t?.pages.findIndex(b=>b.questions.some(x=>x.id===y));n?.(y,g!==void 0&&g>=0?g:void 0)}mo(a,{questionIds:d,state:xr.VIEWED,surveyId:u,responseId:p,instanceCreatedTime:c})}},[e?.instanceId,e?.responseId,e?.instanceCreatedTime,t?.id,r,n])}}function go(e){return e===!0||e===void 0||e===!1?1500:e.debounceMs??1500}function yo(e){return e===!0||typeof e=="object"&&e!==null}var br=(a=>(a.NEXT="NEXT",a.PREVIOUS="PREVIOUS",a.SUBMIT="SUBMIT",a.START="START",a.CHANGE="CHANGE",a.SCROLL="SCROLL",a.RECORD_QUESTION_VIEW="RECORD_QUESTION_VIEW",a))(br||{});var aa={data:null,error:null,isLoading:!1};function ua({options:e}={}){S.setEnabled(e?.debug??!1);let t=vo(!1),r=vo(!1),{survey:n,session:i,fetching:o,fetchError:s}=an({instanceId:e?.instanceId,language:e?.language,placeholders:e?.placeholders}),{markOnce:a,getInstanceCreatedTime:u}=uo(i),{phase:p,currentPageIndex:c,values:d,validationErrors:y,currentQuestions:g,canGoBack:b,primaryButtonType:x,specialPage:T,onBack:A,onNext:f,onSubmit:m,onChange:R,onStartSurvey:k,progressPercentage:h,totalQuestionsCount:C,answeredQuestionsCount:E,submitting:N,submitError:B,submitData:_,recordQuestionViewAnalytics:de}=no({survey:n,session:i,customFieldValues:e?.customFieldValues??gt}),{recordView:Ge}=fo({session:i,survey:n,getInstanceCreatedTime:u,onQuestionViewed:de}),Ce=yo(e?.savePartialResponse),yt=go(e?.savePartialResponse),ze=co({session:i,survey:n,answers:d,enabled:Ce,debounceMs:yt,hasUserInteractedRef:t,isFinalSubmitting:N}),te=sa(()=>Ce?ze:aa,[Ce,ze]),ke=So(()=>{p.kind!=="content"||t.current||(t.current=!0,r.current=!0,a())},[a,p.kind]),St=So(F=>{F.type==="NEXT"&&n&&x==="submit"&&(F={type:"SUBMIT"}),S.info(`Action dispatched: ${F.type}`,F);try{switch(F.type){case"START":r.current=!0,k();break;case"NEXT":f();break;case"PREVIOUS":A();break;case"SUBMIT":m();break;case"SCROLL":ke();break;case"CHANGE":ke(),R(F.payload.questionId,F.payload.answerValue);break;case"RECORD_QUESTION_VIEW":if(!r.current)return;Ge(F.payload.questionIds);break;default:break}}catch(vt){S.error(`Error executing action: ${F.type}`,{err:P(vt)})}},[f,A,m,R,k,n,x,ke,Ge,p.kind]);return{surveyQueryResults:{data:n,error:s,isLoading:o},submitSurveyResults:{data:_,error:B,isLoading:N},partialSaveResults:te,state:{phase:p,currentPageIndex:c,currentQuestions:g,answers:d,validationErrors:y,progressPercentage:h,totalQuestionsCount:C,answeredQuestionsCount:E,canGoBack:b,primaryButtonType:x,specialPage:T},onAction:St}}var pa=/\{\{SURVEY_QUESTION-:-([^}]+)\}\}/g;function ca(e){return e===l.CFM_MATRIX||e===l.CSAT_MATRIX||e===l.RATING_MATRIX||e===l.SLIDER_MATRIX}function xo(e,t){if(t==null)return"";if(e.type===l.MCQ){let r=e;return(Array.isArray(t)?t:typeof t=="string"?[t]:[]).map(o=>r.options.find(s=>s.id===o)?.optionLabel).filter(o=>!!o).join(", ")}return e.type===l.TEXTFIELD&&typeof t=="string"?t:e.type===l.NPS_SCALE&&typeof t=="number"?String(t):ca(e.type)&&typeof t=="object"&&!Array.isArray(t)?Object.values(t).filter(n=>n!=null&&n!=="").map(n=>String(n)).join(", "):typeof t=="string"?t:typeof t=="number"?String(t):""}function la(e,t,r){return e.replace(pa,(n,i)=>{let o=r.get(i);return o?xo(o,t[i]):n})}export{br as ACTIONS,xr as QUESTION_ACTIVITY_STATE,l as QUESTION_TYPE,mr as applyActivePathQuestionNumbers,lr as applyQuestionDisplayVariants,Zo as assignRankWithoutDuplicates,Wo as buildRankOrderFromOrderedOptionIds,dr as computeActivePathQuestionNumbers,xo as formatAnswerForDisplay,Nt as getOrderedOptionIdsFromRanks,jn as getVisibleMatrixItemsForAnswers,j as getVisibleMcqOptions,Gn as getVisibleMcqOptionsForAnswers,X as getVisibleRankOrderOptions,zn as getVisibleRankOrderOptionsForAnswers,J as getVisibleScaleColumns,Yn as getVisibleScaleColumnsForAnswers,q as getVisibleStatementRows,Xn as getVisibleStatementRowsForAnswers,Ko as matrixColumnStoredValue,D as normalizeRankOrderAnswers,to as resolveQuestionDisplayText,la as resolveSurveyQuestionPlaceholders,ua as useSurveySDK};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@explorer02/cfm-survey-sdk",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -17,7 +17,9 @@
17
17
  "lint": "tsc --noEmit",
18
18
  "postinstall": "node postinstall.js",
19
19
  "test": "vitest run",
20
- "test:watch": "vitest"
20
+ "test:watch": "vitest",
21
+ "test:coverage": "vitest run --coverage",
22
+ "docs:sync-manifest": "npx tsx scripts/generate-doc-manifest.ts"
21
23
  },
22
24
  "peerDependencies": {
23
25
  "react": ">=17.0.0"
@@ -26,12 +28,12 @@
26
28
  "@testing-library/jest-dom": "^6.4.2",
27
29
  "@testing-library/react": "^14.2.1",
28
30
  "@testing-library/user-event": "^14.5.2",
31
+ "@vitest/coverage-v8": "^1.3.1",
29
32
  "@types/react": "^17.0.0",
30
33
  "@tanstack/react-query": "^5.0.0",
31
34
  "jsdom": "^24.0.0",
32
35
  "tsup": "^8.0.2",
33
36
  "typescript": "^6.0.0",
34
- "vitest": "^1.3.1",
35
- "react-icons": ">=5.0.0"
37
+ "vitest": "^1.3.1"
36
38
  }
37
39
  }
package/postinstall.js CHANGED
@@ -1,80 +1,88 @@
1
- const fs = require('fs');// Node's file system module — read/write/copy files
2
- const path = require('path');// Node's path module — build cross-platform file paths
1
+ const fs = require('fs');
2
+ const path = require('path');
3
3
 
4
- // The directory where the user ran `npm install` (target client project root)
5
- const targetDir = process.env.INIT_CWD || path.resolve(__dirname, '../../..');
4
+ const SDK_MARKER_START = '<!-- CFM-SURVEY-SDK:START -->';
5
+ const SDK_MARKER_END = '<!-- CFM-SURVEY-SDK:END -->';
6
+ const INSTALLED_DOCS_PREFIX = 'node_modules/@explorer02/cfm-survey-sdk/templates/docs';
6
7
 
7
- console.log('\nRunning CFM Survey SDK postinstall script...');
8
-
9
- try {
10
- // ── Copy AGENT.md to project root ──────────────────────────────────────────
11
- const agentTemplatePath = path.join(__dirname, 'templates', 'AGENT.md');
12
- const agentDestPath = path.join(targetDir, 'AGENT.md');
13
-
14
- if (fs.existsSync(agentTemplatePath)) {
15
- fs.copyFileSync(agentTemplatePath, agentDestPath);
16
- console.log(`✅ Copied AGENT.md to ${agentDestPath}`);
17
- } else {
18
- console.warn(`⚠️ AGENT.md template not found at ${agentTemplatePath}`);
19
- }
20
-
21
- // ── Copy docs folder to node_modules ───────────────────────────────────────
22
- const docsTemplatePath = path.join(__dirname, 'templates', 'docs');
23
- const docsDestPath = path.join(__dirname, 'docs'); // Keep it inside the installed SDK package
24
-
25
- if (fs.existsSync(docsTemplatePath)) {
26
- // Basic recursive copy fallback since fs.cpSync requires Node 16.7+
27
- function copyDirSync(src, dest) {
28
- if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true });
29
- const entries = fs.readdirSync(src, { withFileTypes: true });
30
- for (let entry of entries) {
31
- const srcPath = path.join(src, entry.name);
32
- const destPath = path.join(dest, entry.name);
33
- entry.isDirectory() ? copyDirSync(srcPath, destPath) : fs.copyFileSync(srcPath, destPath);
34
- }
35
- }
36
- copyDirSync(docsTemplatePath, docsDestPath);
37
- console.log(`✅ Copied docs/ to ${docsDestPath}`);
38
- }
39
-
40
- // ── Write .cursorrules — instructs the AI agent exactly what to do ─────────
41
- const cursorRulesPath = path.join(targetDir, '.cursorrules');
42
- const cursorRulesContent = `You are an AI coding agent tasked with building a survey UI using @explorer02/cfm-survey-sdk.
43
-
44
- === CRITICAL OPERATING INSTRUCTIONS — FOLLOW IN ORDER, NO DEVIATION ===
45
-
46
- RULE 0 — READ THE MASTER INDEX:
47
- Open and read `node_modules/@explorer02/cfm-survey-sdk/docs/index.md`.
48
- Also read `node_modules/@explorer02/cfm-survey-sdk/docs/MANIFEST.json`.
8
+ /** Only run when the SDK is installed as a dependency inside node_modules. */
9
+ function isConsumerInstall() {
10
+ return __dirname.split(path.sep).includes('node_modules');
11
+ }
49
12
 
50
- RULE 1 — DOCS-FIRST FLOW (NO WIZARD):
51
- Follow the 8 phases in index.md. Branding comes from the client prompt only.
52
- Do NOT run `cfm-sdk init`, read `survey-config.json`, or use any setup wizard.
13
+ function getSdkRulesBody() {
14
+ const docs = INSTALLED_DOCS_PREFIX;
15
+ return [
16
+ 'You are an AI coding agent tasked with building a survey UI using @explorer02/cfm-survey-sdk.',
17
+ '',
18
+ '=== CRITICAL OPERATING INSTRUCTIONS — FOLLOW IN ORDER, NO DEVIATION ===',
19
+ '',
20
+ 'RULE 0 — READ THE MASTER INDEX:',
21
+ 'Open and read `' + docs + '/index.md`.',
22
+ 'Also read `' + docs + '/MANIFEST.json`.',
23
+ '',
24
+ 'RULE 1 — DOCS-FIRST FLOW (NO WIZARD):',
25
+ 'Follow the 8 phases in index.md. Branding comes from the client prompt only.',
26
+ 'Do NOT run `cfm-sdk init`, read `survey-config.json`, or use any setup wizard.',
27
+ '',
28
+ 'RULE 2 — DEEP CONTEXT BEFORE CODE:',
29
+ 'Before writing React code, read EVERY file in `' + docs + '/01-components/`.',
30
+ 'Read `' + docs + '/00-integration/component-checklist.md` and `' + docs + '/03-ui-specs/` for EVERY question type in the fetched survey.',
31
+ 'Copy `' + docs + '/templates/Question.tsx` as your Question dispatcher — do NOT use stub/default fallback branches.',
32
+ 'Copy `' + docs + '/templates/implementation_plan.md` to project root and fill it in.',
33
+ '',
34
+ 'RULE 2b — NO STUB PLACEHOLDERS:',
35
+ 'Never render "not yet implemented" or similar placeholder text. Matrix MUST route by subType.',
36
+ '',
37
+ 'RULE 3 — AUTO-PROCEED:',
38
+ 'After the implementation plan is complete, proceed to build without waiting for approval.',
39
+ 'The workflow requires 3 client inputs: Prompt/Mockup, Instance ID (JWT), Deploy Confirmation.',
40
+ '',
41
+ 'RULE 4 — PACKAGE IMPORT:',
42
+ 'Import from whatever name appears in your project\'s package.json dependencies.',
43
+ '',
44
+ '=== END OF CRITICAL INSTRUCTIONS ===',
45
+ ].join('\n');
46
+ }
53
47
 
54
- RULE 2 — DEEP CONTEXT BEFORE CODE:
55
- Before writing React code, read EVERY file in `node_modules/@explorer02/cfm-survey-sdk/docs/01-components/`.
56
- Read `docs/00-integration/component-checklist.md` and `docs/03-ui-specs/` for EVERY question type in the fetched survey (blocking for matrix, slider_matrix, file_upload).
57
- Copy `docs/templates/Question.tsx` as your Question dispatcher — do NOT use stub/default fallback branches.
58
- Copy `node_modules/@explorer02/cfm-survey-sdk/docs/templates/implementation_plan.md` to project root and fill it in.
59
48
 
60
- RULE 2b — NO STUB PLACEHOLDERS:
61
- Never render "not yet implemented" or similar placeholder text. If a type is in the survey, implement its scale component.
49
+ function getMarkedCursorRulesBlock() {
50
+ return [SDK_MARKER_START, getSdkRulesBody(), SDK_MARKER_END].join('\n');
51
+ }
62
52
 
63
- RULE 3 AUTO-PROCEED:
64
- After the implementation plan is complete, proceed to build without waiting for approval.
65
- The workflow requires 3 client inputs: Prompt/Mockup, Instance ID (JWT), Deploy Confirmation.
53
+ function mergeIntoCursorRules(existingContent, block) {
54
+ const startIdx = existingContent.indexOf(SDK_MARKER_START);
55
+ const endIdx = existingContent.indexOf(SDK_MARKER_END);
66
56
 
67
- RULE 4 PACKAGE IMPORT:
68
- Import from whatever name appears in your project's package.json dependencies.
57
+ if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
58
+ const before = existingContent.slice(0, startIdx).trimEnd();
59
+ const after = existingContent.slice(endIdx + SDK_MARKER_END.length).trimStart();
60
+ const parts = [before, block, after].filter(Boolean);
61
+ return parts.join('\n\n') + '\n';
62
+ }
69
63
 
70
- === END OF CRITICAL INSTRUCTIONS ===`;
64
+ const trimmed = existingContent.trimEnd();
65
+ return trimmed ? trimmed + '\n\n' + block + '\n' : block + '\n';
66
+ }
71
67
 
72
- fs.writeFileSync(cursorRulesPath, cursorRulesContent, 'utf8');
73
- console.log(`✅ Created .cursorrules at ${cursorRulesPath}`);
68
+ function writeCursorRules(targetDir) {
69
+ const cursorRulesPath = path.join(targetDir, '.cursorrules');
70
+ let newContent = getMarkedCursorRulesBlock() + '\n';
71
+
72
+ if (fs.existsSync(cursorRulesPath)) {
73
+ const existing = fs.readFileSync(cursorRulesPath, 'utf8');
74
+ newContent = mergeIntoCursorRules(existing, getMarkedCursorRulesBlock());
75
+ console.log('Merged SDK rules into ' + cursorRulesPath);
76
+ } else {
77
+ console.log('Created .cursorrules at ' + cursorRulesPath);
78
+ }
79
+
80
+ fs.writeFileSync(cursorRulesPath, newContent, 'utf8');
81
+ }
74
82
 
75
- // ── Print terminal instructions ────────────────────────────────────────────
83
+ function printSuccessBanner() {
76
84
  console.log('\n' + '='.repeat(60));
77
- console.log(' 🎉 CFM SURVEY SDK INSTALLED SUCCESSFULLY!');
85
+ console.log(' CFM SURVEY SDK INSTALLED SUCCESSFULLY!');
78
86
  console.log('='.repeat(60));
79
87
  console.log('');
80
88
  console.log(' NEXT STEPS:');
@@ -84,12 +92,31 @@ Import from whatever name appears in your project's package.json dependencies.
84
92
  console.log(' "Build a survey using @explorer02/cfm-survey-sdk"');
85
93
  console.log('');
86
94
  console.log(' The agent will:');
87
- console.log(' Read the master documentation index');
88
- console.log(' Ask you for your Instance ID');
89
- console.log(' Build the UI and ask to deploy to Vercel');
95
+ console.log(' - Read the master documentation index');
96
+ console.log(' - Ask you for your Instance ID');
97
+ console.log(' - Build the UI and ask to deploy to Vercel');
90
98
  console.log('');
91
99
  console.log('='.repeat(60) + '\n');
100
+ }
101
+
102
+ console.log('\nRunning CFM Survey SDK postinstall script...');
103
+
104
+ try {
105
+ if (!isConsumerInstall()) {
106
+ console.log('Skipping postinstall (local workspace link — not a consumer install).');
107
+ process.exit(0);
108
+ }
109
+
110
+ const targetDir = process.env.INIT_CWD || path.resolve(__dirname, '../../..');
111
+ const docsPath = path.join(__dirname, 'templates', 'docs');
112
+
113
+ if (!fs.existsSync(docsPath)) {
114
+ console.warn('Warning: templates/docs/ not found at ' + docsPath);
115
+ }
92
116
 
117
+ writeCursorRules(targetDir);
118
+ printSuccessBanner();
93
119
  } catch (error) {
94
120
  console.error('Failed to run CFM Survey SDK postinstall script:', error);
121
+ process.exit(1);
95
122
  }