@landform.io/sdk 0.1.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 (63) hide show
  1. package/dist/api/index.cjs +17 -0
  2. package/dist/api/index.cjs.map +1 -0
  3. package/dist/api/index.d.cts +48 -0
  4. package/dist/api/index.d.ts +48 -0
  5. package/dist/api/index.js +4 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/chunk-52W6RI6C.cjs +4 -0
  8. package/dist/chunk-52W6RI6C.cjs.map +1 -0
  9. package/dist/chunk-DASQI7IA.cjs +4 -0
  10. package/dist/chunk-DASQI7IA.cjs.map +1 -0
  11. package/dist/chunk-EL7YGOTY.js +3 -0
  12. package/dist/chunk-EL7YGOTY.js.map +1 -0
  13. package/dist/chunk-GVOTY5NG.js +3 -0
  14. package/dist/chunk-GVOTY5NG.js.map +1 -0
  15. package/dist/chunk-HUIMGLDC.js +488 -0
  16. package/dist/chunk-HUIMGLDC.js.map +1 -0
  17. package/dist/chunk-I6L5OCM3.js +1657 -0
  18. package/dist/chunk-I6L5OCM3.js.map +1 -0
  19. package/dist/chunk-IQXKFO6Q.cjs +55 -0
  20. package/dist/chunk-IQXKFO6Q.cjs.map +1 -0
  21. package/dist/chunk-P2GUKJHH.cjs +117 -0
  22. package/dist/chunk-P2GUKJHH.cjs.map +1 -0
  23. package/dist/chunk-PDUJU32P.js +687 -0
  24. package/dist/chunk-PDUJU32P.js.map +1 -0
  25. package/dist/chunk-PKHTPGWQ.js +114 -0
  26. package/dist/chunk-PKHTPGWQ.js.map +1 -0
  27. package/dist/chunk-V7WAYO2Q.js +48 -0
  28. package/dist/chunk-V7WAYO2Q.js.map +1 -0
  29. package/dist/chunk-WHV333XL.cjs +1684 -0
  30. package/dist/chunk-WHV333XL.cjs.map +1 -0
  31. package/dist/chunk-WIFNU3FA.cjs +497 -0
  32. package/dist/chunk-WIFNU3FA.cjs.map +1 -0
  33. package/dist/chunk-ZLOP4BTK.cjs +695 -0
  34. package/dist/chunk-ZLOP4BTK.cjs.map +1 -0
  35. package/dist/components/index.cjs +99 -0
  36. package/dist/components/index.cjs.map +1 -0
  37. package/dist/components/index.d.cts +166 -0
  38. package/dist/components/index.d.ts +166 -0
  39. package/dist/components/index.js +6 -0
  40. package/dist/components/index.js.map +1 -0
  41. package/dist/hooks/index.cjs +35 -0
  42. package/dist/hooks/index.cjs.map +1 -0
  43. package/dist/hooks/index.d.cts +75 -0
  44. package/dist/hooks/index.d.ts +75 -0
  45. package/dist/hooks/index.js +6 -0
  46. package/dist/hooks/index.js.map +1 -0
  47. package/dist/index-DoRZImTl.d.cts +590 -0
  48. package/dist/index-DoRZImTl.d.ts +590 -0
  49. package/dist/index.cjs +186 -0
  50. package/dist/index.cjs.map +1 -0
  51. package/dist/index.d.cts +8 -0
  52. package/dist/index.d.ts +8 -0
  53. package/dist/index.js +9 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/theme/index.cjs +61 -0
  56. package/dist/theme/index.cjs.map +1 -0
  57. package/dist/theme/index.d.cts +65 -0
  58. package/dist/theme/index.d.ts +65 -0
  59. package/dist/theme/index.js +4 -0
  60. package/dist/theme/index.js.map +1 -0
  61. package/dist/useForm-D1mB6REv.d.ts +48 -0
  62. package/dist/useForm-kF8xK1mJ.d.cts +48 -0
  63. package/package.json +101 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/FormProvider.tsx","../src/components/screens/WelcomeScreen.tsx","../src/components/screens/ThankYouScreen.tsx","../src/components/fields/QuestionHeader.tsx","../src/components/fields/MultipleChoice.tsx","../src/components/fields/NumberField.tsx","../src/components/fields/OpinionScale.tsx","../src/components/fields/Rating.tsx","../src/components/fields/Statement.tsx","../src/components/fields/TextField.tsx","../src/components/fields/YesNo.tsx","../src/components/fields/FieldRenderer.tsx","../src/components/navigation/NavigationControls.tsx","../src/components/navigation/ProgressBar.tsx","../src/utils/timeEstimate.ts","../src/components/navigation/TimeToComplete.tsx","../src/components/CookieConsent.tsx","../src/components/Captcha.tsx","../src/components/layout/Branding.tsx","../src/components/layout/Header.tsx","../src/components/FormRenderer.tsx","../src/components/layout/FormContainer.tsx","../src/components/layout/QuestionContainer.tsx","../src/components/screens/ClosedScreen.tsx"],"names":["jsx","jsxs","React","useMemo","useState","useEffect"],"mappings":";;;;AAUA,IAAM,WAAA,GAAc,cAAuC,IAAI,CAAA;AAExD,SAAS,cAAA,GAAmC;AAClD,EAAA,MAAM,GAAA,GAAM,WAAW,WAAW,CAAA;AAClC,EAAA,IAAI,CAAC,GAAA,EAAK;AACT,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,GAAA;AACR;AAMO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,SAAQ,EAAsB;AACzE,EAAA,MAAM,IAAA,GAAO,QAAQ,OAAO,CAAA;AAE5B,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACpB,OAAO;AAAA,MACN,GAAG,IAAA;AAAA,MACH,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,UAAU,OAAA,CAAQ;AAAA,KACnB,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,QAAQ;AAAA,GACzC;AAEA,EAAA,uBACC,GAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,OAAO,OAAA,CAAQ,KAAA,EACrC,QAAA,kBAAA,GAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,YAAA,EAAe,UAAS,CAAA,EACtD,CAAA;AAEF;ACjCO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,OAAA,EAAQ,EAAuB;AACtE,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAW,GAAI,MAAA;AAE1C,EAAA,uBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,IAAA,UAAA,IAAc,UAAA,CAAW,IAAA,KAAS,OAAA,oBAClCA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAK,UAAA,CAAW,IAAA;AAAA,QAChB,GAAA,EAAK,UAAA,CAAW,UAAA,EAAY,WAAA,IAAe,EAAA;AAAA,QAC3C,OAAO,EAAE,QAAA,EAAU,QAAQ,SAAA,EAAW,OAAA,EAAS,cAAc,MAAA;AAAO;AAAA,KACrE;AAAA,oBAGDA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mBAAmB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IAEtC,UAAA,CAAW,+BACXA,GAAAA,CAAC,OAAE,SAAA,EAAU,uBAAA,EAAyB,qBAAW,WAAA,EAAY,CAAA;AAAA,IAG7D,UAAA,CAAW,UAAA,oBACXA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,WAAA,EAAY,OAAA,EAAS,OAAA,EACnD,QAAA,EAAA,UAAA,CAAW,cAAc,OAAA,EAC3B;AAAA,GAAA,EAEF,CAAA;AAEF;AC3BO,SAAS,cAAA,CAAe,EAAE,MAAA,EAAO,EAAwB;AAC/D,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAW,GAAI,MAAA;AAE1C,EAAA,MAAM,oBAAoB,MAAM;AAC/B,IAAA,QAAQ,WAAW,UAAA;AAAY,MAC9B,KAAK,QAAA;AACJ,QAAA,MAAA,CAAO,SAAS,MAAA,EAAO;AACvB,QAAA;AAAA,MACD,KAAK,UAAA;AACJ,QAAA,IAAI,WAAW,WAAA,EAAa;AAC3B,UAAA,MAAA,CAAO,QAAA,CAAS,OAAO,UAAA,CAAW,WAAA;AAAA,QACnC;AACA,QAAA;AAGA;AACF,EACD,CAAA;AAEA,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,IAAA,UAAA,IAAc,UAAA,CAAW,IAAA,KAAS,OAAA,oBAClCD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAK,UAAA,CAAW,IAAA;AAAA,QAChB,GAAA,EAAK,UAAA,CAAW,UAAA,EAAY,WAAA,IAAe,EAAA;AAAA,QAC3C,OAAO,EAAE,QAAA,EAAU,QAAQ,SAAA,EAAW,OAAA,EAAS,cAAc,MAAA;AAAO;AAAA,KACrE;AAAA,oBAGDA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mBAAmB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IAEtC,UAAA,CAAW,+BACXA,GAAAA,CAAC,OAAE,SAAA,EAAU,uBAAA,EAAyB,qBAAW,WAAA,EAAY,CAAA;AAAA,IAG7D,UAAA,CAAW,UAAA,oBACXA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,WAAA,EAAY,OAAA,EAAS,iBAAA,EACnD,QAAA,EAAA,UAAA,CAAW,cAAc,MAAA,EAC3B;AAAA,GAAA,EAEF,CAAA;AAEF;ACxCO,SAAS,cAAA,CAAe;AAAA,EAC9B,KAAA;AAAA,EACA,cAAA;AAAA,EACA;AACD,CAAA,EAAwB;AACvB,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,8BAA6B,EACvD,QAAA,EAAA;AAAA,IAAA,kBAAA,IAAsB,cAAA,KAAmB,0BACzCD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,yBAAA;AAAA,QACV,OAAO,EAAE,OAAA,EAAS,SAAS,YAAA,EAAc,SAAA,EAAW,UAAU,UAAA,EAAW;AAAA,QAExE,QAAA,EAAA;AAAA;AAAA,KACF;AAAA,oBAEDC,IAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,WAAA,EAAa,QAAA,oBACnBD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,KAAA,EAAO,EAAE,UAAA,EAAY,SAAA,IAAa,QAAA,EAAA,GAAA,EAEhE;AAAA,KAAA,EAEF,CAAA;AAAA,IACC,KAAA,CAAM,+BACNA,GAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,yBAAA;AAAA,QACV,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,EAAU,UAAU,MAAA,EAAO;AAAA,QAE9C,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACR,GAAA,EAEF,CAAA;AAEF;ACzBO,SAAS,cAAA,CAAe;AAAA,EAC9B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACD,CAAA,EAAwB;AACvB,EAAA,MAAM,QAAQ,eAAA,EAAgB;AAC9B,EAAA,MAAM,cAAA,GAAkB,SAAsB,EAAC;AAC/C,EAAA,MAAM,EAAE,OAAA,EAAS,sBAAA,EAAuB,GAAI,KAAA,CAAM,UAAA;AAGlD,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,iBAAA,EAAmB,WAAA,KAAgB,MAAA;AAC7D,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,iBAAA,EAAmB,YAAA,IAAgB,eAAA;AAC9D,EAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,iBAAA,EAAmB,eAAA,IAAmB,WAAA;AACpE,EAAA,MAAM,uBAAA,GAA0B,MAAM,iBAAA,EAAmB,uBAAA;AAEzD,EAAA,MAAM,iBAAA,GAAoB,CAAC,SAAA,KAAsB;AAChD,IAAA,IAAI,sBAAA,EAAwB;AAC3B,MAAA,MAAM,SAAA,GAAY,cAAA,CAAe,QAAA,CAAS,SAAS,IAChD,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,SAAS,CAAA,GAC5C,CAAC,GAAG,gBAAgB,SAAS,CAAA;AAChC,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IACnB,CAAA,MAAO;AACN,MAAA,MAAM,QAAA,GAAW,CAAC,SAAS,CAAA;AAC3B,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,IAChB;AAAA,EACD,CAAA;AAGA,EAAAE,MAAAA,CAAM,UAAU,MAAM;AACrB,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAE3C,MAAA,MAAM,GAAA,GAAM,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY;AAC9B,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA,GAAI,EAAA;AAElC,MAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ;AACzC,QAAA,iBAAA,CAAkB,OAAA,CAAQ,KAAK,CAAA,CAAE,GAAG,CAAA;AAAA,MACrC;AAAA,IACD,CAAA;AAEA,IAAA,IAAI,YAAA,EAAc;AACjB,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAChD,MAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,IACjE;AAAA,EACD,CAAA,EAAG,CAAC,OAAA,EAAS,YAAA,EAAc,cAAc,CAAC,CAAA;AAG1C,EAAA,MAAM,cAAA,GAAsC,iBAAiB,eAAA,GAC1D;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,GAAA,EAAK;AAAA,GACN,GACC;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,mBAAA,EAAqB,YAAA,KAAiB,YAAA,GACnC,gBAAA,GACA,sCAAA;AAAA,IACH,GAAA,EAAK,0BAAA;AAAA,IACL,UAAU,uBAAA,IAA2B,MAAA;AAAA,IACrC,MAAA,EAAQ,0BAA0B,QAAA,GAAW;AAAA,GAC9C;AAGF,EAAA,MAAM,eAAA,GAAkB,CAAC,UAAA,KAAwB;AAChD,IAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC/B,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,IAAI,oBAAoB,OAAA,EAAS;AAChC,MAAA,uBACCF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBACf,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EACpD,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,IAAA,EAAM,UAAA,GAAa,SAAA,GAAY,OAAA,EAAS,CAAA;AAAA,wBACpEA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACA,CAAA,EAAE,sBAAA;AAAA,YACF,MAAA,EAAQ,aAAa,OAAA,GAAU,OAAA;AAAA,YAC/B,WAAA,EAAY,KAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe;AAAA;AAAA;AAChB,OAAA,EACD,CAAA,EACD,CAAA;AAAA,IAEF;AAEA,IAAA,IAAI,oBAAoB,OAAA,EAAS;AAChC,MAAA,uBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBACf,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EACpD,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,MAAA,EAAQ,aAAa,yBAAA,GAA4B,SAAA,EAAW,WAAA,EAAY,GAAA,EAAI,MAAK,MAAA,EAAO,CAAA;AAAA,QACnH,UAAA,oBAAcA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,yBAAA,EAA0B;AAAA,OAAA,EAC3E,CAAA,EACD,CAAA;AAAA,IAEF;AAGA,IAAA,uBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EACd,wCACAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAM,IAAA;AAAA,QACN,MAAA,EAAO,IAAA;AAAA,QACP,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,GAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QAEf,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA,KACnC,EAEF,CAAA;AAAA,EAEF,CAAA;AAEA,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,IAEC,sBAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,YAAA,EAAc,4BAA4B,OAAA,EAAS,GAAA,EAAI,EAC3F,QAAA,EAAA,cAAA,EAAgB,yBAAyB,4BAAA,EAC3C,CAAA;AAAA,oBAGDA,IAAC,KAAA,EAAA,EAAI,KAAA,EAAO,gBACV,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AAC/B,MAAA,MAAM,UAAA,GAAa,cAAA,CAAe,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA;AAGrD,MAAA,IAAI,WAAA,EAAa;AAChB,QAAA,uBACCC,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEA,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAA;AAAA,YAC3C,SAAA,EAAW,CAAA,eAAA,EAAkB,UAAA,GAAa,yBAAA,GAA4B,EAAE,CAAA,CAAA;AAAA,YAExE,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,UAAK,KAAA,EAAO,EAAE,MAAM,CAAA,EAAE,EAAI,iBAAO,KAAA,EAAM,CAAA;AAAA,cACvC,gBAAgB,UAAU;AAAA;AAAA,WAAA;AAAA,UANtB,MAAA,CAAO;AAAA,SAOb;AAAA,MAEF;AAGA,MAAA,uBACCC,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEA,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAA;AAAA,UAC3C,SAAA,EAAW,CAAA,UAAA,EAAa,UAAA,GAAa,oBAAA,GAAuB,EAAE,CAAA,CAAA;AAAA,UAE7D,QAAA,EAAA;AAAA,YAAA,YAAA,oBACAD,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eACd,QAAA,EAAA,MAAA,CAAO,YAAA,CAAa,EAAA,GAAK,KAAK,CAAA,EAChC,CAAA;AAAA,4BAEDA,IAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EAAI,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,YACvC,8BACAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBACf,KAAA,EAAO,EAAE,KAAA,EAAO,yBAAA,EAA0B;AAAA,gBAE1C,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACnC;AAAA,SAAA;AAAA,QAxBI,MAAA,CAAO;AAAA,OA0Bb;AAAA,IAEF,CAAC,CAAA,EACF,CAAA;AAAA,IAEC,KAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,UAAA,EACrC,QAAA,EAAA,KAAA,EACF;AAAA,GAAA,EAEF,CAAA;AAEF;ACxMO,SAAS,WAAA,CAAY;AAAA,EAC3B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACD,CAAA,EAAqB;AACpB,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,QAAA,CAAS;AAAA,IAC9B,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACA,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2C;AAChE,IAAA,MAAM,GAAA,GAAM,EAAE,MAAA,CAAO,KAAA;AACrB,IAAA,IAAI,QAAQ,EAAA,EAAI;AACf,MAAA,QAAA,CAAS,EAAE,CAAA;AAAA,IACZ,CAAA,MAAO;AACN,MAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAC1B,MAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AAChB,QAAA,QAAA,CAAS,GAAG,CAAA;AAAA,MACb;AAAA,IACD;AAAA,EACD,CAAA;AAEA,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,oBAEAA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO,KAAA,KAAU,MAAA,GAAY,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAAA,QAC7C,QAAA,EAAU,YAAA;AAAA,QACV,SAAA;AAAA,QACA,WAAA,EAAa,MAAM,UAAA,EAAY,WAAA;AAAA,QAC/B,GAAA,EAAK,MAAM,WAAA,EAAa,QAAA;AAAA,QACxB,GAAA,EAAK,MAAM,WAAA,EAAa,QAAA;AAAA,QACxB,SAAA,EAAU,oBAAA;AAAA,QACV,cAAA,EAAc,CAAC,CAAC,KAAA;AAAA,QAChB,kBAAA,EAAkB,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,GAAW;AAAA;AAAA,KAClD;AAAA,IAEC,KAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,UAAA,EACrC,QAAA,EAAA,KAAA,EACF;AAAA,GAAA,EAEF,CAAA;AAEF;AC1DO,SAAS,YAAA,CAAa;AAAA,EAC5B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACD,CAAA,EAAsB;AACrB,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,MAAA,KAAW,KAAA,CAAM,UAAA;AAC5C,EAAA,MAAM,YAAA,GAAe,KAAA;AAErB,EAAA,MAAM,UAAA,GAAa,aAAa,CAAA,GAAI,CAAA;AAGpC,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,KAAmB;AACvC,IAAA,QAAA,CAAS,MAAM,CAAA;AACf,IAAA,MAAA,CAAO,MAAM,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,oBAEAC,KAAC,KAAA,EAAA,EACA,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACN,OAAA,EAAS,MAAA;AAAA,YACT,GAAA,EAAK,QAAA;AAAA,YACL,QAAA,EAAU;AAAA,WACX;AAAA,UAEC,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,aAAa,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,wBAC7DA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEA,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,WAAA,CAAY,GAAG,CAAA;AAAA,cAC9B,SAAA,EAAW,CAAA,gBAAA,EAAmB,YAAA,KAAiB,GAAA,GAAM,6BAA6B,EAAE,CAAA,CAAA;AAAA,cAEnF,QAAA,EAAA;AAAA,aAAA;AAAA,YALI;AAAA,WAON;AAAA;AAAA,OACF;AAAA,MAAA,CAEE,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,KAAA,qBACvBC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACN,OAAA,EAAS,MAAA;AAAA,YACT,cAAA,EAAgB,eAAA;AAAA,YAChB,SAAA,EAAW,SAAA;AAAA,YACX,QAAA,EAAU,UAAA;AAAA,YACV,KAAA,EAAO;AAAA,WACR;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,IAAA,EAAK,CAAA;AAAA,YAClB,OAAO,MAAA,oBAAUA,GAAAA,CAAC,MAAA,EAAA,EAAM,iBAAO,MAAA,EAAO,CAAA;AAAA,4BACvCA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA;AAAA;AAAA;AACrB,KAAA,EAEF,CAAA;AAAA,IAEC,KAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,UAAA,EACrC,QAAA,EAAA,KAAA,EACF;AAAA,GAAA,EAEF,CAAA;AAEF;ACxEA,IAAM,MAAA,GAAS;AAAA,EACd,IAAA,EAAM,CAAC,MAAA,qBACNA,IAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,IAAA,EAAM,MAAA,GAAS,iBAAiB,MAAA,EAAQ,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAClG,0BAAAA,GAAAA,CAAC,SAAA,EAAA,EAAQ,MAAA,EAAO,gGAAA,EAAiG,CAAA,EAClH,CAAA;AAAA,EAED,KAAA,EAAO,CAAC,MAAA,qBACPA,IAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,IAAA,EAAM,MAAA,GAAS,iBAAiB,MAAA,EAAQ,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAClG,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0IAAA,EAA2I,CAAA,EACpJ,CAAA;AAAA,EAED,QAAA,EAAU,CAAC,MAAA,qBACVA,IAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,IAAA,EAAM,MAAA,GAAS,iBAAiB,MAAA,EAAQ,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAClG,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qHAAA,EAAsH,CAAA,EAC/H,CAAA;AAAA,EAED,MAAA,EAAQ,CAAC,MAAA,qBACRC,KAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAM,SAAS,cAAA,GAAiB,MAAA,EAAQ,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAClG,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8BAAA,EAA+B,CAAA;AAAA,oBACvCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gCAAA,EAAiC,CAAA;AAAA,oBACzCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4DAAA,EAA6D,CAAA;AAAA,oBACrEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6DAAA,EAA8D,CAAA;AAAA,oBACtEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6BAAA,EAA8B;AAAA,GAAA,EACvC,CAAA;AAAA,EAED,KAAA,EAAO,CAAC,MAAA,qBACPA,IAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,aAAY,IAAA,EAAM,MAAA,GAAS,iBAAiB,MAAA,EAAQ,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAClG,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4CAAA,EAA6C,CAAA,EACtD;AAEF,CAAA;AAEO,SAAS,MAAA,CAAO;AAAA,EACtB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACD,CAAA,EAAgB;AACf,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,KAAA,CAAM,UAAA;AAC/B,EAAA,MAAM,eAAgB,KAAA,IAAoB,CAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,UAAA,KAAe,IAAA,GAAO,UAAA,GAAa,YAAA;AAExD,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,KAAmB;AACvC,IAAA,QAAA,CAAS,MAAM,CAAA;AACf,IAAA,MAAA,CAAO,MAAM,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAK,CAAA,IAAK,MAAA,CAAO,IAAA;AAE/C,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,oBAEAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACN,OAAA,EAAS,MAAA;AAAA,UACT,GAAA,EAAK;AAAA,SACN;AAAA,QACA,YAAA,EAAc,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,QAErC,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,2BACpDA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEA,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,WAAA,CAAY,MAAM,CAAA;AAAA,YACjC,YAAA,EAAc,MAAM,aAAA,CAAc,MAAM,CAAA;AAAA,YACxC,SAAA,EAAW,CAAA,eAAA,EAAkB,MAAA,IAAU,YAAA,GAAe,0BAA0B,EAAE,CAAA,CAAA;AAAA,YAClF,KAAA,EAAO;AAAA,cACN,UAAA,EAAY,MAAA;AAAA,cACZ,MAAA,EAAQ,MAAA;AAAA,cACR,MAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,SAAA;AAAA,cACT,KAAA,EAAO,QAAA;AAAA,cACP,MAAA,EAAQ;AAAA,aACT;AAAA,YACA,YAAA,EAAY,CAAA,KAAA,EAAQ,MAAM,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA;AAAA,YAEzC,QAAA,EAAA,cAAA,CAAe,UAAU,YAAY;AAAA,WAAA;AAAA,UAfjC;AAAA,SAiBN;AAAA;AAAA,KACF;AAAA,IAEC,KAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,UAAA,EACrC,QAAA,EAAA,KAAA,EACF;AAAA,GAAA,EAEF,CAAA;AAEF;ACrGO,SAAS,SAAA,CAAU;AAAA,EACzB,KAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACD,CAAA,EAAmB;AAClB,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,oBAEAA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,WAAA,EAAY,OAAA,EAAS,MAAA,EACnD,QAAA,EAAA,KAAA,CAAM,UAAA,CAAW,UAAA,IAAc,UAAA,EACjC;AAAA,GAAA,EACD,CAAA;AAEF;ACHO,SAAS,SAAA,CAAU;AAAA,EACzB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACD,CAAA,EAAmB;AAClB,EAAA,MAAM,EAAE,aAAA,EAAe,gBAAA,EAAiB,GAAI,QAAA,CAAS;AAAA,IACpD,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACA,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,KAAS,WAAA;AAClC,EAAA,MAAM,SAAA,GAAY,MAAM,IAAA,KAAS,OAAA,GAAU,UAAU,KAAA,CAAM,IAAA,KAAS,YAAY,KAAA,GAAQ,MAAA;AAExF,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,IAEC,6BACAA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAG,gBAAA,EAAiB;AAAA,QACrB,SAAA,EAAU,UAAA;AAAA,QACV,IAAA,EAAM,CAAA;AAAA,QACN,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAW,OAAA;AAAQ;AAAA,KACjD,mBAEAA,GAAAA,CAAC,OAAA,EAAA,EAAO,GAAG,eAAc,EAAG,IAAA,EAAM,SAAA,EAAW,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,IAG5E,KAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,UAAA,EACrC,QAAA,EAAA,KAAA,EACF;AAAA,GAAA,EAEF,CAAA;AAEF;AC1DO,SAAS,KAAA,CAAM;AAAA,EACrB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACD,CAAA,EAAe;AACd,EAAA,MAAM,YAAA,GAAe,KAAA;AAErB,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,KAAoB;AACxC,IAAA,QAAA,CAAS,MAAM,CAAA;AACf,IAAA,MAAA,CAAO,MAAM,CAAA;AAAA,EACd,CAAA;AAGA,EAAAE,MAAAA,CAAM,UAAU,MAAM;AACrB,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAC3C,MAAA,IAAI,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY,KAAM,GAAA,EAAK;AAChC,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA,MACjB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,CAAI,WAAA,OAAkB,GAAA,EAAK;AACvC,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MAClB;AAAA,IACD,CAAA;AAEA,IAAA,IAAI,YAAA,EAAc;AACjB,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAChD,MAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,IACjE;AAAA,EACD,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACCD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA,KACD;AAAA,oBAEAC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACN,OAAA,EAAS,MAAA;AAAA,UACT,GAAA,EAAK;AAAA,SACN;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,cAC/B,SAAA,EAAW,CAAA,UAAA,EAAa,YAAA,KAAiB,IAAA,GAAO,uBAAuB,EAAE,CAAA,CAAA;AAAA,cACzE,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cAEhB,QAAA,EAAA;AAAA,gBAAA,YAAA,oBAAgBD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAc,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,gCAChDA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,gBACR,YAAA,KAAiB,wBACjBA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAM,IAAA;AAAA,oBACN,MAAA,EAAO,IAAA;AAAA,oBACP,OAAA,EAAQ,WAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,KAAA,EAAO,EAAE,KAAA,EAAO,yBAAA,EAA2B,YAAY,MAAA,EAAO;AAAA,oBAE9D,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACnC;AAAA;AAAA,WAEF;AAAA,0BAEAC,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACA,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,cAChC,SAAA,EAAW,CAAA,UAAA,EAAa,YAAA,KAAiB,KAAA,GAAQ,uBAAuB,EAAE,CAAA,CAAA;AAAA,cAC1E,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,cAEhB,QAAA,EAAA;AAAA,gBAAA,YAAA,oBAAgBD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAc,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,gCAChDA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,gBACP,YAAA,KAAiB,yBACjBA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAM,IAAA;AAAA,oBACN,MAAA,EAAO,IAAA;AAAA,oBACP,OAAA,EAAQ,WAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,KAAA,EAAO,EAAE,KAAA,EAAO,yBAAA,EAA2B,YAAY,MAAA,EAAO;AAAA,oBAE9D,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACnC;AAAA;AAAA;AAEF;AAAA;AAAA,KACD;AAAA,IAEC,KAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,UAAA,EACrC,QAAA,EAAA,KAAA,EACF;AAAA,GAAA,EAEF,CAAA;AAEF;AC7FO,SAAS,aAAA,CAAc;AAAA,EAC7B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACD,CAAA,EAAuB;AACtB,EAAA,MAAM,WAAA,GAAc;AAAA,IACnB,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACD;AAEA,EAAA,QAAQ,MAAM,IAAA;AAAM,IACnB,KAAK,YAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,SAAA;AACJ,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAe,GAAG,WAAA,EAAa,CAAA;AAAA,IAElD,KAAK,QAAA;AACJ,MAAA,uBAAOA,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAe,GAAG,WAAA,EAAa,CAAA;AAAA,IAEpD,KAAK,iBAAA;AACJ,MAAA,uBACCA,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACA,KAAA;AAAA,UACC,GAAG,WAAA;AAAA,UACJ,YAAA;AAAA,UACA;AAAA;AAAA,OACD;AAAA,IAGF,KAAK,QAAA;AACJ,MAAA,uBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAe,GAAG,WAAA,EAAa,CAAA;AAAA,IAE/C,KAAK,eAAA;AACJ,MAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAe,GAAG,WAAA,EAAa,CAAA;AAAA,IAErD,KAAK,QAAA;AACJ,MAAA,uBACCA,GAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAe,GAAG,aAAa,YAAA,EAA4B,CAAA;AAAA,IAGpE,KAAK,WAAA;AACJ,MAAA,uBACCA,GAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA,kBAAA;AAAA,UACA;AAAA;AAAA,OACD;AAAA;AAAA,IAIF,KAAK,cAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL;AACC,MAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACd,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACA,KAAA;AAAA,YACA,cAAA;AAAA,YACA;AAAA;AAAA,SACD;AAAA,wBACAA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACA,IAAA,EAAK,MAAA;AAAA,YACL,OAAQ,KAAA,IAAoB,EAAA;AAAA,YAC5B,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,SAAA,EAAW,CAAC,CAAA,KAAM;AACjB,cAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACtB,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,MAAA,EAAO;AAAA,cACR;AAAA,YACD,CAAA;AAAA,YACA,SAAA,EAAU,oBAAA;AAAA,YACV,aAAa,CAAA,WAAA,EAAc,KAAA,CAAM,KAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA;AAAA,SACzD;AAAA,QACC,KAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,MAAA,CAAA,EAAU,SAAA,EAAU,UAAA,EACrC,QAAA,EAAA,KAAA,EACF;AAAA,OAAA,EAEF,CAAA;AAAA;AAGJ;ACxHO,SAAS,kBAAA,CAAmB,EAAE,MAAA,EAAQ,UAAA,EAAW,EAA4B;AACnF,EAAA,MAAM,EAAE,WAAW,SAAA,EAAW,YAAA,EAAc,MAAM,QAAA,EAAU,QAAA,KAC3D,cAAA,EAAe;AAChB,EAAA,MAAM,QAAQ,eAAA,EAAgB;AAG9B,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,iBAAA,EAAmB,oBAAA,IAAwB,QAAA;AACvE,EAAA,IAAI,aAAA,KAAkB,QAAA,IAAY,aAAA,KAAkB,cAAA,EAAgB;AACnE,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,UAAA,GAAa,MAAO,MAAA,GAAS,MAAA,KAAW,IAAA,EAAK;AACnD,EAAA,MAAM,cAAA,GAAiB,MAAO,UAAA,GAAa,UAAA,KAAe,QAAA,EAAS;AAEnE,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,cAAA,EAAgB,iBAAA,IAAqB,IAAA;AAClE,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,cAAA,EAAgB,cAAA,IAAkB,aAAA;AAE7D,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,iBAAA,EAAmB,gBAAA,KAAqB,YAAA;AAGlE,EAAA,IAAI,WAAA,EAAa;AAChB,IAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,iBAAA;AAAA,UACV,OAAA,EAAS,cAAA;AAAA,UACT,UAAU,CAAC,SAAA;AAAA,UACX,YAAA,EAAW,mBAAA;AAAA,UAEX,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yBAAA,EAA0B;AAAA;AAAA,aACnC;AAAA,YAAM;AAAA;AAAA;AAAA,OAEP;AAAA,sBACAC,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,iBAAA;AAAA,UACV,OAAA,EAAS,UAAA;AAAA,UACT,QAAA,EAAU,YAAA;AAAA,UACV,YAAA,EAAW,eAAA;AAAA,UACX,QAAA,EAAA;AAAA,YAAA,MAAA;AAAA,4BAEAD,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB;AAAA;AAAA;AACjC;AAAA;AAAA;AACD,KAAA,EACD,CAAA;AAAA,EAEF;AAGA,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,sBAAA;AAAA,QACV,OAAA,EAAS,cAAA;AAAA,QACT,UAAU,CAAC,SAAA;AAAA,QACX,YAAA,EAAW,mBAAA;AAAA,QAEX,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA;AAC3B;AAAA,KACD;AAAA,oBAEAC,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,WAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,YAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,WAAA;AAAA,0BACDA,IAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO;AAAA,gBACN,OAAA,EAAS,GAAA;AAAA,gBACT,QAAA,EAAU,SAAA;AAAA,gBACV,UAAA,EAAY;AAAA,eACb;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,SAAA;AAAA,gBAAU;AAAA;AAAA;AAAA;AACZ;AAAA;AAAA,KACD;AAAA,oBAEAD,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,sBAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,CAAC,SAAA,IAAa,YAAA;AAAA,QACxB,YAAA,EAAW,eAAA;AAAA,QAEX,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA;AAAA;AACzB;AAAA;AACD,GAAA,EACD,CAAA;AAEF;ACzIO,SAAS,WAAA,GAAc;AAC7B,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,YAAA,EAAc,QAAA,KAAa,cAAA,EAAe;AACpE,EAAA,MAAM,QAAQ,eAAA,EAAgB;AAC9B,EAAA,MAAM,EAAE,YAAY,QAAA,EAAS,GAAI,YAAY,EAAE,OAAA,EAAS,OAAA,EAAS,YAAA,EAAc,CAAA;AAG/E,EAAA,IAAI,CAAC,QAAA,CAAS,eAAA,IAAmB,CAAC,KAAA,CAAM,YAAY,OAAA,EAAS;AAC5D,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,WAAA,CAAY,QAAA,KAAa,WAAW,QAAA,GAAW,KAAA;AACtE,EAAA,MAAM,aAAA,GAAqC;AAAA,IAC1C,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,CAAC,QAAQ,GAAG,CAAA;AAAA,IACZ,MAAA,EAAQ;AAAA,GACT;AAEA,EAAA,IAAI,KAAA,CAAM,WAAA,CAAY,KAAA,KAAU,WAAA,EAAa;AAC5C,IAAA,uBACCA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACN,GAAG,aAAA;AAAA,UACH,OAAA,EAAS,MAAA;AAAA,UACT,GAAA,EAAK,KAAA;AAAA,UACL,OAAA,EAAS;AAAA,SACV;AAAA,QAEC,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACdA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEA,KAAA,EAAO;AAAA,cACN,IAAA,EAAM,CAAA;AAAA,cACN,MAAA,EAAQ,KAAA;AAAA,cACR,eAAA,EAAiB,OAAA,CAAQ,SAAA,GACtB,+BAAA,GACA,6BAAA;AAAA,cACH,UAAA,EAAY;AAAA;AACb,WAAA;AAAA,UARK,OAAA,CAAQ;AAAA,SAUd;AAAA;AAAA,KACF;AAAA,EAEF;AAEA,EAAA,IAAI,KAAA,CAAM,WAAA,CAAY,KAAA,KAAU,YAAA,EAAc;AAC7C,IAAA,uBACCC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACN,GAAG,aAAA;AAAA,UACH,OAAA,EAAS,UAAA;AAAA,UACT,SAAA,EAAW,QAAA;AAAA,UACX,QAAA,EAAU,UAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO;AAAA,SACR;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,UAAE;AAAA;AAAA;AAAA,KACzB;AAAA,EAEF;AAEA,EAAA,IAAI,KAAA,CAAM,WAAA,CAAY,KAAA,KAAU,MAAA,EAAQ;AACvC,IAAA,uBACCD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACN,GAAG,aAAA;AAAA,UACH,OAAA,EAAS,MAAA;AAAA,UACT,cAAA,EAAgB,QAAA;AAAA,UAChB,GAAA,EAAK,KAAA;AAAA,UACL,OAAA,EAAS;AAAA,SACV;AAAA,QAEC,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACdA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEA,KAAA,EAAO;AAAA,cACN,KAAA,EAAO,OAAA,CAAQ,OAAA,GAAU,MAAA,GAAS,KAAA;AAAA,cAClC,MAAA,EAAQ,OAAA,CAAQ,OAAA,GAAU,MAAA,GAAS,KAAA;AAAA,cACnC,YAAA,EAAc,KAAA;AAAA,cACd,eAAA,EAAiB,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,UAC3C,+BAAA,GACA,6BAAA;AAAA,cACH,UAAA,EAAY;AAAA;AACb,WAAA;AAAA,UATK,OAAA,CAAQ;AAAA,SAWd;AAAA;AAAA,KACF;AAAA,EAEF;AAGA,EAAA,uBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,aAAA,EAAe,OAAA,EAAS,UAAA,EAAW,EACnD,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,aAAA;AAAA,MACV,KAAA,EAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,cAAc,KAAA,EAAM;AAAA,MAE5C,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAU,kBAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACN,KAAA,EAAO,GAAG,UAAU,CAAA,CAAA,CAAA;AAAA,YACpB,MAAA,EAAQ,MAAA;AAAA,YACR,YAAA,EAAc;AAAA;AACf;AAAA;AACD;AAAA,GACD,EACD,CAAA;AAEF;;;AC9GA,IAAM,oBAAA,GAA+C;AAAA;AAAA,EAEpD,UAAA,EAAY,EAAA;AAAA,EACZ,SAAA,EAAW,EAAA;AAAA,EACX,KAAA,EAAO,EAAA;AAAA,EACP,YAAA,EAAc,EAAA;AAAA,EACd,OAAA,EAAS,EAAA;AAAA;AAAA,EAGT,eAAA,EAAiB,EAAA;AAAA,EACjB,cAAA,EAAgB,EAAA;AAAA,EAChB,QAAA,EAAU,EAAA;AAAA,EACV,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,EAAA;AAAA;AAAA,EAGT,MAAA,EAAQ,CAAA;AAAA,EACR,aAAA,EAAe,CAAA;AAAA,EACf,GAAA,EAAK,CAAA;AAAA;AAAA,EAGL,OAAA,EAAS,EAAA;AAAA,EACT,YAAA,EAAc,EAAA;AAAA,EACd,IAAA,EAAM,EAAA;AAAA,EACN,MAAA,EAAQ,EAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,SAAA,EAAW,EAAA;AAAA,EACX,WAAA,EAAa,EAAA;AAAA,EACb,OAAA,EAAS,EAAA;AAAA;AAAA,EAGT,SAAA,EAAW,CAAA;AAAA,EACX,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ;AACT,CAAA;AAuBO,SAAS,mBAAmB,OAAA,EAAyB;AAC3D,EAAA,IAAI,UAAU,EAAA,EAAI;AACjB,IAAA,OAAO,SAAS,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,IAAI,EAAE,CAAA,IAAA,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACvC,EAAA,OAAO,SAAS,OAAO,CAAA,IAAA,CAAA;AACxB;AAKO,SAAS,sBAAA,CACf,SACA,iBAAA,EACS;AACT,EAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAEnC,IAAA,IAAI,iBAAA,CAAkB,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EAAG;AAC1C,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,KAAA,CAAM,IAAI,CAAA,IAAK,EAAA;AACtD,IAAA,YAAA,IAAgB,SAAA;AAAA,EACjB;AAEA,EAAA,OAAO,YAAA;AACR;ACxFO,SAAS,cAAA,GAAiB;AAChC,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,SAAS,SAAA,EAAW,WAAA,KAAgB,cAAA,EAAe;AAG9E,EAAA,IAAI,CAAC,SAAS,kBAAA,EAAoB;AACjC,IAAA,OAAO,IAAA;AAAA,EACR;AAGA,EAAA,IAAI,WAAA,EAAa;AAChB,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAC7C,EAAA,MAAM,gBAAA,GAAmBG,OAAAA;AAAA,IACxB,MAAM,sBAAA,CAAuB,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACvD,CAAC,SAAS,iBAAiB;AAAA,GAC5B;AAGA,EAAA,IAAI,oBAAoB,CAAA,EAAG;AAC1B,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,QAAA,GAAW,mBAAmB,gBAAgB,CAAA;AAEpD,EAAA,uBACCF,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,kBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,GAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,EAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,gBAAA;AAAA,QACT,QAAA,EAAU,SAAA;AAAA,QACV,KAAA,EAAO,0BAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEf,QAAA,EAAA;AAAA,8BAAAD,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,8BAC/BA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAA,EAAmB;AAAA;AAAA;AAAA,SACrC;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,EAAS;AAAA;AAAA;AAAA,GACjB;AAEF;ACxDO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAS,EAAuB;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAII,SAAS,KAAK,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AAEf,IAAA,IAAI,CAAC,kBAAiB,EAAG;AACxB,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IAClB;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAe,MAAM;AAC1B,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,QAAA,EAAS;AAAA,EACV,CAAA;AAEA,EAAA,IAAI,CAAC,SAAA,EAAW;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,uBACCJ,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,mBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,eAAA,EAAiB;AAAA,OAClB;AAAA,MAEA,QAAA,kBAAAC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACN,QAAA,EAAU,OAAA;AAAA,YACV,MAAA,EAAQ,MAAA;AAAA,YACR,OAAA,EAAS,QAAA;AAAA,YACT,eAAA,EAAiB,+BAAA;AAAA,YACjB,YAAA,EAAc,8BAAA;AAAA,YACd,SAAA,EAAW;AAAA,WACZ;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAO;AAAA,kBACN,KAAA,EAAO,MAAA;AAAA,kBACP,MAAA,EAAQ,MAAA;AAAA,kBACR,MAAA,EAAQ,aAAA;AAAA,kBACR,OAAA,EAAS,MAAA;AAAA,kBACT,UAAA,EAAY,QAAA;AAAA,kBACZ,cAAA,EAAgB,QAAA;AAAA,kBAChB,eAAA,EAAiB,8DAAA;AAAA,kBACjB,YAAA,EAAc;AAAA,iBACf;AAAA,gBAEA,QAAA,kBAAAC,IAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAM,IAAA;AAAA,oBACN,MAAA,EAAO,IAAA;AAAA,oBACP,OAAA,EAAQ,WAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,yBAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe,OAAA;AAAA,oBAEf,QAAA,EAAA;AAAA,sCAAAD,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,sCAC/BA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,sCAChDA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,sCACjDA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,sCACjDA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,sCAClDA,GAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe;AAAA;AAAA;AAAA;AACnD;AAAA,aACD;AAAA,4BAEAA,GAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACA,SAAA,EAAU,mBAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACN,QAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,QAAA;AAAA,kBACX,YAAA,EAAc;AAAA,iBACf;AAAA,gBACA,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,4BAEAA,GAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACA,SAAA,EAAU,yBAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACN,SAAA,EAAW,QAAA;AAAA,kBACX,YAAA,EAAc,QAAA;AAAA,kBACd,QAAA,EAAU,UAAA;AAAA,kBACV,UAAA,EAAY;AAAA,iBACb;AAAA,gBACA,QAAA,EAAA;AAAA;AAAA,aAGD;AAAA,4BAEAA,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,YAAA;AAAA,gBACT,SAAA,EAAU,WAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACN,KAAA,EAAO,MAAA;AAAA,kBACP,OAAA,EAAS,gBAAA;AAAA,kBACT,QAAA,EAAU;AAAA,iBACX;AAAA,gBACA,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA;AACD;AAAA,GACD;AAEF;ACtFO,SAAS,OAAA,CAAQ;AAAA,EACvB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,MAAA;AAAA,EACR,IAAA,GAAO;AACR,CAAA,EAAiB;AAChB,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,OAAsB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAII,SAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,mBAAA,GAAsB,YAAY,MAAM;AAC7C,IAAA,IAAI,CAAC,YAAA,CAAa,OAAA,IAAW,CAAC,OAAO,SAAA,EAAW;AAGhD,IAAA,IAAI,YAAY,OAAA,EAAS;AACxB,MAAA,IAAI;AACH,QAAA,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AAAA,MAC5C,SAAS,CAAA,EAAG;AAAA,MAEZ;AAAA,IACD;AAEA,IAAA,IAAI;AACH,MAAA,WAAA,CAAY,OAAA,GAAU,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,aAAa,OAAA,EAAS;AAAA,QACnE,OAAA,EAAS,OAAA;AAAA,QACT,QAAA,EAAU,CAAC,KAAA,KAAkB;AAC5B,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,QAAA,CAAS,KAAK,CAAA;AAAA,QACf,CAAA;AAAA,QACA,kBAAkB,MAAM;AACvB,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,QAAA,CAAS,wCAAwC,CAAA;AACjD,UAAA,OAAA,IAAU;AAAA,QACX,CAAA;AAAA,QACA,oBAAoB,MAAM;AACzB,UAAA,QAAA,CAAS,yCAAyC,CAAA;AAClD,UAAA,SAAA,IAAY;AAAA,QACb,CAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACA,CAAA;AACD,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACnB,SAAS,CAAA,EAAG;AACX,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,QAAA,CAAS,+BAA+B,CAAA;AACxC,MAAA,OAAA,IAAU;AAAA,IACX;AAAA,EACD,CAAA,EAAG,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,SAAA,EAAW,KAAA,EAAO,IAAI,CAAC,CAAA;AAEvD,EAAAC,UAAU,MAAM;AAEf,IAAA,IAAI,OAAO,SAAA,EAAW;AACrB,MAAA,mBAAA,EAAoB;AACpB,MAAA;AAAA,IACD;AAGA,IAAA,MAAM,iBAAiB,QAAA,CAAS,aAAA;AAAA,MAC/B;AAAA,KACD;AACA,IAAA,IAAI,cAAA,EAAgB;AAEnB,MAAA,cAAA,CAAe,gBAAA,CAAiB,QAAQ,mBAAmB,CAAA;AAC3D,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,uDAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,IAAA,MAAA,CAAO,MAAA,GAAS,mBAAA;AAChB,IAAA,MAAA,CAAO,UAAU,MAAM;AACtB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,QAAA,CAAS,kDAAkD,CAAA;AAC3D,MAAA,OAAA,IAAU;AAAA,IACX,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAEhC,IAAA,OAAO,MAAM;AAEZ,MAAA,IAAI,WAAA,CAAY,OAAA,IAAW,MAAA,CAAO,SAAA,EAAW;AAC5C,QAAA,IAAI;AACH,UAAA,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AAAA,QAC5C,SAAS,CAAA,EAAG;AAAA,QAEZ;AAAA,MACD;AAAA,IACD,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,mBAAA,EAAqB,OAAO,CAAC,CAAA;AAEjC,EAAA,uBACCJ,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAU,YAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,SAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACV;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,SAAA,oBACAA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO,0BAAA;AAAA,cACP,OAAA,EAAS;AAAA,aACV;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,IAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACA,KAAA,EAAM,IAAA;AAAA,kBACN,MAAA,EAAO,IAAA;AAAA,kBACP,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,MAAA,EAAO,cAAA;AAAA,kBACP,WAAA,EAAY,GAAA;AAAA,kBACZ,SAAA,EAAU,cAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAD,GAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACA,EAAA,EAAG,IAAA;AAAA,wBACH,EAAA,EAAG,IAAA;AAAA,wBACH,CAAA,EAAE,IAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY,GAAA;AAAA,wBACZ,IAAA,EAAK,MAAA;AAAA,wBACL,OAAA,EAAQ;AAAA;AAAA,qBACT;AAAA,oCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qBAAA,EAAsB,SAAQ,MAAA,EAAO;AAAA;AAAA;AAAA,eAC9C;AAAA,8BACAA,IAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,IAAc,QAAA,EAAA,yBAAA,EAAuB;AAAA;AAAA;AAAA,SAC/D;AAAA,wBAGDA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,CAAA;AAAA,QAEvB,yBACAA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,KAAA,EAAO,gCAAA;AAAA,cACP,QAAA,EAAU,UAAA;AAAA,cACV,SAAA,EAAW;AAAA,aACZ;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACF;AAAA;AAAA,GAEF;AAEF;ACxLO,SAAS,QAAA,GAAW;AAC1B,EAAA,MAAM,QAAQ,eAAA,EAAgB;AAE9B,EAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,aAAA,EAAe;AAClC,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,uBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA;AAAA,IAAA,YAAA;AAAA,IACjB,GAAA;AAAA,oBACXD,IAAC,GAAA,EAAA,EAAE,IAAA,EAAK,uBAAsB,MAAA,EAAO,QAAA,EAAS,GAAA,EAAI,qBAAA,EAAsB,QAAA,EAAA,UAAA,EAExE;AAAA,GAAA,EACD,CAAA;AAEF;ACfO,SAAS,MAAA,GAAS;AACxB,EAAA,MAAM,QAAQ,eAAA,EAAgB;AAE9B,EAAA,MAAM,YAAA,GAAe,MAAM,iBAAA,EAAmB,YAAA;AAG9C,EAAA,IAAI,CAAC,YAAA,IAAgB,YAAA,KAAiB,MAAA,EAAQ;AAC7C,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,QAAA,EAAU,SAAA;AAClC,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,EAAU,OAAA;AAGhC,EAAA,IAAI,iBAAiB,eAAA,EAAiB;AACrC,IAAA,uBACCC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,oBAAA,EAChB,QAAA,EAAA;AAAA,MAAA,OAAA,oBACAD,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,GAAA,EAAK,OAAA;AAAA,UACL,KAAK,SAAA,IAAa,MAAA;AAAA,UAClB,SAAA,EAAU;AAAA;AAAA,OACX;AAAA,MAEA,aAAa,CAAC,OAAA,oBACdA,GAAAA,CAAC,UAAK,SAAA,EAAU,iBAAA,EAAkB,KAAA,EAAO,EAAE,UAAU,UAAA,EAAY,UAAA,EAAY,KAAK,KAAA,EAAO,0BAAA,IACvF,QAAA,EAAA,SAAA,EACF;AAAA,KAAA,EAEF,CAAA;AAAA,EAEF;AAGA,EAAA,IAAI,iBAAiB,WAAA,EAAa;AACjC,IAAA,uBACCC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,kBAAiB,KAAA,EAAO;AAAA,MACzC,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,OAAA,EAAS,kCAAA;AAAA,MACT,GAAA,EAAK;AAAA,KACN,EACE,QAAA,EAAA;AAAA,MAAA,OAAA,oBACAD,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,GAAA,EAAK,OAAA;AAAA,UACL,KAAK,SAAA,IAAa,MAAA;AAAA,UAClB,SAAA,EAAU;AAAA;AAAA,OACX;AAAA,MAEA,SAAA,oBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,0BAAA,IACvD,QAAA,EAAA,SAAA,EACF;AAAA,KAAA,EAEF,CAAA;AAAA,EAEF;AAEA,EAAA,OAAO,IAAA;AACR;AC1CO,SAAS,aAAa,KAAA,EAA0B;AACtD,EAAA,MAAM,EAAE,SAAA,EAAW,GAAG,WAAA,EAAY,GAAI,KAAA;AAEtC,EAAA,uBACCA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,aACjB,QAAA,kBAAAA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,kBAAkB,WAAA,CAAY;AAAA;AAAA,GAC/B,EACD,CAAA;AAEF;AAQA,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,KAAA,EAAO,kBAAiB,EAA2B;AAC1F,EAAA,MAAM;AAAA,IACL,WAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,qBAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,MACG,cAAA,EAAe;AAEnB,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,QAAA,CAAS,EAAE,OAAO,CAAA;AAG9C,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAII,SAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,IAAI,CAAA;AAEjD,EAAAC,UAAU,MAAM;AACf,IAAA,IAAI,QAAA,CAAS,iBAAA,IAAqB,CAAC,gBAAA,EAAiB,EAAG;AACtD,MAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACpB;AAAA,EACD,CAAA,EAAG,CAAC,QAAA,CAAS,iBAAiB,CAAC,CAAA;AAE/B,EAAA,MAAM,4BAA4B,MAAM;AACvC,IAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACnB,CAAA;AAGA,EAAA,IAAI,qBAAA,EAAuB;AAC1B,IAAA,uBACCJ,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,WAAW,SAAA,IAAa,EAAE,CAAA,CAAA,EAAI,KAAA,EAAO,eAAA,EACpD,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACd,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAY,KAAA,EAAO,EAAE,SAAA,EAAW,UAAS,EACvD,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,KAAA,EAAO,MAAA;AAAA,cACP,MAAA,EAAQ,MAAA;AAAA,cACR,MAAA,EAAQ,eAAA;AAAA,cACR,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,cAAA,EAAgB,QAAA;AAAA,cAChB,eAAA,EAAiB,yBAAA;AAAA,cACjB,OAAA,EAAS,GAAA;AAAA,cACT,YAAA,EAAc;AAAA,aACf;AAAA,YAEA,QAAA,kBAAAC,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACA,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,yBAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBAEf,QAAA,EAAA;AAAA,kCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oCAAA,EAAqC,CAAA;AAAA,kCAC7CA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,uBAAA,EAAwB;AAAA;AAAA;AAAA;AAC1C;AAAA,SACD;AAAA,wBACAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mBAAA,EAAoB,OAAO,EAAE,YAAA,EAAc,SAAA,EAAU,EAAG,QAAA,EAAA,0BAAA,EAEtE,CAAA;AAAA,wBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAA0B,QAAA,EAAA,qDAAA,EAEvC;AAAA,OAAA,EACD,CAAA,EACD,CAAA;AAAA,sBACAA,IAAC,QAAA,EAAA,EAAS;AAAA,KAAA,EACX,CAAA;AAAA,EAEF;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AACjB,IAAA,uBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,WAAW,SAAA,IAAa,EAAE,CAAA,CAAA,EACzC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAY,wBAAU,CAAA,EACtC,CAAA;AAAA,EAEF;AAEA,EAAA,uBACCC,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,WAAW,SAAA,IAAa,EAAE,CAAA,CAAA,EAAI,KAAA,EAAO,eAAA,EAEnD,QAAA,EAAA;AAAA,IAAA,iBAAA,oBACAD,GAAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAU,yBAAA,EAA2B,CAAA;AAAA,IAIpD,WAAA,IAAe,oCACfA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,kBAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,KAAA,EAAO,CAAA;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,eAAA,EAAiB;AAAA,SAClB;AAAA,QAEA,QAAA,kBAAAC,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,QAAA,EAAU,OAAA;AAAA,cACV,MAAA,EAAQ,MAAA;AAAA,cACR,OAAA,EAAS,QAAA;AAAA,cACT,eAAA,EAAiB,+BAAA;AAAA,cACjB,YAAA,EAAc,8BAAA;AAAA,cACd,SAAA,EAAW,gCAAA;AAAA,cACX,SAAA,EAAW;AAAA,aACZ;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACA,SAAA,EAAU,mBAAA;AAAA,kBACV,KAAA,EAAO,EAAE,QAAA,EAAU,SAAA,EAAW,cAAc,SAAA,EAAU;AAAA,kBACtD,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAA,GAAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACA,SAAA,EAAU,yBAAA;AAAA,kBACV,OAAO,EAAE,YAAA,EAAc,QAAQ,QAAA,EAAU,UAAA,EAAY,SAAS,GAAA,EAAI;AAAA,kBAClE,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAA,GAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACA,OAAA,EAAS,gBAAA;AAAA,kBACT,QAAA,EAAU,CAAC,KAAA,KAAU;AACpB,oBAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,oBAAA,MAAA,EAAO;AAAA,kBACR;AAAA;AAAA;AACD;AAAA;AAAA;AACD;AAAA,KACD;AAAA,IAIA,SAAA,IAAa,CAAC,WAAA,oBAAeA,IAAC,WAAA,EAAA,EAAY,CAAA;AAAA,IAG1C,SAAA,IAAa,CAAC,WAAA,oBAAeA,IAAC,MAAA,EAAA,EAAO,CAAA;AAAA,oBAGtCA,IAAC,cAAA,EAAA,EAAe,CAAA;AAAA,oBAGhBC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,uBAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,GAAI,KAAA,EAAO,iBAAA,EAAmB,iBAAA,IAAqB;AAAA,YAClD,QAAA,EAAU,MAAM,iBAAA,CAAkB;AAAA,WACnC;AAAA,UACA,GAAI,CAAC,UAAA,IAAc,EAAE,OAAA,EAAS,GAAA,EAAK,eAAe,MAAA;AAAO,SAC1D;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,WAAA,CAAY,IAAA,KAAS,6BACrBD,GAAAA,CAAC,iBAAc,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,UAG3D,WAAA,CAAY,IAAA,KAAS,OAAA,oBACrBA,GAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACA,OAAO,WAAA,CAAY,KAAA;AAAA,cACnB,KAAA,EAAO,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AAAA,cACpC,KAAA,EAAO,MAAA,CAAO,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA,IAAK,IAAA;AAAA,cACxC,UAAU,CAAC,KAAA,KAAU,UAAU,WAAA,CAAY,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,cAC3D,MAAA,EAAQ,IAAA;AAAA,cACR,cAAA,EAAgB,YAAY,KAAA,GAAQ,CAAA;AAAA,cACpC,oBAAoB,QAAA,CAAS,kBAAA;AAAA,cAC7B,cAAc,QAAA,CAAS,oBAAA;AAAA,cACvB,gBAAgB,QAAA,CAAS;AAAA;AAAA,WAC1B;AAAA,UAGA,WAAA,CAAY,SAAS,UAAA,oBACrBA,IAAC,cAAA,EAAA,EAAe,MAAA,EAAQ,YAAY,MAAA,EAAQ;AAAA;AAAA;AAAA,KAE9C;AAAA,IAGC,CAAC,SAAS,cAAA,IAAkB,SAAA,IAAa,YAAY,IAAA,KAAS,OAAA,oBAC9DA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,oBAIrBA,IAAC,QAAA,EAAA,EAAS;AAAA,GAAA,EACX,CAAA;AAEF;ACpOO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,SAAA,EAAU,EAAuB;AAC1E,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,WAAW,SAAA,IAAa,EAAE,IAAK,QAAA,EAAS,CAAA;AAChE;ACFO,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAU,SAAA,EAAU,EAA2B;AAClF,EAAA,uBACCA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,yBAAyB,SAAA,IAAa,EAAE,IACtD,QAAA,EACF,CAAA;AAEF;ACLO,SAAS,YAAA,CAAa;AAAA,EAC5B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO;AACR,CAAA,EAAsB;AACrB,EAAA,MAAM,eACL,IAAA,KAAS,WAAA,GACN,oBAAA,GACA,IAAA,KAAS,UACT,wBAAA,GACA,aAAA;AAEJ,EAAA,MAAM,iBACL,IAAA,KAAS,WAAA,GACN,iDAAA,GACA,IAAA,KAAS,UACT,wDAAA,GACA,6CAAA;AAEJ,EAAA,MAAM,WACL,IAAA,KAAS,OAAA;AAAA;AAAA,oBAERC,KAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,sBACtCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,sBACrCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK;AAAA,KAAA,EACrC;AAAA,MACG,IAAA,KAAS,WAAA;AAAA;AAAA,oBAEZC,KAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,sBAC/BA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAA,EAAmB;AAAA,KAAA,EACrC;AAAA;AAAA;AAAA,oBAGAC,KAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,IAAA,EAAK,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA;AAAA,sBACxDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0BAAA,EAA2B;AAAA,KAAA,EACpC;AAAA,GAAA;AAGF,EAAA,uBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,SAAA,EACd,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBACd,QAAA,kBAAAC,IAAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAY,OAAO,EAAE,SAAA,EAAW,UAAS,EACvD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACN,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ,MAAA;AAAA,UACR,MAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,eAAA,EAAiB,uEAAA;AAAA,UACjB,YAAA,EAAc;AAAA,SACf;AAAA,QAEA,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,kCAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEd,QAAA,EAAA;AAAA;AAAA;AACF;AAAA,KACD;AAAA,oBACAA,GAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,mBAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,QAAA,EAAU,MAAA;AAAA,UACV,YAAA,EAAc,SAAA;AAAA,UACd,KAAA,EAAO;AAAA,SACR;AAAA,QAEC,QAAA,EAAA,KAAA,IAAS;AAAA;AAAA,KACX;AAAA,oBACAA,GAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,yBAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,QAAA,EAAU,UAAA;AAAA,UACV,KAAA,EAAO,mCAAA;AAAA,UACP,OAAA,EAAS;AAAA,SACV;AAAA,QAEC,QAAA,EAAA,OAAA,IAAW;AAAA;AAAA;AACb,GAAA,EACD,GACD,CAAA,EACD,CAAA;AAEF","file":"chunk-I6L5OCM3.js","sourcesContent":["import React, { createContext, useContext, useMemo } from \"react\";\nimport { useForm, type UseFormOptions, type UseFormReturn } from \"../hooks/useForm\";\nimport { ThemeContext } from \"../hooks/useTheme\";\nimport type { FormContent, FormSettings } from \"../types\";\n\nexport interface FormContextValue extends UseFormReturn {\n\tcontent: FormContent;\n\tsettings: FormSettings;\n}\n\nconst FormContext = createContext<FormContextValue | null>(null);\n\nexport function useFormContext(): FormContextValue {\n\tconst ctx = useContext(FormContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"useFormContext must be used within a FormProvider\");\n\t}\n\treturn ctx;\n}\n\nexport interface FormProviderProps extends UseFormOptions {\n\tchildren: React.ReactNode;\n}\n\nexport function FormProvider({ children, ...options }: FormProviderProps) {\n\tconst form = useForm(options);\n\n\tconst contextValue = useMemo<FormContextValue>(\n\t\t() => ({\n\t\t\t...form,\n\t\t\tcontent: options.content,\n\t\t\tsettings: options.settings,\n\t\t}),\n\t\t[form, options.content, options.settings]\n\t);\n\n\treturn (\n\t\t<ThemeContext.Provider value={options.theme}>\n\t\t\t<FormContext.Provider value={contextValue}>{children}</FormContext.Provider>\n\t\t</ThemeContext.Provider>\n\t);\n}\n","import React from \"react\";\nimport type { WelcomeScreen as WelcomeScreenType } from \"../../types\";\n\nexport interface WelcomeScreenProps {\n\tscreen: WelcomeScreenType;\n\tonStart: () => void;\n}\n\nexport function WelcomeScreen({ screen, onStart }: WelcomeScreenProps) {\n\tconst { title, properties, attachment } = screen;\n\n\treturn (\n\t\t<div className=\"lf-screen\">\n\t\t\t{attachment && attachment.type === \"image\" && (\n\t\t\t\t<img\n\t\t\t\t\tsrc={attachment.href}\n\t\t\t\t\talt={attachment.properties?.description || \"\"}\n\t\t\t\t\tstyle={{ maxWidth: \"100%\", maxHeight: \"300px\", marginBottom: \"2rem\" }}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<h1 className=\"lf-screen-title\">{title}</h1>\n\n\t\t\t{properties.description && (\n\t\t\t\t<p className=\"lf-screen-description\">{properties.description}</p>\n\t\t\t)}\n\n\t\t\t{properties.showButton && (\n\t\t\t\t<button type=\"button\" className=\"lf-button\" onClick={onStart}>\n\t\t\t\t\t{properties.buttonText || \"Start\"}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { ThankYouScreen as ThankYouScreenType } from \"../../types\";\n\nexport interface ThankYouScreenProps {\n\tscreen: ThankYouScreenType;\n}\n\nexport function ThankYouScreen({ screen }: ThankYouScreenProps) {\n\tconst { title, properties, attachment } = screen;\n\n\tconst handleButtonClick = () => {\n\t\tswitch (properties.buttonMode) {\n\t\t\tcase \"reload\":\n\t\t\t\twindow.location.reload();\n\t\t\t\tbreak;\n\t\t\tcase \"redirect\":\n\t\t\t\tif (properties.redirectUrl) {\n\t\t\t\t\twindow.location.href = properties.redirectUrl;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Do nothing\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"lf-screen\">\n\t\t\t{attachment && attachment.type === \"image\" && (\n\t\t\t\t<img\n\t\t\t\t\tsrc={attachment.href}\n\t\t\t\t\talt={attachment.properties?.description || \"\"}\n\t\t\t\t\tstyle={{ maxWidth: \"100%\", maxHeight: \"300px\", marginBottom: \"2rem\" }}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<h1 className=\"lf-screen-title\">{title}</h1>\n\n\t\t\t{properties.description && (\n\t\t\t\t<p className=\"lf-screen-description\">{properties.description}</p>\n\t\t\t)}\n\n\t\t\t{properties.showButton && (\n\t\t\t\t<button type=\"button\" className=\"lf-button\" onClick={handleButtonClick}>\n\t\t\t\t\t{properties.buttonText || \"Done\"}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { FormField } from \"../../types\";\n\nexport interface QuestionHeaderProps {\n\tfield: FormField;\n\tquestionNumber?: number;\n\tshowQuestionNumber?: boolean;\n}\n\nexport function QuestionHeader({\n\tfield,\n\tquestionNumber,\n\tshowQuestionNumber,\n}: QuestionHeaderProps) {\n\treturn (\n\t\t<div style={{ marginBottom: \"var(--lf-spacing-question)\" }}>\n\t\t\t{showQuestionNumber && questionNumber !== undefined && (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"lf-question-description\"\n\t\t\t\t\tstyle={{ display: \"block\", marginBottom: \"0.25rem\", fontSize: \"0.875rem\" }}\n\t\t\t\t>\n\t\t\t\t\t{questionNumber}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<h2 className=\"lf-question-title\">\n\t\t\t\t{field.title}\n\t\t\t\t{field.validations?.required && (\n\t\t\t\t\t<span className=\"lf-required\" style={{ marginLeft: \"0.25rem\" }}>\n\t\t\t\t\t\t*\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</h2>\n\t\t\t{field.description && (\n\t\t\t\t<p\n\t\t\t\t\tclassName=\"lf-question-description\"\n\t\t\t\t\tstyle={{ marginTop: \"0.5rem\", fontSize: \"1rem\" }}\n\t\t\t\t>\n\t\t\t\t\t{field.description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { MultipleChoiceField as MultipleChoiceFieldType, FieldAnswer, FormSettings } from \"../../types\";\nimport { QuestionHeader } from \"./QuestionHeader\";\nimport { useThemeContext } from \"../../hooks/useTheme\";\n\nexport interface MultipleChoiceProps {\n\tfield: MultipleChoiceFieldType;\n\tvalue: FieldAnswer | undefined;\n\terror: string | null;\n\tonChange: (value: FieldAnswer) => void;\n\tonNext: (pendingValue?: FieldAnswer) => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n\tshowKeyHints?: boolean;\n\tsystemMessages?: FormSettings[\"systemMessages\"];\n}\n\nexport function MultipleChoice({\n\tfield,\n\tvalue,\n\terror,\n\tonChange,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n\tshowKeyHints,\n\tsystemMessages,\n}: MultipleChoiceProps) {\n\tconst theme = useThemeContext();\n\tconst selectedValues = (value as string[]) || [];\n\tconst { choices, allowMultipleSelection } = field.properties;\n\n\t// Component variants\n\tconst isCardStyle = theme.componentVariants?.choiceStyle === \"card\";\n\tconst choiceLayout = theme.componentVariants?.choiceLayout || \"single-column\";\n\tconst choiceIndicator = theme.componentVariants?.choiceIndicator || \"checkmark\";\n\tconst choiceContainerMaxWidth = theme.componentVariants?.choiceContainerMaxWidth;\n\n\tconst handleChoiceClick = (choiceRef: string) => {\n\t\tif (allowMultipleSelection) {\n\t\t\tconst newValues = selectedValues.includes(choiceRef)\n\t\t\t\t? selectedValues.filter((v) => v !== choiceRef)\n\t\t\t\t: [...selectedValues, choiceRef];\n\t\t\tonChange(newValues);\n\t\t} else {\n\t\t\tconst newValue = [choiceRef];\n\t\t\tonChange(newValue);\n\t\t\tonNext(newValue);\n\t\t}\n\t};\n\n\t// Handle keyboard shortcuts\n\tReact.useEffect(() => {\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\t// Check if it's a letter key (A-Z)\n\t\t\tconst key = e.key.toUpperCase();\n\t\t\tconst index = key.charCodeAt(0) - 65; // A = 0, B = 1, etc.\n\n\t\t\tif (index >= 0 && index < choices.length) {\n\t\t\t\thandleChoiceClick(choices[index].ref);\n\t\t\t}\n\t\t};\n\n\t\tif (showKeyHints) {\n\t\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown);\n\t\t}\n\t}, [choices, showKeyHints, selectedValues]);\n\n\t// Container styles based on layout\n\tconst containerStyle: React.CSSProperties = choiceLayout === \"single-column\"\n\t\t? {\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\tgap: \"var(--lf-spacing-option)\",\n\t\t\t}\n\t\t: {\n\t\t\t\tdisplay: \"grid\",\n\t\t\t\tgridTemplateColumns: choiceLayout === \"two-column\"\n\t\t\t\t\t? \"repeat(2, 1fr)\"\n\t\t\t\t\t: \"repeat(auto-fit, minmax(160px, 1fr))\",\n\t\t\t\tgap: \"var(--lf-spacing-option)\",\n\t\t\t\tmaxWidth: choiceContainerMaxWidth || undefined,\n\t\t\t\tmargin: choiceContainerMaxWidth ? \"0 auto\" : undefined,\n\t\t\t};\n\n\t// Render indicator based on type\n\tconst renderIndicator = (isSelected: boolean) => {\n\t\tif (choiceIndicator === \"none\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (choiceIndicator === \"arrow\") {\n\t\t\treturn (\n\t\t\t\t<span className=\"lf-choice-indicator\">\n\t\t\t\t\t<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n\t\t\t\t\t\t<circle cx=\"9\" cy=\"9\" r=\"9\" fill={isSelected ? \"#111113\" : \"white\"} />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M8 5.5L11.5 9L8 12.5\"\n\t\t\t\t\t\t\tstroke={isSelected ? \"white\" : \"black\"}\n\t\t\t\t\t\t\tstrokeWidth=\"2.5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</span>\n\t\t\t);\n\t\t}\n\n\t\tif (choiceIndicator === \"radio\") {\n\t\t\treturn (\n\t\t\t\t<span className=\"lf-choice-indicator\">\n\t\t\t\t\t<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n\t\t\t\t\t\t<circle cx=\"9\" cy=\"9\" r=\"8\" stroke={isSelected ? \"var(--lf-color-primary)\" : \"#E5E7EB\"} strokeWidth=\"2\" fill=\"none\" />\n\t\t\t\t\t\t{isSelected && <circle cx=\"9\" cy=\"9\" r=\"5\" fill=\"var(--lf-color-primary)\" />}\n\t\t\t\t\t</svg>\n\t\t\t\t</span>\n\t\t\t);\n\t\t}\n\n\t\t// Default: checkmark\n\t\treturn (\n\t\t\t<span className=\"lf-choice-indicator\">\n\t\t\t\t{isSelected && (\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className=\"lf-field\">\n\t\t\t<QuestionHeader\n\t\t\t\tfield={field}\n\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t/>\n\n\t\t\t{allowMultipleSelection && (\n\t\t\t\t<p className=\"lf-field-hint\" style={{ marginBottom: \"var(--lf-spacing-option)\", opacity: 0.7 }}>\n\t\t\t\t\t{systemMessages?.multipleSelectionHint || \"Choose as many as you like\"}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t<div style={containerStyle}>\n\t\t\t\t{choices.map((choice, index) => {\n\t\t\t\t\tconst isSelected = selectedValues.includes(choice.ref);\n\n\t\t\t\t\t// Card style variant\n\t\t\t\t\tif (isCardStyle) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={choice.ref}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => handleChoiceClick(choice.ref)}\n\t\t\t\t\t\t\t\tclassName={`lf-choice-card ${isSelected ? \"lf-choice-card-selected\" : \"\"}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span style={{ flex: 1 }}>{choice.label}</span>\n\t\t\t\t\t\t\t\t{renderIndicator(isSelected)}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Default style\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={choice.ref}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => handleChoiceClick(choice.ref)}\n\t\t\t\t\t\t\tclassName={`lf-choice ${isSelected ? \"lf-choice-selected\" : \"\"}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{showKeyHints && (\n\t\t\t\t\t\t\t\t<span className=\"lf-key-hint\">\n\t\t\t\t\t\t\t\t\t{String.fromCharCode(65 + index)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span style={{ flex: 1 }}>{choice.label}</span>\n\t\t\t\t\t\t\t{isSelected && (\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: \"var(--lf-color-primary)\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{error && (\n\t\t\t\t<p id={`${field.ref}-error`} className=\"lf-error\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { NumberField as NumberFieldType, FieldAnswer } from \"../../types\";\nimport { useField } from \"../../hooks/useField\";\nimport { QuestionHeader } from \"./QuestionHeader\";\n\nexport interface NumberFieldProps {\n\tfield: NumberFieldType;\n\tvalue: FieldAnswer | undefined;\n\terror: string | null;\n\tonChange: (value: FieldAnswer) => void;\n\tonNext: () => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n}\n\nexport function NumberField({\n\tfield,\n\tvalue,\n\terror,\n\tonChange,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n}: NumberFieldProps) {\n\tconst { onKeyDown } = useField({\n\t\tfield,\n\t\tvalue,\n\t\terror,\n\t\tonChange,\n\t\tonNext,\n\t});\n\n\tconst handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst val = e.target.value;\n\t\tif (val === \"\") {\n\t\t\tonChange(\"\");\n\t\t} else {\n\t\t\tconst num = parseFloat(val);\n\t\t\tif (!isNaN(num)) {\n\t\t\t\tonChange(num);\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"lf-field\">\n\t\t\t<QuestionHeader\n\t\t\t\tfield={field}\n\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t/>\n\n\t\t\t<input\n\t\t\t\ttype=\"number\"\n\t\t\t\tvalue={value !== undefined ? String(value) : \"\"}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\tplaceholder={field.properties?.placeholder}\n\t\t\t\tmin={field.validations?.minValue}\n\t\t\t\tmax={field.validations?.maxValue}\n\t\t\t\tclassName=\"lf-input-underline\"\n\t\t\t\taria-invalid={!!error}\n\t\t\t\taria-describedby={error ? `${field.ref}-error` : undefined}\n\t\t\t/>\n\n\t\t\t{error && (\n\t\t\t\t<p id={`${field.ref}-error`} className=\"lf-error\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { OpinionScaleField as OpinionScaleFieldType, FieldAnswer } from \"../../types\";\nimport { QuestionHeader } from \"./QuestionHeader\";\n\nexport interface OpinionScaleProps {\n\tfield: OpinionScaleFieldType;\n\tvalue: FieldAnswer | undefined;\n\terror: string | null;\n\tonChange: (value: FieldAnswer) => void;\n\tonNext: (pendingValue?: FieldAnswer) => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n}\n\nexport function OpinionScale({\n\tfield,\n\tvalue,\n\terror,\n\tonChange,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n}: OpinionScaleProps) {\n\tconst { steps, startAtOne, labels } = field.properties;\n\tconst currentValue = value as number | undefined;\n\n\tconst startValue = startAtOne ? 1 : 0;\n\tconst endValue = startAtOne ? steps : steps - 1;\n\n\tconst handleClick = (rating: number) => {\n\t\tonChange(rating);\n\t\tonNext(rating);\n\t};\n\n\treturn (\n\t\t<div className=\"lf-field\">\n\t\t\t<QuestionHeader\n\t\t\t\tfield={field}\n\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t/>\n\n\t\t\t<div>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tgap: \"0.5rem\",\n\t\t\t\t\t\tflexWrap: \"wrap\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{Array.from({ length: steps }, (_, i) => startValue + i).map((num) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={num}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => handleClick(num)}\n\t\t\t\t\t\t\tclassName={`lf-scale-button ${currentValue === num ? \"lf-scale-button-selected\" : \"\"}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{num}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{(labels.left || labels.right) && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\tmarginTop: \"0.75rem\",\n\t\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\t\tcolor: \"var(--lf-color-placeholder)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{labels.left}</span>\n\t\t\t\t\t\t{labels.center && <span>{labels.center}</span>}\n\t\t\t\t\t\t<span>{labels.right}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{error && (\n\t\t\t\t<p id={`${field.ref}-error`} className=\"lf-error\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React, { useState } from \"react\";\nimport type { RatingField as RatingFieldType, FieldAnswer } from \"../../types\";\nimport { QuestionHeader } from \"./QuestionHeader\";\n\nexport interface RatingProps {\n\tfield: RatingFieldType;\n\tvalue: FieldAnswer | undefined;\n\terror: string | null;\n\tonChange: (value: FieldAnswer) => void;\n\tonNext: (pendingValue?: FieldAnswer) => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n}\n\nconst SHAPES = {\n\tstar: (filled: boolean) => (\n\t\t<svg viewBox=\"0 0 24 24\" fill={filled ? \"currentColor\" : \"none\"} stroke=\"currentColor\" strokeWidth=\"2\">\n\t\t\t<polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n\t\t</svg>\n\t),\n\theart: (filled: boolean) => (\n\t\t<svg viewBox=\"0 0 24 24\" fill={filled ? \"currentColor\" : \"none\"} stroke=\"currentColor\" strokeWidth=\"2\">\n\t\t\t<path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\" />\n\t\t</svg>\n\t),\n\tthumbsup: (filled: boolean) => (\n\t\t<svg viewBox=\"0 0 24 24\" fill={filled ? \"currentColor\" : \"none\"} stroke=\"currentColor\" strokeWidth=\"2\">\n\t\t\t<path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\" />\n\t\t</svg>\n\t),\n\ttrophy: (filled: boolean) => (\n\t\t<svg viewBox=\"0 0 24 24\" fill={filled ? \"currentColor\" : \"none\"} stroke=\"currentColor\" strokeWidth=\"2\">\n\t\t\t<path d=\"M6 9H4.5a2.5 2.5 0 0 1 0-5H6\" />\n\t\t\t<path d=\"M18 9h1.5a2.5 2.5 0 0 0 0-5H18\" />\n\t\t\t<path d=\"M4 22h16\" />\n\t\t\t<path d=\"M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22\" />\n\t\t\t<path d=\"M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22\" />\n\t\t\t<path d=\"M18 2H6v7a6 6 0 0 0 12 0V2Z\" />\n\t\t</svg>\n\t),\n\tcrown: (filled: boolean) => (\n\t\t<svg viewBox=\"0 0 24 24\" fill={filled ? \"currentColor\" : \"none\"} stroke=\"currentColor\" strokeWidth=\"2\">\n\t\t\t<path d=\"m2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14\" />\n\t\t</svg>\n\t),\n};\n\nexport function Rating({\n\tfield,\n\tvalue,\n\terror,\n\tonChange,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n}: RatingProps) {\n\tconst [hoverValue, setHoverValue] = useState<number | null>(null);\n\tconst { steps, shape } = field.properties;\n\tconst currentValue = (value as number) || 0;\n\tconst displayValue = hoverValue !== null ? hoverValue : currentValue;\n\n\tconst handleClick = (rating: number) => {\n\t\tonChange(rating);\n\t\tonNext(rating);\n\t};\n\n\tconst ShapeComponent = SHAPES[shape] || SHAPES.star;\n\n\treturn (\n\t\t<div className=\"lf-field\">\n\t\t\t<QuestionHeader\n\t\t\t\tfield={field}\n\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t/>\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tgap: \"0.5rem\",\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={() => setHoverValue(null)}\n\t\t\t>\n\t\t\t\t{Array.from({ length: steps }, (_, i) => i + 1).map((rating) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={rating}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => handleClick(rating)}\n\t\t\t\t\t\tonMouseEnter={() => setHoverValue(rating)}\n\t\t\t\t\t\tclassName={`lf-rating-star ${rating <= displayValue ? \"lf-rating-star-active\" : \"\"}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\tpadding: \"0.25rem\",\n\t\t\t\t\t\t\twidth: \"2.5rem\",\n\t\t\t\t\t\t\theight: \"2.5rem\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-label={`Rate ${rating} out of ${steps}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{ShapeComponent(rating <= displayValue)}\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{error && (\n\t\t\t\t<p id={`${field.ref}-error`} className=\"lf-error\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { StatementField as StatementFieldType } from \"../../types\";\nimport { QuestionHeader } from \"./QuestionHeader\";\n\nexport interface StatementProps {\n\tfield: StatementFieldType;\n\tonNext: () => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n}\n\nexport function Statement({\n\tfield,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n}: StatementProps) {\n\treturn (\n\t\t<div className=\"lf-field\">\n\t\t\t<QuestionHeader\n\t\t\t\tfield={field}\n\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t/>\n\n\t\t\t<button type=\"button\" className=\"lf-button\" onClick={onNext}>\n\t\t\t\t{field.properties.buttonText || \"Continue\"}\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type {\n\tShortTextField as ShortTextFieldType,\n\tLongTextField as LongTextFieldType,\n\tEmailField as EmailFieldType,\n\tWebsiteField as WebsiteFieldType,\n\tFieldAnswer,\n} from \"../../types\";\nimport { useField } from \"../../hooks/useField\";\nimport { QuestionHeader } from \"./QuestionHeader\";\n\ntype TextFieldType =\n\t| ShortTextFieldType\n\t| LongTextFieldType\n\t| EmailFieldType\n\t| WebsiteFieldType;\n\nexport interface TextFieldProps {\n\tfield: TextFieldType;\n\tvalue: FieldAnswer | undefined;\n\terror: string | null;\n\tonChange: (value: FieldAnswer) => void;\n\tonNext: () => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n}\n\nexport function TextField({\n\tfield,\n\tvalue,\n\terror,\n\tonChange,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n}: TextFieldProps) {\n\tconst { getInputProps, getTextareaProps } = useField({\n\t\tfield,\n\t\tvalue,\n\t\terror,\n\t\tonChange,\n\t\tonNext,\n\t});\n\n\tconst isLongText = field.type === \"long_text\";\n\tconst inputType = field.type === \"email\" ? \"email\" : field.type === \"website\" ? \"url\" : \"text\";\n\n\treturn (\n\t\t<div className=\"lf-field\">\n\t\t\t<QuestionHeader\n\t\t\t\tfield={field}\n\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t/>\n\n\t\t\t{isLongText ? (\n\t\t\t\t<textarea\n\t\t\t\t\t{...getTextareaProps()}\n\t\t\t\t\tclassName=\"lf-input\"\n\t\t\t\t\trows={4}\n\t\t\t\t\tstyle={{ resize: \"vertical\", minHeight: \"120px\" }}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<input {...getInputProps()} type={inputType} className=\"lf-input-underline\" />\n\t\t\t)}\n\n\t\t\t{error && (\n\t\t\t\t<p id={`${field.ref}-error`} className=\"lf-error\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { YesNoField as YesNoFieldType, FieldAnswer } from \"../../types\";\nimport { QuestionHeader } from \"./QuestionHeader\";\n\nexport interface YesNoProps {\n\tfield: YesNoFieldType;\n\tvalue: FieldAnswer | undefined;\n\terror: string | null;\n\tonChange: (value: FieldAnswer) => void;\n\tonNext: (pendingValue?: FieldAnswer) => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n\tshowKeyHints?: boolean;\n}\n\nexport function YesNo({\n\tfield,\n\tvalue,\n\terror,\n\tonChange,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n\tshowKeyHints,\n}: YesNoProps) {\n\tconst currentValue = value as boolean | undefined;\n\n\tconst handleClick = (answer: boolean) => {\n\t\tonChange(answer);\n\t\tonNext(answer);\n\t};\n\n\t// Handle keyboard shortcuts\n\tReact.useEffect(() => {\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key.toLowerCase() === \"y\") {\n\t\t\t\thandleClick(true);\n\t\t\t} else if (e.key.toLowerCase() === \"n\") {\n\t\t\t\thandleClick(false);\n\t\t\t}\n\t\t};\n\n\t\tif (showKeyHints) {\n\t\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown);\n\t\t}\n\t}, [showKeyHints]);\n\n\treturn (\n\t\t<div className=\"lf-field\">\n\t\t\t<QuestionHeader\n\t\t\t\tfield={field}\n\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t/>\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tgap: \"var(--lf-spacing-option)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => handleClick(true)}\n\t\t\t\t\tclassName={`lf-choice ${currentValue === true ? \"lf-choice-selected\" : \"\"}`}\n\t\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\t>\n\t\t\t\t\t{showKeyHints && <span className=\"lf-key-hint\">Y</span>}\n\t\t\t\t\t<span>Yes</span>\n\t\t\t\t\t{currentValue === true && (\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\t\t\t\tstyle={{ color: \"var(--lf-color-primary)\", marginLeft: \"auto\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => handleClick(false)}\n\t\t\t\t\tclassName={`lf-choice ${currentValue === false ? \"lf-choice-selected\" : \"\"}`}\n\t\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\t>\n\t\t\t\t\t{showKeyHints && <span className=\"lf-key-hint\">N</span>}\n\t\t\t\t\t<span>No</span>\n\t\t\t\t\t{currentValue === false && (\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\t\t\t\tstyle={{ color: \"var(--lf-color-primary)\", marginLeft: \"auto\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t{error && (\n\t\t\t\t<p id={`${field.ref}-error`} className=\"lf-error\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport type { FieldAnswer, FormField, FormSettings } from \"../../types\";\nimport { MultipleChoice } from \"./MultipleChoice\";\nimport { NumberField } from \"./NumberField\";\nimport { OpinionScale } from \"./OpinionScale\";\nimport { QuestionHeader } from \"./QuestionHeader\";\nimport { Rating } from \"./Rating\";\nimport { Statement } from \"./Statement\";\nimport { TextField } from \"./TextField\";\nimport { YesNo } from \"./YesNo\";\n\nexport interface FieldRendererProps {\n\tfield: FormField;\n\tvalue: FieldAnswer | undefined;\n\terror: string | null;\n\tonChange: (value: FieldAnswer) => void;\n\tonNext: (pendingValue?: FieldAnswer) => void;\n\tshowQuestionNumber?: boolean;\n\tquestionNumber?: number;\n\tshowKeyHints?: boolean;\n\tsystemMessages?: FormSettings[\"systemMessages\"];\n}\n\nexport function FieldRenderer({\n\tfield,\n\tvalue,\n\terror,\n\tonChange,\n\tonNext,\n\tshowQuestionNumber,\n\tquestionNumber,\n\tshowKeyHints,\n\tsystemMessages,\n}: FieldRendererProps) {\n\tconst commonProps = {\n\t\tvalue,\n\t\terror,\n\t\tonChange,\n\t\tonNext,\n\t\tshowQuestionNumber,\n\t\tquestionNumber,\n\t};\n\n\tswitch (field.type) {\n\t\tcase \"short_text\":\n\t\tcase \"long_text\":\n\t\tcase \"email\":\n\t\tcase \"website\":\n\t\t\treturn <TextField field={field} {...commonProps} />;\n\n\t\tcase \"number\":\n\t\t\treturn <NumberField field={field} {...commonProps} />;\n\n\t\tcase \"multiple_choice\":\n\t\t\treturn (\n\t\t\t\t<MultipleChoice\n\t\t\t\t\tfield={field}\n\t\t\t\t\t{...commonProps}\n\t\t\t\t\tshowKeyHints={showKeyHints}\n\t\t\t\t\tsystemMessages={systemMessages}\n\t\t\t\t/>\n\t\t\t);\n\n\t\tcase \"rating\":\n\t\t\treturn <Rating field={field} {...commonProps} />;\n\n\t\tcase \"opinion_scale\":\n\t\t\treturn <OpinionScale field={field} {...commonProps} />;\n\n\t\tcase \"yes_no\":\n\t\t\treturn (\n\t\t\t\t<YesNo field={field} {...commonProps} showKeyHints={showKeyHints} />\n\t\t\t);\n\n\t\tcase \"statement\":\n\t\t\treturn (\n\t\t\t\t<Statement\n\t\t\t\t\tfield={field}\n\t\t\t\t\tonNext={onNext}\n\t\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\t/>\n\t\t\t);\n\n\t\t// For field types not yet implemented, show a basic input\n\t\tcase \"phone_number\":\n\t\tcase \"date\":\n\t\tcase \"dropdown\":\n\t\tcase \"picture_choice\":\n\t\tcase \"ranking\":\n\t\tcase \"nps\":\n\t\tcase \"legal\":\n\t\tcase \"file_upload\":\n\t\tcase \"contact_info\":\n\t\tcase \"payment\":\n\t\tcase \"group\":\n\t\tcase \"matrix\":\n\t\tcase \"address\":\n\t\tcase \"slider\":\n\t\tcase \"signature\":\n\t\tdefault:\n\t\t\treturn (\n\t\t\t\t<div className=\"lf-field\">\n\t\t\t\t\t<QuestionHeader\n\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\tquestionNumber={questionNumber}\n\t\t\t\t\t\tshowQuestionNumber={showQuestionNumber}\n\t\t\t\t\t/>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tvalue={(value as string) || \"\"}\n\t\t\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tonNext();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"lf-input-underline\"\n\t\t\t\t\t\tplaceholder={`Enter your ${field.type.replace(/_/g, \" \")}`}\n\t\t\t\t\t/>\n\t\t\t\t\t{error && (\n\t\t\t\t\t\t<p id={`${field.ref}-error`} className=\"lf-error\">\n\t\t\t\t\t\t\t{error}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t}\n}\n","import React from \"react\";\nimport { useFormContext } from \"../FormProvider\";\nimport { useThemeContext } from \"../../hooks/useTheme\";\n\nexport interface NavigationControlsProps {\n\tonNext?: () => void;\n\tonPrevious?: () => void;\n}\n\nexport function NavigationControls({ onNext, onPrevious }: NavigationControlsProps) {\n\tconst { canGoBack, canGoNext, isSubmitting, next, previous, settings } =\n\t\tuseFormContext();\n\tconst theme = useThemeContext();\n\n\t// Check navigation visibility - hide if \"hidden\" or \"auto-advance\"\n\tconst navVisibility = theme.componentVariants?.navigationVisibility || \"always\";\n\tif (navVisibility === \"hidden\" || navVisibility === \"auto-advance\") {\n\t\treturn null;\n\t}\n\n\tconst handleNext = () => (onNext ? onNext() : next());\n\tconst handlePrevious = () => (onPrevious ? onPrevious() : previous());\n\n\tconst confirmText = settings.systemMessages?.confirmButtonText || \"OK\";\n\tconst enterHint = settings.systemMessages?.pressEnterText || \"press Enter\";\n\n\tconst isBottomBar = theme.componentVariants?.navigationLayout === \"bottom-bar\";\n\n\t// Bottom-bar variant (Quiz template style)\n\tif (isBottomBar) {\n\t\treturn (\n\t\t\t<div className=\"lf-navigation-bottom-bar\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"lf-nav-btn-back\"\n\t\t\t\t\tonClick={handlePrevious}\n\t\t\t\t\tdisabled={!canGoBack}\n\t\t\t\t\taria-label=\"Previous question\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M19 12H5M12 19l-7-7 7-7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\tBack\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"lf-nav-btn-next\"\n\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\taria-label=\"Next question\"\n\t\t\t\t>\n\t\t\t\t\tNext\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M5 12h14M12 5l7 7-7 7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default floating navigation\n\treturn (\n\t\t<div className=\"lf-navigation\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"lf-navigation-button\"\n\t\t\t\tonClick={handlePrevious}\n\t\t\t\tdisabled={!canGoBack}\n\t\t\t\taria-label=\"Previous question\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M15 18l-6-6 6-6\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"lf-button\"\n\t\t\t\tonClick={handleNext}\n\t\t\t\tdisabled={isSubmitting}\n\t\t\t>\n\t\t\t\t{confirmText}\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\tfontSize: \"0.75rem\",\n\t\t\t\t\t\tmarginLeft: \"0.5rem\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{enterHint} ↵\n\t\t\t\t</span>\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"lf-navigation-button\"\n\t\t\t\tonClick={handleNext}\n\t\t\t\tdisabled={!canGoNext || isSubmitting}\n\t\t\t\taria-label=\"Next question\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M9 18l6-6-6-6\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport { useFormContext } from \"../FormProvider\";\nimport { useProgress } from \"../../hooks/useProgress\";\nimport { useThemeContext } from \"../../hooks/useTheme\";\n\nexport function ProgressBar() {\n\tconst { content, answers, currentIndex, settings } = useFormContext();\n\tconst theme = useThemeContext();\n\tconst { percentage, segments } = useProgress({ content, answers, currentIndex });\n\n\t// Check both settings.showProgressBar AND theme.progressBar.enabled\n\tif (!settings.showProgressBar || !theme.progressBar.enabled) {\n\t\treturn null;\n\t}\n\n\tconst position = theme.progressBar.position === \"bottom\" ? \"bottom\" : \"top\";\n\tconst positionStyle: React.CSSProperties = {\n\t\tposition: \"fixed\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\t[position]: 0,\n\t\tzIndex: 100,\n\t};\n\n\tif (theme.progressBar.style === \"segmented\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\t...positionStyle,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tgap: \"4px\",\n\t\t\t\t\tpadding: \"8px 16px\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{segments.map((segment) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={segment.index}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\theight: \"4px\",\n\t\t\t\t\t\t\tbackgroundColor: segment.completed\n\t\t\t\t\t\t\t\t? \"var(--lf-color-progress-fill)\"\n\t\t\t\t\t\t\t\t: \"var(--lf-color-progress-bg)\",\n\t\t\t\t\t\t\ttransition: \"background-color var(--lf-transition-duration) var(--lf-transition-easing)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (theme.progressBar.style === \"percentage\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\t...positionStyle,\n\t\t\t\t\tpadding: \"8px 16px\",\n\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\tcolor: \"var(--lf-color-question)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{Math.round(percentage)}%\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (theme.progressBar.style === \"dots\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\t...positionStyle,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\tpadding: \"8px 16px\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{segments.map((segment) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={segment.index}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: segment.current ? \"12px\" : \"8px\",\n\t\t\t\t\t\t\theight: segment.current ? \"12px\" : \"8px\",\n\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\tbackgroundColor: segment.completed || segment.current\n\t\t\t\t\t\t\t\t? \"var(--lf-color-progress-fill)\"\n\t\t\t\t\t\t\t\t: \"var(--lf-color-progress-bg)\",\n\t\t\t\t\t\t\ttransition: \"all var(--lf-transition-duration) var(--lf-transition-easing)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default bar style\n\treturn (\n\t\t<div style={{ ...positionStyle, padding: \"8px 16px\" }}>\n\t\t\t<div\n\t\t\t\tclassName=\"lf-progress\"\n\t\t\t\tstyle={{ height: \"4px\", borderRadius: \"2px\" }}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"lf-progress-fill\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: `${percentage}%`,\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\tborderRadius: \"2px\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { FormContent, FormField } from \"../types\";\n\n/**\n * Estimated time in seconds for each field type\n */\nconst FIELD_TIME_ESTIMATES: Record<string, number> = {\n\t// Text fields\n\tshort_text: 15,\n\tlong_text: 45,\n\temail: 12,\n\tphone_number: 15,\n\twebsite: 12,\n\n\t// Selection fields\n\tmultiple_choice: 10,\n\tpicture_choice: 12,\n\tdropdown: 12,\n\tyes_no: 5,\n\tranking: 20,\n\n\t// Scale/rating fields\n\trating: 8,\n\topinion_scale: 8,\n\tnps: 8,\n\n\t// Complex fields\n\taddress: 60,\n\tcontact_info: 45,\n\tdate: 10,\n\tnumber: 10,\n\tslider: 8,\n\tsignature: 30,\n\tfile_upload: 20,\n\tpayment: 60,\n\n\t// Display fields (minimal time)\n\tstatement: 5,\n\tlegal: 15,\n\tgroup: 0,\n\tmatrix: 30,\n};\n\n/**\n * Calculate the estimated time to complete a form in seconds\n */\nexport function calculateTimeEstimate(content: FormContent): number {\n\tlet totalSeconds = 0;\n\n\tfor (const field of content.fields) {\n\t\tconst fieldTime = FIELD_TIME_ESTIMATES[field.type] ?? 15;\n\t\ttotalSeconds += fieldTime;\n\t}\n\n\t// Add time for welcome screens (reading time)\n\ttotalSeconds += content.welcomeScreens.length * 10;\n\n\treturn totalSeconds;\n}\n\n/**\n * Format seconds into a human-readable time string\n * @returns String like \"About 2 min\" or \"About 30 sec\"\n */\nexport function formatTimeEstimate(seconds: number): string {\n\tif (seconds < 60) {\n\t\treturn `About ${Math.round(seconds / 10) * 10} sec`;\n\t}\n\n\tconst minutes = Math.round(seconds / 60);\n\treturn `About ${minutes} min`;\n}\n\n/**\n * Calculate remaining time based on answered fields\n */\nexport function calculateRemainingTime(\n\tcontent: FormContent,\n\tansweredFieldRefs: string[]\n): number {\n\tlet totalSeconds = 0;\n\n\tfor (const field of content.fields) {\n\t\t// Skip already answered fields\n\t\tif (answeredFieldRefs.includes(field.ref)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst fieldTime = FIELD_TIME_ESTIMATES[field.type] ?? 15;\n\t\ttotalSeconds += fieldTime;\n\t}\n\n\treturn totalSeconds;\n}\n","import React, { useMemo } from \"react\";\nimport { useFormContext } from \"../FormProvider\";\nimport { calculateRemainingTime, formatTimeEstimate } from \"../../utils/timeEstimate\";\n\nexport function TimeToComplete() {\n\tconst { content, settings, answers, isStarted, isCompleted } = useFormContext();\n\n\t// Don't show if setting is disabled\n\tif (!settings.showTimeToComplete) {\n\t\treturn null;\n\t}\n\n\t// Don't show on completion\n\tif (isCompleted) {\n\t\treturn null;\n\t}\n\n\tconst answeredFieldRefs = Object.keys(answers);\n\tconst remainingSeconds = useMemo(\n\t\t() => calculateRemainingTime(content, answeredFieldRefs),\n\t\t[content, answeredFieldRefs]\n\t);\n\n\t// Don't show if no time remaining\n\tif (remainingSeconds <= 0) {\n\t\treturn null;\n\t}\n\n\tconst timeText = formatTimeEstimate(remainingSeconds);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"lf-time-estimate\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"fixed\",\n\t\t\t\ttop: \"1rem\",\n\t\t\t\tright: \"1rem\",\n\t\t\t\tzIndex: 50,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tgap: \"0.5rem\",\n\t\t\t\tpadding: \"0.5rem 0.75rem\",\n\t\t\t\tfontSize: \"0.75rem\",\n\t\t\t\tcolor: \"var(--lf-color-question)\",\n\t\t\t\topacity: 0.7,\n\t\t\t}}\n\t\t>\n\t\t\t<svg\n\t\t\t\twidth=\"14\"\n\t\t\t\theight=\"14\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t>\n\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t\t\t<polyline points=\"12 6 12 12 16 14\" />\n\t\t\t</svg>\n\t\t\t<span>{timeText}</span>\n\t\t</div>\n\t);\n}\n","import React, { useState, useEffect } from \"react\";\nimport { hasCookieConsent, setCookieConsent } from \"../utils/storage\";\n\nexport interface CookieConsentProps {\n\tonAccept: () => void;\n}\n\nexport function CookieConsent({ onAccept }: CookieConsentProps) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\n\tuseEffect(() => {\n\t\t// Check if consent has already been given\n\t\tif (!hasCookieConsent()) {\n\t\t\tsetIsVisible(true);\n\t\t}\n\t}, []);\n\n\tconst handleAccept = () => {\n\t\tsetCookieConsent(true);\n\t\tsetIsVisible(false);\n\t\tonAccept();\n\t};\n\n\tif (!isVisible) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"lf-cookie-consent\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"fixed\",\n\t\t\t\tinset: 0,\n\t\t\t\tzIndex: 1000,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tmaxWidth: \"400px\",\n\t\t\t\t\tmargin: \"1rem\",\n\t\t\t\t\tpadding: \"1.5rem\",\n\t\t\t\t\tbackgroundColor: \"var(--lf-color-surface, #fff)\",\n\t\t\t\t\tborderRadius: \"var(--lf-border-radius, 8px)\",\n\t\t\t\t\tboxShadow: \"0 4px 20px rgba(0, 0, 0, 0.15)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"48px\",\n\t\t\t\t\t\theight: \"48px\",\n\t\t\t\t\t\tmargin: \"0 auto 1rem\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tbackgroundColor: \"color-mix(in srgb, var(--lf-color-primary) 15%, transparent)\",\n\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"var(--lf-color-primary)\"\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t\t\t\t\t<circle cx=\"8\" cy=\"9\" r=\"1\" fill=\"currentColor\" />\n\t\t\t\t\t\t<circle cx=\"15\" cy=\"9\" r=\"1\" fill=\"currentColor\" />\n\t\t\t\t\t\t<circle cx=\"9\" cy=\"14\" r=\"1\" fill=\"currentColor\" />\n\t\t\t\t\t\t<circle cx=\"14\" cy=\"14\" r=\"1\" fill=\"currentColor\" />\n\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\n\t\t\t\t<h2\n\t\t\t\t\tclassName=\"lf-question-title\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tfontSize: \"1.25rem\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tmarginBottom: \"0.75rem\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tCookie consent\n\t\t\t\t</h2>\n\n\t\t\t\t<p\n\t\t\t\t\tclassName=\"lf-question-description\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tmarginBottom: \"1.5rem\",\n\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThis form uses cookies to save your progress and provide a better\n\t\t\t\t\texperience. By continuing, you agree to the use of cookies.\n\t\t\t\t</p>\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={handleAccept}\n\t\t\t\t\tclassName=\"lf-button\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tpadding: \"0.75rem 1.5rem\",\n\t\t\t\t\t\tfontSize: \"1rem\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tAccept and continue\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\n\ndeclare global {\n\tinterface Window {\n\t\tturnstile?: {\n\t\t\trender: (\n\t\t\t\tcontainer: HTMLElement,\n\t\t\t\toptions: {\n\t\t\t\t\tsitekey: string;\n\t\t\t\t\tcallback: (token: string) => void;\n\t\t\t\t\t\"error-callback\"?: () => void;\n\t\t\t\t\t\"expired-callback\"?: () => void;\n\t\t\t\t\ttheme?: \"light\" | \"dark\" | \"auto\";\n\t\t\t\t\tsize?: \"normal\" | \"compact\";\n\t\t\t\t}\n\t\t\t) => string;\n\t\t\treset: (widgetId: string) => void;\n\t\t\tremove: (widgetId: string) => void;\n\t\t};\n\t}\n}\n\nexport interface CaptchaProps {\n\tsiteKey: string;\n\tonVerify: (token: string) => void;\n\tonError?: () => void;\n\tonExpired?: () => void;\n\ttheme?: \"light\" | \"dark\" | \"auto\";\n\tsize?: \"normal\" | \"compact\";\n}\n\n/**\n * Cloudflare Turnstile CAPTCHA component\n */\nexport function Captcha({\n\tsiteKey,\n\tonVerify,\n\tonError,\n\tonExpired,\n\ttheme = \"auto\",\n\tsize = \"normal\",\n}: CaptchaProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst widgetIdRef = useRef<string | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tconst initializeTurnstile = useCallback(() => {\n\t\tif (!containerRef.current || !window.turnstile) return;\n\n\t\t// Clear any existing widget\n\t\tif (widgetIdRef.current) {\n\t\t\ttry {\n\t\t\t\twindow.turnstile.remove(widgetIdRef.current);\n\t\t\t} catch (e) {\n\t\t\t\t// Ignore removal errors\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\twidgetIdRef.current = window.turnstile.render(containerRef.current, {\n\t\t\t\tsitekey: siteKey,\n\t\t\t\tcallback: (token: string) => {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\tonVerify(token);\n\t\t\t\t},\n\t\t\t\t\"error-callback\": () => {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\tsetError(\"Verification failed. Please try again.\");\n\t\t\t\t\tonError?.();\n\t\t\t\t},\n\t\t\t\t\"expired-callback\": () => {\n\t\t\t\t\tsetError(\"Verification expired. Please try again.\");\n\t\t\t\t\tonExpired?.();\n\t\t\t\t},\n\t\t\t\ttheme,\n\t\t\t\tsize,\n\t\t\t});\n\t\t\tsetIsLoading(false);\n\t\t} catch (e) {\n\t\t\tsetIsLoading(false);\n\t\t\tsetError(\"Failed to initialize CAPTCHA.\");\n\t\t\tonError?.();\n\t\t}\n\t}, [siteKey, onVerify, onError, onExpired, theme, size]);\n\n\tuseEffect(() => {\n\t\t// Check if Turnstile is already loaded\n\t\tif (window.turnstile) {\n\t\t\tinitializeTurnstile();\n\t\t\treturn;\n\t\t}\n\n\t\t// Load Turnstile script\n\t\tconst existingScript = document.querySelector(\n\t\t\t'script[src*=\"challenges.cloudflare.com/turnstile\"]'\n\t\t);\n\t\tif (existingScript) {\n\t\t\t// Script exists, wait for it to load\n\t\t\texistingScript.addEventListener(\"load\", initializeTurnstile);\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.src = \"https://challenges.cloudflare.com/turnstile/v0/api.js\";\n\t\tscript.async = true;\n\t\tscript.defer = true;\n\t\tscript.onload = initializeTurnstile;\n\t\tscript.onerror = () => {\n\t\t\tsetIsLoading(false);\n\t\t\tsetError(\"Failed to load CAPTCHA. Please refresh the page.\");\n\t\t\tonError?.();\n\t\t};\n\t\tdocument.head.appendChild(script);\n\n\t\treturn () => {\n\t\t\t// Cleanup widget on unmount\n\t\t\tif (widgetIdRef.current && window.turnstile) {\n\t\t\t\ttry {\n\t\t\t\t\twindow.turnstile.remove(widgetIdRef.current);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Ignore removal errors\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, [initializeTurnstile, onError]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"lf-captcha\"\n\t\t\tstyle={{\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tgap: \"0.75rem\",\n\t\t\t\tpadding: \"1rem 0\",\n\t\t\t}}\n\t\t>\n\t\t\t{isLoading && (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tgap: \"0.5rem\",\n\t\t\t\t\t\tcolor: \"var(--lf-color-question)\",\n\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tclassName=\"animate-spin\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"12\"\n\t\t\t\t\t\t\tcy=\"12\"\n\t\t\t\t\t\t\tr=\"10\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"4\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\topacity=\"0.25\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<path d=\"M4 12a8 8 0 0 1 8-8\" opacity=\"0.75\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\t<span style={{ fontSize: \"0.875rem\" }}>Loading verification...</span>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div ref={containerRef} />\n\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: \"var(--lf-color-error, #ef4444)\",\n\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport default Captcha;\n","import React from \"react\";\nimport { useThemeContext } from \"../../hooks/useTheme\";\n\nexport function Branding() {\n\tconst theme = useThemeContext();\n\n\tif (!theme.branding.showPoweredBy) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"lf-branding\">\n\t\t\tPowered by{\" \"}\n\t\t\t<a href=\"https://landform.io\" target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\tLandform\n\t\t\t</a>\n\t\t</div>\n\t);\n}\n","import React from \"react\";\nimport { useThemeContext } from \"../../hooks/useTheme\";\n\nexport function Header() {\n\tconst theme = useThemeContext();\n\n\tconst headerLayout = theme.componentVariants?.headerLayout;\n\n\t// No header if layout is \"none\" or undefined\n\tif (!headerLayout || headerLayout === \"none\") {\n\t\treturn null;\n\t}\n\n\tconst brandName = theme.branding?.brandName;\n\tconst logoUrl = theme.branding?.logoUrl;\n\n\t// Centered logo layout (Quiz template style)\n\tif (headerLayout === \"centered-logo\") {\n\t\treturn (\n\t\t\t<header className=\"lf-header-centered\">\n\t\t\t\t{logoUrl && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={logoUrl}\n\t\t\t\t\t\talt={brandName || \"Logo\"}\n\t\t\t\t\t\tclassName=\"lf-header-logo\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{brandName && !logoUrl && (\n\t\t\t\t\t<span className=\"lf-header-brand\" style={{ fontSize: \"1.125rem\", fontWeight: 600, color: \"var(--lf-color-question)\" }}>\n\t\t\t\t\t\t{brandName}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t);\n\t}\n\n\t// Left-aligned logo layout\n\tif (headerLayout === \"left-logo\") {\n\t\treturn (\n\t\t\t<header className=\"lf-header-left\" style={{\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tpadding: \"1rem var(--lf-spacing-container)\",\n\t\t\t\tgap: \"0.75rem\",\n\t\t\t}}>\n\t\t\t\t{logoUrl && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={logoUrl}\n\t\t\t\t\t\talt={brandName || \"Logo\"}\n\t\t\t\t\t\tclassName=\"lf-header-logo\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{brandName && (\n\t\t\t\t\t<span style={{ fontSize: \"1rem\", fontWeight: 500, color: \"var(--lf-color-question)\" }}>\n\t\t\t\t\t\t{brandName}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t);\n\t}\n\n\treturn null;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { FormProvider, useFormContext } from \"./FormProvider\";\nimport { useTheme, useThemeContext } from \"../hooks/useTheme\";\nimport { WelcomeScreen } from \"./screens/WelcomeScreen\";\nimport { ThankYouScreen } from \"./screens/ThankYouScreen\";\nimport { FieldRenderer } from \"./fields/FieldRenderer\";\nimport { NavigationControls } from \"./navigation/NavigationControls\";\nimport { ProgressBar } from \"./navigation/ProgressBar\";\nimport { TimeToComplete } from \"./navigation/TimeToComplete\";\nimport { CookieConsent } from \"./CookieConsent\";\nimport { Captcha } from \"./Captcha\";\nimport { Branding } from \"./layout/Branding\";\nimport { Header } from \"./layout/Header\";\nimport { hasCookieConsent } from \"../utils/storage\";\nimport type { UseFormOptions } from \"../hooks/useForm\";\n\nexport interface FormRendererProps extends UseFormOptions {\n\tclassName?: string;\n}\n\nexport function FormRenderer(props: FormRendererProps) {\n\tconst { className, ...formOptions } = props;\n\n\treturn (\n\t\t<FormProvider {...formOptions}>\n\t\t\t<FormRendererInner\n\t\t\t\tclassName={className}\n\t\t\t\ttheme={formOptions.theme}\n\t\t\t\tturnstileSiteKey={formOptions.turnstileSiteKey}\n\t\t\t/>\n\t\t</FormProvider>\n\t);\n}\n\ninterface FormRendererInnerProps {\n\tclassName?: string;\n\ttheme: UseFormOptions[\"theme\"];\n\tturnstileSiteKey?: string;\n}\n\nfunction FormRendererInner({ className, theme, turnstileSiteKey }: FormRendererInnerProps) {\n\tconst {\n\t\tcurrentItem,\n\t\tsettings,\n\t\tisStarted,\n\t\tisCompleted,\n\t\tisDuplicateSubmission,\n\t\tshowCaptcha,\n\t\tsetCaptchaToken,\n\t\tsubmit,\n\t\tstart,\n\t\tnext,\n\t\tanswers,\n\t\terrors,\n\t\tsetAnswer,\n\t} = useFormContext();\n\n\tconst { backgroundStyle } = useTheme({ theme });\n\n\t// Cookie consent state\n\tconst [showCookieConsent, setShowCookieConsent] = useState(false);\n\tconst [hasConsent, setHasConsent] = useState(true);\n\n\tuseEffect(() => {\n\t\tif (settings.showCookieConsent && !hasCookieConsent()) {\n\t\t\tsetShowCookieConsent(true);\n\t\t\tsetHasConsent(false);\n\t\t}\n\t}, [settings.showCookieConsent]);\n\n\tconst handleCookieConsentAccept = () => {\n\t\tsetShowCookieConsent(false);\n\t\tsetHasConsent(true);\n\t};\n\n\t// Show duplicate submission message\n\tif (isDuplicateSubmission) {\n\t\treturn (\n\t\t\t<div className={`lf-form ${className || \"\"}`} style={backgroundStyle}>\n\t\t\t\t<div className=\"lf-question-container\">\n\t\t\t\t\t<div className=\"lf-screen\" style={{ textAlign: \"center\" }}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: \"80px\",\n\t\t\t\t\t\t\t\theight: \"80px\",\n\t\t\t\t\t\t\t\tmargin: \"0 auto 1.5rem\",\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--lf-color-primary)\",\n\t\t\t\t\t\t\t\topacity: 0.1,\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"40\"\n\t\t\t\t\t\t\t\theight=\"40\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"var(--lf-color-primary)\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n\t\t\t\t\t\t\t\t<polyline points=\"22 4 12 14.01 9 11.01\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h1 className=\"lf-question-title\" style={{ marginBottom: \"0.75rem\" }}>\n\t\t\t\t\t\t\tYou&apos;ve already submitted\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t<p className=\"lf-question-description\">\n\t\t\t\t\t\t\tYou have already submitted a response to this form.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Branding />\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!currentItem) {\n\t\treturn (\n\t\t\t<div className={`lf-form ${className || \"\"}`}>\n\t\t\t\t<div className=\"lf-screen\">Loading...</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={`lf-form ${className || \"\"}`} style={backgroundStyle}>\n\t\t\t{/* Cookie Consent Banner */}\n\t\t\t{showCookieConsent && (\n\t\t\t\t<CookieConsent onAccept={handleCookieConsentAccept} />\n\t\t\t)}\n\n\t\t\t{/* CAPTCHA Modal */}\n\t\t\t{showCaptcha && turnstileSiteKey && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"lf-captcha-modal\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\tzIndex: 1000,\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaxWidth: \"400px\",\n\t\t\t\t\t\t\tmargin: \"1rem\",\n\t\t\t\t\t\t\tpadding: \"1.5rem\",\n\t\t\t\t\t\t\tbackgroundColor: \"var(--lf-color-surface, #fff)\",\n\t\t\t\t\t\t\tborderRadius: \"var(--lf-border-radius, 8px)\",\n\t\t\t\t\t\t\tboxShadow: \"0 4px 20px rgba(0, 0, 0, 0.15)\",\n\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tclassName=\"lf-question-title\"\n\t\t\t\t\t\t\tstyle={{ fontSize: \"1.25rem\", marginBottom: \"0.75rem\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tPlease verify you&apos;re human\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"lf-question-description\"\n\t\t\t\t\t\t\tstyle={{ marginBottom: \"1rem\", fontSize: \"0.875rem\", opacity: 0.7 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tComplete the verification below to submit your response.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<Captcha\n\t\t\t\t\t\t\tsiteKey={turnstileSiteKey}\n\t\t\t\t\t\t\tonVerify={(token) => {\n\t\t\t\t\t\t\t\tsetCaptchaToken(token);\n\t\t\t\t\t\t\t\tsubmit();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Progress Bar */}\n\t\t\t{isStarted && !isCompleted && <ProgressBar />}\n\n\t\t\t{/* Header */}\n\t\t\t{isStarted && !isCompleted && <Header />}\n\n\t\t\t{/* Time to Complete */}\n\t\t\t<TimeToComplete />\n\n\t\t\t{/* Main Content */}\n\t\t\t<div\n\t\t\t\tclassName=\"lf-question-container\"\n\t\t\t\tstyle={{\n\t\t\t\t\t...(theme?.componentVariants?.containerMaxWidth && {\n\t\t\t\t\t\tmaxWidth: theme.componentVariants.containerMaxWidth,\n\t\t\t\t\t}),\n\t\t\t\t\t...(!hasConsent && { opacity: 0.3, pointerEvents: \"none\" }),\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{currentItem.type === \"welcome\" && (\n\t\t\t\t\t<WelcomeScreen screen={currentItem.screen} onStart={start} />\n\t\t\t\t)}\n\n\t\t\t\t{currentItem.type === \"field\" && (\n\t\t\t\t\t<FieldRenderer\n\t\t\t\t\t\tfield={currentItem.field}\n\t\t\t\t\t\tvalue={answers[currentItem.field.ref]}\n\t\t\t\t\t\terror={errors[currentItem.field.ref] || null}\n\t\t\t\t\t\tonChange={(value) => setAnswer(currentItem.field.ref, value)}\n\t\t\t\t\t\tonNext={next}\n\t\t\t\t\t\tquestionNumber={currentItem.index + 1}\n\t\t\t\t\t\tshowQuestionNumber={settings.showQuestionNumber}\n\t\t\t\t\t\tshowKeyHints={settings.showKeyHintOnChoices}\n\t\t\t\t\t\tsystemMessages={settings.systemMessages}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{currentItem.type === \"thankYou\" && (\n\t\t\t\t\t<ThankYouScreen screen={currentItem.screen} />\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Navigation */}\n\t\t\t{!settings.hideNavigation && isStarted && currentItem.type === \"field\" && (\n\t\t\t\t<NavigationControls />\n\t\t\t)}\n\n\t\t\t{/* Branding */}\n\t\t\t<Branding />\n\t\t</div>\n\t);\n}\n","import React from \"react\";\n\nexport interface FormContainerProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport function FormContainer({ children, className }: FormContainerProps) {\n\treturn <div className={`lf-form ${className || \"\"}`}>{children}</div>;\n}\n","import React from \"react\";\n\nexport interface QuestionContainerProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport function QuestionContainer({ children, className }: QuestionContainerProps) {\n\treturn (\n\t\t<div className={`lf-question-container ${className || \"\"}`}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import React from \"react\";\n\nexport interface ClosedScreenProps {\n\ttitle?: string;\n\tmessage?: string;\n\ttype?: \"scheduled\" | \"limit\" | \"closed\";\n}\n\nexport function ClosedScreen({\n\ttitle,\n\tmessage,\n\ttype = \"closed\",\n}: ClosedScreenProps) {\n\tconst defaultTitle =\n\t\ttype === \"scheduled\"\n\t\t\t? \"Form not available\"\n\t\t\t: type === \"limit\"\n\t\t\t? \"Response limit reached\"\n\t\t\t: \"Form closed\";\n\n\tconst defaultMessage =\n\t\ttype === \"scheduled\"\n\t\t\t? \"This form is not currently accepting responses.\"\n\t\t\t: type === \"limit\"\n\t\t\t? \"This form has reached its maximum number of responses.\"\n\t\t\t: \"This form is no longer accepting responses.\";\n\n\tconst iconPath =\n\t\ttype === \"limit\" ? (\n\t\t\t// Bar chart icon for limit reached\n\t\t\t<>\n\t\t\t\t<line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\" />\n\t\t\t\t<line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\" />\n\t\t\t\t<line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\" />\n\t\t\t</>\n\t\t) : type === \"scheduled\" ? (\n\t\t\t// Clock icon for scheduling\n\t\t\t<>\n\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t\t\t<polyline points=\"12 6 12 12 16 14\" />\n\t\t\t</>\n\t\t) : (\n\t\t\t// Lock icon for closed\n\t\t\t<>\n\t\t\t\t<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n\t\t\t\t<path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<div className=\"lf-form\">\n\t\t\t<div className=\"lf-question-container\">\n\t\t\t\t<div className=\"lf-screen\" style={{ textAlign: \"center\" }}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: \"80px\",\n\t\t\t\t\t\t\theight: \"80px\",\n\t\t\t\t\t\t\tmargin: \"0 auto 1.5rem\",\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tbackgroundColor: \"color-mix(in srgb, var(--lf-color-primary, #6366f1) 15%, transparent)\",\n\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"40\"\n\t\t\t\t\t\t\theight=\"40\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"var(--lf-color-primary, #6366f1)\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{iconPath}\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h1\n\t\t\t\t\t\tclassName=\"lf-question-title\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: \"2rem\",\n\t\t\t\t\t\t\tmarginBottom: \"0.75rem\",\n\t\t\t\t\t\t\tcolor: \"var(--lf-color-question, #1f2937)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title || defaultTitle}\n\t\t\t\t\t</h1>\n\t\t\t\t\t<p\n\t\t\t\t\t\tclassName=\"lf-question-description\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: \"1.125rem\",\n\t\t\t\t\t\t\tcolor: \"var(--lf-color-question, #1f2937)\",\n\t\t\t\t\t\t\topacity: 0.7,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{message || defaultMessage}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ // src/theme/utils.ts
4
+ function hexToRgb(hex) {
5
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
6
+ return result ? {
7
+ r: parseInt(result[1], 16),
8
+ g: parseInt(result[2], 16),
9
+ b: parseInt(result[3], 16)
10
+ } : null;
11
+ }
12
+ function rgbToHex(r, g, b) {
13
+ return "#" + [r, g, b].map((x) => {
14
+ const hex = Math.max(0, Math.min(255, Math.round(x))).toString(16);
15
+ return hex.length === 1 ? "0" + hex : hex;
16
+ }).join("");
17
+ }
18
+ function darken(color, amount) {
19
+ const rgb = hexToRgb(color);
20
+ if (!rgb) return color;
21
+ return rgbToHex(
22
+ rgb.r * (1 - amount),
23
+ rgb.g * (1 - amount),
24
+ rgb.b * (1 - amount)
25
+ );
26
+ }
27
+ function lighten(color, amount) {
28
+ const rgb = hexToRgb(color);
29
+ if (!rgb) return color;
30
+ return rgbToHex(
31
+ rgb.r + (255 - rgb.r) * amount,
32
+ rgb.g + (255 - rgb.g) * amount,
33
+ rgb.b + (255 - rgb.b) * amount
34
+ );
35
+ }
36
+ function adjustOpacity(color, opacity) {
37
+ const rgb = hexToRgb(color);
38
+ if (!rgb) return color;
39
+ return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;
40
+ }
41
+ function getContrastColor(backgroundColor) {
42
+ const rgb = hexToRgb(backgroundColor);
43
+ if (!rgb) return "#000000";
44
+ const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
45
+ return luminance > 0.5 ? "#000000" : "#FFFFFF";
46
+ }
47
+
48
+ exports.adjustOpacity = adjustOpacity;
49
+ exports.darken = darken;
50
+ exports.getContrastColor = getContrastColor;
51
+ exports.hexToRgb = hexToRgb;
52
+ exports.lighten = lighten;
53
+ exports.rgbToHex = rgbToHex;
54
+ //# sourceMappingURL=chunk-IQXKFO6Q.cjs.map
55
+ //# sourceMappingURL=chunk-IQXKFO6Q.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/utils.ts"],"names":[],"mappings":";;;AAOO,SAAS,SAAS,GAAA,EAAyD;AACjF,EAAA,MAAM,MAAA,GAAS,2CAAA,CAA4C,IAAA,CAAK,GAAG,CAAA;AACnE,EAAA,OAAO,MAAA,GACJ;AAAA,IACA,CAAA,EAAG,QAAA,CAAS,MAAA,CAAO,CAAC,GAAG,EAAE,CAAA;AAAA,IACzB,CAAA,EAAG,QAAA,CAAS,MAAA,CAAO,CAAC,GAAG,EAAE,CAAA;AAAA,IACzB,CAAA,EAAG,QAAA,CAAS,MAAA,CAAO,CAAC,GAAG,EAAE;AAAA,GAC1B,GACC,IAAA;AACJ;AAKO,SAAS,QAAA,CAAS,CAAA,EAAW,CAAA,EAAW,CAAA,EAAmB;AACjE,EAAA,OACC,GAAA,GACA,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CACN,GAAA,CAAI,CAAC,CAAA,KAAM;AACX,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA,CAAE,SAAS,EAAE,CAAA;AACjE,IAAA,OAAO,GAAA,CAAI,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,GAAA,GAAM,GAAA;AAAA,EACvC,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEX;AAKO,SAAS,MAAA,CAAO,OAAe,MAAA,EAAwB;AAC7D,EAAA,MAAM,GAAA,GAAM,SAAS,KAAK,CAAA;AAC1B,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AAEjB,EAAA,OAAO,QAAA;AAAA,IACN,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA,CAAA;AAAA,IACb,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA,CAAA;AAAA,IACb,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA;AAAA,GACd;AACD;AAKO,SAAS,OAAA,CAAQ,OAAe,MAAA,EAAwB;AAC9D,EAAA,MAAM,GAAA,GAAM,SAAS,KAAK,CAAA;AAC1B,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AAEjB,EAAA,OAAO,QAAA;AAAA,IACN,GAAA,CAAI,CAAA,GAAA,CAAK,GAAA,GAAM,GAAA,CAAI,CAAA,IAAK,MAAA;AAAA,IACxB,GAAA,CAAI,CAAA,GAAA,CAAK,GAAA,GAAM,GAAA,CAAI,CAAA,IAAK,MAAA;AAAA,IACxB,GAAA,CAAI,CAAA,GAAA,CAAK,GAAA,GAAM,GAAA,CAAI,CAAA,IAAK;AAAA,GACzB;AACD;AAKO,SAAS,aAAA,CAAc,OAAe,OAAA,EAAyB;AACrE,EAAA,MAAM,GAAA,GAAM,SAAS,KAAK,CAAA;AAC1B,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AAEjB,EAAA,OAAO,CAAA,KAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAA;AACrD;AAKO,SAAS,iBAAiB,eAAA,EAAiC;AACjE,EAAA,MAAM,GAAA,GAAM,SAAS,eAAe,CAAA;AACpC,EAAA,IAAI,CAAC,KAAK,OAAO,SAAA;AAGjB,EAAA,MAAM,SAAA,GAAA,CAAa,QAAQ,GAAA,CAAI,CAAA,GAAI,QAAQ,GAAA,CAAI,CAAA,GAAI,KAAA,GAAQ,GAAA,CAAI,CAAA,IAAK,GAAA;AACpE,EAAA,OAAO,SAAA,GAAY,MAAM,SAAA,GAAY,SAAA;AACtC","file":"chunk-IQXKFO6Q.cjs","sourcesContent":["// ============================================================================\n// Color Manipulation Utilities\n// ============================================================================\n\n/**\n * Parse hex color to RGB components\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\treturn result\n\t\t? {\n\t\t\t\tr: parseInt(result[1], 16),\n\t\t\t\tg: parseInt(result[2], 16),\n\t\t\t\tb: parseInt(result[3], 16),\n\t\t\t}\n\t\t: null;\n}\n\n/**\n * Convert RGB to hex\n */\nexport function rgbToHex(r: number, g: number, b: number): string {\n\treturn (\n\t\t\"#\" +\n\t\t[r, g, b]\n\t\t\t.map((x) => {\n\t\t\t\tconst hex = Math.max(0, Math.min(255, Math.round(x))).toString(16);\n\t\t\t\treturn hex.length === 1 ? \"0\" + hex : hex;\n\t\t\t})\n\t\t\t.join(\"\")\n\t);\n}\n\n/**\n * Darken a color by a percentage (0-1)\n */\nexport function darken(color: string, amount: number): string {\n\tconst rgb = hexToRgb(color);\n\tif (!rgb) return color;\n\n\treturn rgbToHex(\n\t\trgb.r * (1 - amount),\n\t\trgb.g * (1 - amount),\n\t\trgb.b * (1 - amount)\n\t);\n}\n\n/**\n * Lighten a color by a percentage (0-1)\n */\nexport function lighten(color: string, amount: number): string {\n\tconst rgb = hexToRgb(color);\n\tif (!rgb) return color;\n\n\treturn rgbToHex(\n\t\trgb.r + (255 - rgb.r) * amount,\n\t\trgb.g + (255 - rgb.g) * amount,\n\t\trgb.b + (255 - rgb.b) * amount\n\t);\n}\n\n/**\n * Adjust opacity of a color, returning rgba string\n */\nexport function adjustOpacity(color: string, opacity: number): string {\n\tconst rgb = hexToRgb(color);\n\tif (!rgb) return color;\n\n\treturn `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;\n}\n\n/**\n * Calculate contrasting text color (black or white)\n */\nexport function getContrastColor(backgroundColor: string): string {\n\tconst rgb = hexToRgb(backgroundColor);\n\tif (!rgb) return \"#000000\";\n\n\t// Calculate relative luminance\n\tconst luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n\treturn luminance > 0.5 ? \"#000000\" : \"#FFFFFF\";\n}\n"]}
@@ -0,0 +1,117 @@
1
+ 'use strict';
2
+
3
+ // src/api/client.ts
4
+ var LandformClient = class {
5
+ constructor(config) {
6
+ this.baseUrl = config.baseUrl || "";
7
+ this.projectId = config.projectId;
8
+ this.onError = config.onError;
9
+ }
10
+ async startResponse(params = {}) {
11
+ try {
12
+ const response = await fetch(`${this.baseUrl}/api/responses`, {
13
+ method: "POST",
14
+ headers: { "Content-Type": "application/json" },
15
+ body: JSON.stringify({
16
+ projectId: this.projectId,
17
+ sessionId: params.sessionId,
18
+ metadata: params.metadata,
19
+ hiddenFields: params.hiddenFields
20
+ })
21
+ });
22
+ if (!response.ok) {
23
+ const errorText = await response.text();
24
+ throw new Error(
25
+ `Failed to start response: ${response.status} ${errorText}`
26
+ );
27
+ }
28
+ return response.json();
29
+ } catch (error) {
30
+ this.onError?.(error);
31
+ throw error;
32
+ }
33
+ }
34
+ async updateAnswers(params) {
35
+ try {
36
+ const response = await fetch(
37
+ `${this.baseUrl}/api/responses/${params.responseId}`,
38
+ {
39
+ method: "PATCH",
40
+ headers: {
41
+ "Content-Type": "application/json",
42
+ "x-session-id": params.sessionId
43
+ },
44
+ body: JSON.stringify({
45
+ answers: params.answers,
46
+ lastFieldRef: params.lastFieldRef,
47
+ calculatedValues: params.calculatedValues
48
+ })
49
+ }
50
+ );
51
+ if (!response.ok) {
52
+ const errorText = await response.text();
53
+ throw new Error(
54
+ `Failed to update answers: ${response.status} ${errorText}`
55
+ );
56
+ }
57
+ } catch (error) {
58
+ this.onError?.(error);
59
+ throw error;
60
+ }
61
+ }
62
+ async completeResponse(params) {
63
+ try {
64
+ const response = await fetch(
65
+ `${this.baseUrl}/api/responses/${params.responseId}/complete`,
66
+ {
67
+ method: "POST",
68
+ headers: {
69
+ "Content-Type": "application/json",
70
+ "x-session-id": params.sessionId
71
+ },
72
+ body: JSON.stringify({
73
+ answers: params.answers,
74
+ outcome: params.outcome,
75
+ calculatedValues: params.calculatedValues,
76
+ captchaToken: params.captchaToken
77
+ })
78
+ }
79
+ );
80
+ if (!response.ok) {
81
+ const errorText = await response.text();
82
+ throw new Error(
83
+ `Failed to complete response: ${response.status} ${errorText}`
84
+ );
85
+ }
86
+ } catch (error) {
87
+ this.onError?.(error);
88
+ throw error;
89
+ }
90
+ }
91
+ async trackEvent(params) {
92
+ try {
93
+ const response = await fetch(`${this.baseUrl}/api/analytics/track`, {
94
+ method: "POST",
95
+ headers: { "Content-Type": "application/json" },
96
+ body: JSON.stringify({
97
+ projectId: this.projectId,
98
+ event: params.event,
99
+ sessionId: params.sessionId
100
+ })
101
+ });
102
+ if (!response.ok) {
103
+ console.warn(`Analytics tracking failed: ${response.status}`);
104
+ }
105
+ } catch (error) {
106
+ console.warn("Analytics tracking failed:", error);
107
+ }
108
+ }
109
+ };
110
+ function createClient(config) {
111
+ return new LandformClient(config);
112
+ }
113
+
114
+ exports.LandformClient = LandformClient;
115
+ exports.createClient = createClient;
116
+ //# sourceMappingURL=chunk-P2GUKJHH.cjs.map
117
+ //# sourceMappingURL=chunk-P2GUKJHH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/client.ts"],"names":[],"mappings":"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","file":"chunk-P2GUKJHH.cjs","sourcesContent":["import type {\n\tResponseAnswers,\n\tResponseMetadata,\n\tResponseOutcome,\n} from \"../types\";\n\nexport interface LandformClientConfig {\n\tbaseUrl?: string;\n\tprojectId: string;\n\tonError?: (error: Error) => void;\n}\n\nexport interface StartResponseParams {\n\tsessionId?: string;\n\tmetadata?: ResponseMetadata;\n\thiddenFields?: Record<string, string>;\n}\n\nexport interface StartResponseResult {\n\tid: string;\n\tsessionId: string;\n}\n\nexport interface UpdateAnswersParams {\n\tresponseId: string;\n\tsessionId: string;\n\tanswers: ResponseAnswers;\n\tlastFieldRef?: string;\n\tcalculatedValues?: Record<string, number>;\n}\n\nexport interface CompleteResponseParams {\n\tresponseId: string;\n\tsessionId: string;\n\tanswers?: ResponseAnswers;\n\toutcome?: ResponseOutcome;\n\tcalculatedValues?: Record<string, number>;\n\tcaptchaToken?: string;\n}\n\nexport interface TrackEventParams {\n\tevent: \"view\" | \"start\";\n\tsessionId?: string;\n}\n\nexport class LandformClient {\n\tprivate baseUrl: string;\n\tprivate projectId: string;\n\tprivate onError?: (error: Error) => void;\n\n\tconstructor(config: LandformClientConfig) {\n\t\tthis.baseUrl = config.baseUrl || \"\";\n\t\tthis.projectId = config.projectId;\n\t\tthis.onError = config.onError;\n\t}\n\n\tasync startResponse(\n\t\tparams: StartResponseParams = {},\n\t): Promise<StartResponseResult> {\n\t\ttry {\n\t\t\tconst response = await fetch(`${this.baseUrl}/api/responses`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tprojectId: this.projectId,\n\t\t\t\t\tsessionId: params.sessionId,\n\t\t\t\t\tmetadata: params.metadata,\n\t\t\t\t\thiddenFields: params.hiddenFields,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to start response: ${response.status} ${errorText}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn response.json();\n\t\t} catch (error) {\n\t\t\tthis.onError?.(error as Error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync updateAnswers(params: UpdateAnswersParams): Promise<void> {\n\t\ttry {\n\t\t\tconst response = await fetch(\n\t\t\t\t`${this.baseUrl}/api/responses/${params.responseId}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"PATCH\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t\"x-session-id\": params.sessionId,\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tanswers: params.answers,\n\t\t\t\t\t\tlastFieldRef: params.lastFieldRef,\n\t\t\t\t\t\tcalculatedValues: params.calculatedValues,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to update answers: ${response.status} ${errorText}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.onError?.(error as Error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync completeResponse(params: CompleteResponseParams): Promise<void> {\n\t\ttry {\n\t\t\tconst response = await fetch(\n\t\t\t\t`${this.baseUrl}/api/responses/${params.responseId}/complete`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t\"x-session-id\": params.sessionId,\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tanswers: params.answers,\n\t\t\t\t\t\toutcome: params.outcome,\n\t\t\t\t\t\tcalculatedValues: params.calculatedValues,\n\t\t\t\t\t\tcaptchaToken: params.captchaToken,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to complete response: ${response.status} ${errorText}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.onError?.(error as Error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync trackEvent(params: TrackEventParams): Promise<void> {\n\t\ttry {\n\t\t\tconst response = await fetch(`${this.baseUrl}/api/analytics/track`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tprojectId: this.projectId,\n\t\t\t\t\tevent: params.event,\n\t\t\t\t\tsessionId: params.sessionId,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\t// Silently fail for tracking - don't interrupt user experience\n\t\t\t\tconsole.warn(`Analytics tracking failed: ${response.status}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Silently fail for tracking - don't interrupt user experience\n\t\t\tconsole.warn(\"Analytics tracking failed:\", error);\n\t\t}\n\t}\n}\n\nexport function createClient(config: LandformClientConfig): LandformClient {\n\treturn new LandformClient(config);\n}\n"]}