onairos 3.1.21 → 3.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/241.js +1 -1
- package/dist/241.js.map +1 -1
- package/dist/991.js +1 -1
- package/dist/991.js.map +1 -1
- package/dist/onairos.bundle.js +1 -1
- package/dist/onairos.bundle.js.map +1 -1
- package/dist/onairos.esm.js +1 -1
- package/dist/onairos.esm.js.map +1 -1
- package/package.json +164 -154
package/dist/241.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"241.js","mappings":"6JAGe,SAASA,EAAaC,GAA0B,IAAzB,WAAEC,EAAU,QAAEC,GAASF,EAC3D,OACEG,EAAAA,cAAA,OAAKC,UAAU,uBAAuBC,MAAO,CAAEC,OAAQ,SAErDH,EAAAA,cAAA,OAAKC,UAAU,wDAEbD,EAAAA,cAAA,OAAKC,UAAU,4BACbD,EAAAA,cAAA,OAAKC,UAAU,sEACbD,EAAAA,cAAA,OAAKC,UAAU,oBAEbD,EAAAA,cAAA,OAAKI,QAAQ,YAAYH,UAAU,iBACjCD,EAAAA,cAAA,QACEK,EAAE,oGACFC,KAAK,OACLC,OAAO,eACPC,YAAY,MAEdR,EAAAA,cAAA,UAAQS,GAAG,KAAKC,GAAG,KAAKC,EAAE,IAAIL,KAAK,iBACnCN,EAAAA,cAAA,UAAQS,GAAG,KAAKC,GAAG,KAAKC,EAAE,IAAIL,KAAK,iBACnCN,EAAAA,cAAA,QAAMK,EAAE,wCAAwCE,OAAO,eAAeC,YAAY,IAAIF,KAAK,aAOnGN,EAAAA,cAAA,KAAGC,UAAU,8BAA6B,cAG1CD,EAAAA,cAAA,MAAIC,UAAU,sDAAqD,WAGnED,EAAAA,cAAA,KAAGC,UAAU,kEAAiE,+FAMhFD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,UACEC,UAAU,mJACVW,QAASd,GACV,cAECE,EAAAA,cAAA,OAAKC,UAAU,UAAUK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aACjEJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,oBAMjF,CC/CA,MAKMU,EAAgBC,IACpB,MAAMC,EALY,CAACD,GAAWA,EAAOE,QACrC,wBACA,CAACC,EAAOC,EAAIC,IAAOA,EAAKA,EAAGC,cAAgBF,EAAGG,eAG5BC,CAAYR,GAC9B,OAAOC,EAAUQ,OAAO,GAAGH,cAAgBL,EAAUS,MAAM,IAEvDC,EAAe,IAAIC,IAAYA,EAAQC,OAAO,CAAC5B,EAAW6B,EAAOC,IAC9DC,QAAQ/B,IAAmC,KAArBA,EAAUgC,QAAiBF,EAAMG,QAAQjC,KAAe6B,GACpFK,KAAK,KAAKF,OACPG,EAAeC,IACnB,IAAK,MAAMC,KAAQD,EACjB,GAAIC,EAAKC,WAAW,UAAqB,SAATD,GAA4B,UAATA,EACjD,OAAO,GCfb,IAAIE,EAAoB,CACtBC,MAAO,6BACPC,MAAO,GACPvC,OAAQ,GACRC,QAAS,YACTE,KAAM,OACNC,OAAQ,eACRC,YAAa,EACbK,cAAe,QACfC,eAAgB,SCLlB,MAAM6B,GAAO,IAAAC,YACX,EACEC,QAAQ,eACRC,OAAO,GACPtC,cAAc,EACduC,sBACA9C,YAAY,GACZ+C,WACAC,cACGC,GACFC,KACM,IAAAC,eACL,MACA,CACED,SACGX,EACHE,MAAOI,EACP3C,OAAQ2C,EACRvC,OAAQsC,EACRrC,YAAauC,EAA4C,GAAtBM,OAAO7C,GAAoB6C,OAAOP,GAAQtC,EAC7EP,UAAW0B,EAAa,SAAU1B,OAC9B+C,IAAaZ,EAAYc,IAAS,CAAE,cAAe,WACpDA,GAEL,IACKD,EAASK,IAAI,EAAEC,EAAKC,MAAW,IAAAJ,eAAcG,EAAKC,OAClDC,MAAMC,QAAQV,GAAYA,EAAW,CAACA,MC3B3CW,ECCmB,EAACC,EAAUX,KAClC,MAAMY,GAAY,IAAAjB,YAChB,EAAG3C,eAAcoC,GAASc,KAAQ,WAAAC,eAAcT,EAAM,CACpDQ,MACAF,WACAhD,UAAW0B,EACT,UJVaX,EIUSD,EAAa6C,GJVX5C,EAAOE,QAAQ,qBAAsB,SAASK,gBIWtE,UAAUqC,IACV3D,MAECoC,IJdW,IAACrB,IIkBnB,OADA6C,EAAUC,YAAc/C,EAAa6C,GAC9BC,GDfKE,CAAiB,QADZ,CAAC,CAAC,OAAQ,CAAE1D,EAAG,kBAAmB2D,IAAK,aER7CC,EAAS,CAEpBC,aAAc,UACdC,WAAY,UAGZC,SAAU,UACVC,UAAW,qBAGXC,wBAAyB,UACzBC,sBAAuB,UAGvBC,WAAY,UACZC,oBAAqB,UAGrBC,YAAa,UACbC,cAAe,UACfC,UAAW,UAGXC,OAAQ,UACRC,YAAa,UAGbC,QAAS,UACTC,MAAO,UACPC,QAAS,UACTC,KAAM,UAGNC,MAAO,sBACPC,QAAS,qBACTC,MAAO,2B,yzCChCT,MAAMC,EAAazF,IAIb,IAJc,KAClBiD,EAAO,GAAE,SACTE,EAAQ,UACR/C,EAAY,IACbJ,EACC,OACEG,EAAAA,cAAA,OACEC,UAAS,mFAAAsF,OAAqFtF,GAC9FC,MAAO,CACLwC,MAAOI,EACP3C,OAAQ2C,EACR0C,aAAc1C,EAAO,EACrB0B,WAAY,8BAAFe,OAAgCtB,EAAOK,wBAAuB,MAAAiB,OAAKtB,EAAOM,sBAAqB,OAG1GvB,GACChD,EAAAA,cAAA,QACEC,UAAU,2BACVC,MAAO,CACLuF,SAAU,OACV5C,MAAOoB,EAAOG,SACdsB,gBAAiB,gBAEpB,OAiIT,EAxHsBC,IAYhB,IAZiB,MACrBC,EAAQ,cAAa,QACrBhF,EAAO,UACPiF,EAAS,QACTC,GAAU,EAAK,SACfC,GAAW,EAAK,OAChBC,EAAM,UACN/F,EAAY,GAAE,MACdC,EAAQ,CAAC,EAAC,UACV+F,EAAY,CAAC,EAAC,SACdC,GAAW,GAEZP,EADItD,E,6WAAK8D,CAAAR,EAAAS,GAER,MAAOhB,EAASiB,IAAcC,EAAAA,EAAAA,WAAS,GAMjCC,EAAWC,EAAA,CACfrG,OAAQ,OACRqF,aAAc,QACdX,OAAQ,aAAFU,OAAetB,EAAOI,WAC5BG,WAAY,8BAAFe,OAAgCtB,EAAOC,aAAY,MAAAqB,OAAKtB,EAAOE,WAAU,KACnFsC,SAAU,WACVC,SAAU,SACVhE,MAAOwD,EAAW,OAAS,OAC3BS,SAAUT,EAAW,QAAU,OAC/BU,SAAUV,EAAW,QAAU,OAC/BW,OAAQX,EAAW,SAAW,IAC9BY,OAAQf,EAAW,cAAgB,UACnCgB,QAAShB,EAAW,IAAO,EAC3BiB,UAAWjB,EAAW,OAAS,kCAC/BkB,WAAY,iBACT/G,GAGCgH,EAAsB,CAC1BT,SAAU,WACVU,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACR5B,gBAAiB,kBACjBF,aAAc,QACduB,QAAS3B,EAAU,EAAI,EACvB6B,WAAY,qBA2BRM,EAAUf,EAAA,CACdgB,WAAY,+BACZC,WAAY,MACZhC,SAAU,OACV5C,MAAOoB,EAAOG,SACdsD,UAAW,SACXhC,gBAAiB,eACdO,GAGL,OACEjG,EAAAA,cAAA,SAAA2H,EAAA,CACE1H,UAAS,YAAAsF,OAActF,GACvBC,MAAOqG,EACP3F,QAASA,EACTgH,YAzEoBC,IAAMxB,GAAW,GA0ErCyB,UAzEkBC,IAAM1B,GAAW,GA0EnC2B,aAzEqBC,IAAM5B,GAAW,GA0EtCN,SAAUA,GAAYD,EACtB,cAAaE,EACb,aAAYJ,GACRvD,GAGJrC,EAAAA,cAAA,OAAKE,MAAOgH,IAGZlH,EAAAA,cAAA,OAAKE,MAnDkB,CACzBuG,SAAU,WACVW,KAAM,EACNC,MAAO,EACPF,IAAK,EACLG,OAAQ,EACRY,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZ1C,gBAAiB,gBA2CZI,EACC9F,EAAAA,cAAA,OACEC,UAAU,uEACVC,MAAO,CAAEwC,MAAO,OAAQvC,OAAQ,UAGlCH,EAAAA,cAAA,QAAME,MAAOqH,GAAa3B,IAK9B5F,EAAAA,cAAA,OAAKE,MAnDiB,CACxBuG,SAAU,WACVY,MAAO,MACPF,IAAK,MACLG,OAAQ,MACR5E,MAAO,OACPwF,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZ1C,gBAAiB,iBA2CXI,IAAYD,GAAa7F,EAAAA,cAACsF,EAAU,UChJ/B,SAAS+C,EAASxI,GAAiC,IAAhC,UAAEyI,EAAS,SAAEC,GAAW,GAAM1I,EAC9D,MAAO2I,EAAOC,IAAYnC,EAAAA,EAAAA,UAAS,KAC5BoC,EAAMC,IAAWrC,EAAAA,EAAAA,UAAS,KAC1BsC,EAAMC,IAAWvC,EAAAA,EAAAA,UAAS,UAC1BwC,EAAWC,IAAgBzC,EAAAA,EAAAA,WAAS,IACpCtB,EAAOgE,IAAY1C,EAAAA,EAAAA,UAAS,KAGnC2C,EAAAA,EAAAA,WAAU,KACK,SAATL,GAEFM,WAAW,KACT,MAAMC,EAAaC,SAASC,cAAc,wBACtCF,GACFA,EAAW9D,SAEZ,MAEJ,CAACuD,IAEJ,MAKMU,EAAoBC,UAIxB,GAHAC,EAAEC,iBACFT,EAAS,IAPYR,IACF,6BACDkB,KAAKlB,GAOlBmB,CAAcnB,GAAnB,CAKAO,GAAa,GAEb,IACE,GAAIR,EAEFqB,QAAQC,IAAI,2DAA4DrB,GACxEU,WAAW,KACTL,EAAQ,QACRE,GAAa,GACba,QAAQC,IAAI,4DACX,SACE,CAEL,MAAMC,EAASC,OAAOC,eAAiB,WAEjCC,QAAiBC,MAAM,6CAA8C,CACzEC,OAAQ,OACRC,QAAS,CACP,eAAgB,mBAChB,cAAiB,UAAF7E,OAAYuE,IAE7BO,KAAMC,KAAKC,UAAU,CACnB/B,QACAgC,OAAQ,cAIZ,IAAKP,EAASQ,GACZ,MAAM,IAAIC,MAAM,oCAGlB,MAAMC,QAAaV,EAASW,OAC5B,IAAKD,EAAK5F,QACR,MAAM,IAAI2F,MAAMC,EAAK3F,OAAS,oCAGhC4E,QAAQC,IAAI,6BAA8Bc,GAE1C9B,EAAQ,QACRE,GAAa,EACf,CACF,CAAE,MAAO/D,GACP4E,QAAQ5E,MAAM,uBAAwBA,GACtCgE,EAAShE,EAAM6F,SACf9B,GAAa,EACf,CA/CA,MAFEC,EAAS,uCAoDP8B,EAAmBvB,UACvB,IAAI,IAAAwB,EAEF,MAAMC,EAAY,CAChBC,QAAS,0BACTnB,OAAQC,OAAOC,eAAiB,WAChCkB,wBAAwB,EACxBC,mBAAmB,EACnBC,4BAA4B,GAGxBC,EAAWC,aAAaC,QAAQ,cAAkD,QAAvCR,EAAIO,aAAaC,QAAQ,sBAAc,IAAAR,OAAA,EAAnCA,EAAqCvC,QAAS,mBAE7FgD,EAAe,GAAHjG,OAAMyF,EAAUC,QAAO,oBACnCQ,EAAS,IAAIC,gBAAgB,CACjCL,SAAUA,EACVM,SAAU,MACVC,WAAY7B,OAAO8B,SAASC,OAAS,yBAGjCC,EAAU,GAAHxG,OAAMiG,EAAY,KAAAjG,OAAIkG,EAAOO,YAC1CpC,QAAQC,IAAI,+CACZD,QAAQC,IAAI,uBAAwBkC,GAGpC,MAAME,EAAQlC,OAAOmC,KACnBH,EACA,eACA,qDAGF,IAAKE,EACH,MAAM,IAAIvB,MAAM,qDAIlB,MAAMyB,EAAgBC,YAAY,KAC5BH,EAAMI,SACRC,cAAcH,GACdvC,QAAQC,IAAI,+BAEZvB,EAAU,CACRE,MAAO,iBACP2B,OAAQ,SACRoC,kBAAmB,CAAEC,QAAQ,OAGhC,IAEL,CAAE,MAAOxH,GACP4E,QAAQ5E,MAAM,yBAA0BA,GACxCgE,EAAS,kDACX,GAGIyD,EAAmBlD,UACvBC,EAAEC,iBACFT,EAAS,IACTD,GAAa,GAEb,IACE,GAAIR,EAEFqB,QAAQC,IAAI,kDAAmDrB,EAAO,aAAcE,GAEvE,WAATA,GAAqC,IAAhBA,EAAKgE,QAC5B7D,EAAQ,WACRK,WAAW,KAET,MAAMyD,EAAoB,CACxBnE,QACAoE,UAAU,EACVC,MAAO,cAAgBC,KAAKC,MAC5BC,SAAUxE,EAAMyE,MAAM,KAAK,GAC3BC,cAAc,EACdC,YAAa,KACbC,WAAW,EACXC,SAAU,aACVC,WAAW,EACXC,aAAa,EACbC,eAAgB,CACdhF,MAAOA,EACPiF,WAAW,IAAIX,MAAOY,cACtBC,aAAa,IAGjB/D,QAAQC,IAAI,8DAA+D8C,GAC3ErE,EAAUqE,IACT,OAEH3D,EAAS,kEACTD,GAAa,QAEV,CAEL,MAAMe,EAASC,OAAOC,eAAiB,WAEjCC,QAAiBC,MAAM,6CAA8C,CACzEC,OAAQ,OACRC,QAAS,CACP,eAAgB,mBAChB,cAAiB,UAAF7E,OAAYuE,IAE7BO,KAAMC,KAAKC,UAAU,CACnB/B,QACAgC,OAAQ,SACR9B,WAIJ,IAAKuB,EAASQ,GACZ,MAAM,IAAIC,MAAM,6BAGlB,MAAMC,QAAaV,EAASW,OAE5B,IAAKD,EAAK5F,QACR,MAAM,IAAI2F,MAAMC,EAAK3F,OAAS,uBAGhC4E,QAAQC,IAAI,kCAAmCc,GAE/C9B,EAAQ,WACRK,WAAW,KAETZ,EAAU,CACRE,QACAoE,UAAU,EACVC,MAAOlC,EAAKkC,OAASlC,EAAKiD,SAC1BZ,SAAUrC,EAAKqC,SACfE,aAAcvC,EAAKuC,aACnBC,YAAaxC,EAAKwC,YAClBC,WAAYzC,EAAKuC,aACjBG,SAAU1C,EAAKuC,aAAe,cAAgB,aAC9CI,UAAW3C,EAAK2C,UAChBC,YAAa5C,EAAK4C,YAClBC,eAAgB7C,EAAK6C,kBAEtB,IACL,CACF,CAAE,MAAOxI,GACP4E,QAAQ5E,MAAM,4BAA6BA,GAC3CgE,EAAShE,EAAM6F,SAAW,mCAC1B9B,GAAa,EACf,GA+NF,OACE/I,EAAAA,cAAA,OAAKC,UAAU,UACH,UAAT2I,GA7NH5I,EAAAA,cAAA,OAAKC,UAAU,uBAAuBC,MAAO,CAAEC,OAAQ,SAErDH,EAAAA,cAAA,OAAKC,UAAU,qDACbD,EAAAA,cAAA,OAAKC,UAAU,QACbD,EAAAA,cAAA,MAAIC,UAAU,oEAAmE,2DAGjFD,EAAAA,cAAA,KAAGC,UAAU,2BAA0B,iCAGzCD,EAAAA,cAAA,OAAKC,UAAU,QACbD,EAAAA,cAAA,SACE6N,KAAK,QACLC,MAAOtF,EACPuF,SAAWvE,GAAMf,EAASe,EAAEwE,OAAOF,OACnCG,YAAY,mBACZhO,UAAU,gMACVC,MAAO,CACLsH,WAAY,gCAEd0G,UAAQ,KAIZlO,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,QAAMC,UAAU,yBAAwB,OAG1CD,EAAAA,cAAA,OAAKC,UAAU,QACbD,EAAAA,cAAA,UACE6N,KAAK,SACL5N,UAAU,gLACVC,MAAO,CACLsH,WAAY,gCAEd5G,QAASkK,GAET9K,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,aAC/BJ,EAAAA,cAAA,QACEM,KAAK,UACLD,EAAE,4HAEJL,EAAAA,cAAA,QACEM,KAAK,UACLD,EAAE,0IAEJL,EAAAA,cAAA,QACEM,KAAK,UACLD,EAAE,kIAEJL,EAAAA,cAAA,QACEM,KAAK,UACLD,EAAE,yIAEA,yBAMT2E,GACChF,EAAAA,cAAA,OAAKC,UAAU,QACbD,EAAAA,cAAA,KAAGC,UAAU,sBAAsBC,MAAO,CAAE2C,MAAOoB,EAAOe,QAAUA,KAM1EhF,EAAAA,cAAA,OAAKC,UAAU,4BACbD,EAAAA,cAAA,UACEC,UAAU,wLACVW,QAAS0I,EACTvD,SAAU+C,IAAcN,EAAMvG,OAC9B/B,MAAO,CACLsH,WAAY,iCAGbsB,EAAY,aAAe,WAC5B9I,EAAAA,cAAA,OAAKC,UAAU,UAAUK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aACjEJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,qBA+IjE,SAATuI,GAvIH5I,EAAAA,cAAA,OAAKC,UAAU,uBAAuBC,MAAO,CAAEC,OAAQ,SAErDH,EAAAA,cAAA,OAAKC,UAAU,wCACbD,EAAAA,cAAA,MACEC,UAAU,iBACVC,MAAO,CACLsH,WAAY,uCACZC,WAAY,MACZhC,SAAU,OACV0I,WAAY,OACZtL,MAAOoB,EAAOS,cAEjB,2BAGD1E,EAAAA,cAAA,KACEC,UAAU,OACVC,MAAO,CACLsH,WAAY,+BACZC,WAAY,MACZhC,SAAU,OACV0I,WAAY,OACZtL,MAAOoB,EAAOU,gBAEjB,gCAC+B6D,IAMlCxI,EAAAA,cAAA,OAAKC,UAAU,cACbD,EAAAA,cAAA,OAAKC,UAAU,iCACZwD,MAAM2K,KAAK,CAAE1B,OAAQ,GAAK,CAAC2B,EAAGvM,IAC7B9B,EAAAA,cAAA,SACEgE,IAAKlC,EACL+L,KAAK,OACLS,UAAU,IACVR,MAAOpF,EAAK5G,IAAU,GACtBiM,SAAWvE,IACT,MAAM+E,EAAU7F,EAAKuE,MAAM,IAK3B,GAJAsB,EAAQzM,GAAS0H,EAAEwE,OAAOF,MAC1BnF,EAAQ4F,EAAQpM,KAAK,KAGjBqH,EAAEwE,OAAOF,OAAShM,EAAQ,EAAG,KAAA0M,EAC/B,MAAMC,EAAkC,QAAzBD,EAAGhF,EAAEwE,OAAOU,qBAAa,IAAAF,OAAA,EAAtBA,EAAwBxL,SAASlB,EAAQ,GACvD2M,GAAWA,EAAUpJ,OAC3B,GAEFsJ,UAAYnF,IAEV,GAAc,cAAVA,EAAExF,MAAwB0E,EAAK5G,IAAUA,EAAQ,EAAG,KAAA8M,EACtD,MAAMC,EAAkC,QAAzBD,EAAGpF,EAAEwE,OAAOU,qBAAa,IAAAE,OAAA,EAAtBA,EAAwB5L,SAASlB,EAAQ,GACvD+M,GAAWA,EAAUxJ,OAC3B,GAEFpF,UAAU,kIACVC,MAAO,CACL4O,YAAa7K,EAAOY,OACpBa,gBAAiBzB,EAAOO,WACxBgD,WAAY,qCAQrBxC,GACChF,EAAAA,cAAA,OAAKC,UAAU,cACbD,EAAAA,cAAA,KAAGC,UAAU,sBAAsBC,MAAO,CAAE2C,MAAOoB,EAAOe,QAAUA,IAKxEhF,EAAAA,cAAA,OAAKC,UAAU,cACbD,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAC+O,EAAa,CACZnJ,MAAM,WACNhF,QAAS6L,EACT3G,QAASgD,EACT/C,SAAU+C,GAA6B,IAAhBJ,EAAKgE,OAC5B1G,OAAO,yBAMbhG,EAAAA,cAAA,OAAKE,MAAO,CAAE8O,KAAM,EAAGC,UAAW,UAGlCjP,EAAAA,cAAA,OAAKC,UAAU,gBACbD,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,UACE6N,KAAK,SACLjN,QAASA,IAAMiI,EAAQ,SACvB5I,UAAU,yDACVC,MAAO,CAAE2C,MAAOoB,EAAOU,gBACxB,4BAqCK,YAATiE,GA5BH5I,EAAAA,cAAA,OAAKC,UAAU,2DACbD,EAAAA,cAAA,OACEC,UAAU,0DACVC,MAAO,CAAEwF,gBAAiB,YAE1B1F,EAAAA,cAAC2D,EAAK,CAAC1D,UAAU,UAAUC,MAAO,CAAE2C,MAAOoB,EAAOc,YAGpD/E,EAAAA,cAAA,OAAKC,UAAU,yBACbD,EAAAA,cAAA,MACEC,UAAU,wBACVC,MAAO,CAAE2C,MAAOoB,EAAOS,cACxB,mBAGD1E,EAAAA,cAAA,KAAGE,MAAO,CAAE2C,MAAOoB,EAAOU,gBAAiB,+BAG7C3E,EAAAA,cAAA,OAAKC,UAAU,WACbD,EAAAA,cAAA,OAAKC,UAAU,sFAYvB,C,s/BC1cA,MAAMiP,EAAuB,CAC3B,EAAG,4CACH,EAAG,4CACH,EAAG,4CACH,EAAG,4CACH,EAAG,6CAGCC,EAAY,CAChB,CACEC,KAAM,QACNC,KACErP,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,aAC/BJ,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,4HACvBL,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,0IACvBL,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,kIACvBL,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,yIAG3BwC,MAAO,WACPyM,UAAW,QACXC,YAAa,uGAEf,CACEH,KAAM,SACNC,KACErP,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,aAC/BJ,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,4HACvBL,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,0IACvBL,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,kIACvBL,EAAAA,cAAA,QAAMM,KAAK,UAAUD,EAAE,yIAG3BwC,MAAO,WACPyM,UAAW,SACXC,YAAa,uGAEf,CACEH,KAAM,SACNC,KACErP,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,YAAYE,KAAK,WAChDN,EAAAA,cAAA,QAAMK,EAAE,+jCAGZwC,MAAO,WACPyM,UAAW,SACXC,YAAa,2FAEf,CACEH,KAAM,YACNC,KACErP,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,aAC/BJ,EAAAA,cAAA,YACEA,EAAAA,cAAA,kBAAgBwP,GAAG,qBAAqB/O,GAAG,MAAMC,GAAG,IAAIC,EAAE,KACxDX,EAAAA,cAAA,QAAMyP,OAAO,KAAKC,UAAU,YAC5B1P,EAAAA,cAAA,QAAMyP,OAAO,MAAMC,UAAU,YAC7B1P,EAAAA,cAAA,QAAMyP,OAAO,OAAOC,UAAU,cAGlC1P,EAAAA,cAAA,QAAMM,KAAK,2BAA2BD,EAAE,ujCAG5CwC,MAAO,WACPyM,UAAW,YACXC,YAAa,mGAEf,CACEH,KAAM,WACNC,KACErP,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,YAAYE,KAAK,WAChDN,EAAAA,cAAA,QAAMK,EAAE,wfAGZwC,MAAO,WACPyM,UAAW,WACXC,YAAa,4FAEf,CACEH,KAAM,YACNC,KACErP,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,YAAYE,KAAK,WAChDN,EAAAA,cAAA,QAAMK,EAAE,6tBAGZwC,MAAO,WACPyM,UAAW,YACXC,YAAa,oGAKXvE,EAAY,CAChBlB,OAAQ6F,QAAQC,IAAIC,2BAA6B,gCACjD5E,QAAS0E,QAAQC,IAAIE,4BAA8B,0BACnDC,QAAS,MACT7E,wBAAwB,EACxBC,mBAAmB,EACnBC,4BAA4B,GAOf,SAAS4E,EAAmBnQ,GAAgI,IAA/H,WAAEoQ,EAAU,OAAEC,EAAM,QAAEC,EAAO,QAAEC,EAAU,MAAOC,cAAeC,EAAiB,iBAAEC,EAAmB,KAAI,SAAEhI,GAAW,GAAO1I,EAEvK,MAAMwQ,EAAgBC,QAAAA,EAAqBpB,GAEpC3C,EAAmBiE,IAAwBlK,EAAAA,EAAAA,UAAS,CAAC,IACrDmK,EAAcC,IAAmBpK,EAAAA,EAAAA,WAAS,IAC1CqK,EAAoBC,IAAyBtK,EAAAA,EAAAA,UAAS,OACtDuK,EAAkBC,IAAuBxK,EAAAA,EAAAA,UAAS,CAAC,IACnDyK,EAAkBC,IAAuB1K,EAAAA,EAAAA,UAAS,CAAC,IACnD2K,EAAaC,IAAkB5K,EAAAA,EAAAA,UAAS,IAS/C2C,EAAAA,EAAAA,WAAU,KACkBkI,MACxB,MAAMC,EAAW9F,aAAaC,QAAQ,0BAClC6F,IACFxH,QAAQC,IAAI,iCAADtE,OAAkC6L,IAG7C9F,aAAa+F,WAAW,0BACxB/F,aAAa+F,WAAW,wBAGxBb,EAAqBc,GAAI9K,EAAAA,EAAA,GACpB8K,GAAI,IACP,CAACF,IAAW,KAIdN,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACF,GAAW,QAGdxH,QAAQC,IAAI,KAADtE,OAAM6L,EAAQ,6CAI7BD,IACC,IAEH,MAAMI,EAAoBhI,UACxBK,QAAQC,IAAI,oCAADtE,OAAqCiM,IAEhD,MAAMJ,EAAWjC,EAAUsC,KAAKC,GAAKA,EAAEtC,OAASoC,GAChD,GAAKJ,UAAAA,EAAU9B,UAEb,OADA1F,QAAQ5E,MAAM,sCAADO,OAAuCiM,KAC7C,EAGT,IAAI,IAAAzG,EACF2F,GAAgB,GAChBE,EAAsBY,GAGtBV,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAe,QAGlB5H,QAAQC,IAAI,oCAADtE,OAAqCiM,EAAY,QAE5D,MAAMnG,EAAWC,aAAaC,QAAQ,cAAkD,QAAvCR,EAAIO,aAAaC,QAAQ,sBAAc,IAAAR,OAAA,EAAnCA,EAAqCvC,QAAS,mBAG7FgD,EAAe,GAAHjG,OAAMyF,EAAUC,QAAO,KAAA1F,OAAI6L,EAAS9B,UAAS,cAEzDrF,QAAiBC,MAAMsB,EAAc,CACzCrB,OAAQ,OACRC,QAAS,CACP,YAAaY,EAAUlB,OACvB,eAAgB,oBAElBO,KAAMC,KAAKC,UAAU,CACnBoH,QAAS,CACPtG,SAAUA,OAKhB,IAAKpB,EAASQ,GACZ,MAAM,IAAIC,MAAM,QAADnF,OAAS0E,EAAS2H,OAAM,MAAArM,OAAK0E,EAAS4H,aAGhD,MAAMC,QAAqB7H,EAASW,OAC1ChB,QAAQC,IAAI,MAADtE,OAAOiM,EAAY,oBAAoBM,GAGlD,MAWMC,EAXkB,CACtB,QAAW,CAAC,aAAc,aAAc,eACxC,SAAY,CAAC,cAAe,cAAe,gBAC3C,OAAU,CAAC,YAAa,YAAa,cACrC,UAAa,CAAC,eAAgB,eAAgB,iBAC9C,UAAa,CAAC,eAAgB,eAAgB,iBAC9C,OAAU,CAAC,YAAa,YAAa,cACrC,SAAY,CAAC,cAAe,cAAe,gBAC3C,MAAS,CAAC,WAAY,WAAY,cAGCX,EAAS9B,YAAc,CAAC,GAAD/J,OACvD6L,EAAS9B,UAAS,UAAA/J,OAClB6L,EAAS9B,UAAS,UAAA/J,OAClB6L,EAAS9B,UAAS,QACrB,cACA,UACA,OAGF,IAAI0C,EAAW,KACXC,EAAU,KAGd,IAAK,MAAMjO,KAAO+N,EAChB,GAAID,EAAa9N,GAAM,CACrBgO,EAAWF,EAAa9N,GACxBiO,EAAUjO,EACV,KACF,CAGF,IAAKgO,EAKH,MAJApI,QAAQ5E,MAAM,4BAADO,OAA6BiM,EAAY,MACtD5H,QAAQ5E,MAAM,mBAAoB+M,GAClCnI,QAAQ5E,MAAM,iBAAkBkN,OAAOC,KAAKL,IAC5ClI,QAAQ5E,MAAM,iBAAkB8M,GAC1B,IAAIpH,MAAM,qDAADnF,OAAsDwM,EAAa5P,KAAK,QAK1F,GAFCyH,QAAQC,IAAI,yBAADtE,OAA0BiM,EAAY,gBAAAjM,OAAe0M,IAzH5D,iEAAiEvI,KAAK0I,UAAUC,YAC/EtI,OAAOuI,YAAc,IA+HzB,OAHAhH,aAAaiH,QAAQ,yBAA0Bf,GAC/ClG,aAAaiH,QAAQ,uBAAwBxI,OAAO8B,SAAS2G,MAC7DzI,OAAO8B,SAAS2G,KAAOR,GAChB,EACF,CAEL,MAAM/F,EAAQlC,OAAOmC,KACnB8F,EAAQ,GAAAzM,OACL6L,EAAS9B,UAAS,UACrB,iGAGF,IAAKrD,EACH,MAAM,IAAIvB,MAAM,qDAIjB,IAAI+H,GAAwB,EAC5B,MAAMtG,EAAgBC,YAAY,KAChC,IAEE,GAAIH,EAAMJ,UAAwC,eAA5BI,EAAMJ,SAAS6G,SAMnC,OALAD,GAAwB,EACxB7I,QAAQC,IAAI,MAADtE,OAAOiM,EAAY,8DAG9BvF,EAAM0G,OAGV,CAAE,MAAOnJ,GAGFiJ,IACHA,GAAwB,EACxB7I,QAAQC,IAAI,MAADtE,OAAOiM,EAAY,2DAElC,CAEA,IAEE,GAAIvF,EAAMI,OAAQ,CAChBC,cAAcH,GAGd,MAAMyG,EAActH,aAAaC,QAAQ,WAADhG,OAAYiM,EAAY,aAC1DqB,EAAYvH,aAAaC,QAAQ,WAADhG,OAAYiM,EAAY,WACxDsB,EAAYxH,aAAaC,QAAQ,WAADhG,OAAYiM,EAAY,eAGxDuB,EAAiBD,GAAchG,KAAKC,MAAQiG,SAASF,GAAa,IAEpEF,GAAeG,GAEjBnJ,QAAQC,IAAI,KAADtE,OAAMiM,EAAY,kDAC7BlG,aAAa+F,WAAW,WAAD9L,OAAYiM,EAAY,aAC/ClG,aAAa+F,WAAW,WAAD9L,OAAYiM,EAAY,eAE/ChB,EAAqBc,GAAI9K,EAAAA,EAAA,GACpB8K,GAAI,IACP,CAACE,IAAe,KAElBV,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAe,SAGTqB,GAAaE,GAEtBnJ,QAAQC,IAAI,KAADtE,OAAMiM,EAAY,kBAAkBqB,GAC/CvH,aAAa+F,WAAW,WAAD9L,OAAYiM,EAAY,WAC/ClG,aAAa+F,WAAW,WAAD9L,OAAYiM,EAAY,eAE/CV,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAeqB,MAGTJ,GAET7I,QAAQC,IAAI,KAADtE,OAAMiM,EAAY,uDAC7BhB,EAAqBc,GAAI9K,EAAAA,EAAA,GACpB8K,GAAI,IACP,CAACE,IAAe,KAElBV,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAe,UAKlB5H,QAAQC,IAAI,MAADtE,OAAOiM,EAAY,oCAC9BV,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAe,+BAIpBd,GAAgB,GAChBE,EAAsB,KACxB,CACF,CAAE,MAAO5L,GAEP,GAED,KAgCJ,OA7BCkE,WAAW,KACT,KACO+C,EAAMI,QAAUJ,EAAMJ,UAAwC,eAA5BI,EAAMJ,SAAS6G,WACpD9I,QAAQC,IAAI,mBAADtE,OAAoBiM,EAAY,0CAC3CvF,EAAM0G,QAEV,CAAE,MAAOnJ,IAEFyC,EAAMI,QAAUoG,IACnB7I,QAAQC,IAAI,mBAADtE,OAAoBiM,EAAY,6CAC3CvF,EAAM0G,QAEV,GACC,KAGHzJ,WAAW,KACJ+C,EAAMI,SACTJ,EAAM0G,QACNrG,cAAcH,GACd2E,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAe,wBAElBd,GAAgB,GAChBE,EAAsB,QAEvB,MAEG,CACT,CACF,CAAE,MAAO5L,GAQP,OAPA4E,QAAQ5E,MAAM,yBAADO,OAA0BiM,EAAY,KAAKxM,GACxD8L,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAexM,EAAM6F,WAExB6F,GAAgB,GAChBE,EAAsB,OACf,CACT,GAGIqC,EAAe1J,UAGnB,GAFAK,QAAQC,IAAI,sBAADtE,OAAuBiM,IAE9Bf,GAAgBE,IAAuBa,EAEzC,YADA5H,QAAQC,IAAI,4BAADtE,OAA6BoL,EAAkB,wBAAApL,OAAuBiM,IAI/DjF,EAAkBiF,IAIpC5H,QAAQC,IAAI,yBAADtE,OAA0BiM,EAAY,QACjDhB,EAAqBc,GAAI9K,EAAAA,EAAA,GACpB8K,GAAI,IACP,CAACE,IAAe,KAElBV,EAAoBQ,GAAI9K,EAAAA,EAAA,GACnB8K,GAAI,IACP,CAACE,GAAe,eAIZD,EAAkBC,IAuBtB0B,EAAiBhB,OAAOiB,OAAO5G,GAAmB1K,OAAOG,SAAS0K,OAClE0G,EAAgBC,KAAKC,IAAIJ,EAAiB,EAAG,GAGxBK,MACzB,IAAKhD,EAAkB,OAAOpB,EAE9B,MAAMqE,EAAerE,EAAUsC,KAAKC,GAClCA,EAAEtC,KAAK7N,gBAAkBgP,EAAiBhP,eAC1CmQ,EAAEpC,UAAU/N,gBAAkBgP,EAAiBhP,eAGjD,IAAKiS,EAAc,OAAOrE,EAE1B,MAAMsE,EAAiBtE,EAAUtN,OAAO6P,GAAKA,IAAM8B,IAI7BD,GAOxB,OACEvT,EAAAA,cAAA,OAAKC,UAAU,8BAA8BC,MAAO,CAAEC,OAAQ,OAAQ8O,UAAW,IAE/EjP,EAAAA,cAAA,OAAKC,UAAU,kCAAkCC,MAAO,CAAE+O,UAAW,EAAGvI,SAAU,WAChF1G,EAAAA,cAAA,OAAKC,UAAU,sBACbD,EAAAA,cAAA,MAAIC,UAAU,oEAAmE,oBACjFD,EAAAA,cAAA,KAAGC,UAAU,2BAA0B,8CAGzCD,EAAAA,cAAA,OAAKC,UAAU,0CACbD,EAAAA,cAAA,OAAKC,UAAU,6BACbD,EAAAA,cAAA,OACE0T,IAAKrD,EAAc+C,GACnBO,IAAG,WAAApO,OAAa6N,GAChB1Q,MAAM,MACNvC,OAAO,MACPF,UAAU,6BACV2T,OAAQA,IAAMhK,QAAQC,IAAI,wCAC1BgK,QAAUrK,IACRI,QAAQC,IAAI,kCAAmCwG,EAAc+C,IAC7DxJ,QAAQC,IAAI,mBAAoBqJ,GAChCtJ,QAAQC,IAAI,kBAAmBuJ,GAC/BxJ,QAAQC,IAAI,oBAAqBwG,GACjCzG,QAAQC,IAAI,oBAAqBE,OAAO8B,SAAS2G,MACjD5I,QAAQC,IAAI,uBAAwBwG,EAAc+C,IAGlD5J,EAAEwE,OAAO9N,MAAMgI,QAAU,OACzBsB,EAAEwE,OAAOU,cAAcxO,MAAMsE,WAAa,sEAOlDxE,EAAAA,cAAA,OAAKC,UAAU,8BAA8BC,MAAO,CAAE+O,UAAW,IAC/DjP,EAAAA,cAAA,OAAKC,UAAU,kBACZkP,EAAU7L,IAAK8N,IAClB,MAAM0C,EAAcvH,EAAkB6E,EAAShC,QAAS,EAClD2E,EAAwBpD,IAAuBS,EAAShC,KACxD4E,EAAWnD,EAAiBO,EAAShC,MACrC6E,EAAaxD,IAAiBsD,EA/ChB3C,OACrBb,IACEa,EAAShC,KAAK7N,gBAAkBgP,EAAiBhP,gBACjD6P,EAAS9B,UAAU/N,cAAkBgP,EAAiBhP,iBA6CpC2S,CAAmB9C,GAEtC,OACEpR,EAAAA,cAAA,OACEgE,IAAKoN,EAAShC,KACVnP,UAAU,2EACVC,MAAO,CACLwF,gBAAiB,UACjBb,OAAQ,OACRsP,QAAS,OACTC,IAAK,0BACLC,QAAS,0BACTrN,UAAW,+BACXsN,aAAc,0BAEpB1T,QAASA,KAAOqT,GAAchB,EAAa7B,EAAShC,OAEhDpP,EAAAA,cAAA,OAAKC,UAAU,kGAAkGC,MAAO,CAAEwC,MAAO,yBAA0BvC,OAAQ,2BAClK4T,EACG/T,EAAAA,cAAA,OAAKC,UAAU,oFAEjBmR,EAAS/B,MAGXrP,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,MACEC,UAAU,gBACVC,MAAO,CACL2C,MAAO,UACP4C,SAAU,2BACV6O,aAAc,yBACdnG,WAAY,QAGbiD,EAAShC,MAEZpP,EAAAA,cAAA,KACEC,UAAU,gBACVC,MAAO,CACL2C,MAAO,UACP4C,SAAU,2BACV0I,WAAY,QAGbiD,EAAS7B,aAIbyE,GACChU,EAAAA,cAAA,KAAGC,UAAU,6BACV+T,IAILhU,EAAAA,cAAA,OAAKC,UAAU,iBACbD,EAAAA,cAAA,OACFY,QAAU4I,IACRA,EAAE+K,kBACGN,GAAYhB,EAAa7B,EAAShC,OAErCnP,UAAS,yGAAAsF,OACPuO,EAAc,cAAgB,cAAa,KAAAvO,OACzC0O,EAAa,gCAAkC,kBACnD/T,MAAO,CACLC,OAAQ,yBACRuC,MAAO,yBACPsE,UAAW8M,EAAc,oCAAsC,iCAGrE9T,EAAAA,cAAA,QACMC,UAAS,wFAAAsF,OACPuO,EAAc,gBAAkB,mBAElC5T,MAAO,CACLC,OAAQ,2BACRuC,MAAO,sCAa3B1C,EAAAA,cAAA,OAAKC,UAAU,gBAAgBC,MAAO,CAAEmU,QAAS,+CAAgDpF,UAAW,OAAQ/G,QAAS,OAAQsM,cAAe,SAAUJ,IAAK,4BACjKpU,EAAAA,cAAA,OACEC,UAAU,uLACVC,MAAO,CACLmU,QAAS,2BACT5O,SAAU,2BACVwJ,UAAW,0BAEbrO,QAtLe6T,KACrB,MAAMC,EAAYxC,OAAOyC,QAAQpI,GAC9B1K,OAAO8D,IAAA,IAAEyL,EAAU0C,GAAYnO,EAAA,OAAKmO,IACpCxQ,IAAIsR,IAAA,IAAExD,GAASwD,EAAA,OAAKxD,IAEvBnB,EAAW,CACT1D,kBAAmBmI,EACnBG,iBAAkBH,EAAUhI,OAC5BuE,YAAaA,EACbF,iBAAkBA,EAClB+D,WAAY,QACZC,iBAAkB,CAChBC,iBAAkBhK,EAAUE,uBAC5B+J,YAAajK,EAAUG,kBACvB+J,qBAAsBlK,EAAUI,gCAyK/B,SAECpL,EAAAA,cAAA,OAAKC,UAAU,UAAUK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aACjEJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,mBAGxE6S,EAAiB,GAChBlT,EAAAA,cAAA,OACEY,QAASA,IAAMqP,EAAW,CAAE1D,kBAAmB,GAAIsI,iBAAkB,IACrE5U,UAAU,oGACVC,MAAO,CACLmU,QAAS,0BACT5O,SAAU,yBACVwJ,UAAW,2BAEd,SAOX,CClnBe,SAASkG,EAAQtV,GAAoC,IAAnC,WAAEoQ,EAAU,OAAEC,EAAM,UAAEkF,GAAWvV,EAChE,MAAOwV,EAAKC,IAAUhP,EAAAA,EAAAA,UAAS,KACxBiP,EAAiBC,IAAsBlP,EAAAA,EAAAA,UAAS,CACrDoG,QAAQ,EACR+I,WAAW,EACXC,QAAQ,KAIVzM,EAAAA,EAAAA,WAAU,KACRuM,EAAmB,CACjB9I,OAAQ2I,EAAI3I,QAAU,EACtB+I,UAAW,QAAQ/L,KAAK2L,GACxBK,OAAQ,KAAKhM,KAAK2L,MAEnB,CAACA,IAEJ,MAAMM,EAAqBJ,EAAgB7I,QAAU6I,EAAgBE,WAAaF,EAAgBG,OAYlG,OACE1V,EAAAA,cAAA,OAAKC,UAAU,8BAA8BC,MAAO,CAAEC,OAAQ,OAAQ8O,UAAW,IAE/EjP,EAAAA,cAAA,OAAKC,UAAU,kCAAkCC,MAAO,CAAE+O,UAAW,EAAGvI,SAAU,WAChF1G,EAAAA,cAAA,OAAKC,UAAU,sBACbD,EAAAA,cAAA,MAAIC,UAAU,yCAAwC,gBACtDD,EAAAA,cAAA,KAAGC,UAAU,2BAA0B,mDAGzCD,EAAAA,cAAA,OAAKC,UAAU,sBACbD,EAAAA,cAAA,SACE6N,KAAK,WACLC,MAAOuH,EACPtH,SAAWvE,GAAM8L,EAAO9L,EAAEwE,OAAOF,OACjC7N,UAAU,2IACVgO,YAAY,iBACZK,UAAW,MAKftO,EAAAA,cAAA,OAAKC,UAAU,yBAAyBC,MAAO,CAAE+O,UAAW,IAC1DjP,EAAAA,cAAA,OAAKC,UAAU,kBACbD,EAAAA,cAAA,KAAGC,UAAU,kCAAiC,kBAC9CD,EAAAA,cAAA,OAAKC,UAAU,aACbD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,OACEC,UAAS,iCAAAsF,OAAmCgQ,EAAgB7I,OAAS,gCAAkC,6BAEtG6I,EAAgB7I,QACf1M,EAAAA,cAAA,OAAKC,UAAU,2BAA2BK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAClFJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,qBAI3EL,EAAAA,cAAA,QAAMC,UAAU,iBAAgB,wCAElCD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,OACEC,UAAS,iCAAAsF,OAAmCgQ,EAAgBE,UAAY,gCAAkC,6BAEzGF,EAAgBE,WACfzV,EAAAA,cAAA,OAAKC,UAAU,2BAA2BK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAClFJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,qBAI3EL,EAAAA,cAAA,QAAMC,UAAU,iBAAgB,iCAElCD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,OACEC,UAAS,iCAAAsF,OAAmCgQ,EAAgBG,OAAS,gCAAkC,6BAEtGH,EAAgBG,QACf1V,EAAAA,cAAA,OAAKC,UAAU,2BAA2BK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAClFJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,qBAI3EL,EAAAA,cAAA,QAAMC,UAAU,iBAAgB,0BAQ1CD,EAAAA,cAAA,OAAKC,UAAU,yCAAyCC,MAAO,CAAE+O,UAAW,SAC1EjP,EAAAA,cAAA,OACEC,UAAS,2GAAAsF,OACPoQ,EACI,0DACA,gDAEN/U,QAAS+U,EApFIC,KACfD,GACF1F,EAAW,CACToF,IAAKA,EACLQ,YAAY,EACZ/C,WAAW,IAAIhG,MAAOY,sBA+EyBoI,GAC9C,WAEC9V,EAAAA,cAAA,OAAKC,UAAU,UAAUK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aACjEJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,oBAMjF,C,8sCC/GA,MAAM0V,EAAY,CAChB,CACEvG,GAAI,QACJJ,KAAM,gBACNG,YAAa,yEACbF,KAAM,OACNnB,UAAU,EACV8H,QAAS,sHACTC,YAAa,yCAEf,CACEzG,GAAI,cACJJ,KAAM,mBACNG,YAAa,6DACbF,KAAM,UACNnB,UAAU,EACV8H,QAAS,mGACTC,YAAa,+CAEf,CACEzG,GAAI,cACJJ,KAAM,qBACNG,YAAa,qEACbF,KAAM,QACNnB,UAAU,EACV8H,QAAS,gIACTC,YAAa,gDAKXC,EAAiBrW,IAA+C,IAA9C,SAAEsW,EAAQ,UAAEC,EAAS,SAAEC,EAAQ,OAAEC,GAAQzW,EAiC/D,OACEG,EAAAA,cAAA,OAAKC,UAAU,+DACbD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,OAAKC,UAAU,uEA9BK2D,KACxB,MAAM2S,EAAY,CAAEtW,UAAW,yBAE/B,OAAQ2D,GACN,IAAK,OACH,OACE5D,EAAAA,cAAA,MAAA2H,EAAA,GAAS4O,EAAS,CAAEjW,KAAK,OAAOC,OAAO,eAAeH,QAAQ,cAC5DJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,yEAG3E,IAAK,UACH,OACEL,EAAAA,cAAA,MAAA2H,EAAA,GAAS4O,EAAS,CAAEjW,KAAK,OAAOC,OAAO,eAAeH,QAAQ,cAC5DJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,0QAG3E,IAAK,QACH,OACEL,EAAAA,cAAA,MAAA2H,EAAA,GAAS4O,EAAS,CAAEjW,KAAK,OAAOC,OAAO,eAAeH,QAAQ,cAC5DJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,sNAG3E,QACE,OAAOL,EAAAA,cAAA,QAAMC,UAAU,WAAW2D,KAQ/B4S,CAAiBL,EAAS9G,OAE7BrP,EAAAA,cAAA,QAAMC,UAAU,6BAA6BkW,EAAS/G,OAExDpP,EAAAA,cAAA,OACEY,QAzCeqS,KACfkD,EAASjI,UACbmI,EAASF,EAAS3G,IAAK4G,IAwCnBnW,UAAS,8FAAAsF,OACP6Q,EAAY,8BAAgC,6BAG7CA,GACCpW,EAAAA,cAAA,OAAKC,UAAU,qBAAqBK,KAAK,eAAeF,QAAQ,aAC9DJ,EAAAA,cAAA,QACEyW,SAAS,UACTpW,EAAE,qHACFqW,SAAS,gBA4TvB,EAnToB/Q,IAQd,IARe,UACnByP,EAAY,mBAAkB,SAC9B7M,GAAW,EAAI,WACf0H,EAAU,UACV0G,GAAY,EAAI,QAChBvG,EAAU,WAAU,eACpBwG,GAAiB,EAAK,eACtBC,EAAiB,UAClBlR,EACC,MAAOmR,EAAcC,IAAmBzQ,EAAAA,EAAAA,UAAS,CAC/C0Q,OAAO,EACPC,aAAa,EACbC,aAAa,KAERC,EAAcC,IAAmB9Q,EAAAA,EAAAA,WAAS,IAC1C+Q,EAAUC,IAAehR,EAAAA,EAAAA,UAAS,MAEnCiR,EAAmBA,CAACC,EAAQC,KAChC,MAAMtB,EAAWJ,EAAUtE,KAAKiG,GAAMA,EAAGlI,KAAOgI,GAC5CrB,SAAAA,EAAUjI,UAEd6I,EAAgBzF,GAAI9K,EAAAA,EAAA,GACf8K,GAAI,IACP,CAACkG,GAASC,MA0MRE,EAAgBzF,OAAOiB,OAAO2D,GAAcjV,OAAOG,SAAS0K,OAElE,OACE1M,EAAAA,cAAA,OAAKC,UAAU,+BAEbD,EAAAA,cAAA,OAAKC,UAAU,gDAEbD,EAAAA,cAAA,OAAKC,UAAU,6DACbD,EAAAA,cAAA,OAAKC,UAAU,oGACbD,EAAAA,cAAA,OAAKC,UAAU,UAAUG,QAAQ,YAAYE,KAAK,QAChDN,EAAAA,cAAA,QACEK,EAAE,qFACFC,KAAK,UAEPN,EAAAA,cAAA,QACEK,EAAE,iIACFC,KAAK,YAIXN,EAAAA,cAAA,OAAKC,UAAU,wBAAwBK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAC/EJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,kBAEvEL,EAAAA,cAAA,OAAKC,UAAU,oGACbD,EAAAA,cAAA,QAAMC,UAAU,4CAA2C,OAK/DD,EAAAA,cAAA,OAAKC,UAAU,sBACbD,EAAAA,cAAA,MAAIC,UAAU,oEAAmE,8CAGjFD,EAAAA,cAAA,KAAGC,UAAU,2BAA0B,0BAIzCD,EAAAA,cAAA,OAAKC,UAAU,0BACbD,EAAAA,cAAA,OAAKC,UAAU,kBACZ8V,EAAUzS,IAAI,CAAC6S,EAAUrU,IACxB9B,EAAAA,cAACkW,EAAc,CACblS,IAAKmS,EAAS3G,GACd2G,SAAUA,EACVC,UAAWU,EAAaX,EAAS3G,IACjC6G,SAAUkB,EACVjB,OAAQxU,IAAUiU,EAAUrJ,OAAS,QAQ/C1M,EAAAA,cAAA,OAAKC,UAAU,0CACbD,EAAAA,cAAA,OACEC,UAAU,kKACVW,QAnPc2I,UACpBK,QAAQC,IAAI,wCACZD,QAAQC,IAAI,8CAA+CoG,GAC3DrG,QAAQC,IAAI,gCAAiCiN,GAC7ClN,QAAQC,IAAI,iCAAkC8N,GAE9CP,GAAgB,GAChBE,EAAY,MAEZ,IACE,MAAMM,EArBgBpP,KACxB,IAAIqP,EAAO,EACX,MAAMC,EAAMtP,EAAQsE,KAAKC,MAAMf,WAC/B,IAAK,IAAI+L,EAAI,EAAGA,EAAID,EAAIpL,OAAQqL,IAE9BF,GAASA,GAAQ,GAAKA,EADTC,EAAIE,WAAWD,GAE5BF,GAAcA,EAEhB,MAAO,QAAPtS,OAAe8N,KAAK4E,IAAIJ,GAAM7L,SAAS,MAapBkM,CAAiB9C,GAG5B+C,EAAejG,OAAOyC,QAAQmC,GACjCjV,OAAO+S,IAAA,IAAE5Q,EAAK8J,GAAM8G,EAAA,OAAK9G,IACzBxK,IAAI8U,IAAA,IAAEpU,GAAIoU,EAAA,OAAKpU,IAEZqU,EAA+BF,IACnC,MAAMG,EAAgB,GAChBC,GAAc,IAAIzL,MAAOY,cAEzB8K,EAAkB,CACtB,MAAS,SACT,YAAe,QACf,YAAe,UAYjB,OATAL,EAAaM,QAAQtC,IACfqC,EAAgBrC,IAClBmC,EAAcI,KAAK,CACjB/N,KAAM6N,EAAgBrC,GACtBwC,KAAMJ,MAKLD,GAGHM,EAAcrQ,EAChB,wCACA,0CAEEsQ,EAAa,CACjBjB,WACAxH,UACA+H,eACAW,OAAQF,EACRrQ,WACAuK,WAAW,IAAIhG,MAAOY,eAGxB,GAAIiJ,EACF,GAAIpO,EAEFqB,QAAQC,IAAI,sDAAuDsO,GAEnEjP,WAAW,KACT,MAAM6P,EAAmB,CACvBhU,SAAS,EACT8F,QAAS,sCACTF,KAAM,CACJqO,kBAAmB,CACjBC,SAAU,IACVC,kBAAmB,IACnBC,aAAc,IACdC,cAAe,IACfC,YAAa,KAEfC,SAAU,CACR,2DACA,0DACA,8CAEFC,cAAepB,EACfrF,WAAW,IAAIhG,MAAOY,cACtBnF,UAAU,IAIRiR,EAAMhT,EAAAA,EAAA,GACPqS,GAAU,IACbY,YAAaV,EACbhU,SAAS,EACT2U,WAAW,IAGbtC,GAAgB,GAChBxN,QAAQC,IAAI,kDAAmD2P,GAC/D5P,QAAQC,IAAI,mDAAoDoG,GAC5DA,GAAoC,mBAAfA,GACvBA,EAAWuJ,GACX5P,QAAQC,IAAI,+DAEZD,QAAQ5E,MAAM,6EAEf,WAGH,IACE,MAAMsT,EAAgBD,EAA4BF,GAE5CwB,EAAc,CAClBxB,eACA/C,YACAhF,UACAkI,iBAGF1O,QAAQC,IAAI,sCAAuC+O,GACnDhP,QAAQC,IAAI,mBAAoB8P,GAEhC,MAAMF,QAAoBvP,MAAM0O,EAAa,CAC3CzO,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBC,KAAMC,KAAKC,UAAUoP,KAGvB,IAAKF,EAAYhP,GACf,MAAM,IAAIC,MAAM,kCAADnF,OAAmCkU,EAAY7H,SAGhE,MAAMgI,QAAgBH,EAAY7O,OAClChB,QAAQC,IAAI,mBAAoB+P,GAEhC,MAAMJ,EAAMhT,EAAAA,EAAA,GACPqS,GAAU,IACbY,YAAaG,EACb7U,SAAS,IAGXqS,GAAgB,GAChBxN,QAAQC,IAAI,kDAAmD2P,GAC/D5P,QAAQC,IAAI,mDAAoDoG,GAC5DA,GAAoC,mBAAfA,GACvBA,EAAWuJ,GACX5P,QAAQC,IAAI,mDAEZD,QAAQ5E,MAAM,+DAGlB,CAAE,MAAOqS,GACPzN,QAAQ5E,MAAM,gBAAiBqS,GAC/BC,EAAYD,EAASxM,SACrBuM,GAAgB,GAEhB,MAAMyC,EAAWrT,EAAAA,EAAA,GACZqS,GAAU,IACbY,YAAa,KACbzU,MAAOqS,EAASxM,QAChB9F,SAAS,IAGXkL,EAAW4J,EACb,MAGFzC,GAAgB,GAChBxN,QAAQC,IAAI,4EACZD,QAAQC,IAAI,mDAAoDoG,GAC5DA,GAAoC,mBAAfA,GACvBA,EAAW4I,GACXjP,QAAQC,IAAI,yEAEZD,QAAQ5E,MAAM,qFAGpB,CAAE,MAAOA,GACP4E,QAAQ5E,MAAM,wBAAyBA,GACvCsS,EAAYtS,EAAM6F,SAClBuM,GAAgB,GAEZnH,GACFA,EAAW,CACTjL,MAAOA,EAAM6F,QACb9F,SAAS,EACTqQ,YACAhF,UACA7H,YAGN,GA6DMxC,SAAUoR,GAAkC,IAAlBQ,GAEzBR,EAAe,gBAAkB,oBAClCnX,EAAAA,cAAA,OAAKC,UAAU,UAAUK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aACjEJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,mBAGzEL,EAAAA,cAAA,OACEY,QAASA,IAAMqP,EAAW,CAAE6J,WAAW,IACvC7Z,UAAU,2IACX,WAKAoX,GACCrX,EAAAA,cAAA,OAAKC,UAAU,gFACbD,EAAAA,cAAA,KAAGC,UAAU,WAAWoX,OCxYrB,SAAS0C,EAAiBla,GAA8D,IAAAma,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,IAA7D,WAAEnK,EAAU,UAAEmF,EAAS,QAAEhF,EAAU,MAAK,SAAE7H,GAAW,GAAM1I,EACnG,MAAOwa,EAAaC,IAAkBhU,EAAAA,EAAAA,UAAS,IACxCiU,EAAUC,IAAelU,EAAAA,EAAAA,UAAS,IAClCmU,EAAYC,IAAiBpU,EAAAA,EAAAA,WAAS,GAEvCqU,EAAQ,CACZ,CACEC,MAAO,8BACPrL,YAAa,sCACbF,KAAM,KACNwL,SAAUtS,EAAW,IAAM,KAE7B,CACEqS,MAAO,8BACPrL,YAAa,uCACbF,KAAM,KACNwL,SAAUtS,EAAW,IAAM,MAE7B,CACEqS,MAAO,sBACPrL,YAAa,sCACbF,KAAM,KACNwL,SAAUtS,EAAW,IAAM,KAE7B,CACEqS,MAAO,mBACPrL,YAAa,oCACbF,KAAM,IACNwL,SAAUtS,EAAW,IAAM,MAoD/B,OAhDAU,EAAAA,EAAAA,WAAU,KACR,IAAI6R,EACAC,EAEJ,GAAIV,EAAcM,EAAMjO,OAAQ,CAC9B,MAAMsO,EAAeL,EAAMN,GAAaQ,SAClCI,EAAe,IAAMN,EAAMjO,OAGjCoO,EAAW1O,YAAY,KACrBoO,EAAYlJ,IACV,MAAM4J,EAAc5J,EAAQ2J,GAAgBD,EAAe,KAC3D,OAAO3H,KAAKC,IAAI4H,GAAcb,EAAc,GAAKY,MAElD,KAGHF,EAAc7R,WAAW,KACvB,GAAImR,EAAcM,EAAMjO,OAAS,EAC/B4N,EAAehJ,GAAQA,EAAO,OACzB,CACLoJ,GAAc,GACd,MAAMS,EAAkB5S,EAAW,IAAM,IAErCA,GACFqB,QAAQC,IAAI,+CAGdX,WAAW,KACT+G,EAAW,CACTmL,kBAAkB,EAClBtI,WAAW,IAAIhG,MAAOY,cACtB0H,UAAWA,EACXhF,QAASA,EACT7H,SAAUA,EACV8S,kBAAmB9S,KAEpB4S,EACL,GACCH,EACL,CAEA,MAAO,KACDF,GAAUxO,cAAcwO,GACxBC,GAAaO,aAAaP,KAE/B,CAACV,EAAapK,EAAYmF,EAAWhF,IAGtCpQ,EAAAA,cAAA,OAAKC,UAAU,+CACbD,EAAAA,cAAA,OAAKC,UAAU,eACbD,EAAAA,cAAA,OACEC,UAAU,uEACVC,MAAO,CACLsE,WAAY,2BAAFe,OAA6BtB,EAAOiB,KAAI,gBAGpDlF,EAAAA,cAAA,OAAKC,UAAU,YACZwa,EAAa,KAAyB,QAArBT,EAAGW,EAAMN,UAAY,IAAAL,OAAA,EAAlBA,EAAoB3K,OAG7CrP,EAAAA,cAAA,MACEC,UAAU,0BACVC,MAAO,CAAE2C,MAAOoB,EAAOS,cAEtB+V,EAAa,WAA+B,QAArBR,EAAGU,EAAMN,UAAY,IAAAJ,OAAA,EAAlBA,EAAoBW,OAEjD5a,EAAAA,cAAA,KAAGE,MAAO,CAAE2C,MAAOoB,EAAOU,gBACvB8V,EACG,mCACkB,QADgBP,EAClCS,EAAMN,UAAY,IAAAH,OAAA,EAAlBA,EAAoB3K,cAM5BvP,EAAAA,cAAA,OAAKC,UAAU,UACbD,EAAAA,cAAA,OACEC,UAAU,oCACVC,MAAO,CAAE2C,MAAOoB,EAAOU,gBAEvB3E,EAAAA,cAAA,YAAM,YACNA,EAAAA,cAAA,YAAOqT,KAAKkI,MAAMhB,GAAU,MAE9Bva,EAAAA,cAAA,OACEC,UAAU,0BACVC,MAAO,CAAEwF,gBAAiBzB,EAAOa,cAEjC9E,EAAAA,cAAA,OACEC,UAAU,wDACVC,MAAO,CACLwC,MAAO,GAAF6C,OAAKgV,EAAQ,KAClB/V,WAAY,0BAAFe,OAA4BtB,EAAOiB,KAAI,mBAOzDlF,EAAAA,cAAA,OAAKC,UAAU,iCACZ0a,EAAMrX,IAAI,CAAC+K,EAAGvM,IACb9B,EAAAA,cAAA,OACEgE,IAAKlC,EACL7B,UAAU,mDACVC,MAAO,CACLwF,gBAAiB5D,GAASuY,EAAcpW,EAAOiB,KAAOjB,EAAOY,YAOrE7E,EAAAA,cAAA,OACEC,UAAU,wBACVC,MAAO,CAAEwF,gBAAiBzB,EAAOQ,sBAEjCzE,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,OACEC,UAAU,wDACVC,MAAO,CAAEwF,gBAAiB,YAE1B1F,EAAAA,cAAA,OAAKC,UAAU,WACZwa,EAAa,IAAwB,QAArBN,EAAGQ,EAAMN,UAAY,IAAAF,OAAA,EAAlBA,EAAoB9K,OAG5CrP,EAAAA,cAAA,WACEA,EAAAA,cAAA,MACEC,UAAU,cACVC,MAAO,CAAE2C,MAAOoB,EAAOS,cAEtB+V,EAAa,oBAAsB,QAAHlV,OAAW8U,EAAc,EAAC,QAAA9U,OAAOoV,EAAMjO,SAE1E1M,EAAAA,cAAA,KACEC,UAAU,UACVC,MAAO,CAAE2C,MAAOoB,EAAOU,gBAEtB8V,EACG,mCACkB,QADgBL,EAClCO,EAAMN,UAAY,IAAAD,OAAA,EAAlBA,EAAoB7K,gBAQhCvP,EAAAA,cAAA,OAAKC,UAAU,eACbD,EAAAA,cAAA,KACEC,UAAU,UACVC,MAAO,CAAE2C,MAAOoB,EAAOU,gBACxB,kBACgB3E,EAAAA,cAAA,QAAMC,UAAU,eAAemQ,IAE/CgF,GACCpV,EAAAA,cAAA,KACEC,UAAU,eACVC,MAAO,CAAE2C,MAAOoB,EAAOW,YAEtBwQ,IAMb,CCrMe,SAASoG,EAAa3b,GAAiB,IAAhB,WAAEoQ,GAAYpQ,EAClD,MAAOwa,EAAaC,IAAkBhU,EAAAA,EAAAA,UAAS,IACxCmV,EAAUC,IAAepV,EAAAA,EAAAA,UAAS,GAEnCqV,EAAgB,CACpB,CAAE9Q,QAAS,yCAA0C0P,SAAU,IAC/D,CAAE1P,QAAS,oCAAqC0P,SAAU,IAC1D,CAAE1P,QAAS,yBAA0B0P,SAAU,IAC/C,CAAE1P,QAAS,+BAAgC0P,SAAU,IACrD,CAAE1P,QAAS,YAAa0P,SAAU,OAGpCtR,EAAAA,EAAAA,WAAU,KACR,MAAM2S,EAAgBxP,YAAY,KAChCkO,EAAgBhJ,IACd,MAAMuK,EAAWvK,EAAO,EACxB,OAAIuK,GAAYF,EAAcjP,QAE5BxD,WAAW,KACT+G,KACC,KACIqB,GAEFuK,KAER,KAEH,MAAO,IAAMvP,cAAcsP,IAC1B,CAACD,EAAcjP,OAAQuD,KAE1BhH,EAAAA,EAAAA,WAAU,KACR,MAAM6S,EAAc1P,YAAY,KAC9BsP,EAAapK,IAAUA,EAAO,GAAK,IAClC,KAEH,MAAO,IAAMhF,cAAcwP,IAC1B,IAEH,MAAMC,EAAeJ,EAActB,GAEnC,OACEra,EAAAA,cAAA,OAAKC,UAAU,gFAEbD,EAAAA,cAAA,OAAKC,UAAU,wFAAwFC,MAAO,CAAE0G,SAAU,QAASzG,OAAQ,SAEzIH,EAAAA,cAAA,OAAKC,UAAU,iCAIfD,EAAAA,cAAA,OAAKC,UAAU,yDACbD,EAAAA,cAAA,OAAKC,UAAU,qBACbD,EAAAA,cAAA,MAAIC,UAAU,wCAAwCC,MAAO,CAAEuF,SAAU,yBAA0B6O,aAAc,2BAC9GyH,EAAalR,QACY,cAAzBkR,EAAalR,SACZ7K,EAAAA,cAAA,QAAMC,UAAU,8BAA8B,IAAI+b,OAAOP,KAI7Dzb,EAAAA,cAAA,OAAKC,UAAU,UAAUC,MAAO,CAAEwC,MAAO,8BACvC1C,EAAAA,cAAA,OAAKC,UAAU,uCACbD,EAAAA,cAAA,OACEC,UAAU,qEACVC,MAAO,CAAEwC,MAAO,GAAF6C,OAAKwW,EAAaxB,SAAQ,YAQlDva,EAAAA,cAAA,OAAKC,UAAU,wBAIvB,C,ypBCtEO,MAAMgc,EAAoB,CAC/B,UACA,WACA,WACA,WACA,YACA,WACA,YACA,UACA,WACA,WACA,cACA,aACA,cACA,WACA,YACA,UAIWC,EAAmB,CAC9B,WACA,oBACA,eACA,gBACA,eAWK,SAASC,EAAsB1C,GAA2B,IAAA2C,EAAA,IAAdC,EAAOC,UAAA5P,OAAA,QAAAoJ,IAAAwG,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC5D,MAAM,kBAAEC,GAAoB,EAAI,aAAEC,GAAe,GAASH,EAE1D,IAAK5C,EACH,OAAOA,EAGT,MAAMgD,E,2VAASjW,CAAA,GAAQiT,GAGvB,GAA+B,QAA3B2C,EAAA3C,EAAYiD,uBAAe,IAAAN,GAA3BA,EAA6BO,QAAUlD,EAAYkD,QAAUlD,EAAYmD,OAAQ,KAAAC,EACnF,MAAMD,GAAoC,QAA3BC,EAAApD,EAAYiD,uBAAe,IAAAG,OAAA,EAA3BA,EAA6BF,SAAUlD,EAAYkD,QAAUlD,EAAYmD,OAExF,GAAInZ,MAAMC,QAAQkZ,IAAWA,EAAOlQ,QAAU,GAAI,CAChD,GAAI6P,EAAmB,CAErB,MAAMO,EAAkB,CAAC,EACzBb,EAAkBxD,QAAQ,CAAC5K,EAAM/L,KAC/Bgb,EAAgBjP,GAAQ+O,EAAO9a,KAI7B2a,EAAUC,gBACZD,EAAUC,gBAAgBI,gBAAkBA,EAE5CL,EAAUK,gBAAkBA,CAEhC,CAEmB,IAAAC,EAAnB,IAAKP,EAE0B,QAA7BO,EAAIN,EAAUC,uBAAe,IAAAK,GAAzBA,EAA2BJ,eACtBF,EAAUC,gBAAgBC,OAE/BF,EAAUE,eACLF,EAAUE,OAEfF,EAAUG,eACLH,EAAUG,MAGvB,CACF,CAGA,GAAInD,EAAYuD,aAAevD,EAAYkD,OAAQ,CACjD,MAAMA,EAASlD,EAAYuD,aAAevD,EAAYkD,OAEtD,GAAIlZ,MAAMC,QAAQiZ,IAAWJ,EAAmB,CAC9C,MAAMU,EAAY,CAAC,EACnBf,EAAiBzD,QAAQ,CAACyE,EAAUpb,UACZgU,IAAlB6G,EAAO7a,KACTmb,EAAUC,GAAYP,EAAO7a,MAIjC2a,EAAUQ,UAAYA,CACxB,CACF,CAEA,OAAOR,CACT,C,wzDCnGA,MAAMU,EAAatd,IAeb,IAfc,SAClBmD,EAAQ,MACR4X,EAAK,SACLwC,EAAQ,KACR/N,EAAI,WACJgO,GAAa,EAAI,gBACjBC,GAAkB,EAAK,QACvBvd,EAAO,OACPmQ,EAAM,eACNqN,GAAiB,EAAK,UACtBtd,EAAY,GAAE,iBACdud,EAAmB,GAAE,cACrBC,GAAgB,EAAI,MACpBvd,EAAQ,CAAC,GAEVL,EADIwC,EAAK8D,EAAAtG,EAAAuG,GAER,MAAMsX,EAAWlX,EAAA,CACfd,gBAAiBzB,EAAOO,WACxByK,UAAW,OACXvM,MAAO,OACPwF,QAAS,OACTsM,cAAe,UACZtU,GAGCyd,EAAc,CAClBlX,SAAU,SACVU,IAAK,EACLzB,gBAAiBzB,EAAOO,WACxBoZ,OAAQ,GACRvJ,QAAS,wEAGLwJ,EAAYrX,EAAA,CAChBwI,KAAM,EACNqF,QAAS,yBACTnM,QAAS,OACTsM,cAAe,SACf9N,SAAU,OACVuI,UAAW,GACPwO,GAAiB,CACnBrV,WAAY,SACZD,eAAgB,eAId2V,EAAa,CACjBtW,WAAY,+BACZ/B,SAAU,yBACVgC,WAAY,MACZ5E,MAAOoB,EAAOS,YACdmC,OAAQ,gCACRa,UAAW+V,EAAgB,SAAW,OACtCtP,WAAY,OAGR4P,EAAgB,CACpBvW,WAAY,+BACZ/B,SAAU,2BACVgC,WAAY,MACZ5E,MAAOoB,EAAOU,cACdkC,OAAQ,+BACRa,UAAW+V,EAAgB,SAAW,OACtCtP,WAAY,OAad,OACEnO,EAAAA,cAAA,MAAA2H,EAAA,CACE1H,UAAS,uBAAAsF,OAAyBtF,GAClCC,MAAOwd,GACHrb,GAGHgb,GACCrd,EAAAA,cAAA,OAAKE,MAAOyd,GACV3d,EAAAA,cAAA,OAAKC,UAAU,qCAEZsd,GAAkBrN,GACjBlQ,EAAAA,cAAA,UACEY,QAASsP,EACTjQ,UAAU,4FACV,aAAW,WAEXD,EAAAA,cAAA,QAAME,MAAO,CAAEuF,SAAU,OAAQ5C,MAAOoB,EAAOS,cAAe,MAMjE4Y,GAAmBvd,GAClBC,EAAAA,cAAA,UACEY,QAASb,EACTE,UAAU,4FACV,aAAW,SAEXD,EAAAA,cAAA,QAAME,MAAO,CAAEuF,SAAU,OAAQ5C,MAAOoB,EAAOS,cAAe,QAQxE1E,EAAAA,cAAA,OACEC,UAAS,wBAAAsF,OAA0BiY,GACnCtd,MAAO2d,GAGNxO,GACCrP,EAAAA,cAAA,OAAKE,MArDK,CAChBwC,MAAO,yBACPvC,OAAQ,yBACR0G,OAAQ,gCACRqB,QAAS,OACTE,WAAY,SACZD,eAAgB,SAChB1C,SAAU,2BA+Ce,iBAAT4J,EAAoBrP,EAAAA,cAAA,YAAOqP,GAAeA,GAKrDuL,GACC5a,EAAAA,cAAA,MAAIE,MAAO4d,GACRlD,GAKJwC,GACCpd,EAAAA,cAAA,KAAGE,MAAO6d,GACPX,GAKJpa,KAOHgb,EAAkBrY,IAQlB,IARmB,SACvB3C,EAAQ,QACRib,GAAU,EAAI,QACdle,EAAO,gBACPme,EAAe,cACfC,EAAgB,CAAC,EAAC,WAClBC,EAAa,CAAC,GAEfzY,EADI0Y,EAAelY,EAAAR,EAAA2Y,GAElB,IAAKL,EAAS,OAAO,KAErB,MAAMM,EAAc/X,EAAA,CAClBC,SAAU,QACVU,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACR5B,gBAAiB,qBACjBkY,OAAQ,IACR1V,QAAS,OACTE,WAAY,SACZD,eAAgB,UACbgW,GAGCK,EAAWhY,EAAA,CACfd,gBAAiBzB,EAAOO,WACxBia,oBAAqB,OACrBC,qBAAsB,OACtBC,uBAAwB,OACxBC,wBAAyB,OACzBze,OAAQ,OACRuC,MAAO,OACPkE,SAAU,QACVI,UAAW,kCACXN,SAAU,SACVwB,QAAS,OACTsM,cAAe,UACZ4J,GAaL,OACEpe,EAAAA,cAAA,OAAKE,MAAOqe,EAAgB3d,QAXD4I,IACvBA,EAAEwE,SAAWxE,EAAEqV,gBACbX,EACFA,IACSne,GACTA,OAOFC,EAAAA,cAAA,OAAKE,MAAOse,GACVxe,EAAAA,cAACmd,EAAUxV,EAAA,CACT0V,YAAY,EACZC,iBAAiB,EACjBvd,QAASA,GACLse,GAEHrb,M,s/BCvMJ,SAAS8b,GAAajf,GAoB1B,IApB2B,YAC5Bkf,EAAW,YACXC,EAAW,cACXC,EAAgB,KAAI,WACpBhP,EAAa,KAAI,UACjB0G,GAAY,EAAI,SAChBpO,GAAW,EAAI,UACf2W,GAAY,EAAK,WACjBC,EAAa,QAAO,UACpBC,EAAY,QAAO,MACnBC,GAAQ,EAAK,WACbC,EAAa,OAAM,YACnBC,EAAc,KAAI,UAClBC,EAAY,SAAQ,WACpBC,EAAa,OAAM,QACnBtP,EAAU,KAAI,eACduP,GAAiB,EAAI,eACrB9I,GAAiB,EAAI,eACrBC,EAAiB,CAAE0F,mBAAmB,EAAMC,cAAc,GAAM,iBAChEjM,EAAmB,MACpB1Q,EAEC,MAAO8f,EAAaC,IAAkBtZ,EAAAA,EAAAA,WAAS,IACxCuZ,EAAaC,IAAkBxZ,EAAAA,EAAAA,UAAS,YACxCyZ,EAAUC,IAAe1Z,EAAAA,EAAAA,UAAS,OAClCtB,EAAOgE,IAAY1C,EAAAA,EAAAA,UAAS,OAGnC2C,EAAAA,EAAAA,WAAU,KACqBgX,MAE3B,GAAI1X,EAIF,OAHAqB,QAAQC,IAAI,oEACZyB,aAAa+F,WAAW,oBACxByO,EAAe,WAIjB,MAAMI,EAAY5U,aAAaC,QAAQ,eACvC,GAAI2U,EACF,IACE,MAAMC,EAAO7V,KAAK8V,MAAMF,GACxBF,EAAYG,GAERA,EAAKE,oBAAsBF,EAAKtK,WAClCiK,EAAe,eACNK,EAAKvT,WAAauT,EAAKE,mBAChCP,EAAe,cACNK,EAAKE,qBAAuBF,EAAKtK,YAC1CiK,EAAe,MAEnB,CAAE,MAAO9a,GACP4E,QAAQ5E,MAAM,iCAAkCA,GAChDsG,aAAa+F,WAAW,cAC1B,GAIJ4O,IACC,CAAC1X,IAEJ,MASM+X,EAAqBA,KACzBV,GAAe,GACf5W,EAAS,OAULuX,EAAwBA,KAC5B3W,QAAQC,IAAI,sCACZiW,EAAe,UAGXU,EAA0BC,IAC9B7W,QAAQC,IAAI,4BAA6B4W,GACzC7W,QAAQC,IAAI,iBAAkB,CAC5BuD,UAAWqT,EAASrT,UACpBsT,UAAWD,EAASC,UACpBrT,SAAUoT,EAASpT,SACnBH,aAAcuT,EAASvT,aACvByT,iBAAkBF,EAAStT,cAI7B,MAAMC,GAAmC,IAAvBqT,EAASrT,YACgB,IAA1BqT,EAASvT,cACa,eAAtBuT,EAASpT,UACc,QAAvBoT,EAASC,YACRD,EAAStT,YAE3BvD,QAAQC,IAAI,yBAA0B,CACpC+W,cAAexT,EAAY,0CAA4C,iDACvEyT,UAAW,CACTzT,UAAWqT,EAASrT,UACpB0T,mBAA6C,IAA1BL,EAASvT,aAC5B6T,mBAA0C,eAAtBN,EAASpT,SAC7B2T,eAAgBP,EAAStT,eAI7B,MAAM8T,EAAWza,EAAAA,EAAA,GACZia,GAAQ,IACX7T,UAAU,EACVyT,oBAAqBjT,EACrByI,YAAazI,IAGf4S,EAAYiB,GACZ3V,aAAaiH,QAAQ,cAAejI,KAAKC,UAAU0W,IAG/C7T,GACFxD,QAAQC,IAAI,0EACZiW,EAAe,gBAEflW,QAAQC,IAAI,sFACZiW,EAAe,iBAIboB,EAA4BC,IAChCvX,QAAQC,IAAI,wBAAyBsX,GACrC,MAAMC,EAAe5a,EAAAA,EAAA,GAChBuZ,GAAQ,IACXM,oBAAoB,EACpB9T,kBAAmB4U,EAAe5U,mBAAqB,KAEzDyT,EAAYoB,GACZ9V,aAAaiH,QAAQ,cAAejI,KAAKC,UAAU6W,IACnDtB,EAAe,QAGXuB,EAA0BC,IAC9B1X,QAAQC,IAAI,uBAAwByX,GACpC,MAAMF,EAAe5a,EAAAA,EAAAA,EAAA,GAChBuZ,GACAuB,GAAO,IACVzL,YAAY,IAEdmK,EAAYoB,GACZ9V,aAAaiH,QAAQ,cAAejI,KAAKC,UAAU6W,IAGnDtB,EAAe,YAOXyB,EAA0BC,IAC9B5X,QAAQC,IAAI,yBAA0B2X,GACtC,MAAMJ,EAAe5a,EAAAA,EAAA,GAChBuZ,GAAQ,IACX0B,mBAAmB,GAChBD,GAELxB,EAAYoB,GACZ9V,aAAaiH,QAAQ,cAAejI,KAAKC,UAAU6W,IAGnDtB,EAAe,gBAGX4B,EAA6BC,IACjC/X,QAAQC,IAAI,4CAA6C8X,GAGzD,MAAMP,EAAe5a,EAAAA,EAAA,GAChBuZ,GAAQ,IACX6B,gBAAiBD,IAEnB3B,EAAYoB,GACZ9V,aAAaiH,QAAQ,cAAejI,KAAKC,UAAU6W,IAGnDxX,QAAQC,IAAI,oDACZ+V,GAAe,GAGf,IAAIiC,EAAkBF,EACtB,GAAI/K,SAAkB+K,GAAAA,EAAelI,YACnC,IAAI,IAAAqI,EACFD,EAAerb,EAAAA,EAAA,GACVmb,GAAa,IAChBlI,YAAa0C,EAAsBwF,EAAclI,YAAa5C,KAEhEjN,QAAQC,IAAI,0CAAqE,QAA3BiY,EAAAD,EAAgBpI,mBAAW,IAAAqI,OAAA,EAA3BA,EAA6BhF,kBAAmB,sBACxG,CAAE,MAAO9X,GACP4E,QAAQmY,KAAK,gCAAiC/c,EAEhD,CAKF,GADA4E,QAAQC,IAAI,uCAAwCgY,GAChD5R,EACF,IACEA,EAAW4R,GACXjY,QAAQC,IAAI,+CACd,CAAE,MAAO7E,GACP4E,QAAQ5E,MAAM,mCAAoCA,EACpD,MAEA4E,QAAQC,IAAI,uCA4IVmY,EAAc,qEAAHzc,OAEA,SAAf+Z,EAAwB,YAAc,YAAW,kCAG7C/Y,EAAc,CAClBiO,cAA8B,UAAf2K,EAAyB,SAAW,MACnDzZ,gBAAiB,cACjB7C,MAAOuc,EACPva,OAAQ,yBAIJod,EAAY,CAChBvf,MAAO,OACPvC,OAAQ,OACR+hB,YAA4B,SAAfzC,EAAwB,OAAS,KAchD,OACEzf,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,UACEC,UAAW+hB,EACXphB,QA3Ue2I,UACnB,IACEK,QAAQC,IAAI,0BACV+V,GAAe,EACnB,CAAE,MAAO5a,GACP4E,QAAQ5E,MAAM,yBAA0BA,EAC1C,GAsUI9E,MAAOqG,IAEU,SAAfkZ,GAAwC,SAAfA,IACzBzf,EAAAA,cAAA,OACE0T,IAAK2L,EAAQ,mDAAqD,mDAClE1L,IAAI,eACJzT,MAAO+hB,IAGK,SAAfxC,GACCzf,EAAAA,cAAA,QAAMC,UAAS,GAAAsF,OAAmB,UAAd6Z,EAAwB,aAAe,aAAY,KAAA7Z,OAAmB,SAAfka,EAAwB,UAAY,GAAE,KAAAla,OAAmB,UAAf4Z,EAAyB,OAAwB,SAAfA,EAAwB,OAAS,KA1BhLgD,MACd,OAAQ3C,GACN,IAAK,SACH,MAAO,uBACT,IAAK,UACH,MAAO,sBACT,QACE,MAAO,yBAoBF2C,KAMNxC,GACC3f,EAAAA,cAAAA,EAAAA,SAAA,KACmB,UAAhB6f,EAEC7f,EAAAA,cAAA,OAAKC,UAAU,qFACbD,EAAAA,cAAA,OAAKC,UAAU,wFAAwFC,MAAO,CAAE0G,SAAU,QAASzG,OAAQ,SAEzIH,EAAAA,cAAA,OAAKC,UAAU,yCACbD,EAAAA,cAAA,UACEY,QAAS0f,EACTrgB,UAAU,8EAEVD,EAAAA,cAAA,OAAKC,UAAU,wBAAwBK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAC/EJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,4BAM3EL,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAACqI,EAAS,CACRC,UAAWkY,EACXjY,SAAUA,OAKA,eAAhBsX,EAEF7f,EAAAA,cAAA,OAAKC,UAAU,qFACbD,EAAAA,cAAA,OAAKC,UAAU,wFAAwFC,MAAO,CAAE0G,SAAU,QAASzG,OAAQ,SAEzIH,EAAAA,cAAA,OAAKC,UAAU,yCACbD,EAAAA,cAAA,UACEY,QAASA,IAAMkf,EAAe,SAC9B7f,UAAU,8EAEVD,EAAAA,cAAA,OAAKC,UAAU,wBAAwBK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAC/EJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,uBAM3EL,EAAAA,cAACgQ,EAAmB,CAClBC,WAAYiR,EACZhR,OAAQA,IAAM4P,EAAe,SAC7B3P,QAASA,GAAW,mDACpBC,QAAS4O,EACT3T,UAAU0U,aAAQ,EAARA,EAAUvX,SAASuX,aAAQ,EAARA,EAAU1U,UACvC9C,SAAUA,EACVgI,iBAAkBA,MAIN,gBAAhBsP,EAEF7f,EAAAA,cAAA,OAAKC,UAAU,qFACbD,EAAAA,cAAA,OAAKC,UAAU,wFAAwFC,MAAO,CAAE0G,SAAU,QAASzG,OAAQ,SAEzIH,EAAAA,cAAA,OAAKC,UAAU,yCACbD,EAAAA,cAAA,UACEY,QAASA,IAAMkf,EAAe,WAC9B7f,UAAU,8EAEVD,EAAAA,cAAA,OAAKC,UAAU,wBAAwBK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAC/EJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,uBAM3EL,EAAAA,cAACoiB,EAAW,CACVnS,WAAYyR,EACZtM,UAAW2K,aAAQ,EAARA,EAAUvX,MACrBuW,YAAaA,EACb3O,QAAS4O,EACTrI,UAAWA,EACXpO,SAAUA,EACV4H,QAASA,EACT5D,mBAAmBwT,aAAQ,EAARA,EAAUxT,oBAAqB,CAAC,MAIvC,QAAhBsT,EAEF7f,EAAAA,cAAA,OAAKC,UAAU,qFACbD,EAAAA,cAAA,OAAKC,UAAU,wFAAwFC,MAAO,CAAE0G,SAAU,QAASzG,OAAQ,SAEzIH,EAAAA,cAAA,OAAKC,UAAU,yCACbD,EAAAA,cAAA,UACEY,QAASA,IAAMkf,EAAe,cAC9B7f,UAAU,8EAEVD,EAAAA,cAAA,OAAKC,UAAU,wBAAwBK,KAAK,OAAOC,OAAO,eAAeH,QAAQ,aAC/EJ,EAAAA,cAAA,QAAMa,cAAc,QAAQC,eAAe,QAAQN,YAAa,EAAGH,EAAE,uBAM3EL,EAAAA,cAAA,OAAKC,UAAU,kBACbD,EAAAA,cAACmV,EAAQ,CACPlF,WAAYoR,EACZnR,OAAQA,IAAM4P,EAAe,cAC7B1K,UAAW2K,aAAQ,EAARA,EAAUvX,WAKX,YAAhBqX,EAEF7f,EAAAA,cAACwb,EAAa,CAACvL,WA1WKoS,KAC5BvC,EAAe,kBA4WP9f,EAAAA,cAACge,EAAe,CACdC,QAAS0B,EACT5f,QAASugB,EACT/C,eAAgC,aAAhBsC,EAChB3P,OAAQA,KACc,UAAhB2P,GAAyBC,EAAe,WACxB,eAAhBD,GAA8BC,EAAe,SAC7B,QAAhBD,GAAuBC,EAAe,cACtB,aAAhBD,GAA4BC,EAAe,QAEjDlF,MAzTS0H,MACnB,OAAQzC,GACN,IAAK,UAEL,IAAK,QAUL,QACE,MAAO,GATT,IAAK,aACH,MAAO,oBACT,IAAK,MACH,MAAO,sBACT,IAAK,WACH,MAAO,sBACT,IAAK,cACH,MAAO,iBA4SMyC,GACPlF,SAvSYmF,MACtB,OAAQ1C,GACN,IAAK,UAEL,IAAK,QAUL,QACE,MAAO,GATT,IAAK,aACH,MAAO,iEACT,IAAK,MACH,MAAO,2CACT,IAAK,WACH,MAAO,sCACT,IAAK,cACH,MAAO,0CAAPta,OAAiDyZ,KA0RjCuD,GACVlT,KArRQmT,MAClB,OAAQ3C,GACN,IAAK,UAEL,IAAK,QAUL,QACE,MAAO,GATT,IAAK,aACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,WACH,MAAO,IACT,IAAK,cACH,MAAO,OAwQK2C,GACN/E,eAAe,GAnQDgF,MACxB,OAAQ5C,GACN,IAAK,UACH,OACE7f,EAAAA,cAACJ,EAAa,CACZE,WAAYygB,EACZxgB,QAASugB,EACTtB,YAAaA,EACb7O,QAASA,EACT5H,SAAUA,IAGhB,IAAK,QACH,OACEvI,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAACqI,EAAS,CACRC,UAAWkY,EACXjY,SAAUA,KAKlB,IAAK,aACH,OACEvI,EAAAA,cAACgQ,EAAmB,CAClBC,WAAYiR,EACZhR,OAAQA,IAAM4P,EAAe,SAC7B3P,QAASA,GAAW,mDACpBC,QAAS4O,EACT3T,UAAU0U,aAAQ,EAARA,EAAUvX,SAASuX,aAAQ,EAARA,EAAU1U,UACvC9C,SAAUA,EACVgI,iBAAkBA,IAIxB,IAAK,MACH,OACEvQ,EAAAA,cAACmV,EAAQ,CACPlF,WAAYoR,EACZjM,UAAW2K,aAAQ,EAARA,EAAUvX,QAI3B,IAAK,WACH,OACExI,EAAAA,cAAC+Z,EAAiB,CAChB9J,WAAYsR,EACZnM,UAAW2K,aAAQ,EAARA,EAAUvX,MACrB4H,QAAS4O,EACTzS,mBAAmBwT,aAAQ,EAARA,EAAUxT,oBAAqB,GAClDhE,SAAUA,IAIhB,IAAK,cACH,OACEvI,EAAAA,cAACoiB,EAAW,CACVnS,WAAYyR,EACZtM,UAAW2K,aAAQ,EAARA,EAAUvX,MACrBuW,YAAaA,EACb3O,QAAS4O,EACTrI,UAAWA,EACXpO,SAAUA,EACV4H,QAASA,EACT5D,mBAAmBwT,aAAQ,EAARA,EAAUxT,oBAAqB,CAAC,IAIzD,QACE,OACEvM,EAAAA,cAAA,OAAKC,UAAU,4CACbD,EAAAA,cAAA,OAAKC,UAAU,oFACfD,EAAAA,cAAA,KAAGC,UAAU,iBAAgB,iBA6L1BwiB,KAOf,C,cCriBa,IAAIC,EAAEC,OAAOC,IAAI,iBAAiBC,EAAEF,OAAOC,IAAI,gBAAgBlR,EAAEiR,OAAOC,IAAI,kBAAkBE,EAAEH,OAAOC,IAAI,qBAAqBjiB,EAAEgiB,OAAOC,IAAI,kBAAkBG,EAAEJ,OAAOC,IAAI,kBAAkBI,EAAEL,OAAOC,IAAI,iBAAiBK,EAAEN,OAAOC,IAAI,qBAAqBM,EAAEP,OAAOC,IAAI,kBAAkBO,EAAER,OAAOC,IAAI,cAAcQ,EAAET,OAAOC,IAAI,cAAcS,EAAEV,OAAOW,SACzW,IAAIC,EAAE,CAACC,UAAU,WAAW,OAAM,CAAE,EAAEC,mBAAmB,WAAW,EAAEC,oBAAoB,WAAW,EAAEC,gBAAgB,WAAW,GAAGC,EAAE1R,OAAO2R,OAAOC,EAAE,CAAC,EAAE,SAASC,EAAEC,EAAEC,EAAEza,GAAG0a,KAAK7hB,MAAM2hB,EAAEE,KAAKC,QAAQF,EAAEC,KAAKE,KAAKN,EAAEI,KAAKG,QAAQ7a,GAAG+Z,CAAC,CACwI,SAASe,IAAI,CAAyB,SAASC,EAAEP,EAAEC,EAAEza,GAAG0a,KAAK7hB,MAAM2hB,EAAEE,KAAKC,QAAQF,EAAEC,KAAKE,KAAKN,EAAEI,KAAKG,QAAQ7a,GAAG+Z,CAAC,CADxPQ,EAAES,UAAUC,iBAAiB,CAAC,EACpQV,EAAES,UAAUE,SAAS,SAASV,EAAEC,GAAG,GAAG,iBAAkBD,GAAG,mBAAoBA,GAAG,MAAMA,EAAE,MAAMtZ,MAAM,yHAAyHwZ,KAAKG,QAAQV,gBAAgBO,KAAKF,EAAEC,EAAE,WAAW,EAAEF,EAAES,UAAUG,YAAY,SAASX,GAAGE,KAAKG,QAAQZ,mBAAmBS,KAAKF,EAAE,cAAc,EAAgBM,EAAEE,UAAUT,EAAES,UAAsF,IAAII,EAAEL,EAAEC,UAAU,IAAIF,EACrfM,EAAEC,YAAYN,EAAEX,EAAEgB,EAAEb,EAAES,WAAWI,EAAEE,sBAAqB,EAAG,IAAIC,EAAEthB,MAAMC,QAAQshB,EAAE9S,OAAOsS,UAAUS,eAAeC,EAAE,CAACC,QAAQ,MAAMC,EAAE,CAACphB,KAAI,EAAGb,KAAI,EAAGkiB,QAAO,EAAGC,UAAS,GACtK,SAASC,EAAEvB,EAAEC,EAAEza,GAAG,IAAInJ,EAAEmlB,EAAE,CAAC,EAAEC,EAAE,KAAKC,EAAE,KAAK,GAAG,MAAMzB,EAAE,IAAI5jB,UAAK,IAAS4jB,EAAE9gB,MAAMuiB,EAAEzB,EAAE9gB,UAAK,IAAS8gB,EAAEjgB,MAAMyhB,EAAE,GAAGxB,EAAEjgB,KAAKigB,EAAEe,EAAEW,KAAK1B,EAAE5jB,KAAK+kB,EAAEH,eAAe5kB,KAAKmlB,EAAEnlB,GAAG4jB,EAAE5jB,IAAI,IAAIulB,EAAEtJ,UAAU5P,OAAO,EAAE,GAAG,IAAIkZ,EAAEJ,EAAExiB,SAASwG,OAAO,GAAG,EAAEoc,EAAE,CAAC,IAAI,IAAIC,EAAEpiB,MAAMmiB,GAAGE,EAAE,EAAEA,EAAEF,EAAEE,IAAID,EAAEC,GAAGxJ,UAAUwJ,EAAE,GAAGN,EAAExiB,SAAS6iB,CAAC,CAAC,GAAG7B,GAAGA,EAAE+B,aAAa,IAAI1lB,KAAKulB,EAAE5B,EAAE+B,kBAAe,IAASP,EAAEnlB,KAAKmlB,EAAEnlB,GAAGulB,EAAEvlB,IAAI,MAAM,CAAC2lB,SAAStD,EAAE7U,KAAKmW,EAAEhgB,IAAIyhB,EAAEtiB,IAAIuiB,EAAErjB,MAAMmjB,EAAES,OAAOf,EAAEC,QAAQ,CAChV,SAASe,EAAElC,GAAG,MAAM,iBAAkBA,GAAG,OAAOA,GAAGA,EAAEgC,WAAWtD,CAAC,CAAoG,IAAIyD,EAAE,OAAO,SAASC,EAAEpC,EAAEC,GAAG,MAAM,iBAAkBD,GAAG,OAAOA,GAAG,MAAMA,EAAEhgB,IAA7K,SAAgBggB,GAAG,IAAIC,EAAE,CAAC,IAAI,KAAK,IAAI,MAAM,MAAM,IAAID,EAAE9iB,QAAQ,QAAQ,SAAS8iB,GAAG,OAAOC,EAAED,EAAE,EAAE,CAA+EqC,CAAO,GAAGrC,EAAEhgB,KAAKigB,EAAEjY,SAAS,GAAG,CAC/W,SAASsa,EAAEtC,EAAEC,EAAEza,EAAEnJ,EAAEmlB,GAAG,IAAIC,SAASzB,EAAK,cAAcyB,GAAG,YAAYA,IAAEzB,EAAE,MAAK,IAAI0B,GAAE,EAAG,GAAG,OAAO1B,EAAE0B,GAAE,OAAQ,OAAOD,GAAG,IAAK,SAAS,IAAK,SAASC,GAAE,EAAG,MAAM,IAAK,SAAS,OAAO1B,EAAEgC,UAAU,KAAKtD,EAAE,KAAKG,EAAE6C,GAAE,GAAI,GAAGA,EAAE,OAAWF,EAAEA,EAANE,EAAE1B,GAASA,EAAE,KAAK3jB,EAAE,IAAI+lB,EAAEV,EAAE,GAAGrlB,EAAE0kB,EAAES,IAAIhc,EAAE,GAAG,MAAMwa,IAAIxa,EAAEwa,EAAE9iB,QAAQilB,EAAE,OAAO,KAAKG,EAAEd,EAAEvB,EAAEza,EAAE,GAAG,SAASwa,GAAG,OAAOA,CAAC,IAAI,MAAMwB,IAAIU,EAAEV,KAAKA,EADnW,SAAWxB,EAAEC,GAAG,MAAM,CAAC+B,SAAStD,EAAE7U,KAAKmW,EAAEnW,KAAK7J,IAAIigB,EAAE9gB,IAAI6gB,EAAE7gB,IAAId,MAAM2hB,EAAE3hB,MAAM4jB,OAAOjC,EAAEiC,OAAO,CACyQM,CAAEf,EAAEhc,IAAIgc,EAAExhB,KAAK0hB,GAAGA,EAAE1hB,MAAMwhB,EAAExhB,IAAI,IAAI,GAAGwhB,EAAExhB,KAAK9C,QAAQilB,EAAE,OAAO,KAAKnC,IAAIC,EAAEvL,KAAK8M,IAAI,EAAyB,GAAvBE,EAAE,EAAErlB,EAAE,KAAKA,EAAE,IAAIA,EAAE,IAAO0kB,EAAEf,GAAG,IAAI,IAAI4B,EAAE,EAAEA,EAAE5B,EAAEtX,OAAOkZ,IAAI,CAC/e,IAAIC,EAAExlB,EAAE+lB,EADweX,EACrfzB,EAAE4B,GAAeA,GAAGF,GAAGY,EAAEb,EAAExB,EAAEza,EAAEqc,EAAEL,EAAE,MAAM,GAAGK,EAPsU,SAAW7B,GAAG,OAAG,OAAOA,GAAG,iBAAkBA,EAAS,KAAsC,mBAAjCA,EAAEX,GAAGW,EAAEX,IAAIW,EAAE,eAA0CA,EAAE,IAAI,CAO5bwC,CAAExC,GAAG,mBAAoB6B,EAAE,IAAI7B,EAAE6B,EAAEF,KAAK3B,GAAG4B,EAAE,IAAIH,EAAEzB,EAAEyC,QAAQC,MAA6BhB,GAAGY,EAA1Bb,EAAEA,EAAE3X,MAA0BmW,EAAEza,EAAtBqc,EAAExlB,EAAE+lB,EAAEX,EAAEG,KAAkBJ,QAAQ,GAAG,WAAWC,EAAE,MAAMxB,EAAE0C,OAAO3C,GAAGtZ,MAAM,mDAAmD,oBAAoBuZ,EAAE,qBAAqB/R,OAAOC,KAAK6R,GAAG7hB,KAAK,MAAM,IAAI8hB,GAAG,6EAA6E,OAAOyB,CAAC,CACzZ,SAASkB,EAAE5C,EAAEC,EAAEza,GAAG,GAAG,MAAMwa,EAAE,OAAOA,EAAE,IAAI3jB,EAAE,GAAGmlB,EAAE,EAAmD,OAAjDc,EAAEtC,EAAE3jB,EAAE,GAAG,GAAG,SAAS2jB,GAAG,OAAOC,EAAE0B,KAAKnc,EAAEwa,EAAEwB,IAAI,GAAUnlB,CAAC,CAAC,SAASwmB,EAAE7C,GAAG,IAAI,IAAIA,EAAE8C,QAAQ,CAAC,IAAI7C,EAAED,EAAE+C,SAAQ9C,EAAEA,KAAM+C,KAAK,SAAS/C,GAAM,IAAID,EAAE8C,UAAU,IAAI9C,EAAE8C,UAAQ9C,EAAE8C,QAAQ,EAAE9C,EAAE+C,QAAQ9C,EAAC,EAAE,SAASA,GAAM,IAAID,EAAE8C,UAAU,IAAI9C,EAAE8C,UAAQ9C,EAAE8C,QAAQ,EAAE9C,EAAE+C,QAAQ9C,EAAC,IAAI,IAAID,EAAE8C,UAAU9C,EAAE8C,QAAQ,EAAE9C,EAAE+C,QAAQ9C,EAAE,CAAC,GAAG,IAAID,EAAE8C,QAAQ,OAAO9C,EAAE+C,QAAQE,QAAQ,MAAMjD,EAAE+C,OAAQ,CAC5Z,IAAIG,EAAE,CAAC/B,QAAQ,MAAMgC,EAAE,CAAClgB,WAAW,MAAMmgB,EAAE,CAACC,uBAAuBH,EAAEI,wBAAwBH,EAAEI,kBAAkBrC,GAAG,SAASsC,IAAI,MAAM9c,MAAM,2DAA4D,CACzM+c,EAAQC,SAAS,CAACpkB,IAAIsjB,EAAEnO,QAAQ,SAASuL,EAAEC,EAAEza,GAAGod,EAAE5C,EAAE,WAAWC,EAAE0D,MAAMzD,KAAK5H,UAAU,EAAE9S,EAAE,EAAEoe,MAAM,SAAS5D,GAAG,IAAIC,EAAE,EAAuB,OAArB2C,EAAE5C,EAAE,WAAWC,GAAG,GAAUA,CAAC,EAAE4D,QAAQ,SAAS7D,GAAG,OAAO4C,EAAE5C,EAAE,SAASA,GAAG,OAAOA,CAAC,IAAI,EAAE,EAAE8D,KAAK,SAAS9D,GAAG,IAAIkC,EAAElC,GAAG,MAAMtZ,MAAM,yEAAyE,OAAOsZ,CAAC,GAAGyD,EAAQ5jB,UAAUkgB,EAAE0D,EAAQM,SAASrW,EAAE+V,EAAQO,SAASrnB,EAAE8mB,EAAQQ,cAAc1D,EAAEkD,EAAQS,WAAWpF,EAAE2E,EAAQU,SAASjF,EAClcuE,EAAQW,mDAAmDhB,EAAEK,EAAQY,IAAIb,EACzEC,EAAQa,aAAa,SAAStE,EAAEC,EAAEza,GAAG,GAAG,MAAOwa,EAAc,MAAMtZ,MAAM,iFAAiFsZ,EAAE,KAAK,IAAI3jB,EAAEujB,EAAE,CAAC,EAAEI,EAAE3hB,OAAOmjB,EAAExB,EAAEhgB,IAAIyhB,EAAEzB,EAAE7gB,IAAIuiB,EAAE1B,EAAEiC,OAAO,GAAG,MAAMhC,EAAE,CAAoE,QAAnE,IAASA,EAAE9gB,MAAMsiB,EAAExB,EAAE9gB,IAAIuiB,EAAER,EAAEC,cAAS,IAASlB,EAAEjgB,MAAMwhB,EAAE,GAAGvB,EAAEjgB,KAAQggB,EAAEnW,MAAMmW,EAAEnW,KAAKkY,aAAa,IAAIH,EAAE5B,EAAEnW,KAAKkY,aAAa,IAAIF,KAAK5B,EAAEe,EAAEW,KAAK1B,EAAE4B,KAAKT,EAAEH,eAAeY,KAAKxlB,EAAEwlB,QAAG,IAAS5B,EAAE4B,SAAI,IAASD,EAAEA,EAAEC,GAAG5B,EAAE4B,GAAG,CAAC,IAAIA,EAAEvJ,UAAU5P,OAAO,EAAE,GAAG,IAAImZ,EAAExlB,EAAE2C,SAASwG,OAAO,GAAG,EAAEqc,EAAE,CAACD,EAAEniB,MAAMoiB,GACrf,IAAI,IAAIC,EAAE,EAAEA,EAAED,EAAEC,IAAIF,EAAEE,GAAGxJ,UAAUwJ,EAAE,GAAGzlB,EAAE2C,SAAS4iB,CAAC,CAAC,MAAM,CAACI,SAAStD,EAAE7U,KAAKmW,EAAEnW,KAAK7J,IAAIwhB,EAAEriB,IAAIsiB,EAAEpjB,MAAMhC,EAAE4lB,OAAOP,EAAE,EAAE+B,EAAQc,cAAc,SAASvE,GAAqK,OAAlKA,EAAE,CAACgC,SAAShD,EAAEwF,cAAcxE,EAAEyE,eAAezE,EAAE0E,aAAa,EAAEC,SAAS,KAAKC,SAAS,KAAKC,cAAc,KAAKC,YAAY,OAAQH,SAAS,CAAC3C,SAASjD,EAAEgG,SAAS/E,GAAUA,EAAE4E,SAAS5E,CAAC,EAAEyD,EAAQrkB,cAAcmiB,EAAEkC,EAAQuB,cAAc,SAAShF,GAAG,IAAIC,EAAEsB,EAAE0D,KAAK,KAAKjF,GAAY,OAATC,EAAEpW,KAAKmW,EAASC,CAAC,EAAEwD,EAAQyB,UAAU,WAAW,MAAM,CAAC/D,QAAQ,KAAK,EAC9dsC,EAAQ7kB,WAAW,SAASohB,GAAG,MAAM,CAACgC,SAAS/C,EAAEkG,OAAOnF,EAAE,EAAEyD,EAAQ2B,eAAelD,EAAEuB,EAAQ4B,KAAK,SAASrF,GAAG,MAAM,CAACgC,SAAS5C,EAAEkG,SAAS,CAACxC,SAAS,EAAEC,QAAQ/C,GAAGuF,MAAM1C,EAAE,EAAEY,EAAQ+B,KAAK,SAASxF,EAAEC,GAAG,MAAM,CAAC+B,SAAS7C,EAAEtV,KAAKmW,EAAEyF,aAAQ,IAASxF,EAAE,KAAKA,EAAE,EAAEwD,EAAQiC,gBAAgB,SAAS1F,GAAG,IAAIC,EAAEkD,EAAElgB,WAAWkgB,EAAElgB,WAAW,CAAC,EAAE,IAAI+c,GAAG,CAAC,QAAQmD,EAAElgB,WAAWgd,CAAC,CAAC,EAAEwD,EAAQkC,aAAanC,EAAEC,EAAQmC,YAAY,SAAS5F,EAAEC,GAAG,OAAOiD,EAAE/B,QAAQyE,YAAY5F,EAAEC,EAAE,EAAEwD,EAAQoC,WAAW,SAAS7F,GAAG,OAAOkD,EAAE/B,QAAQ0E,WAAW7F,EAAE,EAC3fyD,EAAQqC,cAAc,WAAW,EAAErC,EAAQsC,iBAAiB,SAAS/F,GAAG,OAAOkD,EAAE/B,QAAQ4E,iBAAiB/F,EAAE,EAAEyD,EAAQxe,UAAU,SAAS+a,EAAEC,GAAG,OAAOiD,EAAE/B,QAAQlc,UAAU+a,EAAEC,EAAE,EAAEwD,EAAQuC,MAAM,WAAW,OAAO9C,EAAE/B,QAAQ6E,OAAO,EAAEvC,EAAQwC,oBAAoB,SAASjG,EAAEC,EAAEza,GAAG,OAAO0d,EAAE/B,QAAQ8E,oBAAoBjG,EAAEC,EAAEza,EAAE,EAAEie,EAAQyC,mBAAmB,SAASlG,EAAEC,GAAG,OAAOiD,EAAE/B,QAAQ+E,mBAAmBlG,EAAEC,EAAE,EAAEwD,EAAQ0C,gBAAgB,SAASnG,EAAEC,GAAG,OAAOiD,EAAE/B,QAAQgF,gBAAgBnG,EAAEC,EAAE,EACzdwD,EAAQ2C,QAAQ,SAASpG,EAAEC,GAAG,OAAOiD,EAAE/B,QAAQiF,QAAQpG,EAAEC,EAAE,EAAEwD,EAAQ4C,WAAW,SAASrG,EAAEC,EAAEza,GAAG,OAAO0d,EAAE/B,QAAQkF,WAAWrG,EAAEC,EAAEza,EAAE,EAAEie,EAAQ6C,OAAO,SAAStG,GAAG,OAAOkD,EAAE/B,QAAQmF,OAAOtG,EAAE,EAAEyD,EAAQnhB,SAAS,SAAS0d,GAAG,OAAOkD,EAAE/B,QAAQ7e,SAAS0d,EAAE,EAAEyD,EAAQ8C,qBAAqB,SAASvG,EAAEC,EAAEza,GAAG,OAAO0d,EAAE/B,QAAQoF,qBAAqBvG,EAAEC,EAAEza,EAAE,EAAEie,EAAQ+C,cAAc,WAAW,OAAOtD,EAAE/B,QAAQqF,eAAe,EAAE/C,EAAQgD,QAAQ,Q,gBCtBlaC,EAAOjD,QAAU,EAAjB,I","sources":["webpack://OnairosLaravel/./src/components/WelcomeScreen.jsx","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/shared/src/utils.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/defaultAttributes.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/Icon.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/icons/check.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/createLucideIcon.js","webpack://OnairosLaravel/./src/theme/colors.js","webpack://OnairosLaravel/./src/components/ui/PrimaryButton.jsx","webpack://OnairosLaravel/./src/components/EmailAuth.js","webpack://OnairosLaravel/./src/components/UniversalOnboarding.jsx","webpack://OnairosLaravel/./src/components/PinSetup.js","webpack://OnairosLaravel/./src/components/DataRequest.js","webpack://OnairosLaravel/./src/components/TrainingComponent.jsx","webpack://OnairosLaravel/./src/components/LoadingScreen.jsx","webpack://OnairosLaravel/./src/utils/responseFormatter.js","webpack://OnairosLaravel/./src/components/ui/PageLayout.jsx","webpack://OnairosLaravel/./src/onairosButton.jsx","webpack://OnairosLaravel/./node_modules/react/cjs/react.production.min.js","webpack://OnairosLaravel/./node_modules/react/index.js"],"sourcesContent":["import React from 'react';\nimport { COLORS } from '../theme/colors.js';\n\nexport default function WelcomeScreen({ onContinue, onClose }) {\n return (\n <div className=\"w-full flex flex-col\" style={{ height: '100%' }}>\n {/* Content - Flexible center area */}\n <div className=\"px-6 text-center flex-1 flex flex-col justify-center\">\n {/* Avatar */}\n <div className=\"mb-8 flex justify-center\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-2xl flex items-center justify-center\">\n <div className=\"w-8 h-8 relative\">\n {/* VR Headset Icon */}\n <svg viewBox=\"0 0 32 32\" className=\"w-full h-full\">\n <path\n d=\"M4 12c0-2.2 1.8-4 4-4h16c2.2 0 4 1.8 4 4v8c0 2.2-1.8 4-4 4h-4l-2-3h-4l-2 3H8c-2.2 0-4-1.8-4-4v-8z\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"22\" cy=\"16\" r=\"2\" fill=\"currentColor\" />\n <path d=\"M12 24c0-1.1.9-2 2-2h4c1.1 0 2 .9 2 2\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n </svg>\n </div>\n </div>\n </div>\n\n {/* Welcome Text */}\n <p className=\"text-gray-500 text-sm mb-2\">Welcome to</p>\n\n {/* Main Title */}\n <h1 className=\"text-4xl font-bold text-gray-900 mb-6 text-balance\">Onairos</h1>\n\n {/* Description */}\n <p className=\"text-gray-600 text-base leading-relaxed mb-12 text-pretty px-2\">\n OnairOS personalizes your digital experience on every app so you can just enjoy being you!\n </p>\n </div>\n\n {/* Get Started Button - Fixed at bottom */}\n <div className=\"px-6 pb-8 flex-shrink-0\">\n <button\n className=\"w-full bg-gray-900 hover:bg-gray-800 text-white rounded-full py-4 text-base font-medium flex items-center justify-center gap-2 transition-colors\"\n onClick={onContinue}\n >\n Get Started\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n );\n}\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => {\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","// Theme colors for Onairos SDK - derived from mobile design\nexport const COLORS = {\n // Button gradient colors\n btnGradStart: '#1A1A1A',\n btnGradEnd: '#000000',\n \n // Button text and icon colors\n btnLabel: '#FFFFFF',\n btnBorder: 'rgba(0, 0, 0, 0.2)',\n \n // Icon circle gradient colors\n iconCircleGradientStart: '#333333',\n iconCircleGradientEnd: '#1A1A1A',\n \n // Background colors\n background: '#FFFFFF',\n backgroundSecondary: '#F8F9FA',\n \n // Text colors\n textPrimary: '#1A1A1A',\n textSecondary: '#6B7280',\n textMuted: '#9CA3AF',\n \n // Border colors\n border: '#E5E7EB',\n borderLight: '#F3F4F6',\n \n // Status colors\n success: '#10B981',\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#3B82F6',\n \n // Interactive states\n hover: 'rgba(0, 0, 0, 0.05)',\n pressed: 'rgba(0, 0, 0, 0.1)',\n focus: 'rgba(59, 130, 246, 0.1)',\n};\n\nexport default COLORS; ","import React, { useState } from 'react';\nimport { COLORS } from '../../theme/colors.js';\n\n// Icon Circle component matching the React Native version\nconst IconCircle = ({ \n size = 40, \n children,\n className = ''\n}) => {\n return (\n <div \n className={`relative flex items-center justify-center border border-black border-opacity-25 ${className}`}\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n background: `linear-gradient(to bottom, ${COLORS.iconCircleGradientStart}, ${COLORS.iconCircleGradientEnd})`\n }}\n >\n {children || (\n <span \n className=\"font-semibold opacity-95\"\n style={{\n fontSize: '20px',\n color: COLORS.btnLabel,\n backgroundColor: 'transparent'\n }}\n >\n →\n </span>\n )}\n </div>\n );\n};\n\n// Primary Button component matching the React Native design\nconst PrimaryButton = ({\n label = \"Get Started\",\n onClick,\n iconRight,\n loading = false,\n disabled = false,\n testId,\n className = '',\n style = {},\n textStyle = {},\n centered = false,\n ...props\n}) => {\n const [pressed, setPressed] = useState(false);\n\n const handleMouseDown = () => setPressed(true);\n const handleMouseUp = () => setPressed(false);\n const handleMouseLeave = () => setPressed(false);\n\n const buttonStyle = {\n height: '48px',\n borderRadius: '100px',\n border: `1px solid ${COLORS.btnBorder}`,\n background: `linear-gradient(to bottom, ${COLORS.btnGradStart}, ${COLORS.btnGradEnd})`,\n position: 'relative',\n overflow: 'hidden',\n width: centered ? 'auto' : '100%',\n minWidth: centered ? '250px' : 'auto',\n maxWidth: centered ? '350px' : 'none',\n margin: centered ? '0 auto' : '0',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.65 : 1,\n boxShadow: disabled ? 'none' : '20px 30px 40px rgba(0,0,0,0.10)',\n transition: 'all 0.2s ease',\n ...style\n };\n\n const pressedOverlayStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.1)',\n borderRadius: '100px',\n opacity: pressed ? 1 : 0,\n transition: 'opacity 0.1s ease'\n };\n\n const textContainerStyle = {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'transparent'\n };\n\n const iconPositionStyle = {\n position: 'absolute',\n right: '4px',\n top: '4px',\n bottom: '4px',\n width: '40px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'transparent'\n };\n\n const labelStyle = {\n fontFamily: 'Inter, system-ui, sans-serif',\n fontWeight: '600',\n fontSize: '16px',\n color: COLORS.btnLabel,\n textAlign: 'center',\n backgroundColor: 'transparent',\n ...textStyle\n };\n\n return (\n <button\n className={`relative ${className}`}\n style={buttonStyle}\n onClick={onClick}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseLeave}\n disabled={disabled || loading}\n data-testid={testId}\n aria-label={label}\n {...props}\n >\n {/* Pressed state overlay */}\n <div style={pressedOverlayStyle} />\n\n {/* Centered text container */}\n <div style={textContainerStyle}>\n {loading ? (\n <div \n className=\"animate-spin rounded-full border-2 border-white border-t-transparent\"\n style={{ width: '20px', height: '20px' }}\n />\n ) : (\n <span style={labelStyle}>{label}</span>\n )}\n </div>\n\n {/* Icon in fixed position on right */}\n <div style={iconPositionStyle}>\n {!loading && (iconRight || <IconCircle />)}\n </div>\n </button>\n );\n};\n\nexport { IconCircle };\nexport default PrimaryButton; ","import React, { useState, useEffect } from 'react';\nimport { Mail, ArrowRight, Check } from 'lucide-react';\nimport PrimaryButton from './ui/PrimaryButton.jsx';\nimport { COLORS } from '../theme/colors.js';\n\nexport default function EmailAuth({ onSuccess, testMode = true }) {\n const [email, setEmail] = useState('');\n const [code, setCode] = useState('');\n const [step, setStep] = useState('email'); // 'email' | 'code' | 'success'\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n\n // Auto-focus first PIN input when code step loads\n useEffect(() => {\n if (step === 'code') {\n // Small delay to ensure DOM is ready\n setTimeout(() => {\n const firstInput = document.querySelector('input[maxLength=\"1\"]');\n if (firstInput) {\n firstInput.focus();\n }\n }, 100);\n }\n }, [step]);\n\n const validateEmail = (email) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleEmailSubmit = async (e) => {\n e.preventDefault();\n setError('');\n\n if (!validateEmail(email)) {\n setError('Please enter a valid email address');\n return;\n }\n\n setIsLoading(true);\n\n try {\n if (testMode) {\n // Test mode: Skip API call completely, simulate instant success\n console.log('🧪 Test mode: Simulating email verification request for:', email);\n setTimeout(() => {\n setStep('code');\n setIsLoading(false);\n console.log('🧪 Test mode: Email verification simulated successfully');\n }, 800); // Shorter delay for faster testing\n } else {\n // Production mode: Use proper email verification API from schema\n const apiKey = window.onairosApiKey || 'test-key';\n \n const response = await fetch('https://api2.onairos.uk/email/verification', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`\n },\n body: JSON.stringify({ \n email, \n action: 'request' \n }),\n });\n\n if (!response.ok) {\n throw new Error('Failed to send verification code');\n }\n\n const data = await response.json();\n if (!data.success) {\n throw new Error(data.error || 'Failed to send verification code');\n }\n\n console.log('📧 Email request response:', data);\n\n setStep('code');\n setIsLoading(false);\n }\n } catch (error) {\n console.error('Email request error:', error);\n setError(error.message);\n setIsLoading(false);\n }\n };\n\n const handleGoogleAuth = async () => {\n try {\n // Use the same Google OAuth logic as UniversalOnboarding\n const sdkConfig = {\n baseUrl: 'https://api2.onairos.uk',\n apiKey: window.onairosApiKey || 'test-key',\n enableHealthMonitoring: true,\n enableAutoRefresh: true,\n enableConnectionValidation: true\n };\n\n const username = localStorage.getItem('username') || localStorage.getItem('onairosUser')?.email || 'user@example.com';\n \n const authorizeUrl = `${sdkConfig.baseUrl}/gmail/authorize`;\n const params = new URLSearchParams({\n username: username,\n sdk_type: 'web',\n return_url: window.location.origin + '/oauth-callback.html'\n });\n\n const fullUrl = `${authorizeUrl}?${params.toString()}`;\n console.log('🔗 Starting Google OAuth from email flow...');\n console.log('📋 Google OAuth URL:', fullUrl);\n\n // Open popup for OAuth\n const popup = window.open(\n fullUrl,\n 'google_oauth',\n 'width=500,height=600,scrollbars=yes,resizable=yes'\n );\n\n if (!popup) {\n throw new Error('Popup blocked. Please allow popups for this site.');\n }\n\n // Monitor popup for completion\n const checkInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(checkInterval);\n console.log('✅ Google OAuth popup closed');\n // Simulate successful OAuth for now\n onSuccess({ \n email: 'user@gmail.com', \n method: 'google',\n connectedAccounts: { Google: true }\n });\n }\n }, 1000);\n\n } catch (error) {\n console.error('❌ Google OAuth failed:', error);\n setError('Google authentication failed. Please try again.');\n }\n };\n\n const handleCodeSubmit = async (e) => {\n e.preventDefault();\n setError('');\n setIsLoading(true);\n\n try {\n if (testMode) {\n // Test mode: Skip API call completely, simulate verification\n console.log('🧪 Test mode: Simulating code verification for:', email, 'with code:', code);\n \n if (code === '123456' || code.length === 6) {\n setStep('success');\n setTimeout(() => {\n // Simulate new user for design testing\n const simulatedResponse = { \n email, \n verified: true, \n token: 'test-token-' + Date.now(),\n userName: email.split('@')[0],\n existingUser: false, // Always simulate new user for full flow testing\n accountInfo: null,\n isNewUser: true,\n flowType: 'onboarding',\n adminMode: false,\n userCreated: true,\n accountDetails: {\n email: email,\n createdAt: new Date().toISOString(),\n testAccount: true\n }\n };\n console.log('🧪 Test mode: Simulated verification successful, user data:', simulatedResponse);\n onSuccess(simulatedResponse);\n }, 600); // Faster for design testing\n } else {\n setError('Invalid code. Use any 6-digit code (e.g., 123456) for testing.');\n setIsLoading(false);\n }\n } else {\n // Production mode: Use real email verification API from schema\n const apiKey = window.onairosApiKey || 'test-key';\n \n const response = await fetch('https://api2.onairos.uk/email/verification', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`\n },\n body: JSON.stringify({ \n email, \n action: 'verify',\n code \n }),\n });\n\n if (!response.ok) {\n throw new Error('Invalid verification code');\n }\n\n const data = await response.json();\n \n if (!data.success) {\n throw new Error(data.error || 'Verification failed');\n }\n\n console.log('📧 Email verification response:', data);\n\n setStep('success');\n setTimeout(() => {\n // Pass complete API response for flow determination\n onSuccess({ \n email, \n verified: true, \n token: data.token || data.jwtToken,\n userName: data.userName,\n existingUser: data.existingUser,\n accountInfo: data.accountInfo,\n isNewUser: !data.existingUser, // Set based on API response\n flowType: data.existingUser ? 'dataRequest' : 'onboarding',\n adminMode: data.adminMode,\n userCreated: data.userCreated,\n accountDetails: data.accountDetails\n });\n }, 1000);\n }\n } catch (error) {\n console.error('Email verification error:', error);\n setError(error.message || 'Invalid code. Please try again.');\n setIsLoading(false);\n }\n };\n\n const renderEmailStep = () => (\n <div className=\"w-full flex flex-col\" style={{ height: '100%' }}>\n {/* Content - Flexible center area */}\n <div className=\"px-12 pt-16 pb-8 text-center flex-1 flex flex-col\">\n <div className=\"mb-8\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2 text-balance leading-tight\">\n Use pre-existing Persona or create a new one in seconds\n </h1>\n <p className=\"text-gray-600 text-base\">Sign in or create an account</p>\n </div>\n\n <div className=\"mb-6\">\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"Enter your email\"\n className=\"w-full max-w-sm mx-auto px-4 py-4 text-base bg-gray-50 border-0 rounded-xl placeholder:text-gray-400 focus:bg-white focus:ring-2 focus:ring-gray-200 outline-none transition-all duration-200\"\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n required\n />\n </div>\n\n <div className=\"mb-6 text-center\">\n <span className=\"text-gray-500 text-sm\">Or</span>\n </div>\n\n <div className=\"mb-8\">\n <button\n type=\"button\"\n className=\"w-full max-w-sm mx-auto py-4 text-base font-medium rounded-xl border border-gray-200 hover:bg-gray-50 flex items-center justify-center gap-3 bg-transparent transition-colors\"\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n onClick={handleGoogleAuth}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n Continue with Google\n </button>\n </div>\n\n {/* Error Display */}\n {error && (\n <div className=\"mb-6\">\n <p className=\"text-sm text-center\" style={{ color: COLORS.error }}>{error}</p>\n </div>\n )}\n </div>\n\n {/* Continue Button - Fixed at bottom */}\n <div className=\"px-12 pb-8 flex-shrink-0\">\n <button\n className=\"w-full max-w-sm mx-auto bg-gray-900 hover:bg-gray-800 text-white rounded-full py-4 text-base font-medium flex items-center justify-center gap-2 transition-colors disabled:opacity-50\"\n onClick={handleEmailSubmit}\n disabled={isLoading || !email.trim()}\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n >\n {isLoading ? 'Loading...' : 'Continue'}\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n );\n\n const renderCodeStep = () => (\n <div className=\"w-full flex flex-col\" style={{ height: '100%' }}>\n {/* Heading - matching VerificationStep.tsx */}\n <div className=\"w-full pt-16 px-12 mb-10 text-center\">\n <h1 \n className=\"font-bold mb-2\"\n style={{ \n fontFamily: 'IBM Plex Sans, system-ui, sans-serif',\n fontWeight: '700',\n fontSize: '24px',\n lineHeight: '32px',\n color: COLORS.textPrimary\n }}\n >\n Enter verification code\n </h1>\n <p \n className=\"mb-2\"\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif',\n fontWeight: '400',\n fontSize: '16px',\n lineHeight: '24px',\n color: COLORS.textSecondary\n }}\n >\n We've sent a 6-digit code to {email}\n </p>\n </div>\n\n\n {/* Code Input - matching VerificationStep design with individual digit boxes */}\n <div className=\"px-12 mb-6\">\n <div className=\"flex justify-center space-x-3\">\n {Array.from({ length: 6 }, (_, index) => (\n <input\n key={index}\n type=\"text\"\n maxLength=\"1\"\n value={code[index] || ''}\n onChange={(e) => {\n const newCode = code.split('');\n newCode[index] = e.target.value;\n setCode(newCode.join(''));\n \n // Auto-focus next input\n if (e.target.value && index < 5) {\n const nextInput = e.target.parentElement?.children[index + 1];\n if (nextInput) nextInput.focus();\n }\n }}\n onKeyDown={(e) => {\n // Handle backspace to focus previous input\n if (e.key === 'Backspace' && !code[index] && index > 0) {\n const prevInput = e.target.parentElement?.children[index - 1];\n if (prevInput) prevInput.focus();\n }\n }}\n className=\"w-12 h-12 border rounded-lg text-center text-lg font-medium focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none\"\n style={{ \n borderColor: COLORS.border,\n backgroundColor: COLORS.background,\n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n />\n ))}\n </div>\n </div>\n\n {/* Error Display */}\n {error && (\n <div className=\"px-12 mb-6\">\n <p className=\"text-sm text-center\" style={{ color: COLORS.error }}>{error}</p>\n </div>\n )}\n\n {/* Continue Button - positioned right below code inputs */}\n <div className=\"px-12 mb-6\">\n <div className=\"max-w-sm mx-auto\">\n <PrimaryButton\n label=\"Continue\"\n onClick={handleCodeSubmit}\n loading={isLoading}\n disabled={isLoading || code.length !== 6}\n testId=\"verify-code-button\"\n />\n </div>\n </div>\n\n {/* Spacer */}\n <div style={{ flex: 1, minHeight: '20px' }} />\n\n {/* Back to email option */}\n <div className=\"px-12 w-full\">\n <div className=\"max-w-sm mx-auto\">\n <button\n type=\"button\"\n onClick={() => setStep('email')}\n className=\"w-full py-2 px-4 font-medium transition-colors text-sm\"\n style={{ color: COLORS.textSecondary }}\n >\n Use a different email\n </button>\n </div>\n </div>\n </div>\n );\n\n const renderSuccessStep = () => (\n <div className=\"w-full flex flex-col items-center space-y-6 pt-16 px-12\">\n <div \n className=\"flex items-center justify-center w-16 h-16 rounded-full\"\n style={{ backgroundColor: '#D1FAE5' }}\n >\n <Check className=\"w-8 h-8\" style={{ color: COLORS.success }} />\n </div>\n \n <div className=\"text-center space-y-2\">\n <h2 \n className=\"text-xl font-semibold\"\n style={{ color: COLORS.textPrimary }}\n >\n Email verified!\n </h2>\n <p style={{ color: COLORS.textSecondary }}>Setting up your account...</p>\n </div>\n\n <div className=\"w-8 h-8\">\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\n </div>\n </div>\n );\n\n return (\n <div className=\"w-full\">\n {step === 'email' && renderEmailStep()}\n {step === 'code' && renderCodeStep()}\n {step === 'success' && renderSuccessStep()}\n </div>\n );\n} \n","import React, { useState, useEffect } from 'react';\n\n// Default persona images - using public folder paths for consumer compatibility\nconst defaultPersonaImages = {\n 1: 'https://anushkasirv.sirv.com/persona1.png',\n 2: 'https://anushkasirv.sirv.com/persona2.png', \n 3: 'https://anushkasirv.sirv.com/persona3.png',\n 4: 'https://anushkasirv.sirv.com/persona4.png',\n 5: 'https://anushkasirv.sirv.com/persona5.png',\n};\n\nconst platforms = [\n { \n name: 'Gmail', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\">\n <path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"/>\n <path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"/>\n <path fill=\"#FBBC05\" d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"/>\n <path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'gmail',\n description: \"We use your emails and search patterns to better understand your interests and communication style.\"\n },\n { \n name: 'Google', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\">\n <path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"/>\n <path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"/>\n <path fill=\"#FBBC05\" d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"/>\n <path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'google',\n description: \"We use your search, YouTube, and location signals to better understand your interests and routines.\"\n },\n { \n name: 'Reddit', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"#FF4500\">\n <path d=\"M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 0 1-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 0 1 .042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 0 1 4.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 0 1 .14-.197.35.35 0 0 1 .238-.042l2.906.617a1.214 1.214 0 0 1 1.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 0 0-.231.094.33.33 0 0 0 0 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 0 0 .029-.463.33.33 0 0 0-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 0 0-.232-.095z\" />\n </svg>\n ), \n color: 'bg-white', \n connector: 'reddit',\n description: \"We use your posts and interactions to better understand your interests and preferences.\"\n },\n { \n name: 'Instagram', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\">\n <defs>\n <radialGradient id=\"instagram-gradient\" cx=\"0.5\" cy=\"1\" r=\"1\">\n <stop offset=\"0%\" stopColor=\"#FD5949\" />\n <stop offset=\"50%\" stopColor=\"#D6249F\" />\n <stop offset=\"100%\" stopColor=\"#285AEB\" />\n </radialGradient>\n </defs>\n <path fill=\"url(#instagram-gradient)\" d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.073-1.689-.073-4.849 0-3.204.013-3.583.072-4.948.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'instagram',\n description: \"We use your photos and interactions to better understand your visual preferences and lifestyle.\"\n },\n { \n name: 'LinkedIn', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"#0077B5\">\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n ), \n color: 'bg-white', \n connector: 'linkedin',\n description: \"We use your professional network and content to better understand your career interests.\"\n },\n { \n name: 'Pinterest', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"#E60023\">\n <path d=\"M12 0C5.373 0 0 5.372 0 12s5.373 12 12 12c6.628 0 12-5.372 12-12S18.628 0 12 0zm0 19c-.721 0-1.418-.109-2.073-.312.286-.465.713-1.227.87-1.835l.437-1.664c.229.436.895.8 1.604.8 2.111 0 3.633-1.941 3.633-4.354 0-2.312-1.895-4.049-4.218-4.049-2.972 0-4.684 1.946-4.684 4.338 0 1.083.424 2.42 1.218 2.847.131.07.201.04.232-.107.023-.106.151-.602.2-.784.067-.25.041-.336-.145-.553-.408-.474-.615-1.088-.615-1.72 0-1.658 1.222-3.259 3.297-3.259 1.798 0 3.064 1.244 3.064 3.018 0 2.019-.864 3.423-2.024 3.423-.633 0-1.106-.537-.954-1.196.181-.788.532-1.637.532-2.204 0-.508-.267-.932-.822-.932-.652 0-1.176.685-1.176 1.602 0 .584.197.98.197.98l-.790 3.396C6.595 16.85 6.017 14.47 6.017 12c0-3.313 2.687-6 6-6s6 2.687 6 6-2.687 6-6 6z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'pinterest',\n description: \"We use your pins and boards to better understand your creative interests and style preferences.\"\n }\n];\n\n// Enhanced SDK configuration\nconst sdkConfig = {\n apiKey: process.env.REACT_APP_ONAIROS_API_KEY || 'onairos_web_sdk_live_key_2024',\n baseUrl: process.env.REACT_APP_ONAIROS_BASE_URL || 'https://api2.onairos.uk',\n sdkType: 'web', // web, mobile, desktop\n enableHealthMonitoring: true,\n enableAutoRefresh: true,\n enableConnectionValidation: true\n};\n\n/**\n * UniversalOnboarding Component - Compact & Enhanced\n * Displays a streamlined onboarding screen for data connections\n */\nexport default function UniversalOnboarding({ onComplete, onBack, appIcon, appName = 'App', personaImages: personaImagesProp, priorityPlatform = null, testMode = false }) {\n // Use provided persona images or fallback to defaults\n const personaImages = personaImagesProp ?? defaultPersonaImages;\n \n const [connectedAccounts, setConnectedAccounts] = useState({});\n const [isConnecting, setIsConnecting] = useState(false);\n const [connectingPlatform, setConnectingPlatform] = useState(null);\n const [connectionErrors, setConnectionErrors] = useState({});\n const [connectionHealth, setConnectionHealth] = useState({});\n const [healthScore, setHealthScore] = useState(0);\n\n // Mobile device detection\n const isMobileDevice = () => {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ||\n (window.innerWidth <= 768);\n };\n\n // Handle mobile OAuth return\n useEffect(() => {\n const handleOAuthReturn = () => {\n const platform = localStorage.getItem('onairos_oauth_platform');\n if (platform) {\n console.log(`📱 OAuth return detected for: ${platform}`);\n \n // Clear OAuth state\n localStorage.removeItem('onairos_oauth_platform');\n localStorage.removeItem('onairos_oauth_return');\n \n // Mark as connected\n setConnectedAccounts(prev => ({\n ...prev,\n [platform]: true\n }));\n \n // Clear any errors\n setConnectionErrors(prev => ({\n ...prev,\n [platform]: null\n }));\n \n console.log(`✅ ${platform} marked as connected from OAuth return`);\n }\n };\n\n handleOAuthReturn();\n }, []);\n\n const connectToPlatform = async (platformName) => {\n console.log(`🚀 connectToPlatform called for: ${platformName}`);\n \n const platform = platforms.find(p => p.name === platformName);\n if (!platform?.connector) {\n console.error(`❌ No connector found for platform: ${platformName}`);\n return false;\n }\n\n try {\n setIsConnecting(true);\n setConnectingPlatform(platformName);\n \n // Clear any previous errors\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n \n console.log(`🔗 Starting OAuth connection for ${platformName}...`);\n \n const username = localStorage.getItem('username') || localStorage.getItem('onairosUser')?.email || 'user@example.com';\n \n // Enhanced authorize endpoint with SDK type\n const authorizeUrl = `${sdkConfig.baseUrl}/${platform.connector}/authorize`;\n \n const response = await fetch(authorizeUrl, {\n method: 'POST',\n headers: {\n 'x-api-key': sdkConfig.apiKey,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n session: {\n username: username\n }\n })\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const responseData = await response.json();\n console.log(`📋 ${platformName} OAuth response:`, responseData);\n \n // Check for platform-specific URL keys with multiple fallbacks\n const platformUrlKeys = {\n 'youtube': ['youtubeURL', 'youtubeUrl', 'youtube_url'],\n 'linkedin': ['linkedinURL', 'linkedinUrl', 'linkedin_url'], \n 'reddit': ['redditURL', 'redditUrl', 'reddit_url'],\n 'pinterest': ['pinterestURL', 'pinterestUrl', 'pinterest_url'],\n 'instagram': ['instagramURL', 'instagramUrl', 'instagram_url'],\n 'github': ['githubURL', 'githubUrl', 'github_url'],\n 'facebook': ['facebookURL', 'facebookUrl', 'facebook_url'],\n 'gmail': ['gmailURL', 'gmailUrl', 'gmail_url']\n };\n \n const possibleKeys = platformUrlKeys[platform.connector] || [\n `${platform.connector}URL`,\n `${platform.connector}Url`, \n `${platform.connector}_url`,\n 'platformURL',\n 'authUrl', \n 'url'\n ];\n \n let oauthUrl = null;\n let usedKey = null;\n \n // Try each possible key\n for (const key of possibleKeys) {\n if (responseData[key]) {\n oauthUrl = responseData[key];\n usedKey = key;\n break;\n }\n }\n \n if (!oauthUrl) {\n console.error(`❌ No OAuth URL found for ${platformName}:`);\n console.error(`Expected one of:`, possibleKeys);\n console.error(`Response keys:`, Object.keys(responseData));\n console.error(`Full response:`, responseData);\n throw new Error(`No OAuth URL found. Backend should return one of: ${possibleKeys.join(', ')}`);\n }\n \n console.log(`✅ Found OAuth URL for ${platformName} using key: ${usedKey}`);\n \n if (isMobileDevice()) {\n // Mobile: Use redirect flow\n localStorage.setItem('onairos_oauth_platform', platformName);\n localStorage.setItem('onairos_oauth_return', window.location.href);\n window.location.href = oauthUrl;\n return true;\n } else {\n // Desktop: Use popup flow with enhanced monitoring\n const popup = window.open(\n oauthUrl,\n `${platform.connector}_oauth`,\n 'width=500,height=600,scrollbars=yes,resizable=yes,status=no,location=no,toolbar=no,menubar=no'\n );\n \n if (!popup) {\n throw new Error('Popup blocked. Please allow popups and try again.');\n }\n\n // Enhanced popup monitoring with onairos.uk detection\n let hasNavigatedToOnairos = false;\n const checkInterval = setInterval(() => {\n try {\n // Try to detect if popup has navigated to onairos.uk (indicates success)\n if (popup.location && popup.location.hostname === 'onairos.uk') {\n hasNavigatedToOnairos = true;\n console.log(`🔄 ${platformName} popup navigated to onairos.uk - treating as success`);\n \n // Close the popup since it shows \"not found\"\n popup.close();\n return; // Let the popup.closed check handle the rest\n }\n } catch (e) {\n // Cross-origin error is expected when popup navigates to onairos.uk\n // This actually indicates the OAuth likely succeeded\n if (!hasNavigatedToOnairos) {\n hasNavigatedToOnairos = true;\n console.log(`🔄 ${platformName} popup navigated (cross-origin) - likely to onairos.uk`);\n }\n }\n \n try {\n // Check if popup is closed\n if (popup.closed) {\n clearInterval(checkInterval);\n \n // Check for success or error signals from callback page\n const successFlag = localStorage.getItem(`onairos_${platformName}_success`);\n const errorFlag = localStorage.getItem(`onairos_${platformName}_error`);\n const timestamp = localStorage.getItem(`onairos_${platformName}_timestamp`);\n \n // Only process recent signals (within 30 seconds)\n const isRecentSignal = timestamp && (Date.now() - parseInt(timestamp) < 30000);\n \n if (successFlag && isRecentSignal) {\n // Success flow from callback page\n console.log(`✅ ${platformName} OAuth completed successfully (callback page)`);\n localStorage.removeItem(`onairos_${platformName}_success`);\n localStorage.removeItem(`onairos_${platformName}_timestamp`);\n \n setConnectedAccounts(prev => ({\n ...prev,\n [platformName]: true\n }));\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n \n } else if (errorFlag && isRecentSignal) {\n // Error flow from callback page\n console.log(`❌ ${platformName} OAuth failed:`, errorFlag);\n localStorage.removeItem(`onairos_${platformName}_error`);\n localStorage.removeItem(`onairos_${platformName}_timestamp`);\n \n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: errorFlag\n }));\n \n } else if (hasNavigatedToOnairos) {\n // Popup navigated to onairos.uk - assume success\n console.log(`✅ ${platformName} OAuth likely successful (navigated to onairos.uk)`);\n setConnectedAccounts(prev => ({\n ...prev,\n [platformName]: true\n }));\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n \n } else {\n // No signal and no onairos navigation - assume user cancelled\n console.log(`⚠️ ${platformName} OAuth cancelled or no response`);\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: 'Connection was cancelled'\n }));\n }\n \n setIsConnecting(false);\n setConnectingPlatform(null);\n }\n } catch (error) {\n // Cross-origin error when popup navigates away - this is normal\n // console.log(`🔄 Popup navigated away for ${platformName}`);\n }\n }, 1000);\n\n // Auto-close popup if it shows onairos.uk \"not found\" page after 10 seconds\n setTimeout(() => {\n try {\n if (!popup.closed && popup.location && popup.location.hostname === 'onairos.uk') {\n console.log(`🚪 Auto-closing ${platformName} popup showing onairos.uk (not found)`);\n popup.close();\n }\n } catch (e) {\n // Cross-origin error is expected - try to close anyway if it's been 10 seconds\n if (!popup.closed && hasNavigatedToOnairos) {\n console.log(`🚪 Auto-closing ${platformName} popup (cross-origin, likely onairos.uk)`);\n popup.close();\n }\n }\n }, 10000);\n\n // Final timeout after 5 minutes\n setTimeout(() => {\n if (!popup.closed) {\n popup.close();\n clearInterval(checkInterval);\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: 'Connection timeout'\n }));\n setIsConnecting(false);\n setConnectingPlatform(null);\n }\n }, 300000);\n\n return true;\n }\n } catch (error) {\n console.error(`❌ Error connecting to ${platformName}:`, error);\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: error.message\n }));\n setIsConnecting(false);\n setConnectingPlatform(null);\n return false;\n }\n };\n\n const handleToggle = async (platformName) => {\n console.log(`🔥 TOGGLE CLICKED: ${platformName}`);\n \n if (isConnecting && connectingPlatform !== platformName) {\n console.log(`⚠️ Already connecting to ${connectingPlatform}, ignoring click on ${platformName}`);\n return;\n }\n \n const isConnected = connectedAccounts[platformName];\n \n if (isConnected) {\n // Disconnect\n console.log(`🔌 Disconnecting from ${platformName}...`);\n setConnectedAccounts(prev => ({\n ...prev,\n [platformName]: false\n }));\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n } else {\n // Connect\n await connectToPlatform(platformName);\n }\n };\n\n const handleContinue = () => {\n const connected = Object.entries(connectedAccounts)\n .filter(([platform, isConnected]) => isConnected)\n .map(([platform]) => platform);\n \n onComplete({\n connectedAccounts: connected,\n totalConnections: connected.length,\n healthScore: healthScore,\n connectionHealth: connectionHealth,\n sdkVersion: '2.1.7',\n enhancedFeatures: {\n healthMonitoring: sdkConfig.enableHealthMonitoring,\n autoRefresh: sdkConfig.enableAutoRefresh,\n connectionValidation: sdkConfig.enableConnectionValidation\n }\n });\n };\n\n const connectedCount = Object.values(connectedAccounts).filter(Boolean).length;\n const personaNumber = Math.min(connectedCount + 1, 5); // 0 connections = persona 1, 1 connection = persona 2, etc.\n\n // Sort platforms to prioritize the specified platform\n const getSortedPlatforms = () => {\n if (!priorityPlatform) return platforms;\n \n const priorityPlat = platforms.find(p => \n p.name.toLowerCase() === priorityPlatform.toLowerCase() || \n p.connector.toLowerCase() === priorityPlatform.toLowerCase()\n );\n \n if (!priorityPlat) return platforms;\n \n const otherPlatforms = platforms.filter(p => p !== priorityPlat);\n return [priorityPlat, ...otherPlatforms];\n };\n\n const sortedPlatforms = getSortedPlatforms();\n const isPriorityPlatform = (platform) => {\n if (!priorityPlatform) return false;\n return platform.name.toLowerCase() === priorityPlatform.toLowerCase() || \n platform.connector.toLowerCase() === priorityPlatform.toLowerCase();\n };\n\n return (\n <div className=\"w-full h-full flex flex-col\" style={{ height: '90vh', minHeight: 0 }}>\n {/* Content - Flexible center area */}\n <div className=\"px-6 pt-16 flex-1 flex flex-col\" style={{ minHeight: 0, overflow: 'hidden' }}>\n <div className=\"mb-6 flex-shrink-0\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2 text-balance leading-tight\">Connect app data</h1>\n <p className=\"text-gray-600 text-base\">More connections, better personalization.</p>\n </div>\n\n <div className=\"mb-2 flex justify-center flex-shrink-0\">\n <div className=\"w-56 h-56 overflow-hidden\">\n <img\n src={personaImages[personaNumber]}\n alt={`Persona ${personaNumber}`}\n width=\"256\"\n height=\"256\"\n className=\"w-full h-full object-cover\"\n onLoad={() => console.log('✅ Persona image loaded successfully!')}\n onError={(e) => {\n console.log('❌ Persona image failed to load:', personaImages[personaNumber]);\n console.log('Connected count:', connectedCount);\n console.log('Persona number:', personaNumber);\n console.log('All persona URLs:', personaImages);\n console.log('Current location:', window.location.href);\n console.log('Trying to load from:', personaImages[personaNumber]);\n \n // Fallback to gradient if image fails to load\n e.target.style.display = 'none';\n e.target.parentElement.style.background = 'linear-gradient(135deg, #f97316 0%, #ec4899 50%, #8b5cf6 100%)';\n }}\n />\n </div>\n </div>\n\n {/* Scrollable platform list */}\n <div className=\"flex-1 overflow-y-auto mt-4\" style={{ minHeight: 0 }}>\n <div className=\"space-y-4 pb-4\">\n {platforms.map((platform) => {\n const isConnected = connectedAccounts[platform.name] || false;\n const isCurrentlyConnecting = connectingPlatform === platform.name;\n const hasError = connectionErrors[platform.name];\n const isDisabled = isConnecting && !isCurrentlyConnecting;\n const isPriority = isPriorityPlatform(platform);\n \n return (\n <div \n key={platform.name}\n className=\"flex items-start gap-4 p-4 rounded-xl hover:bg-gray-50 transition-colors\"\n style={{\n backgroundColor: \"#ffffff\",\n border: \"none\",\n outline: \"none\",\n gap: 'clamp(6px, 1.5vw, 10px)',\n padding: 'clamp(6px, 1.5vw, 10px)',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n marginBottom: 'clamp(3px, 0.8vw, 6px)'\n }}\n onClick={() => !isDisabled && handleToggle(platform.name)}\n >\n <div className=\"bg-gray-50 rounded-full flex items-center justify-center flex-shrink-0 border-2 border-gray-200\" style={{ width: 'clamp(28px, 6vw, 36px)', height: 'clamp(28px, 6vw, 36px)' }}>\n {isCurrentlyConnecting ? (\n <div className=\"animate-spin h-5 w-5 border-2 border-gray-400 rounded-full border-t-transparent\"></div>\n ) : (\n platform.icon\n )}\n </div>\n <div className=\"flex-1 min-w-0 pr-4\">\n <h3\n className=\"font-semibold\"\n style={{\n color: \"#111827\",\n fontSize: 'clamp(12px, 2.8vw, 15px)',\n marginBottom: 'clamp(1px, 0.3vw, 3px)',\n lineHeight: '1.2'\n }}\n >\n {platform.name}\n </h3>\n <p\n className=\"leading-tight\"\n style={{\n color: \"#6B7280\",\n fontSize: 'clamp(10px, 2.2vw, 12px)',\n lineHeight: '1.3'\n }}\n >\n {platform.description}\n </p>\n \n {/* Error Message */}\n {hasError && (\n <p className=\"text-xs text-red-600 mt-1\">\n {hasError}\n </p>\n )}\n </div>\n <div className=\"flex-shrink-0\">\n <div\n onClick={(e) => {\n e.stopPropagation();\n if (!isDisabled) handleToggle(platform.name);\n }}\n className={`relative inline-flex items-center rounded-full transition-all duration-300 ease-in-out cursor-pointer ${\n isConnected ? \"bg-blue-500\" : \"bg-gray-300\"\n } ${isDisabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n style={{ \n height: 'clamp(20px, 4vw, 26px)', \n width: 'clamp(40px, 8vw, 52px)',\n boxShadow: isConnected ? '0 2px 4px rgba(59, 130, 246, 0.3)' : '0 1px 2px rgba(0, 0, 0, 0.1)'\n }}\n >\n <span\n className={`inline-block rounded-full bg-white transition-all duration-300 ease-in-out shadow-lg ${\n isConnected ? \"translate-x-6\" : \"translate-x-0.5\"\n }`}\n style={{ \n height: 'clamp(16px, 3.5vw, 20px)', \n width: 'clamp(16px, 3.5vw, 20px)'\n }}\n />\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Buttons - Fixed at bottom */}\n <div className=\"flex-shrink-0\" style={{ padding: 'clamp(8px, 2vw, 16px) clamp(16px, 4vw, 24px)', minHeight: 'auto', display: 'flex', flexDirection: 'column', gap: 'clamp(6px, 1.5vw, 10px)' }}>\n <div\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white rounded-xl font-semibold flex items-center justify-center gap-2 cursor-pointer transition-all duration-200 shadow-lg hover:shadow-xl\"\n style={{ \n padding: 'clamp(10px, 2.5vw, 14px)', \n fontSize: 'clamp(13px, 3.2vw, 16px)',\n minHeight: 'clamp(36px, 7vw, 44px)'\n }}\n onClick={handleContinue}\n >\n Update\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </div>\n {connectedCount > 0 && (\n <div\n onClick={() => onComplete({ connectedAccounts: [], totalConnections: 0 })}\n className=\"w-full text-gray-500 font-medium text-center cursor-pointer hover:text-gray-700 transition-colors\"\n style={{ \n padding: 'clamp(6px, 1.5vw, 10px)', \n fontSize: 'clamp(12px, 3vw, 15px)',\n minHeight: 'clamp(28px, 5vw, 36px)'\n }}\n >\n Skip\n </div>\n )}\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nexport default function PinSetup({ onComplete, onBack, userEmail }) {\n const [pin, setPin] = useState('');\n const [pinRequirements, setPinRequirements] = useState({\n length: false,\n uppercase: false,\n number: false,\n });\n\n // Check PIN requirements\n useEffect(() => {\n setPinRequirements({\n length: pin.length >= 6,\n uppercase: /[A-Z]/.test(pin),\n number: /\\d/.test(pin),\n });\n }, [pin]);\n\n const allRequirementsMet = pinRequirements.length && pinRequirements.uppercase && pinRequirements.number;\n\n const handleSubmit = () => {\n if (allRequirementsMet) {\n onComplete({\n pin: pin, // This should be hashed in production\n pinCreated: true,\n timestamp: new Date().toISOString()\n });\n }\n };\n\n return (\n <div className=\"w-full h-full flex flex-col\" style={{ height: '100%', minHeight: 0 }}>\n {/* Content - Flexible center area */}\n <div className=\"px-6 pt-16 flex-1 flex flex-col\" style={{ minHeight: 0, overflow: 'hidden' }}>\n <div className=\"mb-6 flex-shrink-0\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2\">Create a PIN</h1>\n <p className=\"text-gray-600 text-base\">A PIN so only you have the access to your data</p>\n </div>\n\n <div className=\"mb-6 flex-shrink-0\">\n <input\n type=\"password\"\n value={pin}\n onChange={(e) => setPin(e.target.value)}\n className=\"w-full px-4 py-4 border-2 border-gray-300 rounded-xl text-center text-lg font-medium focus:border-gray-900 focus:outline-none bg-gray-50\"\n placeholder=\"Enter your PIN\"\n maxLength={20}\n />\n </div>\n\n {/* Scrollable requirements list */}\n <div className=\"flex-1 overflow-y-auto\" style={{ minHeight: 0 }}>\n <div className=\"space-y-3 pb-4\">\n <p className=\"text-gray-900 font-medium mb-4\">Your PIN must:</p>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div\n className={`w-5 h-5 rounded-full border-2 ${pinRequirements.length ? \"border-green-500 bg-green-500\" : \"border-gray-300 bg-white\"}`}\n >\n {pinRequirements.length && (\n <svg className=\"w-3 h-3 text-white m-0.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </div>\n <span className=\"text-gray-700\">Be at least 6 characters in length.</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <div\n className={`w-5 h-5 rounded-full border-2 ${pinRequirements.uppercase ? \"border-green-500 bg-green-500\" : \"border-gray-300 bg-white\"}`}\n >\n {pinRequirements.uppercase && (\n <svg className=\"w-3 h-3 text-white m-0.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </div>\n <span className=\"text-gray-700\">Contain an uppercase letter.</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <div\n className={`w-5 h-5 rounded-full border-2 ${pinRequirements.number ? \"border-green-500 bg-green-500\" : \"border-gray-300 bg-white\"}`}\n >\n {pinRequirements.number && (\n <svg className=\"w-3 h-3 text-white m-0.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </div>\n <span className=\"text-gray-700\">Contain a number.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Buttons - Fixed at bottom */}\n <div className=\"px-6 pb-6 pt-4 flex-shrink-0 space-y-3\" style={{ minHeight: 'auto' }}>\n <div\n className={`w-full rounded-full py-4 text-base font-medium flex items-center justify-center gap-2 transition-colors ${\n allRequirementsMet \n ? \"bg-gray-900 hover:bg-gray-800 text-white cursor-pointer\" \n : \"bg-gray-300 text-gray-500 cursor-not-allowed\"\n }`}\n onClick={allRequirementsMet ? handleSubmit : undefined}\n >\n Continue\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </div>\n </div>\n </div>\n );\n} ","import React, { useState, useEffect } from 'react';\nimport PrimaryButton from './ui/PrimaryButton.jsx';\nimport { COLORS } from '../theme/colors.js';\n\nconst dataTypes = [\n { \n id: 'basic', \n name: 'Basic Profile', \n description: 'Essential profile information, account details, and basic demographics', \n icon: 'User',\n required: true,\n tooltip: 'Includes name, email, basic profile information. This data is essential for personalization and is always included.',\n privacyLink: 'https://onairos.uk/privacy#basic-info'\n },\n { \n id: 'preferences', \n name: 'User Preferences', \n description: 'User preferences, interests, settings and personal choices', \n icon: 'Grid3X3',\n required: false,\n tooltip: 'Your stated preferences and interests from connected platforms. Helps customize your experience.',\n privacyLink: 'https://onairos.uk/privacy#preferences-data'\n },\n { \n id: 'personality', \n name: 'Personality Traits', \n description: 'Personality traits, behavioral patterns and psychological insights', \n icon: 'Brain',\n required: false,\n tooltip: 'AI-analyzed personality traits based on your social media activity and interactions. Used to improve content recommendations.',\n privacyLink: 'https://onairos.uk/privacy#personality-data'\n }\n];\n\n// Data Type Toggle Component with new checkbox design\nconst DataTypeToggle = ({ dataType, isEnabled, onToggle, isLast }) => {\n const handleToggle = () => {\n if (dataType.required) return; // Don't allow toggling required items\n onToggle(dataType.id, !isEnabled);\n };\n\n const getIconComponent = (iconName) => {\n const iconProps = { className: \"w-5 h-5 text-gray-600\" };\n \n switch (iconName) {\n case 'User':\n return (\n <svg {...iconProps} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n );\n case 'Grid3X3':\n return (\n <svg {...iconProps} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z\" />\n </svg>\n );\n case 'Brain':\n return (\n <svg {...iconProps} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n );\n default:\n return <span className=\"text-xl\">{iconName}</span>;\n }\n };\n\n return (\n <div className=\"flex items-center justify-between p-4 rounded-xl bg-gray-50\">\n <div className=\"flex items-center gap-4\">\n <div className=\"w-10 h-10 bg-gray-200 rounded-full flex items-center justify-center\">\n {getIconComponent(dataType.icon)}\n </div>\n <span className=\"font-medium text-gray-900\">{dataType.name}</span>\n </div>\n <div\n onClick={handleToggle}\n className={`w-6 h-6 rounded border-2 flex items-center justify-center cursor-pointer transition-colors ${\n isEnabled ? \"bg-gray-900 border-gray-900\" : \"bg-white border-gray-300\"\n }`}\n >\n {isEnabled && (\n <svg className=\"w-4 h-4 text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )}\n </div>\n </div>\n );\n};\n\nconst DataRequest = ({ \n userEmail = 'user@example.com', \n testMode = true, \n onComplete, \n autoFetch = true,\n appName = 'Test App',\n formatResponse = false,\n responseFormat = 'simple'\n}) => {\n const [selectedData, setSelectedData] = useState({\n basic: true, // Always true for required data\n personality: false,\n preferences: false\n });\n const [isLoadingApi, setIsLoadingApi] = useState(false);\n const [apiError, setApiError] = useState(null);\n\n const handleDataToggle = (dataId, enabled) => {\n const dataType = dataTypes.find(dt => dt.id === dataId);\n if (dataType?.required) return; // Don't allow toggling required items\n\n setSelectedData(prev => ({\n ...prev,\n [dataId]: enabled\n }));\n };\n\n const generateUserHash = (email) => {\n let hash = 0;\n const str = email + Date.now().toString();\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return `user_${Math.abs(hash).toString(36)}`;\n };\n\n const fetchUserData = async () => {\n console.log('🔥 DataRequest: fetchUserData called');\n console.log('🔥 DataRequest: onComplete function:', typeof onComplete);\n console.log('🔥 DataRequest: selectedData:', selectedData);\n console.log('🔥 DataRequest: selectedCount:', selectedCount);\n \n setIsLoadingApi(true);\n setApiError(null);\n \n try {\n const userHash = generateUserHash(userEmail);\n \n // Get selected data types\n const approvedData = Object.entries(selectedData)\n .filter(([key, value]) => value)\n .map(([key]) => key);\n\n const mapDataTypesToConfirmations = (approvedData) => {\n const confirmations = [];\n const currentDate = new Date().toISOString();\n \n const dataTypeMapping = {\n 'basic': 'Medium',\n 'personality': 'Large', \n 'preferences': 'Traits'\n };\n \n approvedData.forEach(dataType => {\n if (dataTypeMapping[dataType]) {\n confirmations.push({\n data: dataTypeMapping[dataType],\n date: currentDate\n });\n }\n });\n \n return confirmations;\n };\n\n const apiEndpoint = testMode \n ? 'https://api2.onairos.uk/inferenceTest'\n : 'https://api2.onairos.uk/getAPIurlMobile';\n \n const baseResult = {\n userHash,\n appName,\n approvedData,\n apiUrl: apiEndpoint,\n testMode,\n timestamp: new Date().toISOString()\n };\n\n if (autoFetch) {\n if (testMode) {\n // Test mode: Skip API call completely, simulate response\n console.log('🧪 Test mode: Simulating data request API call for:', approvedData);\n \n setTimeout(() => {\n const simulatedApiData = {\n success: true,\n message: \"Data request simulated successfully\",\n data: {\n personalityScores: {\n openness: 0.75,\n conscientiousness: 0.68,\n extraversion: 0.82,\n agreeableness: 0.71,\n neuroticism: 0.43\n },\n insights: [\n \"You show high creativity and openness to new experiences\",\n \"Strong social tendencies with good interpersonal skills\",\n \"Well-organized approach to tasks and goals\"\n ],\n dataProcessed: approvedData,\n timestamp: new Date().toISOString(),\n testMode: true\n }\n };\n\n const result = {\n ...baseResult,\n apiResponse: simulatedApiData,\n success: true,\n simulated: true\n };\n\n setIsLoadingApi(false);\n console.log('🧪 Test mode: Simulated data request completed:', result);\n console.log('🔥 DataRequest: onComplete function type:', typeof onComplete);\n if (onComplete && typeof onComplete === 'function') {\n onComplete(result);\n console.log('🔥 DataRequest: onComplete called successfully (test mode)');\n } else {\n console.error('🔥 DataRequest: onComplete is not a function or is undefined (test mode)');\n }\n }, 1200); // Simulate realistic processing time\n } else {\n // Production mode: Make real API call\n try {\n const confirmations = mapDataTypesToConfirmations(approvedData);\n \n const requestBody = {\n approvedData,\n userEmail,\n appName,\n confirmations\n };\n\n console.log('🔥 DataRequest: Making API call to:', apiEndpoint);\n console.log('🔥 Request body:', requestBody);\n\n const apiResponse = await fetch(apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!apiResponse.ok) {\n throw new Error(`API request failed with status ${apiResponse.status}`);\n }\n\n const apiData = await apiResponse.json();\n console.log('🔥 API Response:', apiData);\n\n const result = {\n ...baseResult,\n apiResponse: apiData,\n success: true\n };\n\n setIsLoadingApi(false);\n console.log('🔥 DataRequest: Calling onComplete with result:', result);\n console.log('🔥 DataRequest: onComplete function type:', typeof onComplete);\n if (onComplete && typeof onComplete === 'function') {\n onComplete(result);\n console.log('🔥 DataRequest: onComplete called successfully');\n } else {\n console.error('🔥 DataRequest: onComplete is not a function or is undefined');\n }\n\n } catch (apiError) {\n console.error('🔥 API Error:', apiError);\n setApiError(apiError.message);\n setIsLoadingApi(false);\n \n const errorResult = {\n ...baseResult,\n apiResponse: null,\n error: apiError.message,\n success: false\n };\n \n onComplete(errorResult);\n }\n }\n } else {\n setIsLoadingApi(false);\n console.log('🔥 DataRequest: Auto-fetch disabled, calling onComplete with base result');\n console.log('🔥 DataRequest: onComplete function type:', typeof onComplete);\n if (onComplete && typeof onComplete === 'function') {\n onComplete(baseResult);\n console.log('🔥 DataRequest: onComplete called successfully (auto-fetch disabled)');\n } else {\n console.error('🔥 DataRequest: onComplete is not a function or is undefined (auto-fetch disabled)');\n }\n }\n } catch (error) {\n console.error('🔥 DataRequest Error:', error);\n setApiError(error.message);\n setIsLoadingApi(false);\n \n if (onComplete) {\n onComplete({\n error: error.message,\n success: false,\n userEmail,\n appName,\n testMode\n });\n }\n }\n };\n\n // Count selected data types\n const selectedCount = Object.values(selectedData).filter(Boolean).length;\n\n return (\n <div className=\"w-full h-full flex flex-col\">\n {/* Content - Flexible center area */}\n <div className=\"px-6 pt-16 flex-1 flex flex-col min-h-0 pb-4\">\n {/* Icon Flow */}\n <div className=\"mb-6 flex justify-center items-center gap-4 flex-shrink-0\">\n <div className=\"w-16 h-16 bg-white rounded-2xl shadow-lg flex items-center justify-center border border-gray-100\">\n <svg className=\"w-8 h-8\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 2C13.1 2 14 2.9 14 4C14 5.1 13.1 6 12 6C10.9 6 10 5.1 10 4C10 2.9 10.9 2 12 2Z\"\n fill=\"black\"\n />\n <path\n d=\"M21 9V7L15 6.5V9C15 10.66 13.66 12 12 12C10.34 12 9 10.66 9 9V6.5L3 7V9C3 12.87 6.13 16 10 16V22H14V16C17.87 16 21 12.87 21 9Z\"\n fill=\"black\"\n />\n </svg>\n </div>\n <svg className=\"w-5 h-5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n <div className=\"w-16 h-16 bg-white rounded-2xl shadow-lg flex items-center justify-center border border-gray-100\">\n <span className=\"text-2xl font-serif font-bold text-black\">E</span>\n </div>\n </div>\n\n {/* Title Section */}\n <div className=\"mb-6 flex-shrink-0\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2 text-balance leading-tight\">\n Enoch wants to personalize your experience\n </h1>\n <p className=\"text-gray-600 text-base\">Choose what to share:</p>\n </div>\n\n {/* Consent Options */}\n <div className=\"flex-1 overflow-y-auto\">\n <div className=\"space-y-4 pb-6\">\n {dataTypes.map((dataType, index) => (\n <DataTypeToggle\n key={dataType.id}\n dataType={dataType}\n isEnabled={selectedData[dataType.id]}\n onToggle={handleDataToggle}\n isLast={index === dataTypes.length - 1}\n />\n ))}\n </div>\n </div>\n </div>\n\n {/* Buttons - Fixed at bottom */}\n <div className=\"px-6 pb-8 pt-4 flex-shrink-0 space-y-3\">\n <div\n className=\"w-full bg-gray-900 hover:bg-gray-800 text-white rounded-full py-4 text-base font-medium flex items-center justify-center gap-2 cursor-pointer transition-colors\"\n onClick={fetchUserData}\n disabled={isLoadingApi || selectedCount === 0}\n >\n {isLoadingApi ? \"Processing...\" : \"Accept & Continue\"}\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </div>\n <div\n onClick={() => onComplete({ cancelled: true })}\n className=\"w-full bg-gray-200 hover:bg-gray-300 text-gray-700 rounded-full py-4 text-base font-medium text-center cursor-pointer transition-colors\"\n >\n Decline\n </div>\n\n {/* Error display */}\n {apiError && (\n <div className=\"mt-4 p-3 rounded-lg text-center bg-red-50 border border-red-200 text-red-600\">\n <p className=\"text-sm\">{apiError}</p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default DataRequest; ","import React, { useState, useEffect } from 'react';\nimport { COLORS } from '../theme/colors.js';\n\nexport default function TrainingComponent({ onComplete, userEmail, appName = 'App', testMode = true }) {\n const [currentStep, setCurrentStep] = useState(0);\n const [progress, setProgress] = useState(0);\n const [isComplete, setIsComplete] = useState(false);\n\n const steps = [\n {\n title: 'Setting up your personal AI',\n description: 'Initializing your secure data model',\n icon: '🤖',\n duration: testMode ? 800 : 2000 // Much faster in test mode\n },\n {\n title: 'Processing your connections',\n description: 'Analyzing your social media patterns',\n icon: '🔗',\n duration: testMode ? 600 : 2500\n },\n {\n title: 'Training your model',\n description: 'Building your personalized insights',\n icon: '🧠',\n duration: testMode ? 700 : 3000\n },\n {\n title: 'Finalizing setup',\n description: 'Preparing your Onairos experience',\n icon: '✨',\n duration: testMode ? 500 : 2000\n }\n ];\n\n useEffect(() => {\n let interval;\n let stepTimeout;\n\n if (currentStep < steps.length) {\n const stepDuration = steps[currentStep].duration;\n const stepProgress = 100 / steps.length;\n\n // Update progress gradually\n interval = setInterval(() => {\n setProgress(prev => {\n const newProgress = prev + (stepProgress / (stepDuration / 100));\n return Math.min(newProgress, (currentStep + 1) * stepProgress);\n });\n }, 100);\n\n // Move to next step after duration\n stepTimeout = setTimeout(() => {\n if (currentStep < steps.length - 1) {\n setCurrentStep(prev => prev + 1);\n } else {\n setIsComplete(true);\n const completionDelay = testMode ? 400 : 1000; // Faster completion in test mode\n \n if (testMode) {\n console.log('🧪 Test mode: Training simulation completed');\n }\n \n setTimeout(() => {\n onComplete({\n trainingComplete: true,\n timestamp: new Date().toISOString(),\n userEmail: userEmail,\n appName: appName,\n testMode: testMode,\n simulatedTraining: testMode\n });\n }, completionDelay);\n }\n }, stepDuration);\n }\n\n return () => {\n if (interval) clearInterval(interval);\n if (stepTimeout) clearTimeout(stepTimeout);\n };\n }, [currentStep, onComplete, userEmail, appName]);\n\n return (\n <div className=\"w-full flex flex-col items-center space-y-8\">\n <div className=\"text-center\">\n <div \n className=\"w-20 h-20 rounded-full flex items-center justify-center mx-auto mb-4\"\n style={{\n background: `linear-gradient(135deg, ${COLORS.info}, #8B5CF6)`\n }}\n >\n <div className=\"text-3xl\">\n {isComplete ? '🎉' : steps[currentStep]?.icon}\n </div>\n </div>\n <h2 \n className=\"text-2xl font-bold mb-2\"\n style={{ color: COLORS.textPrimary }}\n >\n {isComplete ? 'All set!' : steps[currentStep]?.title}\n </h2>\n <p style={{ color: COLORS.textSecondary }}>\n {isComplete \n ? 'Your personal AI is ready to use' \n : steps[currentStep]?.description\n }\n </p>\n </div>\n\n {/* Progress Bar */}\n <div className=\"w-full\">\n <div \n className=\"flex justify-between text-sm mb-2\"\n style={{ color: COLORS.textSecondary }}\n >\n <span>Progress</span>\n <span>{Math.round(progress)}%</span>\n </div>\n <div \n className=\"w-full rounded-full h-2\"\n style={{ backgroundColor: COLORS.borderLight }}\n >\n <div \n className=\"h-2 rounded-full transition-all duration-300 ease-out\"\n style={{ \n width: `${progress}%`,\n background: `linear-gradient(90deg, ${COLORS.info}, #8B5CF6)`\n }}\n />\n </div>\n </div>\n\n {/* Steps Indicator */}\n <div className=\"flex justify-center space-x-2\">\n {steps.map((_, index) => (\n <div\n key={index}\n className=\"w-3 h-3 rounded-full transition-all duration-300\"\n style={{\n backgroundColor: index <= currentStep ? COLORS.info : COLORS.border\n }}\n />\n ))}\n </div>\n\n {/* Current Step Details */}\n <div \n className=\"p-4 rounded-lg w-full\"\n style={{ backgroundColor: COLORS.backgroundSecondary }}\n >\n <div className=\"flex items-center space-x-3\">\n <div \n className=\"w-8 h-8 rounded-full flex items-center justify-center\"\n style={{ backgroundColor: '#DBEAFE' }}\n >\n <div className=\"text-sm\">\n {isComplete ? '✅' : steps[currentStep]?.icon}\n </div>\n </div>\n <div>\n <h3 \n className=\"font-medium\"\n style={{ color: COLORS.textPrimary }}\n >\n {isComplete ? 'Training Complete' : `Step ${currentStep + 1} of ${steps.length}`}\n </h3>\n <p \n className=\"text-sm\"\n style={{ color: COLORS.textSecondary }}\n >\n {isComplete \n ? 'Your Onairos experience is ready' \n : steps[currentStep]?.description\n }\n </p>\n </div>\n </div>\n </div>\n\n {/* App Info */}\n <div className=\"text-center\">\n <p \n className=\"text-sm\"\n style={{ color: COLORS.textSecondary }}\n >\n Setting up for <span className=\"font-medium\">{appName}</span>\n </p>\n {userEmail && (\n <p \n className=\"text-xs mt-1\"\n style={{ color: COLORS.textMuted }}\n >\n {userEmail}\n </p>\n )}\n </div>\n </div>\n );\n} ","import React, { useState, useEffect } from \"react\";\n\nexport default function LoadingScreen({ onComplete }) {\n const [currentStep, setCurrentStep] = useState(0);\n const [dotCount, setDotCount] = useState(0);\n\n const loadingStates = [\n { message: \"Validating PIN and continuing training\", progress: 20 },\n { message: \"Uploading model to secure storage\", progress: 40 },\n { message: \"Running test inference\", progress: 60 },\n { message: \"Storing results in databases\", progress: 80 },\n { message: \"Complete!\", progress: 100 },\n ];\n\n useEffect(() => {\n const stateInterval = setInterval(() => {\n setCurrentStep((prev) => {\n const nextStep = prev + 1;\n if (nextStep >= loadingStates.length) {\n // Loading complete, call onComplete after a short delay\n setTimeout(() => {\n onComplete();\n }, 1000);\n return prev; // Keep at last step\n }\n return nextStep;\n });\n }, 3000); // Change state every 3 seconds\n\n return () => clearInterval(stateInterval);\n }, [loadingStates.length, onComplete]);\n\n useEffect(() => {\n const dotInterval = setInterval(() => {\n setDotCount((prev) => (prev + 1) % 4); // 0, 1, 2, 3 dots\n }, 500); // Change dots every 500ms\n\n return () => clearInterval(dotInterval);\n }, []);\n\n const currentState = loadingStates[currentStep];\n\n return (\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center p-6\">\n {/* Modal - Full height from bottom */}\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"px-6 pt-6 pb-4 flex-shrink-0\">\n </div>\n\n {/* Content - Centered loading state */}\n <div className=\"flex-1 flex flex-col justify-center items-center px-6\">\n <div className=\"text-center mb-12\">\n <h1 className=\"font-bold text-gray-900 leading-tight\" style={{ fontSize: 'clamp(16px, 4vw, 20px)', marginBottom: 'clamp(24px, 6vw, 48px)' }}>\n {currentState.message}\n {currentState.message !== \"Complete!\" && (\n <span className=\"inline-block w-8 text-left\">{\".\".repeat(dotCount)}</span>\n )}\n </h1>\n\n <div className=\"mx-auto\" style={{ width: 'clamp(200px, 50vw, 300px)' }}>\n <div className=\"w-full h-2 bg-gray-200 rounded-full\">\n <div\n className=\"h-2 bg-gray-900 rounded-full transition-all duration-1000 ease-out\"\n style={{ width: `${currentState.progress}%` }}\n ></div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Bottom spacing */}\n <div className=\"h-20 flex-shrink-0\"></div>\n </div>\n </div>\n );\n}\n","/**\n * Response formatter utility for Onairos SDK\n * Converts array-based responses to dictionary format for better developer experience\n */\n\n// Standard 16 personality types in order that the API returns them\nexport const PERSONALITY_TYPES = [\n 'Analyst',\n 'Diplomat', \n 'Sentinel',\n 'Explorer',\n 'Architect',\n 'Logician',\n 'Commander',\n 'Debater',\n 'Advocate',\n 'Mediator',\n 'Protagonist',\n 'Campaigner',\n 'Logistician',\n 'Defender',\n 'Executive',\n 'Consul'\n];\n\n// Standard trait categories that might be returned\nexport const TRAIT_CATEGORIES = [\n 'Openness',\n 'Conscientiousness',\n 'Extraversion',\n 'Agreeableness',\n 'Neuroticism'\n];\n\n/**\n * Formats API response to include both array and dictionary formats\n * @param {Object} apiResponse - Raw API response from Onairos\n * @param {Object} options - Formatting options\n * @param {boolean} options.includeDictionary - Whether to include dictionary format (default: true)\n * @param {boolean} options.includeArray - Whether to include original array format (default: true)\n * @returns {Object} Formatted response with both formats\n */\nexport function formatOnairosResponse(apiResponse, options = {}) {\n const { includeDictionary = true, includeArray = true } = options;\n \n if (!apiResponse) {\n return apiResponse;\n }\n\n const formatted = { ...apiResponse };\n\n // Handle personality scores if present\n if (apiResponse.InferenceResult?.traits || apiResponse.traits || apiResponse.scores) {\n const scores = apiResponse.InferenceResult?.traits || apiResponse.traits || apiResponse.scores;\n \n if (Array.isArray(scores) && scores.length >= 16) {\n if (includeDictionary) {\n // Create personality dictionary\n const personalityDict = {};\n PERSONALITY_TYPES.forEach((type, index) => {\n personalityDict[type] = scores[index];\n });\n \n // Add to formatted response\n if (formatted.InferenceResult) {\n formatted.InferenceResult.personalityDict = personalityDict;\n } else {\n formatted.personalityDict = personalityDict;\n }\n }\n \n if (!includeArray) {\n // Remove array format if not requested\n if (formatted.InferenceResult?.traits) {\n delete formatted.InferenceResult.traits;\n }\n if (formatted.traits) {\n delete formatted.traits;\n }\n if (formatted.scores) {\n delete formatted.scores;\n }\n }\n }\n }\n\n // Handle trait data if present (for preferences/traits)\n if (apiResponse.traitResult || apiResponse.traits) {\n const traits = apiResponse.traitResult || apiResponse.traits;\n \n if (Array.isArray(traits) && includeDictionary) {\n const traitDict = {};\n TRAIT_CATEGORIES.forEach((category, index) => {\n if (traits[index] !== undefined) {\n traitDict[category] = traits[index];\n }\n });\n \n formatted.traitDict = traitDict;\n }\n }\n\n return formatted;\n}\n\n/**\n * Legacy formatter for backward compatibility\n * Converts scores array to personality dictionary only\n * @param {Array} scores - Array of personality scores\n * @returns {Object} Dictionary with personality type names as keys\n */\nexport function formatPersonalityScores(scores) {\n if (!Array.isArray(scores) || scores.length < 16) {\n console.warn('Invalid scores array provided to formatPersonalityScores');\n return {};\n }\n\n const personalityDict = {};\n PERSONALITY_TYPES.forEach((type, index) => {\n personalityDict[type] = scores[index];\n });\n \n return personalityDict;\n}\n\n/**\n * Get personality type names in order\n * @returns {Array} Array of personality type names\n */\nexport function getPersonalityTypes() {\n return [...PERSONALITY_TYPES];\n}\n\n/**\n * Get trait category names in order \n * @returns {Array} Array of trait category names\n */\nexport function getTraitCategories() {\n return [...TRAIT_CATEGORIES];\n} ","import React from 'react';\nimport { COLORS } from '../../theme/colors.js';\n\n// Standardized page layout component with white background\nconst PageLayout = ({\n children,\n title,\n subtitle,\n icon,\n showHeader = true,\n showCloseButton = false,\n onClose,\n onBack,\n showBackButton = false,\n className = '',\n contentClassName = '',\n centerContent = true,\n style = {},\n ...props\n}) => {\n const layoutStyle = {\n backgroundColor: COLORS.background,\n minHeight: '100%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n ...style\n };\n\n const headerStyle = {\n position: 'sticky',\n top: 0,\n backgroundColor: COLORS.background,\n zIndex: 10,\n padding: 'clamp(8px, 2vw, 16px) clamp(16px, 4vw, 32px) clamp(6px, 1.5vw, 12px)'\n };\n\n const contentStyle = {\n flex: 1,\n padding: 'clamp(16px, 4vw, 32px)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n minHeight: 0, // Allow flex item to shrink below content size\n ...(centerContent && {\n alignItems: 'center',\n justifyContent: 'flex-start'\n })\n };\n\n const titleStyle = {\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: 'clamp(20px, 5vw, 28px)',\n fontWeight: '700',\n color: COLORS.textPrimary,\n margin: '0 0 clamp(6px, 1.5vw, 12px) 0',\n textAlign: centerContent ? 'center' : 'left',\n lineHeight: '1.2'\n };\n\n const subtitleStyle = {\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: 'clamp(14px, 3.5vw, 18px)',\n fontWeight: '400',\n color: COLORS.textSecondary,\n margin: '0 0 clamp(20px, 5vw, 40px) 0',\n textAlign: centerContent ? 'center' : 'left',\n lineHeight: '1.5'\n };\n\n const iconStyle = {\n width: 'clamp(40px, 8vw, 56px)',\n height: 'clamp(40px, 8vw, 56px)',\n margin: '0 auto clamp(16px, 4vw, 32px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 'clamp(20px, 5vw, 28px)'\n };\n\n return (\n <div \n className={`onairos-page-layout ${className}`}\n style={layoutStyle}\n {...props}\n >\n {/* Header with navigation */}\n {showHeader && (\n <div style={headerStyle}>\n <div className=\"flex items-center justify-between\">\n {/* Back button */}\n {showBackButton && onBack && (\n <button\n onClick={onBack}\n className=\"flex items-center justify-center w-8 h-8 rounded-full hover:bg-gray-100 transition-colors\"\n aria-label=\"Go back\"\n >\n <span style={{ fontSize: '16px', color: COLORS.textPrimary }}>←</span>\n </button>\n )}\n\n\n {/* Close button */}\n {showCloseButton && onClose && (\n <button\n onClick={onClose}\n className=\"flex items-center justify-center w-8 h-8 rounded-full hover:bg-gray-100 transition-colors\"\n aria-label=\"Close\"\n >\n <span style={{ fontSize: '16px', color: COLORS.textPrimary }}>×</span>\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Main content area */}\n <div \n className={`onairos-page-content ${contentClassName}`}\n style={contentStyle}\n >\n {/* Icon */}\n {icon && (\n <div style={iconStyle}>\n {typeof icon === 'string' ? <span>{icon}</span> : icon}\n </div>\n )}\n\n {/* Title */}\n {title && (\n <h1 style={titleStyle}>\n {title}\n </h1>\n )}\n\n {/* Subtitle */}\n {subtitle && (\n <p style={subtitleStyle}>\n {subtitle}\n </p>\n )}\n\n {/* Page content */}\n {children}\n </div>\n </div>\n );\n};\n\n// Modal wrapper component for overlay-style pages\nconst ModalPageLayout = ({\n children,\n visible = true,\n onClose,\n onBackdropClick,\n backdropStyle = {},\n modalStyle = {},\n ...pageLayoutProps\n}) => {\n if (!visible) return null;\n\n const backdropStyles = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 1000,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...backdropStyle\n };\n\n const modalStyles = {\n backgroundColor: COLORS.background,\n borderTopLeftRadius: '24px',\n borderTopRightRadius: '24px',\n borderBottomLeftRadius: '24px',\n borderBottomRightRadius: '24px',\n height: '90vh',\n width: '100%',\n maxWidth: '500px',\n boxShadow: '0 -10px 40px rgba(0, 0, 0, 0.3)',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n ...modalStyle\n };\n\n const handleBackdropClick = (e) => {\n if (e.target === e.currentTarget) {\n if (onBackdropClick) {\n onBackdropClick();\n } else if (onClose) {\n onClose();\n }\n }\n };\n\n return (\n <div style={backdropStyles} onClick={handleBackdropClick}>\n <div style={modalStyles}>\n <PageLayout\n showHeader={true}\n showCloseButton={true}\n onClose={onClose}\n {...pageLayoutProps}\n >\n {children}\n </PageLayout>\n </div>\n </div>\n );\n};\n\nexport { ModalPageLayout };\nexport default PageLayout; ","import React, { useEffect, useState } from 'react';\nimport WelcomeScreen from './components/WelcomeScreen.jsx';\nimport EmailAuth from './components/EmailAuth.js';\nimport UniversalOnboarding from './components/UniversalOnboarding.jsx';\nimport PinSetup from './components/PinSetup.js';\nimport DataRequest from './components/DataRequest.js';\nimport TrainingComponent from './components/TrainingComponent.jsx';\nimport LoadingScreen from './components/LoadingScreen.jsx';\nimport { formatOnairosResponse } from './utils/responseFormatter.js';\nimport { ModalPageLayout } from './components/ui/PageLayout.jsx';\n\nexport function OnairosButton({\n requestData, \n webpageName, \n inferenceData = null, \n onComplete = null, \n autoFetch = true, // Auto-enabled for seamless testing experience\n testMode = true, // Auto-enabled for design testing - set to false for production\n proofMode = false, \n textLayout = 'below', \n textColor = 'white',\n login = false,\n buttonType = 'pill',\n loginReturn = null,\n loginType = 'signIn',\n visualType = 'full',\n appIcon = null,\n enableTraining = true,\n formatResponse = true,\n responseFormat = { includeDictionary: true, includeArray: true },\n priorityPlatform = null // Platform to prioritize (e.g., 'gmail', 'pinterest', 'linkedin')\n}) {\n\n const [showOverlay, setShowOverlay] = useState(false);\n const [currentFlow, setCurrentFlow] = useState('welcome'); // 'welcome' | 'email' | 'onboarding' | 'pin' | 'dataRequest' (training is within onboarding)\n const [userData, setUserData] = useState(null);\n const [error, setError] = useState(null);\n\n // Check for existing user session\n useEffect(() => {\n const checkExistingSession = () => {\n // In test mode, always start fresh to see the full flow\n if (testMode) {\n console.log('🧪 Test mode: Starting fresh flow, clearing any cached user data');\n localStorage.removeItem('onairosUser');\n setCurrentFlow('welcome');\n return;\n }\n \n const savedUser = localStorage.getItem('onairosUser');\n if (savedUser) {\n try {\n const user = JSON.parse(savedUser);\n setUserData(user);\n // If user has completed onboarding and PIN setup, go directly to data request\n if (user.onboardingComplete && user.pinCreated) {\n setCurrentFlow('dataRequest');\n } else if (user.verified && !user.onboardingComplete) {\n setCurrentFlow('onboarding');\n } else if (user.onboardingComplete && !user.pinCreated) {\n setCurrentFlow('pin');\n }\n } catch (error) {\n console.error('Error parsing saved user data:', error);\n localStorage.removeItem('onairosUser');\n }\n }\n };\n\n checkExistingSession();\n }, [testMode]);\n\n const openTerminal = async () => {\n try {\n console.log('🔥 openTerminal called');\n setShowOverlay(true);\n } catch (error) {\n console.error('Error in openTerminal:', error);\n }\n };\n\n const handleCloseOverlay = () => {\n setShowOverlay(false);\n setError(null);\n };\n\n // Handle clicks on the backdrop to close modal\n const handleBackdropClick = (e) => {\n if (e.target === e.currentTarget) {\n handleCloseOverlay();\n }\n };\n\n const handleWelcomeContinue = () => {\n console.log('🔥 Welcome screen continue clicked');\n setCurrentFlow('email');\n };\n\n const handleEmailAuthSuccess = (authData) => {\n console.log('🔥 Email auth successful:', authData);\n console.log('🔧 User State:', {\n isNewUser: authData.isNewUser,\n userState: authData.userState,\n flowType: authData.flowType,\n existingUser: authData.existingUser,\n hasAccountInfo: !!authData.accountInfo\n });\n \n // Determine flow based on API response - more explicit checking\n const isNewUser = authData.isNewUser === true || \n authData.existingUser === false || \n authData.flowType === 'onboarding' || \n authData.userState === 'new' ||\n !authData.accountInfo; // No account info means new user\n \n console.log('🔍 Flow determination:', {\n finalDecision: isNewUser ? 'NEW USER → onboarding (data connectors)' : 'EXISTING USER → dataRequest (data permissions)',\n reasoning: {\n isNewUser: authData.isNewUser,\n existingUserFalse: authData.existingUser === false,\n flowTypeOnboarding: authData.flowType === 'onboarding',\n noAccountInfo: !authData.accountInfo\n }\n });\n \n const newUserData = {\n ...authData,\n verified: true,\n onboardingComplete: !isNewUser, // New users need onboarding, returning users have completed it\n pinCreated: !isNewUser // Assume returning users have PIN, new users need to create it\n };\n \n setUserData(newUserData);\n localStorage.setItem('onairosUser', JSON.stringify(newUserData));\n \n // Flow decision logic - prioritize new user detection\n if (isNewUser) {\n console.log('🚀 NEW USER detected → Starting onboarding flow (data connectors page)');\n setCurrentFlow('onboarding');\n } else {\n console.log('👋 EXISTING USER detected → Going directly to data request (data permissions page)');\n setCurrentFlow('dataRequest');\n }\n };\n\n const handleOnboardingComplete = (onboardingData) => {\n console.log('Onboarding completed:', onboardingData);\n const updatedUserData = {\n ...userData,\n onboardingComplete: true,\n connectedAccounts: onboardingData.connectedAccounts || []\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n setCurrentFlow('pin');\n };\n\n const handlePinSetupComplete = (pinData) => {\n console.log('PIN setup completed:', pinData);\n const updatedUserData = {\n ...userData,\n ...pinData,\n pinCreated: true\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n \n // Move to loading flow\n setCurrentFlow('loading');\n };\n\n const handleLoadingComplete = () => {\n setCurrentFlow('dataRequest');\n };\n\n const handleTrainingComplete = (trainingResult) => {\n console.log('🎓 Training completed:', trainingResult);\n const updatedUserData = {\n ...userData,\n trainingCompleted: true,\n ...trainingResult\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n \n // Move to data request after training\n setCurrentFlow('dataRequest');\n };\n\n const handleDataRequestComplete = (requestResult) => {\n console.log('🔥 OnairosButton: Data request completed:', requestResult);\n \n // Update user data with request result\n const updatedUserData = {\n ...userData,\n lastDataRequest: requestResult\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n\n // Close overlay immediately\n console.log('🔥 Closing overlay after data request completion');\n setShowOverlay(false);\n\n // Format response if requested and API response is present\n let formattedResult = requestResult;\n if (formatResponse && requestResult?.apiResponse) {\n try {\n formattedResult = {\n ...requestResult,\n apiResponse: formatOnairosResponse(requestResult.apiResponse, responseFormat)\n };\n console.log('🔥 Response formatted with dictionary:', formattedResult.apiResponse?.personalityDict || 'No personality data');\n } catch (error) {\n console.warn('🔥 Error formatting response:', error);\n // Continue with original result if formatting fails\n }\n }\n\n // Call onComplete callback if provided\n console.log('🔥 Calling onComplete callback with:', formattedResult);\n if (onComplete) {\n try {\n onComplete(formattedResult);\n console.log('🔥 onComplete callback executed successfully');\n } catch (error) {\n console.error('🔥 Error in onComplete callback:', error);\n }\n } else {\n console.log('🔥 No onComplete callback provided');\n }\n };\n\n const getFlowTitle = () => {\n switch (currentFlow) {\n case 'welcome':\n return ''; // WelcomeScreen handles its own titles\n case 'email':\n return ''; // EmailAuth handles its own titles\n case 'onboarding':\n return 'Connect Your Data';\n case 'pin':\n return 'Secure Your Account';\n case 'training':\n return 'Training Your Model';\n case 'dataRequest':\n return 'Data Request';\n default:\n return '';\n }\n };\n\n const getFlowSubtitle = () => {\n switch (currentFlow) {\n case 'welcome':\n return ''; // WelcomeScreen handles its own subtitles\n case 'email':\n return ''; // EmailAuth handles its own subtitles\n case 'onboarding':\n return 'Choose which accounts to connect for a personalized experience';\n case 'pin':\n return 'Create a secure PIN to protect your data';\n case 'training':\n return 'Building your personalized insights';\n case 'dataRequest':\n return `Select the data you want to share with ${webpageName}`;\n default:\n return '';\n }\n };\n\n const getFlowIcon = () => {\n switch (currentFlow) {\n case 'welcome':\n return ''; // WelcomeScreen handles its own layout\n case 'email':\n return ''; // EmailAuth handles its own layout\n case 'onboarding':\n return '🔗';\n case 'pin':\n return '🔒';\n case 'training':\n return '⚡';\n case 'dataRequest':\n return '📊';\n default:\n return '';\n }\n };\n\n const renderCurrentFlow = () => {\n switch (currentFlow) {\n case 'welcome':\n return (\n <WelcomeScreen \n onContinue={handleWelcomeContinue}\n onClose={handleCloseOverlay}\n webpageName={webpageName}\n appIcon={appIcon}\n testMode={testMode}\n />\n );\n case 'email':\n return (\n <div className=\"h-[min(85vh,700px)]\">\n <EmailAuth \n onSuccess={handleEmailAuthSuccess}\n testMode={testMode} // Use the testMode prop from initialization\n />\n </div>\n );\n \n case 'onboarding':\n return (\n <UniversalOnboarding \n onComplete={handleOnboardingComplete}\n onBack={() => setCurrentFlow('email')}\n appIcon={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n appName={webpageName}\n username={userData?.email || userData?.username}\n testMode={testMode}\n priorityPlatform={priorityPlatform}\n />\n );\n \n case 'pin':\n return (\n <PinSetup \n onComplete={handlePinSetupComplete}\n userEmail={userData?.email}\n />\n );\n \n case 'training':\n return (\n <TrainingComponent \n onComplete={handleTrainingComplete}\n userEmail={userData?.email}\n appName={webpageName}\n connectedAccounts={userData?.connectedAccounts || []}\n testMode={testMode}\n />\n );\n \n case 'dataRequest':\n return (\n <DataRequest \n onComplete={handleDataRequestComplete}\n userEmail={userData?.email}\n requestData={requestData}\n appName={webpageName}\n autoFetch={autoFetch}\n testMode={testMode}\n appIcon={appIcon}\n connectedAccounts={userData?.connectedAccounts || {}}\n />\n );\n \n default:\n return (\n <div className=\"flex flex-col items-center space-y-4 p-6\">\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\n <p className=\"text-gray-600\">Loading...</p>\n </div>\n );\n }\n };\n\n // Styling and button class based on visual type\n const buttonClass = \n `flex items-center justify-center font-bold rounded cursor-pointer ${\n buttonType === 'pill' ? 'px-4 py-2' : 'w-12 h-12'\n } bg-transparent OnairosConnect`;\n\n const buttonStyle = {\n flexDirection: textLayout === 'below' ? 'column' : 'row',\n backgroundColor: 'transparent',\n color: textColor,\n border: '1px solid transparent',\n };\n\n // Icon and text style based on the visualType\n const logoStyle = {\n width: '20px',\n height: '20px',\n marginRight: visualType === 'full' ? '12px' : '0',\n };\n\n const getText = () => {\n switch (loginType) {\n case 'signUp':\n return 'Sign Up with Onairos';\n case 'signOut':\n return 'Sign Out of Onairos';\n default:\n return 'Sign In with Onairos';\n }\n };\n\n return (\n <>\n <button\n className={buttonClass}\n onClick={openTerminal}\n style={buttonStyle}\n >\n {(visualType === 'full' || visualType === 'icon') && (\n <img\n src={login ? \"https://onairos.sirv.com/Images/OnairosWhite.png\" : \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n alt=\"Onairos Logo\"\n style={logoStyle}\n />\n )}\n {visualType !== 'icon' && (\n <span className={`${textColor === 'black' ? 'text-black' : 'text-white'} ${visualType === 'icon' ? 'sr-only' : ''} ${textLayout === 'right' ? 'ml-2' : textLayout === 'left' ? 'mr-2' : ''}`}>\n {getText()}\n </span>\n )}\n </button>\n\n {/* Modal with New Design */}\n {showOverlay && (\n <>\n {currentFlow === 'email' ? (\n // Special case for email - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={handleCloseOverlay}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Email Content */}\n <div className=\"h-[min(85vh,700px)]\">\n <EmailAuth \n onSuccess={handleEmailAuthSuccess}\n testMode={testMode}\n />\n </div>\n </div>\n </div>\n ) : currentFlow === 'onboarding' ? (\n // Special case for onboarding - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={() => setCurrentFlow('email')}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* Onboarding Content */}\n <UniversalOnboarding \n onComplete={handleOnboardingComplete}\n onBack={() => setCurrentFlow('email')}\n appIcon={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n appName={webpageName}\n username={userData?.email || userData?.username}\n testMode={testMode}\n priorityPlatform={priorityPlatform}\n />\n </div>\n </div>\n ) : currentFlow === 'dataRequest' ? (\n // Special case for dataRequest - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={() => setCurrentFlow('loading')}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* DataRequest Content */}\n <DataRequest \n onComplete={handleDataRequestComplete}\n userEmail={userData?.email}\n requestData={requestData}\n appName={webpageName}\n autoFetch={autoFetch}\n testMode={testMode}\n appIcon={appIcon}\n connectedAccounts={userData?.connectedAccounts || {}}\n />\n </div>\n </div>\n ) : currentFlow === 'pin' ? (\n // Special case for pin - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={() => setCurrentFlow('onboarding')}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* PinSetup Content - Must take remaining height */}\n <div className=\"flex-1 min-h-0\">\n <PinSetup \n onComplete={handlePinSetupComplete}\n onBack={() => setCurrentFlow('onboarding')}\n userEmail={userData?.email}\n />\n </div>\n </div>\n </div>\n ) : currentFlow === 'loading' ? (\n // Loading screen\n <LoadingScreen onComplete={handleLoadingComplete} />\n ) : (\n // All other flows use PageLayout wrapper\n <ModalPageLayout\n visible={showOverlay}\n onClose={handleCloseOverlay}\n showBackButton={currentFlow === 'training'}\n onBack={() => {\n if (currentFlow === 'email') setCurrentFlow('welcome');\n if (currentFlow === 'onboarding') setCurrentFlow('email');\n if (currentFlow === 'pin') setCurrentFlow('onboarding'); \n if (currentFlow === 'training') setCurrentFlow('pin');\n }}\n title={getFlowTitle()}\n subtitle={getFlowSubtitle()}\n icon={getFlowIcon()}\n centerContent={true}\n >\n {renderCurrentFlow()}\n </ModalPageLayout>\n )}\n </>\n )}\n </>\n );\n}\n\nexport default OnairosButton;","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n"],"names":["WelcomeScreen","_ref","onContinue","onClose","React","className","style","height","viewBox","d","fill","stroke","strokeWidth","cx","cy","r","onClick","strokeLinecap","strokeLinejoin","toPascalCase","string","camelCase","replace","match","p1","p2","toUpperCase","toLowerCase","toCamelCase","charAt","slice","mergeClasses","classes","filter","index","array","Boolean","trim","indexOf","join","hasA11yProp","props","prop","startsWith","defaultAttributes","xmlns","width","Icon","forwardRef","color","size","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","Number","map","tag","attrs","Array","isArray","Check","iconName","Component","displayName","createLucideIcon","key","COLORS","btnGradStart","btnGradEnd","btnLabel","btnBorder","iconCircleGradientStart","iconCircleGradientEnd","background","backgroundSecondary","textPrimary","textSecondary","textMuted","border","borderLight","success","error","warning","info","hover","pressed","focus","IconCircle","concat","borderRadius","fontSize","backgroundColor","_ref2","label","iconRight","loading","disabled","testId","textStyle","centered","_objectWithoutProperties","_excluded","setPressed","useState","buttonStyle","_objectSpread","position","overflow","minWidth","maxWidth","margin","cursor","opacity","boxShadow","transition","pressedOverlayStyle","top","left","right","bottom","labelStyle","fontFamily","fontWeight","textAlign","_extends","onMouseDown","handleMouseDown","onMouseUp","handleMouseUp","onMouseLeave","handleMouseLeave","display","justifyContent","alignItems","EmailAuth","onSuccess","testMode","email","setEmail","code","setCode","step","setStep","isLoading","setIsLoading","setError","useEffect","setTimeout","firstInput","document","querySelector","handleEmailSubmit","async","e","preventDefault","test","validateEmail","console","log","apiKey","window","onairosApiKey","response","fetch","method","headers","body","JSON","stringify","action","ok","Error","data","json","message","handleGoogleAuth","_localStorage$getItem","sdkConfig","baseUrl","enableHealthMonitoring","enableAutoRefresh","enableConnectionValidation","username","localStorage","getItem","authorizeUrl","params","URLSearchParams","sdk_type","return_url","location","origin","fullUrl","toString","popup","open","checkInterval","setInterval","closed","clearInterval","connectedAccounts","Google","handleCodeSubmit","length","simulatedResponse","verified","token","Date","now","userName","split","existingUser","accountInfo","isNewUser","flowType","adminMode","userCreated","accountDetails","createdAt","toISOString","testAccount","jwtToken","type","value","onChange","target","placeholder","required","lineHeight","from","_","maxLength","newCode","_e$target$parentEleme","nextInput","parentElement","onKeyDown","_e$target$parentEleme2","prevInput","borderColor","PrimaryButton","flex","minHeight","defaultPersonaImages","platforms","name","icon","connector","description","id","offset","stopColor","process","env","REACT_APP_ONAIROS_API_KEY","REACT_APP_ONAIROS_BASE_URL","sdkType","UniversalOnboarding","onComplete","onBack","appIcon","appName","personaImages","personaImagesProp","priorityPlatform","setConnectedAccounts","isConnecting","setIsConnecting","connectingPlatform","setConnectingPlatform","connectionErrors","setConnectionErrors","connectionHealth","setConnectionHealth","healthScore","setHealthScore","handleOAuthReturn","platform","removeItem","prev","connectToPlatform","platformName","find","p","session","status","statusText","responseData","possibleKeys","oauthUrl","usedKey","Object","keys","navigator","userAgent","innerWidth","setItem","href","hasNavigatedToOnairos","hostname","close","successFlag","errorFlag","timestamp","isRecentSignal","parseInt","handleToggle","connectedCount","values","personaNumber","Math","min","getSortedPlatforms","priorityPlat","otherPlatforms","src","alt","onLoad","onError","isConnected","isCurrentlyConnecting","hasError","isDisabled","isPriorityPlatform","outline","gap","padding","marginBottom","stopPropagation","flexDirection","handleContinue","connected","entries","_ref3","totalConnections","sdkVersion","enhancedFeatures","healthMonitoring","autoRefresh","connectionValidation","PinSetup","userEmail","pin","setPin","pinRequirements","setPinRequirements","uppercase","number","allRequirementsMet","handleSubmit","pinCreated","undefined","dataTypes","tooltip","privacyLink","DataTypeToggle","dataType","isEnabled","onToggle","isLast","iconProps","getIconComponent","fillRule","clipRule","autoFetch","formatResponse","responseFormat","selectedData","setSelectedData","basic","personality","preferences","isLoadingApi","setIsLoadingApi","apiError","setApiError","handleDataToggle","dataId","enabled","dt","selectedCount","userHash","hash","str","i","charCodeAt","abs","generateUserHash","approvedData","_ref4","mapDataTypesToConfirmations","confirmations","currentDate","dataTypeMapping","forEach","push","date","apiEndpoint","baseResult","apiUrl","simulatedApiData","personalityScores","openness","conscientiousness","extraversion","agreeableness","neuroticism","insights","dataProcessed","result","apiResponse","simulated","requestBody","apiData","errorResult","cancelled","TrainingComponent","_steps$currentStep","_steps$currentStep2","_steps$currentStep3","_steps$currentStep4","_steps$currentStep5","currentStep","setCurrentStep","progress","setProgress","isComplete","setIsComplete","steps","title","duration","interval","stepTimeout","stepDuration","stepProgress","newProgress","completionDelay","trainingComplete","simulatedTraining","clearTimeout","round","LoadingScreen","dotCount","setDotCount","loadingStates","stateInterval","nextStep","dotInterval","currentState","repeat","PERSONALITY_TYPES","TRAIT_CATEGORIES","formatOnairosResponse","_apiResponse$Inferenc","options","arguments","includeDictionary","includeArray","formatted","InferenceResult","traits","scores","_apiResponse$Inferenc2","personalityDict","_formatted$InferenceR","traitResult","traitDict","category","PageLayout","subtitle","showHeader","showCloseButton","showBackButton","contentClassName","centerContent","layoutStyle","headerStyle","zIndex","contentStyle","titleStyle","subtitleStyle","ModalPageLayout","visible","onBackdropClick","backdropStyle","modalStyle","pageLayoutProps","_excluded2","backdropStyles","modalStyles","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","currentTarget","OnairosButton","requestData","webpageName","inferenceData","proofMode","textLayout","textColor","login","buttonType","loginReturn","loginType","visualType","enableTraining","showOverlay","setShowOverlay","currentFlow","setCurrentFlow","userData","setUserData","checkExistingSession","savedUser","user","parse","onboardingComplete","handleCloseOverlay","handleWelcomeContinue","handleEmailAuthSuccess","authData","userState","hasAccountInfo","finalDecision","reasoning","existingUserFalse","flowTypeOnboarding","noAccountInfo","newUserData","handleOnboardingComplete","onboardingData","updatedUserData","handlePinSetupComplete","pinData","handleTrainingComplete","trainingResult","trainingCompleted","handleDataRequestComplete","requestResult","lastDataRequest","formattedResult","_formattedResult$apiR","warn","buttonClass","logoStyle","marginRight","getText","DataRequest","handleLoadingComplete","getFlowTitle","getFlowSubtitle","getFlowIcon","renderCurrentFlow","l","Symbol","for","n","q","t","u","v","w","x","y","z","iterator","B","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","C","assign","D","E","a","b","this","context","refs","updater","F","G","prototype","isReactComponent","setState","forceUpdate","H","constructor","isPureReactComponent","I","J","hasOwnProperty","K","current","L","__self","__source","M","c","k","h","call","g","f","m","defaultProps","$$typeof","_owner","O","P","Q","escape","R","N","A","next","done","String","S","T","_status","_result","then","default","U","V","W","ReactCurrentDispatcher","ReactCurrentBatchConfig","ReactCurrentOwner","X","exports","Children","apply","count","toArray","only","Fragment","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","act","cloneElement","createContext","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","_context","createFactory","bind","createRef","render","isValidElement","lazy","_payload","_init","memo","compare","startTransition","unstable_act","useCallback","useContext","useDebugValue","useDeferredValue","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useSyncExternalStore","useTransition","version","module"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"241.js","mappings":"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","sources":["webpack://OnairosLaravel/./src/components/WelcomeScreen.jsx","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/shared/src/utils.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/defaultAttributes.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/Icon.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/icons/check.js","webpack://OnairosLaravel/./node_modules/lucide-react/dist/esm/createLucideIcon.js","webpack://OnairosLaravel/./src/theme/colors.js","webpack://OnairosLaravel/./src/components/ui/PrimaryButton.jsx","webpack://OnairosLaravel/./src/components/EmailAuth.js","webpack://OnairosLaravel/./src/components/UniversalOnboarding.jsx","webpack://OnairosLaravel/./src/components/PinSetup.js","webpack://OnairosLaravel/./src/components/DataRequest.js","webpack://OnairosLaravel/./src/components/TrainingComponent.jsx","webpack://OnairosLaravel/./src/components/LoadingScreen.jsx","webpack://OnairosLaravel/./src/utils/responseFormatter.js","webpack://OnairosLaravel/./src/components/ui/PageLayout.jsx","webpack://OnairosLaravel/./src/onairosButton.jsx","webpack://OnairosLaravel/./node_modules/react/cjs/react.production.min.js","webpack://OnairosLaravel/./node_modules/react/index.js"],"sourcesContent":["import React from 'react';\nimport { COLORS } from '../theme/colors.js';\n\nexport default function WelcomeScreen({ onContinue, onClose }) {\n return (\n <div className=\"w-full flex flex-col\" style={{ height: '100%' }}>\n {/* Content - Flexible center area */}\n <div className=\"px-6 text-center flex-1 flex flex-col justify-center\">\n {/* Avatar */}\n <div className=\"mb-8 flex justify-center\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-2xl flex items-center justify-center\">\n <div className=\"w-8 h-8 relative\">\n {/* VR Headset Icon */}\n <svg viewBox=\"0 0 32 32\" className=\"w-full h-full\">\n <path\n d=\"M4 12c0-2.2 1.8-4 4-4h16c2.2 0 4 1.8 4 4v8c0 2.2-1.8 4-4 4h-4l-2-3h-4l-2 3H8c-2.2 0-4-1.8-4-4v-8z\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"22\" cy=\"16\" r=\"2\" fill=\"currentColor\" />\n <path d=\"M12 24c0-1.1.9-2 2-2h4c1.1 0 2 .9 2 2\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n </svg>\n </div>\n </div>\n </div>\n\n {/* Welcome Text */}\n <p className=\"text-gray-500 text-sm mb-2\">Welcome to</p>\n\n {/* Main Title */}\n <h1 className=\"text-4xl font-bold text-gray-900 mb-6 text-balance\">Onairos</h1>\n\n {/* Description */}\n <p className=\"text-gray-600 text-base leading-relaxed mb-12 text-pretty px-2\">\n OnairOS personalizes your digital experience on every app so you can just enjoy being you!\n </p>\n </div>\n\n {/* Get Started Button - Fixed at bottom */}\n <div className=\"px-6 pb-8 flex-shrink-0\">\n <button\n className=\"w-full bg-gray-900 hover:bg-gray-800 text-white rounded-full py-4 text-base font-medium flex items-center justify-center gap-2 transition-colors\"\n onClick={onContinue}\n >\n Get Started\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n );\n}\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => {\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","// Theme colors for Onairos SDK - derived from mobile design\nexport const COLORS = {\n // Button gradient colors\n btnGradStart: '#1A1A1A',\n btnGradEnd: '#000000',\n \n // Button text and icon colors\n btnLabel: '#FFFFFF',\n btnBorder: 'rgba(0, 0, 0, 0.2)',\n \n // Icon circle gradient colors\n iconCircleGradientStart: '#333333',\n iconCircleGradientEnd: '#1A1A1A',\n \n // Background colors\n background: '#FFFFFF',\n backgroundSecondary: '#F8F9FA',\n \n // Text colors\n textPrimary: '#1A1A1A',\n textSecondary: '#6B7280',\n textMuted: '#9CA3AF',\n \n // Border colors\n border: '#E5E7EB',\n borderLight: '#F3F4F6',\n \n // Status colors\n success: '#10B981',\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#3B82F6',\n \n // Interactive states\n hover: 'rgba(0, 0, 0, 0.05)',\n pressed: 'rgba(0, 0, 0, 0.1)',\n focus: 'rgba(59, 130, 246, 0.1)',\n};\n\nexport default COLORS; ","import React, { useState } from 'react';\nimport { COLORS } from '../../theme/colors.js';\n\n// Icon Circle component matching the React Native version\nconst IconCircle = ({ \n size = 40, \n children,\n className = ''\n}) => {\n return (\n <div \n className={`relative flex items-center justify-center border border-black border-opacity-25 ${className}`}\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n background: `linear-gradient(to bottom, ${COLORS.iconCircleGradientStart}, ${COLORS.iconCircleGradientEnd})`\n }}\n >\n {children || (\n <span \n className=\"font-semibold opacity-95\"\n style={{\n fontSize: '20px',\n color: COLORS.btnLabel,\n backgroundColor: 'transparent'\n }}\n >\n →\n </span>\n )}\n </div>\n );\n};\n\n// Primary Button component matching the React Native design\nconst PrimaryButton = ({\n label = \"Get Started\",\n onClick,\n iconRight,\n loading = false,\n disabled = false,\n testId,\n className = '',\n style = {},\n textStyle = {},\n centered = false,\n ...props\n}) => {\n const [pressed, setPressed] = useState(false);\n\n const handleMouseDown = () => setPressed(true);\n const handleMouseUp = () => setPressed(false);\n const handleMouseLeave = () => setPressed(false);\n\n const buttonStyle = {\n height: '48px',\n borderRadius: '100px',\n border: `1px solid ${COLORS.btnBorder}`,\n background: `linear-gradient(to bottom, ${COLORS.btnGradStart}, ${COLORS.btnGradEnd})`,\n position: 'relative',\n overflow: 'hidden',\n width: centered ? 'auto' : '100%',\n minWidth: centered ? '250px' : 'auto',\n maxWidth: centered ? '350px' : 'none',\n margin: centered ? '0 auto' : '0',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.65 : 1,\n boxShadow: disabled ? 'none' : '20px 30px 40px rgba(0,0,0,0.10)',\n transition: 'all 0.2s ease',\n ...style\n };\n\n const pressedOverlayStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.1)',\n borderRadius: '100px',\n opacity: pressed ? 1 : 0,\n transition: 'opacity 0.1s ease'\n };\n\n const textContainerStyle = {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'transparent'\n };\n\n const iconPositionStyle = {\n position: 'absolute',\n right: '4px',\n top: '4px',\n bottom: '4px',\n width: '40px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'transparent'\n };\n\n const labelStyle = {\n fontFamily: 'Inter, system-ui, sans-serif',\n fontWeight: '600',\n fontSize: '16px',\n color: COLORS.btnLabel,\n textAlign: 'center',\n backgroundColor: 'transparent',\n ...textStyle\n };\n\n return (\n <button\n className={`relative ${className}`}\n style={buttonStyle}\n onClick={onClick}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseLeave}\n disabled={disabled || loading}\n data-testid={testId}\n aria-label={label}\n {...props}\n >\n {/* Pressed state overlay */}\n <div style={pressedOverlayStyle} />\n\n {/* Centered text container */}\n <div style={textContainerStyle}>\n {loading ? (\n <div \n className=\"animate-spin rounded-full border-2 border-white border-t-transparent\"\n style={{ width: '20px', height: '20px' }}\n />\n ) : (\n <span style={labelStyle}>{label}</span>\n )}\n </div>\n\n {/* Icon in fixed position on right */}\n <div style={iconPositionStyle}>\n {!loading && (iconRight || <IconCircle />)}\n </div>\n </button>\n );\n};\n\nexport { IconCircle };\nexport default PrimaryButton; ","import React, { useState, useEffect } from 'react';\nimport { Mail, ArrowRight, Check } from 'lucide-react';\nimport PrimaryButton from './ui/PrimaryButton.jsx';\nimport { COLORS } from '../theme/colors.js';\n\nexport default function EmailAuth({ onSuccess, testMode = true }) {\n const [email, setEmail] = useState('');\n const [code, setCode] = useState('');\n const [step, setStep] = useState('email'); // 'email' | 'code' | 'success'\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n\n // Auto-focus first PIN input when code step loads\n useEffect(() => {\n if (step === 'code') {\n // Small delay to ensure DOM is ready\n setTimeout(() => {\n const firstInput = document.querySelector('input[maxLength=\"1\"]');\n if (firstInput) {\n firstInput.focus();\n }\n }, 100);\n }\n }, [step]);\n\n const validateEmail = (email) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleEmailSubmit = async (e) => {\n e.preventDefault();\n setError('');\n\n if (!validateEmail(email)) {\n setError('Please enter a valid email address');\n return;\n }\n\n setIsLoading(true);\n\n try {\n if (testMode) {\n // Test mode: Skip API call completely, simulate instant success\n console.log('🧪 Test mode: Simulating email verification request for:', email);\n setTimeout(() => {\n setStep('code');\n setIsLoading(false);\n console.log('🧪 Test mode: Email verification simulated successfully');\n }, 800); // Shorter delay for faster testing\n } else {\n // Production mode: Use proper email verification API from schema\n const apiKey = window.onairosApiKey || 'test-key';\n \n const response = await fetch('https://api2.onairos.uk/email/verification', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`\n },\n body: JSON.stringify({ \n email, \n action: 'request' \n }),\n });\n\n if (!response.ok) {\n throw new Error('Failed to send verification code');\n }\n\n const data = await response.json();\n if (!data.success) {\n throw new Error(data.error || 'Failed to send verification code');\n }\n\n console.log('📧 Email request response:', data);\n\n setStep('code');\n setIsLoading(false);\n }\n } catch (error) {\n console.error('Email request error:', error);\n setError(error.message);\n setIsLoading(false);\n }\n };\n\n const handleGoogleAuth = async () => {\n try {\n // Use the same Google OAuth logic as UniversalOnboarding\n const sdkConfig = {\n baseUrl: 'https://api2.onairos.uk',\n apiKey: window.onairosApiKey || 'test-key',\n enableHealthMonitoring: true,\n enableAutoRefresh: true,\n enableConnectionValidation: true\n };\n\n const username = localStorage.getItem('username') || localStorage.getItem('onairosUser')?.email || 'user@example.com';\n \n const authorizeUrl = `${sdkConfig.baseUrl}/gmail/authorize`;\n const params = new URLSearchParams({\n username: username,\n sdk_type: 'web',\n return_url: window.location.origin + '/oauth-callback.html'\n });\n\n const fullUrl = `${authorizeUrl}?${params.toString()}`;\n console.log('🔗 Starting Google OAuth from email flow...');\n console.log('📋 Google OAuth URL:', fullUrl);\n\n // Open popup for OAuth\n const popup = window.open(\n fullUrl,\n 'google_oauth',\n 'width=500,height=600,scrollbars=yes,resizable=yes'\n );\n\n if (!popup) {\n throw new Error('Popup blocked. Please allow popups for this site.');\n }\n\n // Monitor popup for completion\n const checkInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(checkInterval);\n console.log('✅ Google OAuth popup closed');\n // Simulate successful OAuth for now\n onSuccess({ \n email: 'user@gmail.com', \n method: 'google',\n connectedAccounts: { Google: true }\n });\n }\n }, 1000);\n\n } catch (error) {\n console.error('❌ Google OAuth failed:', error);\n setError('Google authentication failed. Please try again.');\n }\n };\n\n const handleCodeSubmit = async (e) => {\n e.preventDefault();\n setError('');\n setIsLoading(true);\n\n try {\n if (testMode) {\n // Test mode: Skip API call completely, simulate verification\n console.log('🧪 Test mode: Simulating code verification for:', email, 'with code:', code);\n \n if (code === '123456' || code.length === 6) {\n setStep('success');\n setTimeout(() => {\n // Simulate new user for design testing\n const simulatedResponse = { \n email, \n verified: true, \n token: 'test-token-' + Date.now(),\n userName: email.split('@')[0],\n existingUser: false, // Always simulate new user for full flow testing\n accountInfo: null,\n isNewUser: true,\n flowType: 'onboarding',\n adminMode: false,\n userCreated: true,\n accountDetails: {\n email: email,\n createdAt: new Date().toISOString(),\n testAccount: true\n }\n };\n console.log('🧪 Test mode: Simulated verification successful, user data:', simulatedResponse);\n onSuccess(simulatedResponse);\n }, 600); // Faster for design testing\n } else {\n setError('Invalid code. Use any 6-digit code (e.g., 123456) for testing.');\n setIsLoading(false);\n }\n } else {\n // Production mode: Use real email verification API from schema\n const apiKey = window.onairosApiKey || 'test-key';\n \n const response = await fetch('https://api2.onairos.uk/email/verification', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`\n },\n body: JSON.stringify({ \n email, \n action: 'verify',\n code \n }),\n });\n\n if (!response.ok) {\n throw new Error('Invalid verification code');\n }\n\n const data = await response.json();\n \n if (!data.success) {\n throw new Error(data.error || 'Verification failed');\n }\n\n console.log('📧 Email verification response:', data);\n\n setStep('success');\n setTimeout(() => {\n // Pass complete API response for flow determination\n onSuccess({ \n email, \n verified: true, \n token: data.token || data.jwtToken,\n userName: data.userName,\n existingUser: data.existingUser,\n accountInfo: data.accountInfo,\n isNewUser: !data.existingUser, // Set based on API response\n flowType: data.existingUser ? 'dataRequest' : 'onboarding',\n adminMode: data.adminMode,\n userCreated: data.userCreated,\n accountDetails: data.accountDetails\n });\n }, 1000);\n }\n } catch (error) {\n console.error('Email verification error:', error);\n setError(error.message || 'Invalid code. Please try again.');\n setIsLoading(false);\n }\n };\n\n const renderEmailStep = () => (\n <div className=\"w-full flex flex-col\" style={{ height: '100%' }}>\n {/* Content - Flexible center area */}\n <div className=\"px-12 pt-16 pb-8 text-center flex-1 flex flex-col\">\n <div className=\"mb-8\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2 text-balance leading-tight\">\n Use pre-existing Persona or create a new one in seconds\n </h1>\n <p className=\"text-gray-600 text-base\">Sign in or create an account</p>\n </div>\n\n <div className=\"mb-6\">\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"Enter your email\"\n className=\"w-full max-w-sm mx-auto px-4 py-4 text-base bg-gray-50 border-0 rounded-xl placeholder:text-gray-400 focus:bg-white focus:ring-2 focus:ring-gray-200 outline-none transition-all duration-200\"\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n required\n />\n </div>\n\n <div className=\"mb-6 text-center\">\n <span className=\"text-gray-500 text-sm\">Or</span>\n </div>\n\n <div className=\"mb-8\">\n <button\n type=\"button\"\n className=\"w-full max-w-sm mx-auto py-4 text-base font-medium rounded-xl border border-gray-200 hover:bg-gray-50 flex items-center justify-center gap-3 bg-transparent transition-colors\"\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n onClick={handleGoogleAuth}\n >\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n Continue with Google\n </button>\n </div>\n\n {/* Error Display */}\n {error && (\n <div className=\"mb-6\">\n <p className=\"text-sm text-center\" style={{ color: COLORS.error }}>{error}</p>\n </div>\n )}\n </div>\n\n {/* Continue Button - Fixed at bottom */}\n <div className=\"px-12 pb-8 flex-shrink-0\">\n <button\n className=\"w-full max-w-sm mx-auto bg-gray-900 hover:bg-gray-800 text-white rounded-full py-4 text-base font-medium flex items-center justify-center gap-2 transition-colors disabled:opacity-50\"\n onClick={handleEmailSubmit}\n disabled={isLoading || !email.trim()}\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n >\n {isLoading ? 'Loading...' : 'Continue'}\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n );\n\n const renderCodeStep = () => (\n <div className=\"w-full flex flex-col\" style={{ height: '100%' }}>\n {/* Heading - matching VerificationStep.tsx */}\n <div className=\"w-full pt-16 px-12 mb-10 text-center\">\n <h1 \n className=\"font-bold mb-2\"\n style={{ \n fontFamily: 'IBM Plex Sans, system-ui, sans-serif',\n fontWeight: '700',\n fontSize: '24px',\n lineHeight: '32px',\n color: COLORS.textPrimary\n }}\n >\n Enter verification code\n </h1>\n <p \n className=\"mb-2\"\n style={{ \n fontFamily: 'Inter, system-ui, sans-serif',\n fontWeight: '400',\n fontSize: '16px',\n lineHeight: '24px',\n color: COLORS.textSecondary\n }}\n >\n We've sent a 6-digit code to {email}\n </p>\n </div>\n\n\n {/* Code Input - matching VerificationStep design with individual digit boxes */}\n <div className=\"px-12 mb-6\">\n <div className=\"flex justify-center space-x-3\">\n {Array.from({ length: 6 }, (_, index) => (\n <input\n key={index}\n type=\"text\"\n maxLength=\"1\"\n value={code[index] || ''}\n onChange={(e) => {\n const newCode = code.split('');\n newCode[index] = e.target.value;\n setCode(newCode.join(''));\n \n // Auto-focus next input\n if (e.target.value && index < 5) {\n const nextInput = e.target.parentElement?.children[index + 1];\n if (nextInput) nextInput.focus();\n }\n }}\n onKeyDown={(e) => {\n // Handle backspace to focus previous input\n if (e.key === 'Backspace' && !code[index] && index > 0) {\n const prevInput = e.target.parentElement?.children[index - 1];\n if (prevInput) prevInput.focus();\n }\n }}\n className=\"w-12 h-12 border rounded-lg text-center text-lg font-medium focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none\"\n style={{ \n borderColor: COLORS.border,\n backgroundColor: COLORS.background,\n fontFamily: 'Inter, system-ui, sans-serif'\n }}\n />\n ))}\n </div>\n </div>\n\n {/* Error Display */}\n {error && (\n <div className=\"px-12 mb-6\">\n <p className=\"text-sm text-center\" style={{ color: COLORS.error }}>{error}</p>\n </div>\n )}\n\n {/* Continue Button - positioned right below code inputs */}\n <div className=\"px-12 mb-6\">\n <div className=\"max-w-sm mx-auto\">\n <PrimaryButton\n label=\"Continue\"\n onClick={handleCodeSubmit}\n loading={isLoading}\n disabled={isLoading || code.length !== 6}\n testId=\"verify-code-button\"\n />\n </div>\n </div>\n\n {/* Spacer */}\n <div style={{ flex: 1, minHeight: '20px' }} />\n\n {/* Back to email option */}\n <div className=\"px-12 w-full\">\n <div className=\"max-w-sm mx-auto\">\n <button\n type=\"button\"\n onClick={() => setStep('email')}\n className=\"w-full py-2 px-4 font-medium transition-colors text-sm\"\n style={{ color: COLORS.textSecondary }}\n >\n Use a different email\n </button>\n </div>\n </div>\n </div>\n );\n\n const renderSuccessStep = () => (\n <div className=\"w-full flex flex-col items-center space-y-6 pt-16 px-12\">\n <div \n className=\"flex items-center justify-center w-16 h-16 rounded-full\"\n style={{ backgroundColor: '#D1FAE5' }}\n >\n <Check className=\"w-8 h-8\" style={{ color: COLORS.success }} />\n </div>\n \n <div className=\"text-center space-y-2\">\n <h2 \n className=\"text-xl font-semibold\"\n style={{ color: COLORS.textPrimary }}\n >\n Email verified!\n </h2>\n <p style={{ color: COLORS.textSecondary }}>Setting up your account...</p>\n </div>\n\n <div className=\"w-8 h-8\">\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\n </div>\n </div>\n );\n\n return (\n <div className=\"w-full\">\n {step === 'email' && renderEmailStep()}\n {step === 'code' && renderCodeStep()}\n {step === 'success' && renderSuccessStep()}\n </div>\n );\n} \n","import React, { useState, useEffect } from 'react';\n\n// Default persona images - using public folder paths for consumer compatibility\nconst defaultPersonaImages = {\n 1: 'https://anushkasirv.sirv.com/persona1.png',\n 2: 'https://anushkasirv.sirv.com/persona2.png', \n 3: 'https://anushkasirv.sirv.com/persona3.png',\n 4: 'https://anushkasirv.sirv.com/persona4.png',\n 5: 'https://anushkasirv.sirv.com/persona5.png',\n};\n\nconst platforms = [\n { \n name: 'Gmail', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\">\n <path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"/>\n <path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"/>\n <path fill=\"#FBBC05\" d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"/>\n <path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'gmail',\n description: \"We use your emails and search patterns to better understand your interests and communication style.\"\n },\n { \n name: 'Google', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\">\n <path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"/>\n <path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"/>\n <path fill=\"#FBBC05\" d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"/>\n <path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'google',\n description: \"We use your search, YouTube, and location signals to better understand your interests and routines.\"\n },\n { \n name: 'Reddit', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"#FF4500\">\n <path d=\"M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 0 1-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 0 1 .042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 0 1 4.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 0 1 .14-.197.35.35 0 0 1 .238-.042l2.906.617a1.214 1.214 0 0 1 1.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 0 0-.231.094.33.33 0 0 0 0 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 0 0 .029-.463.33.33 0 0 0-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 0 0-.232-.095z\" />\n </svg>\n ), \n color: 'bg-white', \n connector: 'reddit',\n description: \"We use your posts and interactions to better understand your interests and preferences.\"\n },\n { \n name: 'Instagram', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\">\n <defs>\n <radialGradient id=\"instagram-gradient\" cx=\"0.5\" cy=\"1\" r=\"1\">\n <stop offset=\"0%\" stopColor=\"#FD5949\" />\n <stop offset=\"50%\" stopColor=\"#D6249F\" />\n <stop offset=\"100%\" stopColor=\"#285AEB\" />\n </radialGradient>\n </defs>\n <path fill=\"url(#instagram-gradient)\" d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.073-1.689-.073-4.849 0-3.204.013-3.583.072-4.948.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'instagram',\n description: \"We use your photos and interactions to better understand your visual preferences and lifestyle.\"\n },\n { \n name: 'LinkedIn', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"#0077B5\">\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n ), \n color: 'bg-white', \n connector: 'linkedin',\n description: \"We use your professional network and content to better understand your career interests.\"\n },\n { \n name: 'Pinterest', \n icon: (\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"#E60023\">\n <path d=\"M12 0C5.373 0 0 5.372 0 12s5.373 12 12 12c6.628 0 12-5.372 12-12S18.628 0 12 0zm0 19c-.721 0-1.418-.109-2.073-.312.286-.465.713-1.227.87-1.835l.437-1.664c.229.436.895.8 1.604.8 2.111 0 3.633-1.941 3.633-4.354 0-2.312-1.895-4.049-4.218-4.049-2.972 0-4.684 1.946-4.684 4.338 0 1.083.424 2.42 1.218 2.847.131.07.201.04.232-.107.023-.106.151-.602.2-.784.067-.25.041-.336-.145-.553-.408-.474-.615-1.088-.615-1.72 0-1.658 1.222-3.259 3.297-3.259 1.798 0 3.064 1.244 3.064 3.018 0 2.019-.864 3.423-2.024 3.423-.633 0-1.106-.537-.954-1.196.181-.788.532-1.637.532-2.204 0-.508-.267-.932-.822-.932-.652 0-1.176.685-1.176 1.602 0 .584.197.98.197.98l-.790 3.396C6.595 16.85 6.017 14.47 6.017 12c0-3.313 2.687-6 6-6s6 2.687 6 6-2.687 6-6 6z\"/>\n </svg>\n ), \n color: 'bg-white', \n connector: 'pinterest',\n description: \"We use your pins and boards to better understand your creative interests and style preferences.\"\n }\n];\n\n// Enhanced SDK configuration\nconst sdkConfig = {\n apiKey: process.env.REACT_APP_ONAIROS_API_KEY || 'onairos_web_sdk_live_key_2024',\n baseUrl: process.env.REACT_APP_ONAIROS_BASE_URL || 'https://api2.onairos.uk',\n sdkType: 'web', // web, mobile, desktop\n enableHealthMonitoring: true,\n enableAutoRefresh: true,\n enableConnectionValidation: true\n};\n\n/**\n * UniversalOnboarding Component - Compact & Enhanced\n * Displays a streamlined onboarding screen for data connections\n */\nexport default function UniversalOnboarding({ onComplete, onBack, appIcon, appName = 'App', personaImages: personaImagesProp, priorityPlatform = null, testMode = false }) {\n // Use provided persona images or fallback to defaults\n const personaImages = personaImagesProp ?? defaultPersonaImages;\n \n const [connectedAccounts, setConnectedAccounts] = useState({});\n const [isConnecting, setIsConnecting] = useState(false);\n const [connectingPlatform, setConnectingPlatform] = useState(null);\n const [connectionErrors, setConnectionErrors] = useState({});\n const [connectionHealth, setConnectionHealth] = useState({});\n const [healthScore, setHealthScore] = useState(0);\n\n // Mobile device detection\n const isMobileDevice = () => {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ||\n (window.innerWidth <= 768);\n };\n\n // Handle mobile OAuth return\n useEffect(() => {\n const handleOAuthReturn = () => {\n const platform = localStorage.getItem('onairos_oauth_platform');\n if (platform) {\n console.log(`📱 OAuth return detected for: ${platform}`);\n \n // Clear OAuth state\n localStorage.removeItem('onairos_oauth_platform');\n localStorage.removeItem('onairos_oauth_return');\n \n // Mark as connected\n setConnectedAccounts(prev => ({\n ...prev,\n [platform]: true\n }));\n \n // Clear any errors\n setConnectionErrors(prev => ({\n ...prev,\n [platform]: null\n }));\n \n console.log(`✅ ${platform} marked as connected from OAuth return`);\n }\n };\n\n handleOAuthReturn();\n }, []);\n\n const connectToPlatform = async (platformName) => {\n console.log(`🚀 connectToPlatform called for: ${platformName}`);\n \n const platform = platforms.find(p => p.name === platformName);\n if (!platform?.connector) {\n console.error(`❌ No connector found for platform: ${platformName}`);\n return false;\n }\n\n try {\n setIsConnecting(true);\n setConnectingPlatform(platformName);\n \n // Clear any previous errors\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n \n console.log(`🔗 Starting OAuth connection for ${platformName}...`);\n \n const username = localStorage.getItem('username') || localStorage.getItem('onairosUser')?.email || 'user@example.com';\n \n // Enhanced authorize endpoint with SDK type\n const authorizeUrl = `${sdkConfig.baseUrl}/${platform.connector}/authorize`;\n \n const response = await fetch(authorizeUrl, {\n method: 'POST',\n headers: {\n 'x-api-key': sdkConfig.apiKey,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n session: {\n username: username\n }\n })\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const responseData = await response.json();\n console.log(`📋 ${platformName} OAuth response:`, responseData);\n \n // Check for platform-specific URL keys with multiple fallbacks\n const platformUrlKeys = {\n 'youtube': ['youtubeURL', 'youtubeUrl', 'youtube_url'],\n 'linkedin': ['linkedinURL', 'linkedinUrl', 'linkedin_url'], \n 'reddit': ['redditURL', 'redditUrl', 'reddit_url'],\n 'pinterest': ['pinterestURL', 'pinterestUrl', 'pinterest_url'],\n 'instagram': ['instagramURL', 'instagramUrl', 'instagram_url'],\n 'github': ['githubURL', 'githubUrl', 'github_url'],\n 'facebook': ['facebookURL', 'facebookUrl', 'facebook_url'],\n 'gmail': ['gmailURL', 'gmailUrl', 'gmail_url']\n };\n \n const possibleKeys = platformUrlKeys[platform.connector] || [\n `${platform.connector}URL`,\n `${platform.connector}Url`, \n `${platform.connector}_url`,\n 'platformURL',\n 'authUrl', \n 'url'\n ];\n \n let oauthUrl = null;\n let usedKey = null;\n \n // Try each possible key\n for (const key of possibleKeys) {\n if (responseData[key]) {\n oauthUrl = responseData[key];\n usedKey = key;\n break;\n }\n }\n \n if (!oauthUrl) {\n console.error(`❌ No OAuth URL found for ${platformName}:`);\n console.error(`Expected one of:`, possibleKeys);\n console.error(`Response keys:`, Object.keys(responseData));\n console.error(`Full response:`, responseData);\n throw new Error(`No OAuth URL found. Backend should return one of: ${possibleKeys.join(', ')}`);\n }\n \n console.log(`✅ Found OAuth URL for ${platformName} using key: ${usedKey}`);\n \n if (isMobileDevice()) {\n // Mobile: Use redirect flow\n localStorage.setItem('onairos_oauth_platform', platformName);\n localStorage.setItem('onairos_oauth_return', window.location.href);\n window.location.href = oauthUrl;\n return true;\n } else {\n // Desktop: Use popup flow with enhanced monitoring\n const popup = window.open(\n oauthUrl,\n `${platform.connector}_oauth`,\n 'width=500,height=600,scrollbars=yes,resizable=yes,status=no,location=no,toolbar=no,menubar=no'\n );\n \n if (!popup) {\n throw new Error('Popup blocked. Please allow popups and try again.');\n }\n\n // Enhanced popup monitoring with onairos.uk detection\n let hasNavigatedToOnairos = false;\n const checkInterval = setInterval(() => {\n try {\n // Try to detect if popup has navigated to onairos.uk (indicates success)\n if (popup.location && popup.location.hostname === 'onairos.uk') {\n hasNavigatedToOnairos = true;\n console.log(`🔄 ${platformName} popup navigated to onairos.uk - treating as success`);\n \n // Close the popup since it shows \"not found\"\n popup.close();\n return; // Let the popup.closed check handle the rest\n }\n } catch (e) {\n // Cross-origin error is expected when popup navigates to onairos.uk\n // This actually indicates the OAuth likely succeeded\n if (!hasNavigatedToOnairos) {\n hasNavigatedToOnairos = true;\n console.log(`🔄 ${platformName} popup navigated (cross-origin) - likely to onairos.uk`);\n }\n }\n \n try {\n // Check if popup is closed\n if (popup.closed) {\n clearInterval(checkInterval);\n \n // Check for success or error signals from callback page\n const successFlag = localStorage.getItem(`onairos_${platformName}_success`);\n const errorFlag = localStorage.getItem(`onairos_${platformName}_error`);\n const timestamp = localStorage.getItem(`onairos_${platformName}_timestamp`);\n \n // Only process recent signals (within 30 seconds)\n const isRecentSignal = timestamp && (Date.now() - parseInt(timestamp) < 30000);\n \n if (successFlag && isRecentSignal) {\n // Success flow from callback page\n console.log(`✅ ${platformName} OAuth completed successfully (callback page)`);\n localStorage.removeItem(`onairos_${platformName}_success`);\n localStorage.removeItem(`onairos_${platformName}_timestamp`);\n \n setConnectedAccounts(prev => ({\n ...prev,\n [platformName]: true\n }));\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n \n } else if (errorFlag && isRecentSignal) {\n // Error flow from callback page\n console.log(`❌ ${platformName} OAuth failed:`, errorFlag);\n localStorage.removeItem(`onairos_${platformName}_error`);\n localStorage.removeItem(`onairos_${platformName}_timestamp`);\n \n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: errorFlag\n }));\n \n } else if (hasNavigatedToOnairos) {\n // Popup navigated to onairos.uk - assume success\n console.log(`✅ ${platformName} OAuth likely successful (navigated to onairos.uk)`);\n setConnectedAccounts(prev => ({\n ...prev,\n [platformName]: true\n }));\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n \n } else {\n // No signal and no onairos navigation - assume user cancelled\n console.log(`⚠️ ${platformName} OAuth cancelled or no response`);\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: 'Connection was cancelled'\n }));\n }\n \n setIsConnecting(false);\n setConnectingPlatform(null);\n }\n } catch (error) {\n // Cross-origin error when popup navigates away - this is normal\n // console.log(`🔄 Popup navigated away for ${platformName}`);\n }\n }, 1000);\n\n // Auto-close popup if it shows onairos.uk \"not found\" page after 10 seconds\n setTimeout(() => {\n try {\n if (!popup.closed && popup.location && popup.location.hostname === 'onairos.uk') {\n console.log(`🚪 Auto-closing ${platformName} popup showing onairos.uk (not found)`);\n popup.close();\n }\n } catch (e) {\n // Cross-origin error is expected - try to close anyway if it's been 10 seconds\n if (!popup.closed && hasNavigatedToOnairos) {\n console.log(`🚪 Auto-closing ${platformName} popup (cross-origin, likely onairos.uk)`);\n popup.close();\n }\n }\n }, 10000);\n\n // Final timeout after 5 minutes\n setTimeout(() => {\n if (!popup.closed) {\n popup.close();\n clearInterval(checkInterval);\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: 'Connection timeout'\n }));\n setIsConnecting(false);\n setConnectingPlatform(null);\n }\n }, 300000);\n\n return true;\n }\n } catch (error) {\n console.error(`❌ Error connecting to ${platformName}:`, error);\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: error.message\n }));\n setIsConnecting(false);\n setConnectingPlatform(null);\n return false;\n }\n };\n\n const handleToggle = async (platformName) => {\n console.log(`🔥 TOGGLE CLICKED: ${platformName}`);\n \n if (isConnecting && connectingPlatform !== platformName) {\n console.log(`⚠️ Already connecting to ${connectingPlatform}, ignoring click on ${platformName}`);\n return;\n }\n \n const isConnected = connectedAccounts[platformName];\n \n if (isConnected) {\n // Disconnect\n console.log(`🔌 Disconnecting from ${platformName}...`);\n setConnectedAccounts(prev => ({\n ...prev,\n [platformName]: false\n }));\n setConnectionErrors(prev => ({\n ...prev,\n [platformName]: null\n }));\n } else {\n // Connect\n await connectToPlatform(platformName);\n }\n };\n\n const handleContinue = () => {\n const connected = Object.entries(connectedAccounts)\n .filter(([platform, isConnected]) => isConnected)\n .map(([platform]) => platform);\n \n onComplete({\n connectedAccounts: connected,\n totalConnections: connected.length,\n healthScore: healthScore,\n connectionHealth: connectionHealth,\n sdkVersion: '2.1.7',\n enhancedFeatures: {\n healthMonitoring: sdkConfig.enableHealthMonitoring,\n autoRefresh: sdkConfig.enableAutoRefresh,\n connectionValidation: sdkConfig.enableConnectionValidation\n }\n });\n };\n\n const connectedCount = Object.values(connectedAccounts).filter(Boolean).length;\n const personaNumber = Math.min(connectedCount + 1, 5); // 0 connections = persona 1, 1 connection = persona 2, etc.\n\n // Sort platforms to prioritize the specified platform\n const getSortedPlatforms = () => {\n if (!priorityPlatform) return platforms;\n \n const priorityPlat = platforms.find(p => \n p.name.toLowerCase() === priorityPlatform.toLowerCase() || \n p.connector.toLowerCase() === priorityPlatform.toLowerCase()\n );\n \n if (!priorityPlat) return platforms;\n \n const otherPlatforms = platforms.filter(p => p !== priorityPlat);\n return [priorityPlat, ...otherPlatforms];\n };\n\n const sortedPlatforms = getSortedPlatforms();\n const isPriorityPlatform = (platform) => {\n if (!priorityPlatform) return false;\n return platform.name.toLowerCase() === priorityPlatform.toLowerCase() || \n platform.connector.toLowerCase() === priorityPlatform.toLowerCase();\n };\n\n return (\n <div className=\"w-full h-full flex flex-col\" style={{ height: '90vh', minHeight: 0 }}>\n {/* Content - Flexible center area */}\n <div className=\"px-6 pt-16 flex-1 flex flex-col\" style={{ minHeight: 0, overflow: 'hidden' }}>\n <div className=\"mb-6 flex-shrink-0\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2 text-balance leading-tight\">Connect app data</h1>\n <p className=\"text-gray-600 text-base\">More connections, better personalization.</p>\n </div>\n\n <div className=\"mb-2 flex justify-center flex-shrink-0\">\n <div className=\"w-56 h-56 overflow-hidden\">\n <img\n src={personaImages[personaNumber]}\n alt={`Persona ${personaNumber}`}\n width=\"256\"\n height=\"256\"\n className=\"w-full h-full object-cover\"\n onLoad={() => console.log('✅ Persona image loaded successfully!')}\n onError={(e) => {\n console.log('❌ Persona image failed to load:', personaImages[personaNumber]);\n console.log('Connected count:', connectedCount);\n console.log('Persona number:', personaNumber);\n console.log('All persona URLs:', personaImages);\n console.log('Current location:', window.location.href);\n console.log('Trying to load from:', personaImages[personaNumber]);\n \n // Fallback to gradient if image fails to load\n e.target.style.display = 'none';\n e.target.parentElement.style.background = 'linear-gradient(135deg, #f97316 0%, #ec4899 50%, #8b5cf6 100%)';\n }}\n />\n </div>\n </div>\n\n {/* Scrollable platform list */}\n <div className=\"flex-1 overflow-y-auto mt-4\" style={{ minHeight: 0 }}>\n <div className=\"space-y-4 pb-4\">\n {platforms.map((platform) => {\n const isConnected = connectedAccounts[platform.name] || false;\n const isCurrentlyConnecting = connectingPlatform === platform.name;\n const hasError = connectionErrors[platform.name];\n const isDisabled = isConnecting && !isCurrentlyConnecting;\n const isPriority = isPriorityPlatform(platform);\n \n return (\n <div \n key={platform.name}\n className=\"flex items-start gap-4 p-4 rounded-xl hover:bg-gray-50 transition-colors\"\n style={{\n backgroundColor: \"#ffffff\",\n border: \"none\",\n outline: \"none\",\n gap: 'clamp(6px, 1.5vw, 10px)',\n padding: 'clamp(6px, 1.5vw, 10px)',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n marginBottom: 'clamp(3px, 0.8vw, 6px)'\n }}\n onClick={() => !isDisabled && handleToggle(platform.name)}\n >\n <div className=\"bg-gray-50 rounded-full flex items-center justify-center flex-shrink-0 border-2 border-gray-200\" style={{ width: 'clamp(28px, 6vw, 36px)', height: 'clamp(28px, 6vw, 36px)' }}>\n {isCurrentlyConnecting ? (\n <div className=\"animate-spin h-5 w-5 border-2 border-gray-400 rounded-full border-t-transparent\"></div>\n ) : (\n platform.icon\n )}\n </div>\n <div className=\"flex-1 min-w-0 pr-4\">\n <h3\n className=\"font-semibold\"\n style={{\n color: \"#111827\",\n fontSize: 'clamp(12px, 2.8vw, 15px)',\n marginBottom: 'clamp(1px, 0.3vw, 3px)',\n lineHeight: '1.2'\n }}\n >\n {platform.name}\n </h3>\n <p\n className=\"leading-tight\"\n style={{\n color: \"#6B7280\",\n fontSize: 'clamp(10px, 2.2vw, 12px)',\n lineHeight: '1.3'\n }}\n >\n {platform.description}\n </p>\n \n {/* Error Message */}\n {hasError && (\n <p className=\"text-xs text-red-600 mt-1\">\n {hasError}\n </p>\n )}\n </div>\n <div className=\"flex-shrink-0\">\n <div\n onClick={(e) => {\n e.stopPropagation();\n if (!isDisabled) handleToggle(platform.name);\n }}\n className={`relative inline-flex items-center rounded-full transition-all duration-300 ease-in-out cursor-pointer ${\n isConnected ? \"bg-blue-500\" : \"bg-gray-300\"\n } ${isDisabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n style={{ \n height: 'clamp(20px, 4vw, 26px)', \n width: 'clamp(40px, 8vw, 52px)',\n boxShadow: isConnected ? '0 2px 4px rgba(59, 130, 246, 0.3)' : '0 1px 2px rgba(0, 0, 0, 0.1)'\n }}\n >\n <span\n className={`inline-block rounded-full bg-white transition-all duration-300 ease-in-out shadow-lg ${\n isConnected ? \"translate-x-6\" : \"translate-x-0.5\"\n }`}\n style={{ \n height: 'clamp(16px, 3.5vw, 20px)', \n width: 'clamp(16px, 3.5vw, 20px)'\n }}\n />\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Buttons - Fixed at bottom */}\n <div className=\"flex-shrink-0\" style={{ padding: 'clamp(8px, 2vw, 16px) clamp(16px, 4vw, 24px)', minHeight: 'auto', display: 'flex', flexDirection: 'column', gap: 'clamp(6px, 1.5vw, 10px)' }}>\n <div\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white rounded-xl font-semibold flex items-center justify-center gap-2 cursor-pointer transition-all duration-200 shadow-lg hover:shadow-xl\"\n style={{ \n padding: 'clamp(10px, 2.5vw, 14px)', \n fontSize: 'clamp(13px, 3.2vw, 16px)',\n minHeight: 'clamp(36px, 7vw, 44px)'\n }}\n onClick={handleContinue}\n >\n Update\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </div>\n {connectedCount > 0 && (\n <div\n onClick={() => onComplete({ connectedAccounts: [], totalConnections: 0 })}\n className=\"w-full text-gray-500 font-medium text-center cursor-pointer hover:text-gray-700 transition-colors\"\n style={{ \n padding: 'clamp(6px, 1.5vw, 10px)', \n fontSize: 'clamp(12px, 3vw, 15px)',\n minHeight: 'clamp(28px, 5vw, 36px)'\n }}\n >\n Skip\n </div>\n )}\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nexport default function PinSetup({ onComplete, onBack, userEmail }) {\n const [pin, setPin] = useState('');\n const [pinRequirements, setPinRequirements] = useState({\n length: false,\n uppercase: false,\n number: false,\n });\n\n // Check PIN requirements\n useEffect(() => {\n setPinRequirements({\n length: pin.length >= 6,\n uppercase: /[A-Z]/.test(pin),\n number: /\\d/.test(pin),\n });\n }, [pin]);\n\n const allRequirementsMet = pinRequirements.length && pinRequirements.uppercase && pinRequirements.number;\n\n const handleSubmit = () => {\n if (allRequirementsMet) {\n onComplete({\n pin: pin, // This should be hashed in production\n pinCreated: true,\n timestamp: new Date().toISOString()\n });\n }\n };\n\n return (\n <div className=\"w-full h-full flex flex-col\" style={{ height: '100%', minHeight: 0 }}>\n {/* Content - Flexible center area */}\n <div className=\"px-6 pt-16 flex-1 flex flex-col\" style={{ minHeight: 0, overflow: 'hidden' }}>\n <div className=\"mb-6 flex-shrink-0\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2\">Create a PIN</h1>\n <p className=\"text-gray-600 text-base\">A PIN so only you have the access to your data</p>\n </div>\n\n <div className=\"mb-6 flex-shrink-0\">\n <input\n type=\"password\"\n value={pin}\n onChange={(e) => setPin(e.target.value)}\n className=\"w-full px-4 py-4 border-2 border-gray-300 rounded-xl text-center text-lg font-medium focus:border-gray-900 focus:outline-none bg-gray-50\"\n placeholder=\"Enter your PIN\"\n maxLength={20}\n />\n </div>\n\n {/* Scrollable requirements list */}\n <div className=\"flex-1 overflow-y-auto\" style={{ minHeight: 0 }}>\n <div className=\"space-y-3 pb-4\">\n <p className=\"text-gray-900 font-medium mb-4\">Your PIN must:</p>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div\n className={`w-5 h-5 rounded-full border-2 ${pinRequirements.length ? \"border-green-500 bg-green-500\" : \"border-gray-300 bg-white\"}`}\n >\n {pinRequirements.length && (\n <svg className=\"w-3 h-3 text-white m-0.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </div>\n <span className=\"text-gray-700\">Be at least 6 characters in length.</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <div\n className={`w-5 h-5 rounded-full border-2 ${pinRequirements.uppercase ? \"border-green-500 bg-green-500\" : \"border-gray-300 bg-white\"}`}\n >\n {pinRequirements.uppercase && (\n <svg className=\"w-3 h-3 text-white m-0.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </div>\n <span className=\"text-gray-700\">Contain an uppercase letter.</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <div\n className={`w-5 h-5 rounded-full border-2 ${pinRequirements.number ? \"border-green-500 bg-green-500\" : \"border-gray-300 bg-white\"}`}\n >\n {pinRequirements.number && (\n <svg className=\"w-3 h-3 text-white m-0.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </div>\n <span className=\"text-gray-700\">Contain a number.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Buttons - Fixed at bottom */}\n <div className=\"px-6 pb-6 pt-4 flex-shrink-0 space-y-3\" style={{ minHeight: 'auto' }}>\n <div\n className={`w-full rounded-full py-4 text-base font-medium flex items-center justify-center gap-2 transition-colors ${\n allRequirementsMet \n ? \"bg-gray-900 hover:bg-gray-800 text-white cursor-pointer\" \n : \"bg-gray-300 text-gray-500 cursor-not-allowed\"\n }`}\n onClick={allRequirementsMet ? handleSubmit : undefined}\n >\n Continue\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </div>\n </div>\n </div>\n );\n} ","import React, { useState, useEffect } from 'react';\nimport PrimaryButton from './ui/PrimaryButton.jsx';\nimport { COLORS } from '../theme/colors.js';\n\nconst dataTypes = [\n { \n id: 'basic', \n name: 'Basic Profile', \n description: 'Essential profile information, account details, and basic demographics', \n icon: 'User',\n required: true,\n tooltip: 'Includes name, email, basic profile information. This data is essential for personalization and is always included.',\n privacyLink: 'https://onairos.uk/privacy#basic-info'\n },\n { \n id: 'preferences', \n name: 'User Preferences', \n description: 'User preferences, interests, settings and personal choices', \n icon: 'Grid3X3',\n required: false,\n tooltip: 'Your stated preferences and interests from connected platforms. Helps customize your experience.',\n privacyLink: 'https://onairos.uk/privacy#preferences-data'\n },\n { \n id: 'personality', \n name: 'Personality Traits', \n description: 'Personality traits, behavioral patterns and psychological insights', \n icon: 'Brain',\n required: false,\n tooltip: 'AI-analyzed personality traits based on your social media activity and interactions. Used to improve content recommendations.',\n privacyLink: 'https://onairos.uk/privacy#personality-data'\n }\n];\n\n// Data Type Toggle Component with compact checkbox design\nconst DataTypeToggle = ({ dataType, isEnabled, onToggle, isLast }) => {\n const handleToggle = () => {\n if (dataType.required) return; // Don't allow toggling required items\n onToggle(dataType.id, !isEnabled);\n };\n\n const getIconComponent = (iconName) => {\n const iconProps = { className: \"w-4 h-4 text-gray-600\" };\n \n switch (iconName) {\n case 'User':\n return (\n <svg {...iconProps} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n );\n case 'Grid3X3':\n return (\n <svg {...iconProps} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z\" />\n </svg>\n );\n case 'Brain':\n return (\n <svg {...iconProps} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n );\n default:\n return <span className=\"text-lg\">{iconName}</span>;\n }\n };\n\n return (\n <div className=\"flex items-center justify-between p-3 rounded-lg bg-gray-50\">\n <div className=\"flex items-center gap-4\">\n <div className=\"w-8 h-8 bg-gray-200 rounded-full flex items-center justify-center flex-shrink-0\">\n {getIconComponent(dataType.icon)}\n </div>\n <div className=\"min-w-0 flex-1\">\n <span className=\"font-medium text-gray-900 text-sm\">{dataType.name}</span>\n </div>\n </div>\n <div\n onClick={handleToggle}\n className={`w-5 h-5 rounded border-2 flex items-center justify-center cursor-pointer transition-colors flex-shrink-0 ${\n isEnabled ? \"bg-gray-900 border-gray-900\" : \"bg-white border-gray-300\"\n }`}\n >\n {isEnabled && (\n <svg className=\"w-3 h-3 text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )}\n </div>\n </div>\n );\n};\n\nconst DataRequest = ({ \n userEmail = 'user@example.com', \n testMode = true, \n onComplete, \n autoFetch = true,\n appName = 'Test App',\n formatResponse = false,\n responseFormat = 'simple'\n}) => {\n const [selectedData, setSelectedData] = useState({\n basic: true, // Always true for required data\n personality: false,\n preferences: false\n });\n const [isLoadingApi, setIsLoadingApi] = useState(false);\n const [apiError, setApiError] = useState(null);\n\n const handleDataToggle = (dataId, enabled) => {\n const dataType = dataTypes.find(dt => dt.id === dataId);\n if (dataType?.required) return; // Don't allow toggling required items\n\n setSelectedData(prev => ({\n ...prev,\n [dataId]: enabled\n }));\n };\n\n const generateUserHash = (email) => {\n let hash = 0;\n const str = email + Date.now().toString();\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return `user_${Math.abs(hash).toString(36)}`;\n };\n\n const fetchUserData = async () => {\n console.log('🔥 DataRequest: fetchUserData called');\n console.log('🔥 DataRequest: onComplete function:', typeof onComplete);\n console.log('🔥 DataRequest: selectedData:', selectedData);\n console.log('🔥 DataRequest: selectedCount:', selectedCount);\n \n setIsLoadingApi(true);\n setApiError(null);\n \n try {\n const userHash = generateUserHash(userEmail);\n \n // Get selected data types\n const approvedData = Object.entries(selectedData)\n .filter(([key, value]) => value)\n .map(([key]) => key);\n\n const mapDataTypesToConfirmations = (approvedData) => {\n const confirmations = [];\n const currentDate = new Date().toISOString();\n \n const dataTypeMapping = {\n 'basic': 'Medium',\n 'personality': 'Large', \n 'preferences': 'Traits'\n };\n \n approvedData.forEach(dataType => {\n if (dataTypeMapping[dataType]) {\n confirmations.push({\n data: dataTypeMapping[dataType],\n date: currentDate\n });\n }\n });\n \n return confirmations;\n };\n\n const apiEndpoint = testMode \n ? 'https://api2.onairos.uk/inferenceTest'\n : 'https://api2.onairos.uk/getAPIurlMobile';\n \n const baseResult = {\n userHash,\n appName,\n approvedData,\n apiUrl: apiEndpoint,\n testMode,\n timestamp: new Date().toISOString()\n };\n\n if (autoFetch) {\n if (testMode) {\n // Test mode: Skip API call completely, simulate response\n console.log('🧪 Test mode: Simulating data request API call for:', approvedData);\n \n setTimeout(() => {\n const simulatedApiData = {\n success: true,\n message: \"Data request simulated successfully\",\n data: {\n personalityScores: {\n openness: 0.75,\n conscientiousness: 0.68,\n extraversion: 0.82,\n agreeableness: 0.71,\n neuroticism: 0.43\n },\n insights: [\n \"You show high creativity and openness to new experiences\",\n \"Strong social tendencies with good interpersonal skills\",\n \"Well-organized approach to tasks and goals\"\n ],\n dataProcessed: approvedData,\n timestamp: new Date().toISOString(),\n testMode: true\n }\n };\n\n const result = {\n ...baseResult,\n apiResponse: simulatedApiData,\n success: true,\n simulated: true\n };\n\n setIsLoadingApi(false);\n console.log('🧪 Test mode: Simulated data request completed:', result);\n console.log('🔥 DataRequest: onComplete function type:', typeof onComplete);\n if (onComplete && typeof onComplete === 'function') {\n onComplete(result);\n console.log('🔥 DataRequest: onComplete called successfully (test mode)');\n } else {\n console.error('🔥 DataRequest: onComplete is not a function or is undefined (test mode)');\n }\n }, 1200); // Simulate realistic processing time\n } else {\n // Production mode: Make real API call\n try {\n const confirmations = mapDataTypesToConfirmations(approvedData);\n \n const requestBody = {\n approvedData,\n userEmail,\n appName,\n confirmations\n };\n\n console.log('🔥 DataRequest: Making API call to:', apiEndpoint);\n console.log('🔥 Request body:', requestBody);\n\n const apiResponse = await fetch(apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!apiResponse.ok) {\n throw new Error(`API request failed with status ${apiResponse.status}`);\n }\n\n const apiData = await apiResponse.json();\n console.log('🔥 API Response:', apiData);\n\n const result = {\n ...baseResult,\n apiResponse: apiData,\n success: true\n };\n\n setIsLoadingApi(false);\n console.log('🔥 DataRequest: Calling onComplete with result:', result);\n console.log('🔥 DataRequest: onComplete function type:', typeof onComplete);\n if (onComplete && typeof onComplete === 'function') {\n onComplete(result);\n console.log('🔥 DataRequest: onComplete called successfully');\n } else {\n console.error('🔥 DataRequest: onComplete is not a function or is undefined');\n }\n\n } catch (apiError) {\n console.error('🔥 API Error:', apiError);\n setApiError(apiError.message);\n setIsLoadingApi(false);\n \n const errorResult = {\n ...baseResult,\n apiResponse: null,\n error: apiError.message,\n success: false\n };\n \n onComplete(errorResult);\n }\n }\n } else {\n setIsLoadingApi(false);\n console.log('🔥 DataRequest: Auto-fetch disabled, calling onComplete with base result');\n console.log('🔥 DataRequest: onComplete function type:', typeof onComplete);\n if (onComplete && typeof onComplete === 'function') {\n onComplete(baseResult);\n console.log('🔥 DataRequest: onComplete called successfully (auto-fetch disabled)');\n } else {\n console.error('🔥 DataRequest: onComplete is not a function or is undefined (auto-fetch disabled)');\n }\n }\n } catch (error) {\n console.error('🔥 DataRequest Error:', error);\n setApiError(error.message);\n setIsLoadingApi(false);\n \n if (onComplete) {\n onComplete({\n error: error.message,\n success: false,\n userEmail,\n appName,\n testMode\n });\n }\n }\n };\n\n // Count selected data types\n const selectedCount = Object.values(selectedData).filter(Boolean).length;\n\n return (\n <div className=\"w-full h-full flex flex-col min-h-0\">\n {/* Content - Flexible center area with proper constraints */}\n <div className=\"px-6 pt-16 flex-1 flex flex-col min-h-0\" style={{ minHeight: 'calc(100vh - 200px)' }}>\n {/* Icon Flow */}\n <div className=\"mb-4 flex justify-center items-center gap-4 flex-shrink-0\">\n <div className=\"w-12 h-12 bg-white rounded-xl shadow-lg flex items-center justify-center border border-gray-100\">\n <svg className=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 2C13.1 2 14 2.9 14 4C14 5.1 13.1 6 12 6C10.9 6 10 5.1 10 4C10 2.9 10.9 2 12 2Z\"\n fill=\"black\"\n />\n <path\n d=\"M21 9V7L15 6.5V9C15 10.66 13.66 12 12 12C10.34 12 9 10.66 9 9V6.5L3 7V9C3 12.87 6.13 16 10 16V22H14V16C17.87 16 21 12.87 21 9Z\"\n fill=\"black\"\n />\n </svg>\n </div>\n <svg className=\"w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n <div className=\"w-12 h-12 bg-white rounded-xl shadow-lg flex items-center justify-center border border-gray-100\">\n <span className=\"text-xl font-serif font-bold text-black\">E</span>\n </div>\n </div>\n\n {/* Title Section */}\n <div className=\"mb-4 flex-shrink-0\">\n <h1 className=\"text-xl font-bold text-gray-900 mb-2 text-balance leading-tight\">\n Enoch wants to personalize your experience\n </h1>\n <p className=\"text-gray-600 text-sm\">Choose what to share:</p>\n </div>\n\n {/* Consent Options - Scrollable area */}\n <div className=\"flex-1 overflow-y-auto min-h-0\">\n <div className=\"space-y-4 pb-4\">\n {dataTypes.map((dataType, index) => (\n <DataTypeToggle\n key={dataType.id}\n dataType={dataType}\n isEnabled={selectedData[dataType.id]}\n onToggle={handleDataToggle}\n isLast={index === dataTypes.length - 1}\n />\n ))}\n </div>\n </div>\n </div>\n\n {/* Buttons - Fixed at bottom with guaranteed visibility */}\n <div className=\"px-6 pb-6 pt-3 flex-shrink-0 space-y-2 bg-white border-t border-gray-100\">\n <div\n className=\"w-full bg-gray-900 hover:bg-gray-800 text-white rounded-full py-3 text-sm font-medium flex items-center justify-center gap-2 cursor-pointer transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n onClick={fetchUserData}\n disabled={isLoadingApi || selectedCount === 0}\n >\n {isLoadingApi ? \"Processing...\" : \"Accept & Continue\"}\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </div>\n <div\n onClick={() => onComplete({ cancelled: true })}\n className=\"w-full bg-gray-200 hover:bg-gray-300 text-gray-700 rounded-full py-3 text-sm font-medium text-center cursor-pointer transition-colors\"\n >\n Decline\n </div>\n\n {/* Error display */}\n {apiError && (\n <div className=\"mt-3 p-3 rounded-lg text-center bg-red-50 border border-red-200 text-red-600\">\n <p className=\"text-xs\">{apiError}</p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default DataRequest; ","import React, { useState, useEffect } from 'react';\nimport { COLORS } from '../theme/colors.js';\n\nexport default function TrainingComponent({ onComplete, userEmail, appName = 'App', testMode = true }) {\n const [currentStep, setCurrentStep] = useState(0);\n const [progress, setProgress] = useState(0);\n const [isComplete, setIsComplete] = useState(false);\n\n const steps = [\n {\n title: 'Setting up your personal AI',\n description: 'Initializing your secure data model',\n icon: '🤖',\n duration: testMode ? 800 : 2000 // Much faster in test mode\n },\n {\n title: 'Processing your connections',\n description: 'Analyzing your social media patterns',\n icon: '🔗',\n duration: testMode ? 600 : 2500\n },\n {\n title: 'Training your model',\n description: 'Building your personalized insights',\n icon: '🧠',\n duration: testMode ? 700 : 3000\n },\n {\n title: 'Finalizing setup',\n description: 'Preparing your Onairos experience',\n icon: '✨',\n duration: testMode ? 500 : 2000\n }\n ];\n\n useEffect(() => {\n let interval;\n let stepTimeout;\n\n if (currentStep < steps.length) {\n const stepDuration = steps[currentStep].duration;\n const stepProgress = 100 / steps.length;\n\n // Update progress gradually\n interval = setInterval(() => {\n setProgress(prev => {\n const newProgress = prev + (stepProgress / (stepDuration / 100));\n return Math.min(newProgress, (currentStep + 1) * stepProgress);\n });\n }, 100);\n\n // Move to next step after duration\n stepTimeout = setTimeout(() => {\n if (currentStep < steps.length - 1) {\n setCurrentStep(prev => prev + 1);\n } else {\n setIsComplete(true);\n const completionDelay = testMode ? 400 : 1000; // Faster completion in test mode\n \n if (testMode) {\n console.log('🧪 Test mode: Training simulation completed');\n }\n \n setTimeout(() => {\n onComplete({\n trainingComplete: true,\n timestamp: new Date().toISOString(),\n userEmail: userEmail,\n appName: appName,\n testMode: testMode,\n simulatedTraining: testMode\n });\n }, completionDelay);\n }\n }, stepDuration);\n }\n\n return () => {\n if (interval) clearInterval(interval);\n if (stepTimeout) clearTimeout(stepTimeout);\n };\n }, [currentStep, onComplete, userEmail, appName]);\n\n return (\n <div className=\"w-full flex flex-col items-center space-y-8\">\n <div className=\"text-center\">\n <div \n className=\"w-20 h-20 rounded-full flex items-center justify-center mx-auto mb-4\"\n style={{\n background: `linear-gradient(135deg, ${COLORS.info}, #8B5CF6)`\n }}\n >\n <div className=\"text-3xl\">\n {isComplete ? '🎉' : steps[currentStep]?.icon}\n </div>\n </div>\n <h2 \n className=\"text-2xl font-bold mb-2\"\n style={{ color: COLORS.textPrimary }}\n >\n {isComplete ? 'All set!' : steps[currentStep]?.title}\n </h2>\n <p style={{ color: COLORS.textSecondary }}>\n {isComplete \n ? 'Your personal AI is ready to use' \n : steps[currentStep]?.description\n }\n </p>\n </div>\n\n {/* Progress Bar */}\n <div className=\"w-full\">\n <div \n className=\"flex justify-between text-sm mb-2\"\n style={{ color: COLORS.textSecondary }}\n >\n <span>Progress</span>\n <span>{Math.round(progress)}%</span>\n </div>\n <div \n className=\"w-full rounded-full h-2\"\n style={{ backgroundColor: COLORS.borderLight }}\n >\n <div \n className=\"h-2 rounded-full transition-all duration-300 ease-out\"\n style={{ \n width: `${progress}%`,\n background: `linear-gradient(90deg, ${COLORS.info}, #8B5CF6)`\n }}\n />\n </div>\n </div>\n\n {/* Steps Indicator */}\n <div className=\"flex justify-center space-x-2\">\n {steps.map((_, index) => (\n <div\n key={index}\n className=\"w-3 h-3 rounded-full transition-all duration-300\"\n style={{\n backgroundColor: index <= currentStep ? COLORS.info : COLORS.border\n }}\n />\n ))}\n </div>\n\n {/* Current Step Details */}\n <div \n className=\"p-4 rounded-lg w-full\"\n style={{ backgroundColor: COLORS.backgroundSecondary }}\n >\n <div className=\"flex items-center space-x-3\">\n <div \n className=\"w-8 h-8 rounded-full flex items-center justify-center\"\n style={{ backgroundColor: '#DBEAFE' }}\n >\n <div className=\"text-sm\">\n {isComplete ? '✅' : steps[currentStep]?.icon}\n </div>\n </div>\n <div>\n <h3 \n className=\"font-medium\"\n style={{ color: COLORS.textPrimary }}\n >\n {isComplete ? 'Training Complete' : `Step ${currentStep + 1} of ${steps.length}`}\n </h3>\n <p \n className=\"text-sm\"\n style={{ color: COLORS.textSecondary }}\n >\n {isComplete \n ? 'Your Onairos experience is ready' \n : steps[currentStep]?.description\n }\n </p>\n </div>\n </div>\n </div>\n\n {/* App Info */}\n <div className=\"text-center\">\n <p \n className=\"text-sm\"\n style={{ color: COLORS.textSecondary }}\n >\n Setting up for <span className=\"font-medium\">{appName}</span>\n </p>\n {userEmail && (\n <p \n className=\"text-xs mt-1\"\n style={{ color: COLORS.textMuted }}\n >\n {userEmail}\n </p>\n )}\n </div>\n </div>\n );\n} ","import React, { useState, useEffect } from \"react\";\n\nexport default function LoadingScreen({ onComplete }) {\n const [currentStep, setCurrentStep] = useState(0);\n const [dotCount, setDotCount] = useState(0);\n\n const loadingStates = [\n { message: \"Validating PIN and continuing training\", progress: 20 },\n { message: \"Uploading model to secure storage\", progress: 40 },\n { message: \"Running test inference\", progress: 60 },\n { message: \"Storing results in databases\", progress: 80 },\n { message: \"Complete!\", progress: 100 },\n ];\n\n useEffect(() => {\n const stateInterval = setInterval(() => {\n setCurrentStep((prev) => {\n const nextStep = prev + 1;\n if (nextStep >= loadingStates.length) {\n // Loading complete, call onComplete after a short delay\n setTimeout(() => {\n onComplete();\n }, 1000);\n return prev; // Keep at last step\n }\n return nextStep;\n });\n }, 3000); // Change state every 3 seconds\n\n return () => clearInterval(stateInterval);\n }, [loadingStates.length, onComplete]);\n\n useEffect(() => {\n const dotInterval = setInterval(() => {\n setDotCount((prev) => (prev + 1) % 4); // 0, 1, 2, 3 dots\n }, 500); // Change dots every 500ms\n\n return () => clearInterval(dotInterval);\n }, []);\n\n const currentState = loadingStates[currentStep];\n\n return (\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center p-6\">\n {/* Modal - Full height from bottom */}\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"px-6 pt-6 pb-4 flex-shrink-0\">\n </div>\n\n {/* Content - Centered loading state */}\n <div className=\"flex-1 flex flex-col justify-center items-center px-6\">\n <div className=\"text-center mb-12\">\n <h1 className=\"font-bold text-gray-900 leading-tight\" style={{ fontSize: 'clamp(16px, 4vw, 20px)', marginBottom: 'clamp(24px, 6vw, 48px)' }}>\n {currentState.message}\n {currentState.message !== \"Complete!\" && (\n <span className=\"inline-block w-8 text-left\">{\".\".repeat(dotCount)}</span>\n )}\n </h1>\n\n <div className=\"mx-auto\" style={{ width: 'clamp(200px, 50vw, 300px)' }}>\n <div className=\"w-full h-2 bg-gray-200 rounded-full\">\n <div\n className=\"h-2 bg-gray-900 rounded-full transition-all duration-1000 ease-out\"\n style={{ width: `${currentState.progress}%` }}\n ></div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Bottom spacing */}\n <div className=\"h-20 flex-shrink-0\"></div>\n </div>\n </div>\n );\n}\n","/**\n * Response formatter utility for Onairos SDK\n * Converts array-based responses to dictionary format for better developer experience\n */\n\n// Standard 16 personality types in order that the API returns them\nexport const PERSONALITY_TYPES = [\n 'Analyst',\n 'Diplomat', \n 'Sentinel',\n 'Explorer',\n 'Architect',\n 'Logician',\n 'Commander',\n 'Debater',\n 'Advocate',\n 'Mediator',\n 'Protagonist',\n 'Campaigner',\n 'Logistician',\n 'Defender',\n 'Executive',\n 'Consul'\n];\n\n// Standard trait categories that might be returned\nexport const TRAIT_CATEGORIES = [\n 'Openness',\n 'Conscientiousness',\n 'Extraversion',\n 'Agreeableness',\n 'Neuroticism'\n];\n\n/**\n * Formats API response to include both array and dictionary formats\n * @param {Object} apiResponse - Raw API response from Onairos\n * @param {Object} options - Formatting options\n * @param {boolean} options.includeDictionary - Whether to include dictionary format (default: true)\n * @param {boolean} options.includeArray - Whether to include original array format (default: true)\n * @returns {Object} Formatted response with both formats\n */\nexport function formatOnairosResponse(apiResponse, options = {}) {\n const { includeDictionary = true, includeArray = true } = options;\n \n if (!apiResponse) {\n return apiResponse;\n }\n\n const formatted = { ...apiResponse };\n\n // Handle personality scores if present\n if (apiResponse.InferenceResult?.traits || apiResponse.traits || apiResponse.scores) {\n const scores = apiResponse.InferenceResult?.traits || apiResponse.traits || apiResponse.scores;\n \n if (Array.isArray(scores) && scores.length >= 16) {\n if (includeDictionary) {\n // Create personality dictionary\n const personalityDict = {};\n PERSONALITY_TYPES.forEach((type, index) => {\n personalityDict[type] = scores[index];\n });\n \n // Add to formatted response\n if (formatted.InferenceResult) {\n formatted.InferenceResult.personalityDict = personalityDict;\n } else {\n formatted.personalityDict = personalityDict;\n }\n }\n \n if (!includeArray) {\n // Remove array format if not requested\n if (formatted.InferenceResult?.traits) {\n delete formatted.InferenceResult.traits;\n }\n if (formatted.traits) {\n delete formatted.traits;\n }\n if (formatted.scores) {\n delete formatted.scores;\n }\n }\n }\n }\n\n // Handle trait data if present (for preferences/traits)\n if (apiResponse.traitResult || apiResponse.traits) {\n const traits = apiResponse.traitResult || apiResponse.traits;\n \n if (Array.isArray(traits) && includeDictionary) {\n const traitDict = {};\n TRAIT_CATEGORIES.forEach((category, index) => {\n if (traits[index] !== undefined) {\n traitDict[category] = traits[index];\n }\n });\n \n formatted.traitDict = traitDict;\n }\n }\n\n return formatted;\n}\n\n/**\n * Legacy formatter for backward compatibility\n * Converts scores array to personality dictionary only\n * @param {Array} scores - Array of personality scores\n * @returns {Object} Dictionary with personality type names as keys\n */\nexport function formatPersonalityScores(scores) {\n if (!Array.isArray(scores) || scores.length < 16) {\n console.warn('Invalid scores array provided to formatPersonalityScores');\n return {};\n }\n\n const personalityDict = {};\n PERSONALITY_TYPES.forEach((type, index) => {\n personalityDict[type] = scores[index];\n });\n \n return personalityDict;\n}\n\n/**\n * Get personality type names in order\n * @returns {Array} Array of personality type names\n */\nexport function getPersonalityTypes() {\n return [...PERSONALITY_TYPES];\n}\n\n/**\n * Get trait category names in order \n * @returns {Array} Array of trait category names\n */\nexport function getTraitCategories() {\n return [...TRAIT_CATEGORIES];\n} ","import React from 'react';\nimport { COLORS } from '../../theme/colors.js';\n\n// Standardized page layout component with white background\nconst PageLayout = ({\n children,\n title,\n subtitle,\n icon,\n showHeader = true,\n showCloseButton = false,\n onClose,\n onBack,\n showBackButton = false,\n className = '',\n contentClassName = '',\n centerContent = true,\n style = {},\n ...props\n}) => {\n const layoutStyle = {\n backgroundColor: COLORS.background,\n minHeight: '100%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n ...style\n };\n\n const headerStyle = {\n position: 'sticky',\n top: 0,\n backgroundColor: COLORS.background,\n zIndex: 10,\n padding: 'clamp(8px, 2vw, 16px) clamp(16px, 4vw, 32px) clamp(6px, 1.5vw, 12px)'\n };\n\n const contentStyle = {\n flex: 1,\n padding: 'clamp(16px, 4vw, 32px)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n minHeight: 0, // Allow flex item to shrink below content size\n ...(centerContent && {\n alignItems: 'center',\n justifyContent: 'flex-start'\n })\n };\n\n const titleStyle = {\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: 'clamp(20px, 5vw, 28px)',\n fontWeight: '700',\n color: COLORS.textPrimary,\n margin: '0 0 clamp(6px, 1.5vw, 12px) 0',\n textAlign: centerContent ? 'center' : 'left',\n lineHeight: '1.2'\n };\n\n const subtitleStyle = {\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: 'clamp(14px, 3.5vw, 18px)',\n fontWeight: '400',\n color: COLORS.textSecondary,\n margin: '0 0 clamp(20px, 5vw, 40px) 0',\n textAlign: centerContent ? 'center' : 'left',\n lineHeight: '1.5'\n };\n\n const iconStyle = {\n width: 'clamp(40px, 8vw, 56px)',\n height: 'clamp(40px, 8vw, 56px)',\n margin: '0 auto clamp(16px, 4vw, 32px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 'clamp(20px, 5vw, 28px)'\n };\n\n return (\n <div \n className={`onairos-page-layout ${className}`}\n style={layoutStyle}\n {...props}\n >\n {/* Header with navigation */}\n {showHeader && (\n <div style={headerStyle}>\n <div className=\"flex items-center justify-between\">\n {/* Back button */}\n {showBackButton && onBack && (\n <button\n onClick={onBack}\n className=\"flex items-center justify-center w-8 h-8 rounded-full hover:bg-gray-100 transition-colors\"\n aria-label=\"Go back\"\n >\n <span style={{ fontSize: '16px', color: COLORS.textPrimary }}>←</span>\n </button>\n )}\n\n\n {/* Close button */}\n {showCloseButton && onClose && (\n <button\n onClick={onClose}\n className=\"flex items-center justify-center w-8 h-8 rounded-full hover:bg-gray-100 transition-colors\"\n aria-label=\"Close\"\n >\n <span style={{ fontSize: '16px', color: COLORS.textPrimary }}>×</span>\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Main content area */}\n <div \n className={`onairos-page-content ${contentClassName}`}\n style={contentStyle}\n >\n {/* Icon */}\n {icon && (\n <div style={iconStyle}>\n {typeof icon === 'string' ? <span>{icon}</span> : icon}\n </div>\n )}\n\n {/* Title */}\n {title && (\n <h1 style={titleStyle}>\n {title}\n </h1>\n )}\n\n {/* Subtitle */}\n {subtitle && (\n <p style={subtitleStyle}>\n {subtitle}\n </p>\n )}\n\n {/* Page content */}\n {children}\n </div>\n </div>\n );\n};\n\n// Modal wrapper component for overlay-style pages\nconst ModalPageLayout = ({\n children,\n visible = true,\n onClose,\n onBackdropClick,\n backdropStyle = {},\n modalStyle = {},\n ...pageLayoutProps\n}) => {\n if (!visible) return null;\n\n const backdropStyles = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 1000,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...backdropStyle\n };\n\n const modalStyles = {\n backgroundColor: COLORS.background,\n borderTopLeftRadius: '24px',\n borderTopRightRadius: '24px',\n borderBottomLeftRadius: '24px',\n borderBottomRightRadius: '24px',\n height: '90vh',\n width: '100%',\n maxWidth: '500px',\n boxShadow: '0 -10px 40px rgba(0, 0, 0, 0.3)',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n ...modalStyle\n };\n\n const handleBackdropClick = (e) => {\n if (e.target === e.currentTarget) {\n if (onBackdropClick) {\n onBackdropClick();\n } else if (onClose) {\n onClose();\n }\n }\n };\n\n return (\n <div style={backdropStyles} onClick={handleBackdropClick}>\n <div style={modalStyles}>\n <PageLayout\n showHeader={true}\n showCloseButton={true}\n onClose={onClose}\n {...pageLayoutProps}\n >\n {children}\n </PageLayout>\n </div>\n </div>\n );\n};\n\nexport { ModalPageLayout };\nexport default PageLayout; ","import React, { useEffect, useState } from 'react';\nimport WelcomeScreen from './components/WelcomeScreen.jsx';\nimport EmailAuth from './components/EmailAuth.js';\nimport UniversalOnboarding from './components/UniversalOnboarding.jsx';\nimport PinSetup from './components/PinSetup.js';\nimport DataRequest from './components/DataRequest.js';\nimport TrainingComponent from './components/TrainingComponent.jsx';\nimport LoadingScreen from './components/LoadingScreen.jsx';\nimport { formatOnairosResponse } from './utils/responseFormatter.js';\nimport { ModalPageLayout } from './components/ui/PageLayout.jsx';\n\nexport function OnairosButton({\n requestData, \n webpageName, \n inferenceData = null, \n onComplete = null, \n autoFetch = true, // Auto-enabled for seamless testing experience\n testMode = true, // Auto-enabled for design testing - set to false for production\n proofMode = false, \n textLayout = 'below', \n textColor = 'white',\n login = false,\n buttonType = 'pill',\n loginReturn = null,\n loginType = 'signIn',\n visualType = 'full',\n appIcon = null,\n enableTraining = true,\n formatResponse = true,\n responseFormat = { includeDictionary: true, includeArray: true },\n priorityPlatform = null // Platform to prioritize (e.g., 'gmail', 'pinterest', 'linkedin')\n}) {\n\n const [showOverlay, setShowOverlay] = useState(false);\n const [currentFlow, setCurrentFlow] = useState('welcome'); // 'welcome' | 'email' | 'onboarding' | 'pin' | 'dataRequest' (training is within onboarding)\n const [userData, setUserData] = useState(null);\n const [error, setError] = useState(null);\n\n // Check for existing user session\n useEffect(() => {\n const checkExistingSession = () => {\n // In test mode, always start fresh to see the full flow\n if (testMode) {\n console.log('🧪 Test mode: Starting fresh flow, clearing any cached user data');\n localStorage.removeItem('onairosUser');\n setCurrentFlow('welcome');\n return;\n }\n \n const savedUser = localStorage.getItem('onairosUser');\n if (savedUser) {\n try {\n const user = JSON.parse(savedUser);\n setUserData(user);\n // If user has completed onboarding and PIN setup, go directly to data request\n if (user.onboardingComplete && user.pinCreated) {\n setCurrentFlow('dataRequest');\n } else if (user.verified && !user.onboardingComplete) {\n setCurrentFlow('onboarding');\n } else if (user.onboardingComplete && !user.pinCreated) {\n setCurrentFlow('pin');\n }\n } catch (error) {\n console.error('Error parsing saved user data:', error);\n localStorage.removeItem('onairosUser');\n }\n }\n };\n\n checkExistingSession();\n }, [testMode]);\n\n const openTerminal = async () => {\n try {\n console.log('🔥 openTerminal called');\n setShowOverlay(true);\n } catch (error) {\n console.error('Error in openTerminal:', error);\n }\n };\n\n const handleCloseOverlay = () => {\n setShowOverlay(false);\n setError(null);\n };\n\n // Handle clicks on the backdrop to close modal\n const handleBackdropClick = (e) => {\n if (e.target === e.currentTarget) {\n handleCloseOverlay();\n }\n };\n\n const handleWelcomeContinue = () => {\n console.log('🔥 Welcome screen continue clicked');\n setCurrentFlow('email');\n };\n\n const handleEmailAuthSuccess = (authData) => {\n console.log('🔥 Email auth successful:', authData);\n console.log('🔧 User State:', {\n isNewUser: authData.isNewUser,\n userState: authData.userState,\n flowType: authData.flowType,\n existingUser: authData.existingUser,\n hasAccountInfo: !!authData.accountInfo\n });\n \n // Determine flow based on API response - more explicit checking\n const isNewUser = authData.isNewUser === true || \n authData.existingUser === false || \n authData.flowType === 'onboarding' || \n authData.userState === 'new' ||\n !authData.accountInfo; // No account info means new user\n \n console.log('🔍 Flow determination:', {\n finalDecision: isNewUser ? 'NEW USER → onboarding (data connectors)' : 'EXISTING USER → dataRequest (data permissions)',\n reasoning: {\n isNewUser: authData.isNewUser,\n existingUserFalse: authData.existingUser === false,\n flowTypeOnboarding: authData.flowType === 'onboarding',\n noAccountInfo: !authData.accountInfo\n }\n });\n \n const newUserData = {\n ...authData,\n verified: true,\n onboardingComplete: !isNewUser, // New users need onboarding, returning users have completed it\n pinCreated: !isNewUser // Assume returning users have PIN, new users need to create it\n };\n \n setUserData(newUserData);\n localStorage.setItem('onairosUser', JSON.stringify(newUserData));\n \n // Flow decision logic - prioritize new user detection\n if (isNewUser) {\n console.log('🚀 NEW USER detected → Starting onboarding flow (data connectors page)');\n setCurrentFlow('onboarding');\n } else {\n console.log('👋 EXISTING USER detected → Going directly to data request (data permissions page)');\n setCurrentFlow('dataRequest');\n }\n };\n\n const handleOnboardingComplete = (onboardingData) => {\n console.log('Onboarding completed:', onboardingData);\n const updatedUserData = {\n ...userData,\n onboardingComplete: true,\n connectedAccounts: onboardingData.connectedAccounts || []\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n setCurrentFlow('pin');\n };\n\n const handlePinSetupComplete = (pinData) => {\n console.log('PIN setup completed:', pinData);\n const updatedUserData = {\n ...userData,\n ...pinData,\n pinCreated: true\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n \n // Move to loading flow\n setCurrentFlow('loading');\n };\n\n const handleLoadingComplete = () => {\n setCurrentFlow('dataRequest');\n };\n\n const handleTrainingComplete = (trainingResult) => {\n console.log('🎓 Training completed:', trainingResult);\n const updatedUserData = {\n ...userData,\n trainingCompleted: true,\n ...trainingResult\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n \n // Move to data request after training\n setCurrentFlow('dataRequest');\n };\n\n const handleDataRequestComplete = (requestResult) => {\n console.log('🔥 OnairosButton: Data request completed:', requestResult);\n \n // Update user data with request result\n const updatedUserData = {\n ...userData,\n lastDataRequest: requestResult\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n\n // Close overlay immediately\n console.log('🔥 Closing overlay after data request completion');\n setShowOverlay(false);\n\n // Format response if requested and API response is present\n let formattedResult = requestResult;\n if (formatResponse && requestResult?.apiResponse) {\n try {\n formattedResult = {\n ...requestResult,\n apiResponse: formatOnairosResponse(requestResult.apiResponse, responseFormat)\n };\n console.log('🔥 Response formatted with dictionary:', formattedResult.apiResponse?.personalityDict || 'No personality data');\n } catch (error) {\n console.warn('🔥 Error formatting response:', error);\n // Continue with original result if formatting fails\n }\n }\n\n // Call onComplete callback if provided\n console.log('🔥 Calling onComplete callback with:', formattedResult);\n if (onComplete) {\n try {\n onComplete(formattedResult);\n console.log('🔥 onComplete callback executed successfully');\n } catch (error) {\n console.error('🔥 Error in onComplete callback:', error);\n }\n } else {\n console.log('🔥 No onComplete callback provided');\n }\n };\n\n const getFlowTitle = () => {\n switch (currentFlow) {\n case 'welcome':\n return ''; // WelcomeScreen handles its own titles\n case 'email':\n return ''; // EmailAuth handles its own titles\n case 'onboarding':\n return 'Connect Your Data';\n case 'pin':\n return 'Secure Your Account';\n case 'training':\n return 'Training Your Model';\n case 'dataRequest':\n return 'Data Request';\n default:\n return '';\n }\n };\n\n const getFlowSubtitle = () => {\n switch (currentFlow) {\n case 'welcome':\n return ''; // WelcomeScreen handles its own subtitles\n case 'email':\n return ''; // EmailAuth handles its own subtitles\n case 'onboarding':\n return 'Choose which accounts to connect for a personalized experience';\n case 'pin':\n return 'Create a secure PIN to protect your data';\n case 'training':\n return 'Building your personalized insights';\n case 'dataRequest':\n return `Select the data you want to share with ${webpageName}`;\n default:\n return '';\n }\n };\n\n const getFlowIcon = () => {\n switch (currentFlow) {\n case 'welcome':\n return ''; // WelcomeScreen handles its own layout\n case 'email':\n return ''; // EmailAuth handles its own layout\n case 'onboarding':\n return '🔗';\n case 'pin':\n return '🔒';\n case 'training':\n return '⚡';\n case 'dataRequest':\n return '📊';\n default:\n return '';\n }\n };\n\n const renderCurrentFlow = () => {\n switch (currentFlow) {\n case 'welcome':\n return (\n <WelcomeScreen \n onContinue={handleWelcomeContinue}\n onClose={handleCloseOverlay}\n webpageName={webpageName}\n appIcon={appIcon}\n testMode={testMode}\n />\n );\n case 'email':\n return (\n <div className=\"h-[min(85vh,700px)]\">\n <EmailAuth \n onSuccess={handleEmailAuthSuccess}\n testMode={testMode} // Use the testMode prop from initialization\n />\n </div>\n );\n \n case 'onboarding':\n return (\n <UniversalOnboarding \n onComplete={handleOnboardingComplete}\n onBack={() => setCurrentFlow('email')}\n appIcon={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n appName={webpageName}\n username={userData?.email || userData?.username}\n testMode={testMode}\n priorityPlatform={priorityPlatform}\n />\n );\n \n case 'pin':\n return (\n <PinSetup \n onComplete={handlePinSetupComplete}\n userEmail={userData?.email}\n />\n );\n \n case 'training':\n return (\n <TrainingComponent \n onComplete={handleTrainingComplete}\n userEmail={userData?.email}\n appName={webpageName}\n connectedAccounts={userData?.connectedAccounts || []}\n testMode={testMode}\n />\n );\n \n case 'dataRequest':\n return (\n <DataRequest \n onComplete={handleDataRequestComplete}\n userEmail={userData?.email}\n requestData={requestData}\n appName={webpageName}\n autoFetch={autoFetch}\n testMode={testMode}\n appIcon={appIcon}\n connectedAccounts={userData?.connectedAccounts || {}}\n />\n );\n \n default:\n return (\n <div className=\"flex flex-col items-center space-y-4 p-6\">\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\n <p className=\"text-gray-600\">Loading...</p>\n </div>\n );\n }\n };\n\n // Styling and button class based on visual type\n const buttonClass = \n `flex items-center justify-center font-bold rounded cursor-pointer ${\n buttonType === 'pill' ? 'px-4 py-2' : 'w-12 h-12'\n } bg-transparent OnairosConnect`;\n\n const buttonStyle = {\n flexDirection: textLayout === 'below' ? 'column' : 'row',\n backgroundColor: 'transparent',\n color: textColor,\n border: '1px solid transparent',\n };\n\n // Icon and text style based on the visualType\n const logoStyle = {\n width: '20px',\n height: '20px',\n marginRight: visualType === 'full' ? '12px' : '0',\n };\n\n const getText = () => {\n switch (loginType) {\n case 'signUp':\n return 'Sign Up with Onairos';\n case 'signOut':\n return 'Sign Out of Onairos';\n default:\n return 'Sign In with Onairos';\n }\n };\n\n return (\n <>\n <button\n className={buttonClass}\n onClick={openTerminal}\n style={buttonStyle}\n >\n {(visualType === 'full' || visualType === 'icon') && (\n <img\n src={login ? \"https://onairos.sirv.com/Images/OnairosWhite.png\" : \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n alt=\"Onairos Logo\"\n style={logoStyle}\n />\n )}\n {visualType !== 'icon' && (\n <span className={`${textColor === 'black' ? 'text-black' : 'text-white'} ${visualType === 'icon' ? 'sr-only' : ''} ${textLayout === 'right' ? 'ml-2' : textLayout === 'left' ? 'mr-2' : ''}`}>\n {getText()}\n </span>\n )}\n </button>\n\n {/* Modal with New Design */}\n {showOverlay && (\n <>\n {currentFlow === 'email' ? (\n // Special case for email - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={handleCloseOverlay}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Email Content */}\n <div className=\"h-[min(85vh,700px)]\">\n <EmailAuth \n onSuccess={handleEmailAuthSuccess}\n testMode={testMode}\n />\n </div>\n </div>\n </div>\n ) : currentFlow === 'onboarding' ? (\n // Special case for onboarding - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={() => setCurrentFlow('email')}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* Onboarding Content */}\n <UniversalOnboarding \n onComplete={handleOnboardingComplete}\n onBack={() => setCurrentFlow('email')}\n appIcon={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n appName={webpageName}\n username={userData?.email || userData?.username}\n testMode={testMode}\n priorityPlatform={priorityPlatform}\n />\n </div>\n </div>\n ) : currentFlow === 'dataRequest' ? (\n // Special case for dataRequest - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={() => setCurrentFlow('loading')}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* DataRequest Content */}\n <DataRequest \n onComplete={handleDataRequestComplete}\n userEmail={userData?.email}\n requestData={requestData}\n appName={webpageName}\n autoFetch={autoFetch}\n testMode={testMode}\n appIcon={appIcon}\n connectedAccounts={userData?.connectedAccounts || {}}\n />\n </div>\n </div>\n ) : currentFlow === 'pin' ? (\n // Special case for pin - render directly without PageLayout wrapper\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-50 flex items-center justify-center z-50 p-6\">\n <div className=\"bg-white rounded-3xl w-full max-w-lg mx-auto shadow-2xl overflow-hidden flex flex-col\" style={{ maxWidth: '500px', height: '90vh' }}>\n {/* Header */}\n <div className=\"relative px-6 pt-6 pb-4 flex-shrink-0\">\n <button\n onClick={() => setCurrentFlow('onboarding')}\n className=\"absolute left-4 top-4 p-2 hover:bg-gray-100 rounded-full transition-colors\"\n >\n <svg className=\"w-5 h-5 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* PinSetup Content - Must take remaining height */}\n <div className=\"flex-1 min-h-0\">\n <PinSetup \n onComplete={handlePinSetupComplete}\n onBack={() => setCurrentFlow('onboarding')}\n userEmail={userData?.email}\n />\n </div>\n </div>\n </div>\n ) : currentFlow === 'loading' ? (\n // Loading screen\n <LoadingScreen onComplete={handleLoadingComplete} />\n ) : (\n // All other flows use PageLayout wrapper\n <ModalPageLayout\n visible={showOverlay}\n onClose={handleCloseOverlay}\n showBackButton={currentFlow === 'training'}\n onBack={() => {\n if (currentFlow === 'email') setCurrentFlow('welcome');\n if (currentFlow === 'onboarding') setCurrentFlow('email');\n if (currentFlow === 'pin') setCurrentFlow('onboarding'); \n if (currentFlow === 'training') setCurrentFlow('pin');\n }}\n title={getFlowTitle()}\n subtitle={getFlowSubtitle()}\n icon={getFlowIcon()}\n centerContent={true}\n >\n {renderCurrentFlow()}\n </ModalPageLayout>\n )}\n </>\n )}\n </>\n );\n}\n\nexport default OnairosButton;","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n"],"names":["WelcomeScreen","_ref","onContinue","onClose","React","className","style","height","viewBox","d","fill","stroke","strokeWidth","cx","cy","r","onClick","strokeLinecap","strokeLinejoin","toPascalCase","string","camelCase","replace","match","p1","p2","toUpperCase","toLowerCase","toCamelCase","charAt","slice","mergeClasses","classes","filter","index","array","Boolean","trim","indexOf","join","hasA11yProp","props","prop","startsWith","defaultAttributes","xmlns","width","Icon","forwardRef","color","size","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","Number","map","tag","attrs","Array","isArray","Check","iconName","Component","displayName","createLucideIcon","key","COLORS","btnGradStart","btnGradEnd","btnLabel","btnBorder","iconCircleGradientStart","iconCircleGradientEnd","background","backgroundSecondary","textPrimary","textSecondary","textMuted","border","borderLight","success","error","warning","info","hover","pressed","focus","IconCircle","concat","borderRadius","fontSize","backgroundColor","_ref2","label","iconRight","loading","disabled","testId","textStyle","centered","_objectWithoutProperties","_excluded","setPressed","useState","buttonStyle","_objectSpread","position","overflow","minWidth","maxWidth","margin","cursor","opacity","boxShadow","transition","pressedOverlayStyle","top","left","right","bottom","labelStyle","fontFamily","fontWeight","textAlign","_extends","onMouseDown","handleMouseDown","onMouseUp","handleMouseUp","onMouseLeave","handleMouseLeave","display","justifyContent","alignItems","EmailAuth","onSuccess","testMode","email","setEmail","code","setCode","step","setStep","isLoading","setIsLoading","setError","useEffect","setTimeout","firstInput","document","querySelector","handleEmailSubmit","async","e","preventDefault","test","validateEmail","console","log","apiKey","window","onairosApiKey","response","fetch","method","headers","body","JSON","stringify","action","ok","Error","data","json","message","handleGoogleAuth","_localStorage$getItem","sdkConfig","baseUrl","enableHealthMonitoring","enableAutoRefresh","enableConnectionValidation","username","localStorage","getItem","authorizeUrl","params","URLSearchParams","sdk_type","return_url","location","origin","fullUrl","toString","popup","open","checkInterval","setInterval","closed","clearInterval","connectedAccounts","Google","handleCodeSubmit","length","simulatedResponse","verified","token","Date","now","userName","split","existingUser","accountInfo","isNewUser","flowType","adminMode","userCreated","accountDetails","createdAt","toISOString","testAccount","jwtToken","type","value","onChange","target","placeholder","required","lineHeight","from","_","maxLength","newCode","_e$target$parentEleme","nextInput","parentElement","onKeyDown","_e$target$parentEleme2","prevInput","borderColor","PrimaryButton","flex","minHeight","defaultPersonaImages","platforms","name","icon","connector","description","id","offset","stopColor","process","env","REACT_APP_ONAIROS_API_KEY","REACT_APP_ONAIROS_BASE_URL","sdkType","UniversalOnboarding","onComplete","onBack","appIcon","appName","personaImages","personaImagesProp","priorityPlatform","setConnectedAccounts","isConnecting","setIsConnecting","connectingPlatform","setConnectingPlatform","connectionErrors","setConnectionErrors","connectionHealth","setConnectionHealth","healthScore","setHealthScore","handleOAuthReturn","platform","removeItem","prev","connectToPlatform","platformName","find","p","session","status","statusText","responseData","possibleKeys","oauthUrl","usedKey","Object","keys","navigator","userAgent","innerWidth","setItem","href","hasNavigatedToOnairos","hostname","close","successFlag","errorFlag","timestamp","isRecentSignal","parseInt","handleToggle","connectedCount","values","personaNumber","Math","min","getSortedPlatforms","priorityPlat","otherPlatforms","src","alt","onLoad","onError","isConnected","isCurrentlyConnecting","hasError","isDisabled","isPriorityPlatform","outline","gap","padding","marginBottom","stopPropagation","flexDirection","handleContinue","connected","entries","_ref3","totalConnections","sdkVersion","enhancedFeatures","healthMonitoring","autoRefresh","connectionValidation","PinSetup","userEmail","pin","setPin","pinRequirements","setPinRequirements","uppercase","number","allRequirementsMet","handleSubmit","pinCreated","undefined","dataTypes","tooltip","privacyLink","DataTypeToggle","dataType","isEnabled","onToggle","isLast","iconProps","getIconComponent","fillRule","clipRule","autoFetch","formatResponse","responseFormat","selectedData","setSelectedData","basic","personality","preferences","isLoadingApi","setIsLoadingApi","apiError","setApiError","handleDataToggle","dataId","enabled","dt","selectedCount","userHash","hash","str","i","charCodeAt","abs","generateUserHash","approvedData","_ref4","mapDataTypesToConfirmations","confirmations","currentDate","dataTypeMapping","forEach","push","date","apiEndpoint","baseResult","apiUrl","simulatedApiData","personalityScores","openness","conscientiousness","extraversion","agreeableness","neuroticism","insights","dataProcessed","result","apiResponse","simulated","requestBody","apiData","errorResult","cancelled","TrainingComponent","_steps$currentStep","_steps$currentStep2","_steps$currentStep3","_steps$currentStep4","_steps$currentStep5","currentStep","setCurrentStep","progress","setProgress","isComplete","setIsComplete","steps","title","duration","interval","stepTimeout","stepDuration","stepProgress","newProgress","completionDelay","trainingComplete","simulatedTraining","clearTimeout","round","LoadingScreen","dotCount","setDotCount","loadingStates","stateInterval","nextStep","dotInterval","currentState","repeat","PERSONALITY_TYPES","TRAIT_CATEGORIES","formatOnairosResponse","_apiResponse$Inferenc","options","arguments","includeDictionary","includeArray","formatted","InferenceResult","traits","scores","_apiResponse$Inferenc2","personalityDict","_formatted$InferenceR","traitResult","traitDict","category","PageLayout","subtitle","showHeader","showCloseButton","showBackButton","contentClassName","centerContent","layoutStyle","headerStyle","zIndex","contentStyle","titleStyle","subtitleStyle","ModalPageLayout","visible","onBackdropClick","backdropStyle","modalStyle","pageLayoutProps","_excluded2","backdropStyles","modalStyles","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","currentTarget","OnairosButton","requestData","webpageName","inferenceData","proofMode","textLayout","textColor","login","buttonType","loginReturn","loginType","visualType","enableTraining","showOverlay","setShowOverlay","currentFlow","setCurrentFlow","userData","setUserData","checkExistingSession","savedUser","user","parse","onboardingComplete","handleCloseOverlay","handleWelcomeContinue","handleEmailAuthSuccess","authData","userState","hasAccountInfo","finalDecision","reasoning","existingUserFalse","flowTypeOnboarding","noAccountInfo","newUserData","handleOnboardingComplete","onboardingData","updatedUserData","handlePinSetupComplete","pinData","handleTrainingComplete","trainingResult","trainingCompleted","handleDataRequestComplete","requestResult","lastDataRequest","formattedResult","_formattedResult$apiR","warn","buttonClass","logoStyle","marginRight","getText","DataRequest","handleLoadingComplete","getFlowTitle","getFlowSubtitle","getFlowIcon","renderCurrentFlow","l","Symbol","for","n","q","t","u","v","w","x","y","z","iterator","B","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","C","assign","D","E","a","b","this","context","refs","updater","F","G","prototype","isReactComponent","setState","forceUpdate","H","constructor","isPureReactComponent","I","J","hasOwnProperty","K","current","L","__self","__source","M","c","k","h","call","g","f","m","defaultProps","$$typeof","_owner","O","P","Q","escape","R","N","A","next","done","String","S","T","_status","_result","then","default","U","V","W","ReactCurrentDispatcher","ReactCurrentBatchConfig","ReactCurrentOwner","X","exports","Children","apply","count","toArray","only","Fragment","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","act","cloneElement","createContext","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","_context","createFactory","bind","createRef","render","isValidElement","lazy","_payload","_init","memo","compare","startTransition","unstable_act","useCallback","useContext","useDebugValue","useDeferredValue","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useSyncExternalStore","useTransition","version","module"],"sourceRoot":""}
|