@cavos/kit 0.0.1 → 0.0.3
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/README.md +113 -42
- package/dist/Cavos-BH2_tOQ2.d.mts +994 -0
- package/dist/Cavos-BH2_tOQ2.d.ts +994 -0
- package/dist/chunk-BNGLH3Q3.mjs +2777 -0
- package/dist/chunk-BNGLH3Q3.mjs.map +1 -0
- package/dist/index.d.mts +156 -242
- package/dist/index.d.ts +156 -242
- package/dist/index.js +1989 -151
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +88 -2
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +42 -5
- package/dist/react/index.d.ts +42 -5
- package/dist/react/index.js +1786 -86
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +48 -7
- package/dist/react/index.mjs.map +1 -1
- package/package.json +4 -1
- package/dist/chunk-XWBX2ZIO.mjs +0 -1061
- package/dist/chunk-XWBX2ZIO.mjs.map +0 -1
- package/dist/constants-C530TZFF.d.mts +0 -89
- package/dist/constants-C530TZFF.d.ts +0 -89
package/dist/react/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/CavosAuthModal.tsx","../../src/react/CavosProvider.tsx"],"names":["e","useState","useRef","useEffect","useCallback","jsxs","jsx"],"mappings":";;;;AA0BA,IAAM,eAAA,GAAkB,0wGAAA;AAMxB,IAAM,QAAA,GAAW,uBAAA;AAEjB,SAAS,YAAA,GAAe;AACtB,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,QAAQ,CAAA,EAAG;AACvC,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACzC,EAAA,EAAA,CAAG,EAAA,GAAK,QAAA;AACR,EAAA,EAAA,CAAG,WAAA,GAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAmFjB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC9B;AAIA,IAAM,UAAA,GAAa,sBACjB,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACnD,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0IAAA,EAA2I,IAAA,EAAK,SAAA,EAAS,CAAA;AAAA,kBACjK,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8IAAA,EAA+I,MAAK,SAAA,EAAS,CAAA;AAAA,kBACrK,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uIAAA,EAAwI,MAAK,SAAA,EAAS,CAAA;AAAA,kBAC9J,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+IAAA,EAAgJ,MAAK,SAAA,EAAS;AAAA,CAAA,EACxK,CAAA;AAGF,IAAM,YAAY,sBAChB,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,cAAA,EAAe,MAAK,cAAA,EACtD,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yiBAAuiB,CAAA,EACjjB,CAAA;AAGF,IAAM,YAAY,sBAChB,IAAA,CAAC,SAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,QAAO,cAAA,EAAe,WAAA,EAAY,OAAM,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EACvI,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAG,CAAA;AAAA,kBAC/C,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0CAAA,EAA0C;AAAA,CAAA,EACpD,CAAA;AAGF,IAAM,SAAA,GAAY,CAAC,EAAE,MAAA,EAAO,qBAC1B,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,CAAA,sBAAA,EAAyB,eAAe,CAAA,CAAA,EAAI,GAAA,EAAI,OAAA,EAAQ,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,CAAA,EAAG,MAAA,EAAQ,MAAA,GAAS,WAAA,GAAc,QAAO,EAAG,CAAA;AAGzM,SAAS,QAAQ,EAAE,IAAA,GAAO,EAAA,EAAI,KAAA,GAAQ,QAAO,EAAsC;AACjF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAAI,KAAA,EAAO,IAAA;AAAA,MAAM,MAAA,EAAQ,IAAA;AAAA,MAAM,OAAA,EAAQ,WAAA;AAAA,MAAY,IAAA,EAAK,MAAA;AAAA,MACvD,KAAA,EAAO,EAAE,SAAA,EAAW,kCAAA,EAAoC,YAAY,CAAA,EAAE;AAAA,MACtE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,IAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAc,KAAA,EAAM,WAAA,EAAY,KAAA,EAAK,CAAA;AAAA,wBACnF,GAAA,CAAC,UAAK,CAAA,EAAE,uBAAA,EAAwB,QAAQ,KAAA,EAAO,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAO;AAAA;AAAA;AAAA,GACxF;AAEJ;AAIA,SAAS,WAAA,GAAc;AACrB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,oBAAoB,CAAA;AACjD,IAAA,WAAA,CAAY,GAAG,OAAO,CAAA;AACtB,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,WAAA,CAAY,EAAE,OAAO,CAAA;AACjE,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACrC,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACvD,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,QAAA;AACT;AAIA,IAAM,IAAA,GAAO,sEAAA;AAEb,SAAS,YAAY,QAAA,EAAkC;AACrD,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,OAAA;AAAA,IAAS,KAAA,EAAO,CAAA;AAAA,IAC1B,UAAA,EAAY,iBAAA;AAAA,IACZ,cAAA,EAAgB,YAAA;AAAA,IAChB,oBAAA,EAAsB,YAAA;AAAA,IACtB,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,WAAW,UAAA,GAAa,QAAA;AAAA,IACpC,cAAA,EAAgB,QAAA;AAAA,IAChB,OAAA,EAAS,WAAW,GAAA,GAAM,MAAA;AAAA,IAC1B,SAAA,EAAW,uBAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,SAAA,CAAU,UAAmB,EAAA,EAA2B;AAC/D,EAAA,OAAO,QAAA,GAAW;AAAA,IAChB,UAAA,EAAY,EAAA;AAAA,IACZ,YAAA,EAAc,eAAA;AAAA,IACd,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW,8BAAA;AAAA,IACX,SAAA,EAAW,+CAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ,GAAI;AAAA,IACF,UAAA,EAAY,EAAA;AAAA,IACZ,YAAA,EAAc,MAAA;AAAA,IACd,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,SAAA,EAAW,0DAAA;AAAA,IACX,SAAA,EAAW,4CAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,SAAS,YAAY,SAAA,EAAkC;AACrD,EAAA,MAAM,OAAA,GAAU,SAAA,KAAc,SAAA,IAAa,SAAA,KAAc,MAAA;AACzD,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,MAAA;AAAA,IAAQ,UAAA,EAAY,QAAA;AAAA,IAAU,cAAA,EAAgB,QAAA;AAAA,IAAU,GAAA,EAAK,MAAA;AAAA,IACtE,OAAA,EAAS,WAAA;AAAA,IACT,UAAA,EAAY,UAAU,MAAA,GAAS,wBAAA;AAAA,IAC/B,MAAA,EAAQ,CAAA,UAAA,EAAa,OAAA,GAAU,kBAAA,GAAqB,wBAAwB,CAAA,CAAA;AAAA,IAC5E,YAAA,EAAc,MAAA;AAAA,IACd,MAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,sDAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,SAAS,UAAU,SAAA,EAAkC;AACnD,EAAA,MAAM,OAAA,GAAU,SAAA,KAAc,SAAA,IAAa,SAAA,KAAc,MAAA;AACzD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAA,UAAA,EAAa,OAAA,GAAU,kBAAA,GAAqB,wBAAwB,CAAA,CAAA;AAAA,IAC/E,OAAA,EAAS,WAAA;AAAA,IACT,OAAA,EAAS,MAAA;AAAA,IAAQ,UAAA,EAAY,QAAA;AAAA,IAAU,cAAA,EAAgB,QAAA;AAAA,IAAU,GAAA,EAAK,KAAA;AAAA,IACtE,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,UAAU,kBAAA,GAAqB;AAAA,GACxC;AACF;AAEA,SAAS,SAAS,SAAA,EAAkC;AAClD,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IAAY,GAAA,EAAK,MAAA;AAAA,IAAQ,KAAA,EAAO,MAAA;AAAA,IAC1C,KAAA,EAAO,MAAA;AAAA,IAAQ,MAAA,EAAQ,MAAA;AAAA,IAAQ,YAAA,EAAc,KAAA;AAAA,IAC7C,MAAA,EAAQ,MAAA;AAAA,IAAQ,UAAA,EAAY,aAAA;AAAA,IAC5B,MAAA,EAAQ,SAAA;AAAA,IAAW,OAAA,EAAS,MAAA;AAAA,IAAQ,UAAA,EAAY,QAAA;AAAA,IAAU,cAAA,EAAgB,QAAA;AAAA,IAC1E,KAAA,EAAO,SAAA,KAAc,SAAA,IAAa,SAAA,KAAc,SAAS,iBAAA,GAAoB,uBAAA;AAAA,IAC7E,OAAA,EAAS,CAAA;AAAA,IAAG,UAAA,EAAY;AAAA,GAC1B;AACF;AAEA,SAAS,YAAA,GAA8B;AACrC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IAAQ,MAAA,EAAQ,KAAA;AAAA,IAAO,YAAA,EAAc,KAAA;AAAA,IAC5C,UAAA,EAAY,kBAAA;AAAA,IAAoB,MAAA,EAAQ;AAAA,GAC1C;AACF;AAEA,IAAM,SAAS,sBACb,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAY,KAAA,EAAM,eAAc,OAAA,EAChH,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,KAAI,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAI,CAAA;AAAA,kBAAE,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAI;AAAA,CAAA,EAC1E,CAAA;AAKK,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,CAAC,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA;AAAA,EACvC,SAAA,GAAY,YAAA;AAAA,EACZ,YAAA,GAAe,SAAA;AAAA,EACf,KAAA,GAAQ;AACV,CAAA,EAAwB;AACtB,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,MACE,QAAA,EAAS;AACb,EAAA,MAAM,WAAW,WAAA,EAAY;AAG7B,EAAA,MAAM,UAAU,KAAA,KAAU,MAAA;AAC1B,EAAA,MAAM,eAAA,GAAkB,UAAU,SAAA,GAAY,SAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,UAAU,SAAA,GAAY,SAAA;AACxC,EAAA,MAAM,YAAA,GAAe,UAAU,iBAAA,GAAoB,uBAAA;AACnD,EAAA,MAAM,OAAA,GAAU,UAAU,MAAA,GAAS,wBAAA;AACnC,EAAA,MAAM,WAAA,GAAc,UAAU,4BAAA,GAA+B,kCAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,UAAU,sBAAA,GAAyB,sBAAA;AACjD,EAAA,MAAM,QAAA,GAAW,UAAU,SAAA,GAAY,SAAA;AACvC,EAAA,MAAM,SAAA,GAAY,UAAU,sBAAA,GAAyB,qBAAA;AACrD,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,QAAA,EAAU,eAAe,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,YAAY,QAAQ,CAAA;AACpC,EAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,EAAA,MAAM,MAAA,GAAS,UAAU,SAAS,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,SAAS,SAAS,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,YAAY,SAAS,CAAA;AAElC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAiB,QAAQ,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAA6B,SAAS,CAAA;AAC5E,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,CAAC,CAAA;AACxD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AAEpD,EAAA,MAAM,cAAA,GAAiB,OAAO,KAAK,CAAA;AACnC,EAAA,MAAM,aAAA,GAAgB,OAA6C,IAAI,CAAA;AAEvE,EAAA,MAAM,UAAA,GAAa,OAAuC,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAI9F,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAW,GAAA,KAAgB;AAC9C,IAAA,MAAM,QAAQ,GAAA,CAAI,OAAA,CAAQ,OAAO,EAAE,CAAA,CAAE,MAAM,EAAE,CAAA;AAC7C,IAAA,UAAA,CAAW,CAAA,IAAA,KAAQ;AACjB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA;AAC3B,MAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAK,EAAE,CAAA;AACtC,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA;AACX,MAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AAEtC,MAAA,IAAI,KAAA,IAAS,IAAI,CAAA,EAAG;AAClB,QAAA,MAAM,SAAS,CAAA,GAAI,CAAA;AACnB,QAAA,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,EAAG,KAAA,EAAM;AAAA,MACpC;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,EAAW,CAAA,KAA6C;AAC5E,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,IAAe,CAAC,QAAQ,CAAC,CAAA,IAAK,IAAI,CAAA,EAAG;AAEjD,MAAA,UAAA,CAAW,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA,EAAM;AACjC,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IACnB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,IAAe,IAAI,CAAA,EAAG;AACzC,MAAA,UAAA,CAAW,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA,EAAM;AACjC,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IACnB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,IAAgB,IAAI,CAAA,EAAG;AAC1C,MAAA,UAAA,CAAW,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA,EAAM;AACjC,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAA8C;AAChE,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC1E,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,UAAA,CAAW,IAAI,CAAA;AAEf,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAC,CAAA;AACxC,IAAA,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,EAAG,KAAA,EAAM;AAAA,EACtC,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AAAE,IAAA,YAAA,EAAa;AAAA,EAAG,CAAA,EAAG,EAAE,CAAA;AAKvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,cAAA,CAAe,SAAS,CAAA;AACxB,IAAA,IAAI,MAAA,KAAW,iBAAA,EAAmB,SAAA,CAAU,QAAQ,CAAA;AACpD,IAAA,QAAA,CAAS,SAAS,CAAA;AAElB,IAAA,cAAA,EAAe;AAAA,EACjB,CAAA,EAAG,CAAC,SAAA,EAAW,cAAA,EAAgB,MAAM,CAAC,CAAA;AAEtC,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,IAAA,KAAiB;AAChD,IAAA,IAAI,eAAe,OAAA,EAAS;AAC5B,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAEzB,IAAA,SAAA,CAAU,WAAW,CAAA;AACrB,IAAA,cAAA,CAAe,MAAM,CAAA;AAErB,IAAA,aAAA,CAAc,OAAA,GAAU,WAAW,MAAM;AACvC,MAAA,OAAA,EAAQ;AACR,MAAA,SAAA,CAAU,QAAQ,CAAA;AAClB,MAAA,cAAA,CAAe,SAAS,CAAA;AACxB,MAAA,QAAA,CAAS,EAAE,CAAA;AAAG,MAAA,UAAA,CAAW,EAAE,CAAA;AAAG,MAAA,QAAA,CAAS,EAAE,CAAA;AACzC,MAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,IAC3B,GAAG,IAAI,CAAA;AAEF,EACP,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAKZ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,YAAA,CAAa,WAAA,IAAe,MAAA,KAAW,WAAA,IAAe,WAAW,QAAA,EAAU;AAC7E,MAAA,SAAA,CAAU,WAAW,CAAA;AACrB,MAAA,cAAA,CAAe,SAAS,CAAA;AACxB,MAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,IAC3B;AAEA,IAAA,IAAI,eAAA,IAAmB,OAAA,IAAW,YAAA,CAAa,OAAA,EAAS;AACtD,MAAA,WAAA,CAAY,OAAO,CAAA;AAAA,IACrB;AAKA,IAAA,IAAI,YAAA,CAAa,gBAAA,IAAoB,MAAA,KAAW,iBAAA,IAAqB,WAAW,SAAA,EAAW;AACzF,MAAA,SAAA,CAAU,iBAAiB,CAAA;AAC3B,MAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,eAAA,EAAiB,OAAA,EAAS,YAAA,CAAa,OAAA,EAAS,YAAA,CAAa,WAAA,EAAa,YAAA,CAAa,gBAAA,EAAkB,MAAA,EAAQ,WAAW,CAAC,CAAA;AAEvI,EAAA,SAAA,CAAU,MAAM,MAAM;AACpB,IAAA,IAAI,aAAA,CAAc,OAAA,EAAS,YAAA,CAAa,aAAA,CAAc,OAAO,CAAA;AAAA,EAC/D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,WAAW,WAAA,EAAa;AAC5B,IAAA,SAAA,CAAU,QAAQ,CAAA;AAAG,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,UAAA,CAAW,EAAE,CAAA;AAAG,IAAA,QAAA,CAAS,EAAE,CAAA;AAC9D,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AACzB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,QAAA,KAAiC;AAC1D,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,OAAA,CAAQ,IAAI,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,QAAQ,CAAA;AAAA,IACtB,SAAS,CAAA,EAAY;AACnB,MAAA,MAAM,GAAA,GAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,wBAAA;AAC7C,MAAA,QAAA,CAAS,GAAG,CAAA;AAAG,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,OAAO,CAAA,KAAuB;AAC1D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,OAAA,CAAQ,IAAI,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,KAAK,CAAA;AACzB,MAAA,SAAA,CAAU,QAAQ,CAAA;AAClB,MAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,IACvB,SAASA,EAAAA,EAAY;AACnB,MAAA,QAAA,CAASA,EAAAA,YAAa,KAAA,GAAQA,EAAAA,CAAE,OAAA,GAAU,4BAA4B,CAAA;AAAA,IACxE,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,OAAO,CAAA,KAAuB;AAC3D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,OAAA,CAAQ,IAAI,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA,SAAA,CAAU,UAAU,CAAA;AACpB,MAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,IACvB,SAASA,EAAAA,EAAY;AACnB,MAAA,QAAA,CAASA,EAAAA,YAAa,KAAA,GAAQA,EAAAA,CAAE,OAAA,GAAU,sBAAsB,CAAA;AAAA,IAClE,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,OAAO,CAAA,KAAuB;AAC1D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAC,KAAA,IAAS,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACpC,IAAA,QAAA,CAAS,EAAE,CAAA;AAAG,IAAA,OAAA,CAAQ,IAAI,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,OAAO,OAAO,CAAA;AAC9B,MAAA,SAAA,CAAU,WAAW,CAAA;AACrB,MAAA,cAAA,CAAe,SAAS,CAAA;AAAA,IAC1B,SAASA,EAAAA,EAAY;AACnB,MAAA,QAAA,CAASA,EAAAA,YAAa,KAAA,GAAQA,EAAAA,CAAE,OAAA,GAAU,0BAA0B,CAAA;AACpE,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI,kBAAkB,CAAA,EAAG;AACzB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,IAAI,cAAc,KAAA,EAAO;AACvB,QAAA,MAAM,QAAQ,KAAK,CAAA;AACnB,QAAA,UAAA,CAAW,EAAE,CAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,MAAM,cAAc,KAAK,CAAA;AAAA,MAC3B;AACA,MAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,IACvB,SAAS,CAAA,EAAY;AACnB,MAAA,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,mBAAmB,CAAA;AAAA,IAC/D;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,mBAAmB,CAAA,EAAG;AAC1B,IAAA,MAAM,CAAA,GAAI,WAAW,MAAM,kBAAA,CAAmB,OAAK,CAAA,GAAI,CAAC,GAAG,GAAI,CAAA;AAC/D,IAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAIlB,EAAA,MAAM,qBAAqB,YAAY;AACrC,IAAA,IAAI,eAAA,GAAkB,KAAK,gBAAA,EAAkB;AAC7C,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,MAAM,oBAAA,EAAqB;AAC3B,MAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,IACvB,SAAS,CAAA,EAAY;AACnB,MAAA,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,8BAA8B,CAAA;AAAA,IAC1E,CAAA,SAAE;AACA,MAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,WAAW,iBAAA,EAAmB;AAGhC,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,gBAAA,IAAoB,CAAC,YAAA,CAAa,gBAAA;AAC/D,IAAA,2BACG,KAAA,EAAA,EAAI,KAAA,EAAO,SAAS,kBAAA,EAAkB,KAAA,EAAO,MAAK,QAAA,EAAS,YAAA,EAAU,IAAA,EACpE,QAAA,kBAAA,IAAA,CAAC,SAAI,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,YAAW,EACzC,QAAA,EAAA;AAAA,MAAA,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,sBACjC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,YAAA,EAAW,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,CAAA,EAAE,CAAA;AAAA,sBACjG,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,WAAW,gBAAA,GAAmB,gBAAA,EAAkB,SAAA,EAAW,QAAA,EAAS,EACzF,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAI,cAAc,KAAA,EAAO,MAAA,EAAQ,eAAe,UAAA,EAAY,OAAA,GAAU,yBAAyB,uBAAA,EAAyB,MAAA,EAAQ,aAAa,OAAA,GAAU,sBAAA,GAAyB,uBAAuB,CAAA,CAAA,EAAI,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAS,EAC1S,QAAA,kBAAA,IAAA,CAAC,SAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAQ,UAAU,SAAA,GAAY,SAAA,EAAW,aAAY,GAAA,EAAI,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EACxJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,KAAA,EAAM,CAAA;AAAA,0BAClD,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa;AAAA,SAAA,EACvB,CAAA,EACF,CAAA;AAAA,4BACC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAW,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,OAAO,SAAA,EAAW,aAAA,EAAe,WAAU,EAC3G,QAAA,EAAA,OAAA,GAAU,0BAA0B,qBAAA,EACvC,CAAA;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,QAAQ,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,cAAc,UAAA,EAAY,IAAA,EAAK,EACrF,QAAA,EAAA,OAAA,GACG,mFACA,IAAA,CAAA,QAAA,EAAA,EAAE,QAAA,EAAA;AAAA,UAAA,6DAAA;AAAA,UAA4D,0BAAU,IAAA,CAAA,QAAA,EAAA,EAAE,QAAA,EAAA;AAAA,YAAA,8DAAA;AAAA,YAA6D,OAAA;AAAA,YAAQ;AAAA,WAAA,EAAS,CAAA,GAAM;AAAA,SAAA,EAAK,CAAA,EACzK,CAAA;AAAA,QACC,KAAA,wBAAU,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,cAAc,MAAA,EAAQ,OAAA,EAAS,YAAY,QAAA,EAAU,MAAA,EAAQ,OAAO,QAAA,EAAU,YAAA,EAAc,MAAA,EAAO,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACzL,0BACC,IAAA,CAAC,QAAA,EAAA,EAAO,WAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAS,MAAA,EAAQ,YAAA,EAAc,QAAQ,MAAA,EAAQ,MAAA,EAAQ,YAAY,YAAA,EAAc,KAAA,EAAO,QAAQ,QAAA,EAAU,MAAA,EAAQ,YAAY,GAAA,EAAK,MAAA,EAAQ,WAAW,UAAA,EAAY,SAAA,EAAW,SAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,cAAA,EAAgB,QAAA,EAAU,KAAK,KAAA,EAAO,OAAA,EAAS,mBAAmB,IAAA,GAAO,CAAA,IAAK,OAAA,EAAS,kBAAA,EAAoB,UAAU,gBAAA,EACpY,QAAA,EAAA;AAAA,UAAA,gBAAA,oBAAoB,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,OAAM,MAAA,EAAO,CAAA;AAAA,UACpD,mBAAmB,eAAA,GAAa;AAAA,SAAA,EACnC,CAAA,mBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,GAAU,kBAAA,GAAqB,wBAAA,EAA0B,MAAA,EAAQ,CAAA,UAAA,EAAa,OAAA,GAAU,kBAAA,GAAqB,wBAAwB,CAAA,CAAA,EAAI,YAAA,EAAc,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAa,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,EAAA,EAAI,cAAA,EAAgB,QAAA,EAAU,YAAA,EAAc,QAAO,EAC5S,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,YAAA,EAAc,CAAA;AAAA,0BACxC,GAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAa,EAAG,QAAA,EAAA,4BAAA,EAAqB;AAAA,SAAA,EAC/E,CAAA;AAAA,QAED,CAAC,2BACA,GAAA,CAAC,QAAA,EAAA,EAAO,WAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,eAAA,GAAkB,IAAI,SAAA,GAAY,SAAA,EAAW,UAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,UAAU,OAAA,EAAS,CAAA,EAAG,YAAY,SAAA,EAAW,UAAA,EAAY,eAAe,OAAA,EAAS,eAAA,GAAkB,CAAA,GAAI,GAAA,GAAM,CAAA,EAAE,EAAG,SAAS,kBAAA,EAAoB,QAAA,EAAU,kBAAkB,CAAA,IAAK,gBAAA,EAClX,4BAAkB,CAAA,GAAI,CAAA,gBAAA,EAAmB,eAAe,CAAA,CAAA,CAAA,GAAM,uBAAA,EACjE,CAAA;AAAA,wBAEF,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,UAAA,EAAY,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,aAAA,EAAc,EAAG,OAAA,EAAS,MAAM;AAAE,UAAA,SAAA,CAAU,SAAS,CAAA;AAAG,UAAA,QAAA,CAAS,EAAE,CAAA;AAAA,QAAG,GAAG,QAAA,EAAA,sCAAA,EAE9S;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,CAAC,OAAA,EAAS,CAAA;AAAA,wBAAE,GAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB;AAAA,OAAA,EAAO;AAAA,KAAA,EAClF,CAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,MAAM,mBAAA,GAAsB,OAAO,CAAA,KAAuB;AACxD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAC,WAAA,CAAY,IAAA,EAAK,EAAG;AACzB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,WAAW,CAAA;AAEzB,MAAA,SAAA,CAAU,WAAW,CAAA;AACrB,MAAA,cAAA,CAAe,SAAS,CAAA;AAAA,IAC1B,SAAS,EAAA,EAAI;AACX,MAAA,QAAA,CAAS,EAAA,YAAc,KAAA,GAAQ,EAAA,CAAG,OAAA,GAAU,2DAA2D,CAAA;AACvG,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,kBAAA,EAAkB,KAAA,EAAO,IAAA,EAAK,QAAA,EAAS,YAAA,EAAU,IAAA,EAAC,OAAA,EAAS,CAAA,CAAA,KAAK;AAAE,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe,WAAA,EAAY;AAAA,IAAG,CAAA,EACtI,+BAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,UAAA,EAAW,EACzC,QAAA,EAAA;AAAA,MAAA,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,sBACjC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,OAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG,SAAS,MAAM;AAAE,QAAA,SAAA,CAAU,iBAAiB,CAAA;AAAG,QAAA,QAAA,CAAS,EAAE,CAAA;AAAG,QAAA,cAAA,CAAe,EAAE,CAAA;AAAA,MAAG,CAAA,EAAG,YAAA,EAAW,MAAA,EAC/K,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wBAAA,EAAwB,CAAA,EAAE,CAAA,EACrL,CAAA;AAAA,sBACA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,YAAA,EAAW,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,CAAA,EAAE,CAAA;AAAA,sBACjG,IAAA,CAAC,SAAI,KAAA,EAAO,EAAE,SAAS,QAAA,GAAW,gBAAA,GAAmB,kBAAiB,EACpE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,UAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,WAAW,aAAA,EAAe,SAAA,EAAW,SAAA,EAAW,QAAA,IAAY,QAAA,EAAA,8BAAA,EAA4B,CAAA;AAAA,wBAClK,GAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,QAAQ,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,cAAc,SAAA,EAAW,QAAA,EAAU,UAAA,EAAY,GAAA,IAAO,QAAA,EAAA,mEAAA,EAE/G,CAAA;AAAA,QACC,KAAA,wBAAU,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,cAAc,MAAA,EAAQ,OAAA,EAAS,aAAa,QAAA,EAAU,MAAA,EAAQ,OAAO,QAAA,EAAU,YAAA,EAAc,MAAA,EAAO,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAC3L,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,mBAAA,EAAqB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,MAAA,EAAO,EAClG,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,mBAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,aAAa,MAAA,EAAQ,WAAA,EAAa,YAAA,EAAc,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,OAAO,SAAA,EAAW,UAAA,EAAY,OAAA,EAAS,UAAA,EAAY,SAAA,EAAW,SAAA,EAAW,YAAA,EAAc,MAAA,EAAQ,UAAA,EAAY,SAAA,EAAW,EAAA,EAAI,UAAA,EAAY,GAAA,EAAI;AAAA,cACrP,WAAA,EAAY,4BAAA;AAAA,cACZ,KAAA,EAAO,WAAA;AAAA,cACP,QAAA,EAAU,CAAA,CAAA,KAAK,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC5C,QAAA,EAAQ,IAAA;AAAA,cACR,QAAA,EAAU,WAAA;AAAA,cACV,SAAA,EAAS;AAAA;AAAA,WACX;AAAA,0BACA,IAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAS,MAAA,EAAQ,SAAA,EAAW,OAAO,YAAA,EAAc,MAAA,EAAQ,QAAQ,MAAA,EAAQ,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,QAAQ,UAAA,EAAY,GAAA,EAAK,QAAQ,SAAA,EAAW,UAAA,EAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAU,GAAA,EAAK,KAAA,EAAO,YAAY,+BAAA,EAAiC,OAAA,EAAS,cAAc,IAAA,GAAO,CAAA,EAAE,EAAG,QAAA,EAAU,WAAA,EAC/a,QAAA,EAAA;AAAA,YAAA,WAAA,oBAAe,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,OAAM,MAAA,EAAO,CAAA;AAAA,YAC/C,cAAc,wBAAA,GAAsB;AAAA,WAAA,EACvC;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,CAAC,OAAA,EAAS,CAAA;AAAA,wBAAE,GAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB;AAAA,OAAA,EAAO;AAAA,KAAA,EAClF,CAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,MAAM,SAAS,WAAA,KAAgB,MAAA;AAC/B,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,kBAAA,EAAkB,KAAA,EAAO,IAAA,EAAK,QAAA,EAAS,YAAA,EAAU,IAAA,EACpE,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,OAAO,IAAA,EACT,QAAA,EAAA;AAAA,MAAA,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,2BAChC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,kBAAkB,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,YAAY,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,GAAA,EAAK,QAAO,EACvI,QAAA,EAAA;AAAA,QAAA,MAAA,uBACE,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAqB,KAAA,EAAO,EAAE,OAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,YAAA,EAAc,OAAO,UAAA,EAAY,sBAAA,EAAwB,QAAQ,kCAAA,EAAoC,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,QAAA,EAAU,WAAW,+BAAA,EAAgC,EACnR,8BAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QACnD,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,WAAU,kBAAA,EAAmB,MAAA,EAAO,kBAAiB,MAAA,EAAO,SAAA,EAAU,WAAA,EAAY,KAAA,EAAM,eAAc,OAAA,EAAQ,cAAA,EAAe,SAAQ,CAAA,EACjJ,CAAA,EACF,oBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAI,cAAc,KAAA,EAAO,UAAA,EAAY,UAAU,kBAAA,GAAqB,wBAAA,EAA0B,MAAA,EAAQ,CAAA,YAAA,EAAe,UAAU,kBAAA,GAAqB,wBAAwB,IAAI,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAS,EAC/Q,QAAA,kBAAA,GAAA,CAAC,WAAQ,IAAA,EAAM,EAAA,EAAI,OAAO,OAAA,GAAU,iBAAA,GAAoB,yBAAyB,CAAA,EACnF,CAAA;AAAA,6BAED,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,WAAW,aAAA,EAAe,SAAA,EAAU,EACnG,QAAA,EAAA,MAAA,GAAS,mBAAmB,yBAAA,EAC/B,CAAA;AAAA,0BACA,GAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAa,EAClE,QAAA,EAAA,MAAA,GAAS,0BAA0B,gCAAA,EACtC;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,CAAC,OAAA,EAAS,CAAA;AAAA,wBAAE,GAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB;AAAA,OAAA,EAAO;AAAA,KAAA,EAClF,CAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,kBAAA,EAAkB,KAAA,EAAO,IAAA,EAAK,QAAA,EAAS,YAAA,EAAU,IAAA,EAAC,OAAA,EAAS,CAAA,CAAA,KAAK;AAAE,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe,WAAA,EAAY;AAAA,IAAG,CAAA,EACtI,+BAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,UAAA,EAAW,EACzC,QAAA,EAAA;AAAA,MAAA,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,sBACjC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,YAAA,EAAW,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,CAAA,EAAE,CAAA;AAAA,sBACjG,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,WAAW,gBAAA,GAAmB,gBAAA,EAAkB,SAAA,EAAW,QAAA,EAAS,EACzF,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAI,cAAc,KAAA,EAAO,MAAA,EAAQ,eAAe,UAAA,EAAY,sBAAA,EAAwB,QAAQ,gCAAA,EAAkC,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS,EAC7N,8BAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,SAAA,EAAU,aAAY,GAAA,EAAI,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAChI,8BAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sGAAA,EAAsG,CAAA,EAChH,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,QAAQ,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,KAAK,KAAA,EAAO,SAAA,EAAW,aAAA,EAAe,SAAA,IAAa,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,wBACjI,IAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,UAAA,EAAY,IAAA,EAAK,EAAG,QAAA,EAAA;AAAA,UAAA,4BAAA;AAAA,0BAC/D,GAAA,CAAC,YAAO,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAAS,GAAA;AAAA,8BAAE,IAAA,EAAA,EAAG,CAAA;AAAA,UAAE;AAAA,SAAA,EACzG,CAAA;AAAA,QACC,KAAA,wBAAU,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,cAAc,MAAA,EAAQ,OAAA,EAAS,YAAY,QAAA,EAAU,MAAA,EAAQ,OAAO,QAAA,EAAU,YAAA,EAAc,MAAA,EAAO,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAC1L,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,QAAQ,MAAA,EAAQ,UAAA,EAAY,eAAA,GAAkB,CAAA,GAAK,OAAA,GAAU,kBAAA,GAAqB,2BAA4B,YAAA,EAAc,KAAA,EAAO,eAAA,GAAkB,CAAA,GAAI,YAAA,GAAe,MAAA,EAAQ,UAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,eAAA,GAAkB,CAAA,GAAI,YAAY,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,eAAA,EAAiB,YAAA,EAAc,OAAM,EAAG,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,eAAA,GAAkB,CAAA,EACxe,4BAAkB,CAAA,GAAI,CAAA,UAAA,EAAa,eAAe,CAAA,CAAA,CAAA,GAAM,aAAA,EAC3D,CAAA;AAAA,wBACA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,aAAA,EAAc,EAAG,OAAA,EAAS,MAAM;AAAE,UAAA,SAAA,CAAU,YAAY,CAAA;AAAG,UAAA,QAAA,CAAS,EAAE,CAAA;AAAA,QAAG,GAAG,QAAA,EAAA,uBAAA,EAEhT;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,CAAC,OAAA,EAAS,CAAA;AAAA,wBAAE,GAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB;AAAA,OAAA,EAAO;AAAA,KAAA,EAClF,CAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,kBAAA,EAAkB,KAAA,EAAO,IAAA,EAAK,QAAA,EAAS,YAAA,EAAU,IAAA,EAAC,OAAA,EAAS,CAAA,CAAA,KAAK;AAAE,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe,WAAA,EAAY;AAAA,IAAG,CAAA,EACtI,+BAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,UAAA,EAAW,EACzC,QAAA,EAAA;AAAA,MAAA,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,sBACjC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,OAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG,SAAS,MAAM;AAAE,QAAA,SAAA,CAAU,YAAY,CAAA;AAAG,QAAA,QAAA,CAAS,EAAE,CAAA;AAAG,QAAA,UAAA,CAAW,EAAE,CAAA;AAAA,MAAG,CAAA,EAAG,YAAA,EAAW,MAAA,EACtK,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wBAAA,EAAwB,CAAA,EAAE,CAAA,EACrL,CAAA;AAAA,sBACA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,YAAA,EAAW,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,CAAA,EAAE,CAAA;AAAA,sBACjG,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,WAAW,gBAAA,GAAmB,gBAAA,EAAkB,SAAA,EAAW,QAAA,EAAS,EACzF,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAW,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAW,aAAA,EAAe,SAAA,IAAa,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,wBAChI,IAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,UAAA,EAAY,GAAA,EAAI,EAAG,QAAA,EAAA;AAAA,UAAA,4BAAA;AAAA,0BAC9D,GAAA,CAAC,YAAO,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAAS;AAAA,SAAA,EAClG,CAAA;AAAA,QACC,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAY,KAAA,EAAO,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,YAAA,EAAc,QAAQ,OAAA,EAAS,WAAA,EAAa,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,cAAc,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAO,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAC9M,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,qBAAA,EAAuB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,MAAA,EAAO,EACpG,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,QAAQ,GAAA,EAAK,KAAA,EAAO,gBAAgB,QAAA,EAAS,EAAG,SAAS,UAAA,EAC7E,QAAA,EAAA,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,qBACtB,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cAEC,KAAK,CAAA,EAAA,KAAM;AAAE,gBAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,cAAI,CAAA;AAAA,cACzC,WAAW,CAAA,gCAAA,EAAmC,OAAA,CAAQ,CAAC,CAAA,GAAI,yBAAyB,EAAE,CAAA,CAAA;AAAA,cACtF,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,OAAA,EAAS,CAAA;AAAA,gBACT,MAAA,EAAQ,WAAA;AAAA,gBACR,YAAA,EAAc,MAAA;AAAA,gBACd,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO,SAAA;AAAA,gBACP,UAAA,EAAY,OAAA;AAAA,gBACZ,UAAA,EAAY,SAAA;AAAA,gBACZ,SAAA,EAAW,YAAA;AAAA,gBACX,SAAA,EAAW;AAAA,eACb;AAAA,cACA,IAAA,EAAK,MAAA;AAAA,cACL,SAAA,EAAU,SAAA;AAAA,cACV,YAAA,EAAc,CAAA,KAAM,CAAA,GAAI,eAAA,GAAkB,KAAA;AAAA,cAC1C,SAAA,EAAW,CAAA;AAAA,cACX,KAAA,EAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,EAAA;AAAA,cACrB,UAAU,CAAA,CAAA,KAAK,WAAA,CAAY,CAAA,EAAG,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC5C,SAAA,EAAW,CAAA,CAAA,KAAK,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAAA,cACjC,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO;AAAA,cAC9B,QAAA,EAAU,IAAA;AAAA,cACV,WAAW,CAAA,KAAM;AAAA,aAAA;AAAA,YA1BZ;AAAA,WA4BR,CAAA,EACH,CAAA;AAAA,0BACA,IAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,qBAAoB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,WAAW,KAAA,EAAO,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,cAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,QAAQ,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,cAAA,EAAgB,QAAA,EAAU,GAAA,EAAK,KAAA,EAAO,UAAA,EAAY,+BAAA,EAAiC,SAAS,IAAA,IAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,IAAA,GAAO,CAAA,IAAK,QAAA,EAAU,IAAA,IAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,EAC3d,QAAA,EAAA;AAAA,YAAA,IAAA,oBAAQ,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,OAAM,MAAA,EAAO,CAAA;AAAA,YACxC,OAAO,iBAAA,GAAe;AAAA,WAAA,EACzB;AAAA,SAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,QAAQ,MAAA,EAAQ,UAAA,EAAY,eAAA,GAAkB,CAAA,GAAK,OAAA,GAAU,kBAAA,GAAqB,2BAA4B,aAAA,EAAe,KAAA,EAAO,eAAA,GAAkB,CAAA,GAAI,YAAA,GAAe,YAAA,EAAc,UAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,eAAA,GAAkB,CAAA,GAAI,YAAY,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,eAAA,EAAiB,SAAA,EAAW,OAAM,EAAG,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,eAAA,GAAkB,CAAA,IAAK,IAAA,EACjf,QAAA,EAAA,eAAA,GAAkB,CAAA,GAAI,CAAA,UAAA,EAAa,eAAe,CAAA,CAAA,CAAA,GAAM,aAAA,EAC3D,CAAA;AAAA,wBACA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,aAAA,EAAc,EAAG,OAAA,EAAS,MAAM;AAAE,UAAA,SAAA,CAAU,YAAY,CAAA;AAAG,UAAA,QAAA,CAAS,EAAE,CAAA;AAAG,UAAA,UAAA,CAAW,EAAE,CAAA;AAAA,QAAG,GAAG,QAAA,EAAA,uBAAA,EAEhU;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,CAAC,OAAA,EAAS,CAAA;AAAA,wBAAE,GAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB;AAAA,OAAA,EAAO;AAAA,KAAA,EAClF,CAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,IAAA,MAAM,QAAQ,SAAA,KAAc,KAAA;AAC5B,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,kBAAA,EAAkB,KAAA,EAAO,IAAA,EAAK,QAAA,EAAS,YAAA,EAAU,IAAA,EAAC,OAAA,EAAS,CAAA,CAAA,KAAK;AAAE,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe,WAAA,EAAY;AAAA,IAAG,CAAA,EACtI,+BAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,UAAA,EAAW,EACzC,QAAA,EAAA;AAAA,MAAA,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,sBACjC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,OAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG,SAAS,MAAM;AAAE,QAAA,SAAA,CAAU,QAAQ,CAAA;AAAG,QAAA,QAAA,CAAS,EAAE,CAAA;AAAA,MAAG,CAAA,EAAG,YAAA,EAAW,MAAA,EAClJ,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wBAAA,EAAwB,CAAA,EAAE,CAAA,EACrL,CAAA;AAAA,sBACA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,YAAA,EAAW,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,CAAA,EAAE,CAAA;AAAA,sBACjG,IAAA,CAAC,SAAI,KAAA,EAAO,EAAE,SAAS,QAAA,GAAW,gBAAA,GAAmB,kBAAiB,EACpE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,UAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,WAAW,aAAA,EAAe,SAAA,EAAW,SAAA,EAAW,QAAA,IAAY,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,4BACvJ,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,YAAY,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,WAAW,QAAA,EAAU,UAAA,EAAY,KAAI,EACzG,QAAA,EAAA,KAAA,GAAQ,oDAAoD,iDAAA,EAC/D,CAAA;AAAA,QACC,KAAA,wBAAU,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,cAAc,MAAA,EAAQ,OAAA,EAAS,aAAa,QAAA,EAAU,MAAA,EAAQ,OAAO,QAAA,EAAU,YAAA,EAAc,MAAA,EAAO,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAC3L,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,KAAA,GAAQ,yBAAyB,qBAAA,EAAuB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,QAAO,EACrI,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAA,EAAA,EAAM,WAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAS,WAAA,EAAa,MAAA,EAAQ,aAAa,YAAA,EAAc,MAAA,EAAQ,UAAU,MAAA,EAAQ,KAAA,EAAO,WAAW,UAAA,EAAY,OAAA,EAAS,YAAY,SAAA,EAAW,SAAA,EAAW,cAAc,UAAA,EAAY,oBAAA,IAAwB,IAAA,EAAK,OAAA,EAAQ,aAAY,gBAAA,EAAiB,KAAA,EAAO,OAAO,QAAA,EAAU,CAAA,CAAA,KAAK,SAAS,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,QAAA,EAAQ,MAAC,QAAA,EAAU,IAAA,EAAM,WAAS,IAAA,EAAC,CAAA;AAAA,0BAC/Y,IAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,mBAAA,EAAoB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAS,MAAA,EAAQ,SAAA,EAAW,OAAO,YAAA,EAAc,MAAA,EAAQ,QAAQ,MAAA,EAAQ,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,QAAQ,UAAA,EAAY,GAAA,EAAK,QAAQ,SAAA,EAAW,UAAA,EAAY,WAAW,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,cAAA,EAAgB,UAAU,GAAA,EAAK,KAAA,EAAO,YAAY,+BAAA,EAAiC,OAAA,EAAS,OAAO,IAAA,GAAO,CAAA,EAAE,EAAG,QAAA,EAAU,IAAA,EACxa,QAAA,EAAA;AAAA,YAAA,IAAA,oBAAQ,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,OAAM,MAAA,EAAO,CAAA;AAAA,YACxC,IAAA,GAAO,eAAA,GAAc,KAAA,GAAQ,WAAA,GAAc;AAAA,WAAA,EAC9C;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,CAAC,OAAA,EAAS,CAAA;AAAA,wBAAE,GAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB;AAAA,OAAA,EAAO;AAAA,KAAA,EAClF,CAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA;AAC5C,EAAA,MAAM,YAAY,UAAA,IAAc,SAAA;AAIhC,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAuB,QAAA,EAA2B,KAAA,qBACjE,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,CAAA,EAAE,EAC7J,QAAA,EAAA,IAAA,GAAO,WAAW,IAAA,EACrB,CAAA;AAGF,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,kBAAA,EAAkB,KAAA,EAAO,IAAA,EAAK,QAAA,EAAS,YAAA,EAAU,IAAA,EAAC,OAAA,EAAS,CAAA,CAAA,KAAK;AAAE,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe,WAAA,EAAY;AAAA,EAAG,CAAA,EACtI,+BAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,UAAA,EAAW,EACzC,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,oBACjC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,YAAA,EAAW,OAAA,EAAQ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,CAAA,EAAE,CAAA;AAAA,oBAEjG,IAAA,CAAC,SAAI,KAAA,EAAO,EAAE,SAAS,QAAA,GAAW,gBAAA,GAAmB,kBAAiB,EACpE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,YAAY,QAAA,EAAU,MAAA,EAAQ,YAAY,GAAA,EAAK,KAAA,EAAO,WAAW,aAAA,EAAe,SAAA,EAAW,WAAW,QAAA,EAAS,EACjI,oBAAU,CAAA,WAAA,EAAc,OAAO,KAAK,mBAAA,EACvC,CAAA;AAAA,sBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,MAAA,EAAO,EACjE,QAAA,EAAA;AAAA,QAAA,UAAA,oBACC,IAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,gBAAA,EAAiB,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,GAAI,IAAA,GAAO,EAAE,OAAA,EAAS,MAAM,MAAA,EAAQ,aAAA,EAAc,GAAI,EAAC,EAAG,EAAG,OAAA,EAAS,MAAM,WAAA,CAAY,QAAQ,CAAA,EAAG,QAAA,EAAU,IAAA,EAC/J,QAAA,EAAA;AAAA,UAAA,OAAA,iBAAQ,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA,kBAAI,GAAA,CAAC,OAAA,EAAA,EAAQ,MAAM,EAAA,EAAI,KAAA,EAAM,MAAA,EAAO,CAAA,EAAI,SAAS,CAAA;AAAA,0BACtE,GAAA,CAAC,UAAK,QAAA,EAAA,sBAAA,EAAoB;AAAA,SAAA,EAC5B,CAAA;AAAA,QAGD,SAAA,oBACC,IAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,gBAAA,EAAiB,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,GAAI,IAAA,GAAO,EAAE,OAAA,EAAS,MAAM,MAAA,EAAQ,aAAA,EAAc,GAAI,EAAC,EAAG,EAAG,OAAA,EAAS,MAAM,WAAA,CAAY,OAAO,CAAA,EAAG,QAAA,EAAU,IAAA,EAC9J,QAAA,EAAA;AAAA,UAAA,OAAA,iBAAQ,GAAA,CAAC,SAAA,EAAA,EAAU,CAAA,kBAAI,GAAA,CAAC,WAAQ,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,OAAA,GAAU,MAAA,GAAS,MAAA,EAAQ,CAAA,EAAI,OAAA,GAAU,SAAS,MAAM,CAAA;AAAA,0BAC1G,GAAA,CAAC,UAAK,QAAA,EAAA,qBAAA,EAAmB;AAAA,SAAA,EAC3B,CAAA;AAAA,QAGD,SAAA,IAAa,SAAA,oBACZ,IAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,aAAY,EACpF,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,oBAAA,EAAqB,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,GAAU,kBAAA,GAAqB,wBAAA,EAAyB,EAAG,CAAA;AAAA,0BACrH,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,aAAA,EAAe,WAAA,EAAa,aAAA,EAAe,QAAA,IAAY,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,0BAC/G,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,GAAU,kBAAA,GAAqB,wBAAA,EAAyB,EAAG;AAAA,SAAA,EACvH,CAAA;AAAA,QAGD,SAAA,yBACE,QAAA,EAAA,EAAO,SAAA,EAAU,kBAAiB,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAO,aAAA,GAAgB,SAAA,IAAa,OAAA,EAAS,MAAM,UAAU,YAAY,CAAA,EAAG,UAAU,IAAA,EAChJ,QAAA,EAAA;AAAA,UAAA,OAAA,iBAAQ,GAAA,CAAC,SAAA,EAAA,EAAU,CAAA,kBAAI,GAAA,CAAC,OAAA,EAAA,EAAQ,MAAM,EAAA,EAAI,KAAA,EAAO,YAAA,EAAc,CAAA,EAAI,YAAY,CAAA;AAAA,0BAChF,GAAA,CAAC,UAAK,QAAA,EAAA,qBAAA,EAAmB;AAAA,SAAA,EAC3B;AAAA,OAAA,EAEJ,CAAA;AAAA,MAEC,KAAA,wBAAU,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,YAAA,EAAc,QAAQ,OAAA,EAAS,UAAA,EAAY,UAAU,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAS,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAEvL,IAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,QAAQ,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,SAAA,EAAW,QAAA,EAAU,UAAA,EAAY,MAAK,EAAG,QAAA,EAAA;AAAA,QAAA,gCAAA;AAAA,QAC/E,GAAA;AAAA,4BAC9B,GAAA,EAAA,EAAE,IAAA,EAAK,gCAAA,EAAiC,MAAA,EAAO,UAAS,GAAA,EAAI,qBAAA,EAAsB,KAAA,EAAO,EAAE,OAAO,OAAA,GAAU,kBAAA,GAAqB,0BAA0B,cAAA,EAAgB,WAAA,IAAe,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,QACpN,KAAA;AAAA,4BACY,GAAA,EAAA,EAAE,IAAA,EAAK,8BAAA,EAA+B,MAAA,EAAO,UAAS,GAAA,EAAI,qBAAA,EAAsB,KAAA,EAAO,EAAE,OAAO,OAAA,GAAU,kBAAA,GAAqB,0BAA0B,cAAA,EAAgB,WAAA,IAAe,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,QAAI;AAAA,OAAA,EACpM;AAAA,KAAA,EACF,CAAA;AAAA,oBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,CAAC,OAAA,EAAS,CAAA;AAAA,sBAAE,GAAA,CAAC,UAAK,QAAA,EAAA,kBAAA,EAAgB;AAAA,KAAA,EAAO;AAAA,GAAA,EAClF,CAAA,EACF,CAAA;AAEJ;AAIO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,EAAE,WAAW,UAAA,EAAY,eAAA,EAAiB,SAAS,IAAA,EAAM,YAAA,EAAc,MAAA,EAAO,GAAI,QAAA,EAAS;AACjG,EAAA,OAAO,EAAE,SAAA,EAAW,UAAA,EAAY,iBAAiB,OAAA,EAAS,IAAA,EAAM,cAAc,MAAA,EAAO;AACvF;AC3wBA,IAAM,YAAA,GAAe,cAAwC,IAAI,CAAA;AAQjE,IAAM,cAAA,GAA+B;AAAA,EACnC,WAAA,EAAa,KAAA;AAAA,EACb,OAAA,EAAS,KAAA;AAAA,EACT,mBAAA,EAAqB,KAAA;AAAA,EACrB,gBAAA,EAAkB,KAAA;AAAA,EAClB,gBAAA,EAAkB;AACpB,CAAA;AAcO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAS,EAAuB;AAC7E,EAAA,MAAM,CAAC,IAAI,CAAA,GAAIC,QAAAA;AAAA,IACb,MAAM,IAAI,SAAA,CAAU,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,UAAA,EAAY,MAAA,CAAO,cAAA,EAAgB;AAAA,GAChF;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAA0B,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAuB,cAAc,CAAA;AAC7E,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,QAAAA,CAAiD,EAAE,CAAA;AAGnF,EAAA,MAAM,SAAA,GAAYC,OAAO,MAAM,CAAA;AAC/B,EAAAC,UAAU,MAAM;AACd,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAAA,EACtB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAIX,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,IAAS,OAAO,WAAW,WAAA,EAAa;AACpD,IAAA,MAAM,IAAA,GAAO,OAAO,cAAA,IAAkB,mBAAA;AACtC,IAAA,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,wCAAA,EAA2C,kBAAA,CAAmB,OAAO,KAAK,CAAC,EAAE,CAAA,CACvF,IAAA,CAAK,CAAC,CAAA,KAAO,CAAA,CAAE,KAAK,CAAA,CAAE,IAAA,KAAS,IAAK,CAAA,CACpC,IAAA,CAAK,CAAC,CAAA,KAAM;AACX,MAAA,IAAI,CAAA,EAAG,IAAA,EAAM,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,CAAA,CAAE,IAAA,EAAK,CAAE,CAAA;AAC3D,MAAA,IAAI,CAAA,EAAG,QAAA,EAAU,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,CAAA;AAAA,IACrE,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnB,GAAG,CAAC,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,cAAc,CAAC,CAAA;AAExC,EAAA,MAAM,YAAYC,WAAAA,CAAY,MAAM,aAAa,IAAI,CAAA,EAAG,EAAE,CAAA;AAC1D,EAAA,MAAM,aAAaA,WAAAA,CAAY,MAAM,aAAa,KAAK,CAAA,EAAG,EAAE,CAAA;AAC5D,EAAA,MAAM,iBAAiBA,WAAAA,CAAY,MAAM,aAAa,IAAI,CAAA,EAAG,EAAE,CAAA;AAK/D,EAAA,MAAM,oBAAA,GAAuBA,YAAY,YAAY;AACnD,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,KAAA,IAAS,CAAC,MAAM,gBAAA,EAAkB;AACpD,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,OAAA,CAAQ,cAAA,IAAkB,mBAAA;AACvD,IAAA,IAAI,CAAC,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO;AAC9B,IAAA,MAAM,QAAA,GAAW,IAAI,kBAAA,CAAmB,EAAE,OAAA,EAAS,YAAY,KAAA,EAAO,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,CAAA;AAC/F,IAAA,MAAM,SAAS,qBAAA,CAAsB;AAAA,MACnC,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,gBAAgB,KAAA,CAAM,OAAA;AAAA,MACtB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,GAAI,SAAS,KAAA,GAAQ,EAAE,OAAO,QAAA,CAAS,KAAA,KAAU;AAAC,KACnD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAA,EAAU,KAAK,CAAC,CAAA;AAGpB,EAAA,MAAM,OAAA,GAAUA,WAAAA,CAAY,OAAO,EAAA,KAAiC;AAClE,IAAA,eAAA,CAAgB,EAAE,GAAG,cAAA,EAAgB,WAAA,EAAa,MAAM,CAAA;AACxD,IAAA,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,OAAA,CAAQ;AAAA,MAC5B,OAAA,EAAS,UAAU,OAAA,CAAQ,OAAA;AAAA,MAC3B,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS,UAAU,OAAA,CAAQ,OAAA;AAAA,MAC3B,eAAA,EAAiB,UAAU,OAAA,CAAQ,eAAA;AAAA,MACnC,GAAI,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,EAAE,OAAO,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAM,GAAI,EAAC;AAAA,MACpE,GAAI,SAAA,CAAU,OAAA,CAAQ,cAAA,GAAiB,EAAE,YAAY,SAAA,CAAU,OAAA,CAAQ,cAAA,EAAe,GAAI,EAAC;AAAA,MAC3F,GAAI,SAAA,CAAU,OAAA,CAAQ,MAAA,GAAS,EAAE,QAAQ,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAO,GAAI;AAAC,KACxE,CAAA;AACD,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,eAAA,CAAgB;AAAA,MACd,WAAA,EAAa,KAAA;AAAA,MACb,OAAA,EAAS,EAAE,MAAA,KAAW,OAAA;AAAA,MACtB,mBAAA,EAAqB,EAAE,MAAA,KAAW,uBAAA;AAAA,MAClC,kBAAkB,CAAA,CAAE,MAAA,KAAW,uBAAA,IAA2B,CAAC,CAAC,CAAA,CAAE,gBAAA;AAAA,MAC9D,kBAAkB,CAAA,CAAE;AAAA,KACrB,CAAA;AACD,IAAA,KAAA,EAAO,SAAA,GAAY,EAAE,OAAO,CAAA;AAC5B,IAAA,OAAO,CAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAKV,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AACzD,IAAA,MAAM,WAAW,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,IAAK,MAAA,CAAO,IAAI,cAAc,CAAA;AACrE,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,eAAA,CAAgB,EAAE,GAAG,cAAA,EAAgB,WAAA,EAAa,MAAM,CAAA;AACxD,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,CAAC,YAAY;AACX,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,eAAe,QAAQ,CAAA;AAC7B,QAAA,IAAI,CAAC,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,EAAC,EAAG,QAAA,CAAS,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC1F,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,CAAC,CAAA;AACxD,QAAA,IAAI,CAAC,SAAA,EAAW;AAGd,UAAA,MAAM,GAAA,GAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,mCAAA;AAC7C,UAAA,YAAA,CAAa,GAAG,CAAA;AAChB,UAAA,eAAA,CAAgB,cAAc,CAAA;AAAA,QAChC;AAAA,MACF,CAAA,SAAE;AACA,QAAA,IAAI,CAAC,SAAA,EAAW,YAAA,CAAa,KAAK,CAAA;AAAA,MACpC;AAAA,IACF,CAAA,GAAG;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EAEF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAA,GAAiBC,WAAAA,CAAY,OAAO,QAAA,KAAqB;AAC7D,IAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAC7C,IAAA,MAAM,QAAQ,EAAE,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,EAAA,MAAM,KAAA,GAAQA,WAAAA,CAAY,OAAO,QAAA,KAAiC;AAChE,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAC7E,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,MAAM,GAAA,GAAM,OAAO,QAAA,KAAa,QAAA,GAC5B,KAAK,iBAAA,CAAkB,MAAA,CAAO,SAAS,MAAA,GAAS,MAAA,CAAO,SAAS,QAAQ,CAAA,GACxE,KAAK,gBAAA,CAAiB,MAAA,CAAO,SAAS,MAAA,GAAS,MAAA,CAAO,SAAS,QAAQ,CAAA,CAAA;AAC3E,IAAA,MAAA,CAAO,SAAS,IAAA,GAAO,GAAA;AAAA,EACzB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,aAAA,GAAgBA,WAAAA,CAAY,OAAO,KAAA,KAAkB;AACzD,IAAA,MAAM,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,OAAA,GAAUA,WAAAA,CAAY,OAAO,KAAA,KAAkB;AACnD,IAAA,MAAM,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,SAAA,GAAYA,WAAAA,CAAY,OAAO,KAAA,EAAe,IAAA,KAAiB;AACnE,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,SAAA,CAAU,OAAO,IAAI,CAAA;AAC3C,IAAA,MAAM,QAAQ,EAAE,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,EAAA,MAAM,OAAA,GAAUA,WAAAA,CAAY,OAAO,KAAA,KAAuB;AACxD,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,eAAe,CAAA;AAC3C,IAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,OAAO,MAAA,KAAqC;AAC1C,MAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,eAAe,CAAA;AAC3C,MAAA,OAAO,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAKA,EAAA,MAAM,aAAA,GAAgBA,YAAY,YAA6B;AAC7D,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,eAAe,CAAA;AAC3C,IAAA,MAAM,OAAO,oBAAA,EAAqB;AAClC,IAAA,MAAM,KAAA,CAAM,cAAc,IAAI,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAKV,EAAA,MAAM,OAAA,GAAUA,WAAAA,CAAY,OAAO,IAAA,KAAiB;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,oDAAoD,CAAA;AACnF,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,eAAA,CAAgB,EAAE,GAAG,cAAA,EAAgB,WAAA,EAAa,MAAM,CAAA;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,OAAA,CAAQ;AAAA,QAC5B,IAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA,EAAS,UAAU,OAAA,CAAQ,OAAA;AAAA,QAC3B,OAAA,EAAS,UAAU,OAAA,CAAQ,OAAA;AAAA,QAC3B,eAAA,EAAiB,UAAU,OAAA,CAAQ,eAAA;AAAA,QACnC,GAAI,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,EAAE,OAAO,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAM,GAAI,EAAC;AAAA,QACpE,GAAI,SAAA,CAAU,OAAA,CAAQ,cAAA,GAAiB,EAAE,YAAY,SAAA,CAAU,OAAA,CAAQ,cAAA,EAAe,GAAI,EAAC;AAAA,QAC3F,GAAI,SAAA,CAAU,OAAA,CAAQ,MAAA,GAAS,EAAE,QAAQ,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAO,GAAI;AAAC,OACxE,CAAA;AACD,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,eAAA,CAAgB,EAAE,GAAG,cAAA,EAAgB,OAAA,EAAS,MAAM,CAAA;AACpD,MAAA,KAAA,EAAO,SAAA,GAAY,EAAE,OAAO,CAAA;AAAA,IAC9B,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,GAAA,GAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,iDAAA;AAC7C,MAAA,YAAA,CAAa,GAAG,CAAA;AAChB,MAAA,eAAA,CAAgB,cAAc,CAAA;AAC9B,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,KAAK,CAAC,CAAA;AAMpB,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,CAAa,gBAAA,IAAoB,CAAC,YAAA,CAAa,gBAAA,IAAoB,CAAC,QAAA,EAAU;AACnF,IAAA,IAAI,CAAC,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO;AAC9B,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,OAAA,CAAQ,cAAA,IAAkB,mBAAA;AACvD,IAAA,MAAM,QAAA,GAAW,IAAI,kBAAA,CAAmB,EAAE,OAAA,EAAS,YAAY,KAAA,EAAO,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,CAAA;AAC/F,IAAA,MAAM,YAAY,YAAA,CAAa,gBAAA;AAC/B,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,MAAM,OAAO,YAAY;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,CAAA,GAAI,MAAM,QAAA,CAAS,iBAAA,CAAkB,SAAS,CAAA;AACpD,QAAA,IAAI,SAAA,IAAa,CAAC,CAAA,EAAG;AACrB,QAAA,IAAI,CAAA,CAAE,WAAW,SAAA,EAAW;AAE1B,UAAA,eAAA,CAAgB,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,gBAAA,EAAkB,MAAK,CAAE,CAAA;AACzD,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAA,CAAE,WAAW,UAAA,EAAY;AAG3B,UAAA,MAAM,QAAQ,QAAQ,CAAA;AAAA,QACxB;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AACA,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,IAAA,EAAM,GAAI,CAAA;AACvC,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,IACxB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,CAAa,gBAAA,EAAkB,aAAa,gBAAA,EAAkB,QAAA,EAAU,OAAO,CAAC,CAAA;AAEpF,EAAA,MAAM,MAAA,GAASC,YAAY,MAAM;AAC/B,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,eAAA,CAAgB,cAAc,CAAA;AAC9B,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAA2B;AAAA,IAC/B,SAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA,EAAiB,CAAC,CAAC,KAAA;AAAA,IACnB,IAAA,EAAM,QAAA,GACF,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,QAAA,CAAS,KAAA,EAAO,QAAA,EAAU,QAAA,CAAS,QAAA,EAAS,GAC9E,IAAA;AAAA,IACJ,OAAA,EAAS,OAAO,OAAA,IAAW,IAAA;AAAA,IAC3B,YAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEC,IAAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EACpB,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,KAAA,KAAU,0BACTC,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,UAAA;AAAA,QACT,OAAA,EAAS,QAAA,CAAS,OAAA,IAAW,KAAA,CAAM,OAAA;AAAA,QACnC,OAAA,EAAS,QAAA,CAAS,OAAA,IAAW,KAAA,CAAM,OAAA;AAAA,QACnC,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,OAAO,KAAA,CAAM;AAAA;AAAA;AACf,GAAA,EAEJ,CAAA;AAEJ;AAEO,SAAS,QAAA,GAA8B;AAC5C,EAAA,MAAM,GAAA,GAAM,WAAW,YAAY,CAAA;AACnC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,8CAA8C,CAAA;AACxE,EAAA,OAAO,GAAA;AACT","file":"index.mjs","sourcesContent":["'use client';\n\nimport React, {\n useState,\n useEffect,\n useCallback,\n useRef,\n type CSSProperties,\n} from 'react';\nimport { useCavos } from './CavosProvider';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CavosAuthModalProps {\n open: boolean;\n onClose: () => void;\n onSuccess?: (address: string) => void;\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark' */\n theme?: 'light' | 'dark';\n}\n\nconst cavosLogoBase64 = \"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\";\n\ntype Screen = 'select' | 'magic-link' | 'verify' | 'otp-code' | 'deploying' | 'device-approval' | 'recover';\n\n// ─── Style injection ──────────────────────────────────────────────────────────\n\nconst STYLE_ID = 'cavos-modal-styles-v2';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement('style');\n el.id = STYLE_ID;\n el.textContent = `\n @keyframes cavos-fade { from { opacity:0; } to { opacity:1; } }\n @keyframes cavos-up {\n from { opacity:0; transform:translateY(12px) scale(0.985); }\n to { opacity:1; transform:translateY(0) scale(1); }\n }\n @keyframes cavos-sheet {\n from { transform:translateY(100%); }\n to { transform:translateY(0); }\n }\n @keyframes cavos-spin {\n from { transform:rotate(0deg); } to { transform:rotate(360deg); }\n }\n @keyframes cavos-pop {\n 0% { transform:scale(0.5); opacity:0; }\n 60% { transform:scale(1.12); opacity:1; }\n 100% { transform:scale(1); opacity:1; }\n }\n @keyframes cavos-check-draw {\n from { stroke-dashoffset: 30; }\n to { stroke-dashoffset: 0; }\n }\n @keyframes cavos-ring-glow {\n 0%,100% { box-shadow: 0 0 0 0 rgba(34,197,94,0.4); }\n 50% { box-shadow: 0 0 0 10px rgba(34,197,94,0); }\n }\n .cavos-check-circle {\n animation: cavos-pop 0.45s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-check-path {\n stroke-dasharray: 30;\n stroke-dashoffset: 30;\n animation: cavos-check-draw 0.35s 0.2s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-input-inner:focus { outline:none; }\n .cavos-provider:active { transform:scale(0.99); }\n .cavos-primary-btn:active { transform:scale(0.98); }\n .cavos-otp-input {\n width: 100%;\n text-align: center;\n font-size: 22px;\n font-weight: 600;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font-family: inherit;\n caret-color: transparent;\n }\n .cavos-otp-box {\n transition: border-color 0.15s, box-shadow 0.15s, transform 0.1s;\n }\n .cavos-otp-box-filled {\n transform: scale(1.04);\n }\n .cavos-divider-line {\n flex: 1;\n height: 1px;\n }\n /* Theme-aware interaction styles. The overlay carries data-cavos-theme so\n hovers/focus rings stay legible in both light and dark — the previous\n rgba(0,0,0,…) rules disappeared against the dark background. */\n [data-cavos-theme=\"light\"] .cavos-input-row:focus-within {\n border-color: rgba(0,0,0,0.35) !important;\n box-shadow: 0 0 0 3px rgba(0,0,0,0.06) !important;\n }\n [data-cavos-theme=\"dark\"] .cavos-input-row:focus-within {\n border-color: rgba(255,255,255,0.45) !important;\n box-shadow: 0 0 0 3px rgba(255,255,255,0.08) !important;\n }\n [data-cavos-theme=\"light\"] .cavos-provider:hover { background: rgba(0,0,0,0.035) !important; }\n [data-cavos-theme=\"dark\"] .cavos-provider:hover { background: rgba(255,255,255,0.07) !important; }\n [data-cavos-theme=\"light\"] .cavos-close:hover { background: rgba(0,0,0,0.05) !important; }\n [data-cavos-theme=\"dark\"] .cavos-close:hover { background: rgba(255,255,255,0.08) !important; }\n [data-cavos-theme=\"light\"] .cavos-sub-btn:hover { color: rgba(0,0,0,0.6) !important; }\n [data-cavos-theme=\"dark\"] .cavos-sub-btn:hover { color: rgba(255,255,255,0.65) !important; }\n [data-cavos-theme=\"light\"] .cavos-submit-btn:hover { color: rgba(0,0,0,0.8) !important; }\n [data-cavos-theme=\"dark\"] .cavos-submit-btn:hover { color: rgba(255,255,255,0.85) !important; }\n [data-cavos-theme=\"light\"] .cavos-primary-btn:hover { opacity: 0.88; }\n [data-cavos-theme=\"dark\"] .cavos-primary-btn:hover { opacity: 0.9; }\n [data-cavos-theme=\"light\"] .cavos-divider-line { background: rgba(0,0,0,0.08); }\n [data-cavos-theme=\"dark\"] .cavos-divider-line { background: rgba(255,255,255,0.1); }\n `;\n document.head.appendChild(el);\n}\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nconst GoogleIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.875 2.684-6.615z\" fill=\"#4285F4\"/>\n <path d=\"M9 18c2.43 0 4.467-.806 5.956-2.184l-2.908-2.258c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 009 18z\" fill=\"#34A853\"/>\n <path d=\"M3.964 10.707A5.41 5.41 0 013.682 9c0-.593.102-1.17.282-1.707V4.961H.957A8.996 8.996 0 000 9c0 1.452.348 2.827.957 4.039l3.007-2.332z\" fill=\"#FBBC05\"/>\n <path d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 00.957 4.961L3.964 7.293C4.672 5.163 6.656 3.58 9 3.58z\" fill=\"#EA4335\"/>\n </svg>\n);\n\nconst AppleIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 814 1000\" fill=\"currentColor\">\n <path d=\"M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76 0-103.7 40.8-165.9 40.8s-105-57.8-155.5-127.4C46 790.7 0 663 0 541.8c0-194.3 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z\"/>\n </svg>\n);\n\nconst EmailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 01-2.06 0L2 7\"/>\n </svg>\n);\n\nconst CavosLogo = ({ invert }: { invert?: boolean }) => (\n <img src={`data:image/png;base64,${cavosLogoBase64}`} alt=\"Cavos\" style={{ width: 'auto', height: '16px', objectFit: 'contain', opacity: 0.55, flexShrink: 0, filter: invert ? 'invert(1)' : 'none' }} />\n);\n\nfunction Spinner({ size = 16, color = '#888' }: { size?: number; color?: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\"\n style={{ animation: 'cavos-spin 0.75s linear infinite', flexShrink: 0 }}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke={color} strokeOpacity=\"0.2\" strokeWidth=\"2.5\"/>\n <path d=\"M12 2a10 10 0 0110 10\" stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\"/>\n </svg>\n );\n}\n\n// ─── Mobile detection hook ────────────────────────────────────────────────────\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia('(max-width: 640px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n return isMobile;\n}\n\n// ─── Style helpers ────────────────────────────────────────────────────────────\n\nconst FONT = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif';\n\nfunction baseOverlay(isMobile: boolean): CSSProperties {\n return {\n position: 'fixed', inset: 0,\n background: 'rgba(0,0,0,0.5)',\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n zIndex: 9999,\n display: 'flex',\n alignItems: isMobile ? 'flex-end' : 'center',\n justifyContent: 'center',\n padding: isMobile ? '0' : '16px',\n animation: 'cavos-fade 0.18s ease',\n fontFamily: FONT,\n };\n}\n\nfunction lightCard(isMobile: boolean, bg: string): CSSProperties {\n return isMobile ? {\n background: bg,\n borderRadius: '20px 20px 0 0',\n width: '100%',\n maxWidth: '100%',\n boxShadow: '0 -8px 40px rgba(0,0,0,0.18)',\n animation: 'cavos-sheet 0.32s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n } : {\n background: bg,\n borderRadius: '22px',\n width: '100%',\n maxWidth: '400px',\n boxShadow: '0 24px 60px rgba(0,0,0,0.22), 0 0 0 1px rgba(0,0,0,0.05)',\n animation: 'cavos-up 0.25s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n };\n}\n\nfunction providerBtn(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n width: '100%',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '10px',\n padding: '12px 16px',\n background: isLight ? '#fff' : 'rgba(255,255,255,0.04)',\n border: `1px solid ${isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)'}`,\n borderRadius: '12px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: textColor,\n fontFamily: 'inherit',\n transition: 'background 0.15s, transform 0.1s, border-color 0.15s',\n position: 'relative',\n };\n}\n\nfunction footerBar(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n borderTop: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`,\n padding: '12px 20px',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '5px',\n fontSize: '11px',\n color: isLight ? 'rgba(0,0,0,0.28)' : 'rgba(255,255,255,0.28)',\n };\n}\n\nfunction closeBtn(textColor: string): CSSProperties {\n return {\n position: 'absolute', top: '16px', right: '16px',\n width: '28px', height: '28px', borderRadius: '50%',\n border: 'none', background: 'transparent',\n cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center',\n color: textColor === '#111111' || textColor === '#111' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.4)',\n padding: 0, transition: 'background 0.15s',\n };\n}\n\nfunction mobileHandle(): CSSProperties {\n return {\n width: '36px', height: '4px', borderRadius: '2px',\n background: 'rgba(0,0,0,0.15)', margin: '12px auto 0',\n };\n}\n\nconst CloseX = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n);\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function CavosAuthModal({\n open,\n onClose,\n appName,\n providers = ['google', 'apple', 'email'],\n emailMode = 'magic-link',\n primaryColor = '#0A0908',\n theme = 'light',\n}: CavosAuthModalProps) {\n const {\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n isAuthenticated,\n address,\n walletStatus,\n authError,\n clearAuthError,\n resendDeviceApproval,\n recover,\n } = useCavos();\n const isMobile = useIsMobile();\n\n // Theme-derived values\n const isLight = theme !== 'dark';\n const backgroundColor = isLight ? '#ffffff' : '#111111';\n const textColor = isLight ? '#111111' : '#ffffff';\n const subTextColor = isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n const inputBg = isLight ? '#fff' : 'rgba(255,255,255,0.06)';\n const inputBorder = isLight ? '1px solid rgba(0,0,0,0.12)' : '1px solid rgba(255,255,255,0.12)';\n const errBg = isLight ? 'rgba(239,68,68,0.06)' : 'rgba(239,68,68,0.08)';\n const errColor = isLight ? '#dc2626' : '#f87171';\n const errBorder = isLight ? 'rgba(239,68,68,0.18)' : 'rgba(239,68,68,0.2)';\n const card = lightCard(isMobile, backgroundColor);\n const overlay = baseOverlay(isMobile);\n const handle = mobileHandle();\n const footer = footerBar(textColor);\n const close = closeBtn(textColor);\n const pBtn = providerBtn(textColor);\n\n const [screen, setScreen] = useState<Screen>('select');\n const [email, setEmail] = useState('');\n const [otpCode, setOtpCode] = useState('');\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n const [deployState, setDeployState] = useState<'loading' | 'done'>('loading');\n const [resendCountdown, setResendCountdown] = useState(0);\n const [deviceResendBusy, setDeviceResendBusy] = useState(false);\n const [recoverCode, setRecoverCode] = useState('');\n const [recoverBusy, setRecoverBusy] = useState(false);\n\n const doneHandledRef = useRef(false);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // One ref per OTP box for focus management / auto-advance.\n const otpBoxRefs = useRef<Array<HTMLInputElement | null>>([null, null, null, null, null, null]);\n\n // Segmented OTP input helpers: keep `otpCode` (6-digit string) as the single\n // source of truth, drive focus by index, and handle paste/keystrokes cleanly.\n const setOtpDigit = (i: number, raw: string) => {\n const digit = raw.replace(/\\D/g, '').slice(-1);\n setOtpCode(prev => {\n const chars = prev.split('');\n while (chars.length < 6) chars.push('');\n chars[i] = digit;\n const next = chars.join('').slice(0, 6);\n // Auto-advance to the next empty box when a digit is typed.\n if (digit && i < 5) {\n const target = i + 1;\n otpBoxRefs.current[target]?.focus();\n }\n return next;\n });\n };\n\n const onOtpKeyDown = (i: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !otpCode[i] && i > 0) {\n // Empty box + backspace → move focus back instead of clearing nothing.\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowLeft' && i > 0) {\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowRight' && i < 5) {\n otpBoxRefs.current[i + 1]?.focus();\n e.preventDefault();\n }\n };\n\n const onOtpPaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n if (!text) return;\n e.preventDefault();\n setOtpCode(text);\n // Focus the box after the last pasted digit (or the last box).\n const focusIdx = Math.min(text.length, 5);\n otpBoxRefs.current[focusIdx]?.focus();\n };\n\n useEffect(() => { injectStyles(); }, []);\n\n // When the provider surfaces an unrecoverable connect error (e.g. a failed\n // OAuth callback), drop the user back on the provider-selection screen with\n // the message + a retry, instead of leaving the modal closed with no feedback.\n useEffect(() => {\n if (!authError) return;\n setBusy(false);\n setDeployState('loading');\n if (screen !== 'device-approval') setScreen('select');\n setError(authError);\n // The provider owns the error; once surfaced here it's \"consumed\" by the UI.\n clearAuthError();\n }, [authError, clearAuthError, screen]);\n\n const triggerDone = useCallback((addr: string) => {\n if (doneHandledRef.current) return;\n doneHandledRef.current = true;\n\n setScreen('deploying');\n setDeployState('done');\n\n closeTimerRef.current = setTimeout(() => {\n onClose();\n setScreen('select');\n setDeployState('loading');\n setEmail(''); setOtpCode(''); setError('');\n doneHandledRef.current = false;\n }, 1600);\n // addr unused beyond guarding the transition; keep the param for clarity.\n void addr;\n }, [onClose]);\n\n // Show the \"deploying\" screen whenever a deploy is in progress (e.g. while\n // returning from an OAuth redirect), or once authenticated, then flip to\n // \"done\" when the account is ready.\n useEffect(() => {\n if (!open) return;\n\n if (walletStatus.isDeploying && screen !== 'deploying' && screen !== 'verify') {\n setScreen('deploying');\n setDeployState('loading');\n doneHandledRef.current = false;\n }\n\n if (isAuthenticated && address && walletStatus.isReady) {\n triggerDone(address);\n }\n\n // This device needs approval: show the \"check your email\" screen. Don't\n // override the recover screen — the user navigated there intentionally from\n // device-approval to restore access with their recovery phrase.\n if (walletStatus.awaitingApproval && screen !== 'device-approval' && screen !== 'recover') {\n setScreen('device-approval');\n doneHandledRef.current = false;\n }\n }, [open, isAuthenticated, address, walletStatus.isReady, walletStatus.isDeploying, walletStatus.awaitingApproval, screen, triggerDone]);\n\n useEffect(() => () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n }, []);\n\n const handleClose = () => {\n if (screen === 'deploying') return;\n setScreen('select'); setEmail(''); setOtpCode(''); setError('');\n doneHandledRef.current = false;\n onClose();\n };\n\n const handleOAuth = async (provider: 'google' | 'apple') => {\n setError(''); setBusy(true);\n try {\n await login(provider);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : 'Authentication failed.';\n setError(msg); setBusy(false);\n }\n };\n\n const handleMagicLinkSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendMagicLink(email);\n setScreen('verify');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send magic link.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpRequestSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendOtp(email);\n setOtpCode('');\n setScreen('otp-code');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send code.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpVerifySubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email || otpCode.length !== 6) return;\n setError(''); setBusy(true);\n try {\n await verifyOtp(email, otpCode);\n setScreen('deploying');\n setDeployState('loading');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Invalid or expired code.');\n setBusy(false);\n }\n };\n\n const handleResend = async () => {\n if (resendCountdown > 0) return;\n setError('');\n try {\n if (emailMode === 'otp') {\n await sendOtp(email);\n setOtpCode('');\n } else {\n await sendMagicLink(email);\n }\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend.');\n }\n };\n\n useEffect(() => {\n if (resendCountdown <= 0) return;\n const t = setTimeout(() => setResendCountdown(c => c - 1), 1000);\n return () => clearTimeout(t);\n }, [resendCountdown]);\n\n if (!open) return null;\n\n // ── Device approval (waiting for the owner to approve from another device) ─\n\n const handleDeviceResend = async () => {\n if (resendCountdown > 0 || deviceResendBusy) return;\n setDeviceResendBusy(true);\n setError('');\n try {\n await resendDeviceApproval();\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend. Try again.');\n } finally {\n setDeviceResendBusy(false);\n }\n };\n\n if (screen === 'device-approval') {\n // The provider nulls pendingRequestId when the request expires (while the\n // device is still awaiting approval) — that's our signal to switch copy.\n const expired = walletStatus.awaitingApproval && !walletStatus.pendingRequestId;\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '48px 24px 32px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: expired ? 'rgba(239,68,68,0.08)' : 'rgba(59,130,246,0.08)', border: `1px solid ${expired ? 'rgba(239,68,68,0.18)' : 'rgba(59,130,246,0.18)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={expired ? '#dc2626' : '#3b82f6'} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2.5\" />\n <path d=\"M12 18h.01\" />\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {expired ? 'Approval link expired' : 'Approve this device'}\n </h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n {expired\n ? 'The approval link is no longer valid. Request a new one below.'\n : <>For your security, we sent an email to approve this device.{appName ? <> Open it on a device where you're already signed in to your {appName} account.</> : null}</>}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n {expired ? (\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', opacity: deviceResendBusy ? 0.65 : 1 }} onClick={handleDeviceResend} disabled={deviceResendBusy}>\n {deviceResendBusy && <Spinner size={15} color=\"#fff\" />}\n {deviceResendBusy ? 'Sending…' : 'Request a new link'}\n </button>\n ) : (\n <div style={{ background: isLight ? 'rgba(0,0,0,0.03)' : 'rgba(255,255,255,0.04)', border: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`, borderRadius: '12px', padding: '14px 16px', display: 'flex', alignItems: 'center', gap: 10, justifyContent: 'center', marginBottom: '14px' }}>\n <Spinner size={14} color={subTextColor} />\n <span style={{ fontSize: '12px', color: subTextColor }}>Waiting for approval…</span>\n </div>\n )}\n {!expired && (\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: resendCountdown > 0 ? 'default' : 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: 0, fontFamily: 'inherit', transition: 'color 0.15s', opacity: resendCountdown > 0 ? 0.6 : 1 }} onClick={handleDeviceResend} disabled={resendCountdown > 0 || deviceResendBusy}>\n {resendCountdown > 0 ? `Resend email in ${resendCountdown}s` : 'Resend approval email'}\n </button>\n )}\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '14px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('recover'); setError(''); }}>\n Sign in with recovery phrase instead\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Recover (lost all devices — restore access with the recovery code) ────\n\n const handleRecoverSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!recoverCode.trim()) return;\n setRecoverBusy(true);\n setError('');\n try {\n await recover(recoverCode);\n // The provider flips to ready; the existing effect drives triggerDone.\n setScreen('deploying');\n setDeployState('loading');\n } catch (e2) {\n setError(e2 instanceof Error ? e2.message : 'Sign-in failed. Check your recovery phrase and try again.');\n setRecoverBusy(false);\n }\n };\n\n if (screen === 'recover') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('device-approval'); setError(''); setRecoverCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with recovery phrase</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n Enter the recovery phrase you saved when you set up this account.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={handleRecoverSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <textarea\n className=\"cavos-input-inner\"\n style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', resize: 'vertical', minHeight: 72, lineHeight: 1.5 }}\n placeholder=\"Enter your recovery phrase\"\n value={recoverCode}\n onChange={e => setRecoverCode(e.target.value)}\n required\n disabled={recoverBusy}\n autoFocus\n />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: recoverBusy ? 0.65 : 1 }} disabled={recoverBusy}>\n {recoverBusy && <Spinner size={15} color=\"#fff\" />}\n {recoverBusy ? 'Restoring access…' : 'Restore access'}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Deploying ─────────────────────────────────────────────────────────────\n\n if (screen === 'deploying') {\n const isDone = deployState === 'done';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={card}>\n {isMobile && <div style={handle} />}\n <div style={{ padding: '52px 28px 44px', display: 'flex', flexDirection: 'column', alignItems: 'center', textAlign: 'center', gap: '16px' }}>\n {isDone ? (\n <div className=\"cavos-check-circle\" style={{ width: 64, height: 64, borderRadius: '50%', background: 'rgba(34,197,94,0.12)', border: '1.5px solid rgba(34,197,94,0.35)', display: 'flex', alignItems: 'center', justifyContent: 'center', animation: 'cavos-ring-glow 1.5s ease-out' }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <polyline className=\"cavos-check-path\" points=\"20 6 9 17 4 12\" stroke=\"#22c55e\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n ) : (\n <div style={{ width: 64, height: 64, borderRadius: '50%', background: isLight ? 'rgba(0,0,0,0.04)' : 'rgba(255,255,255,0.04)', border: `1.5px solid ${isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Spinner size={26} color={isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)'} />\n </div>\n )}\n <div>\n <h2 style={{ margin: 0, fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {isDone ? \"You're all set\" : 'Setting up your account'}\n </h2>\n <p style={{ margin: '6px 0 0', fontSize: '13px', color: subTextColor }}>\n {isDone ? 'Your account is ready' : 'This only takes a moment…'}\n </p>\n </div>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Check your inbox ───────────────────────────────────────────────────────\n\n if (screen === 'verify') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '40px 24px 24px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: 'rgba(34,197,94,0.08)', border: '1px solid rgba(34,197,94,0.18)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#22c55e\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Check your inbox</h2>\n <p style={{ margin: '0 0 22px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n We sent a sign-in link to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.<br />Open it on this device to continue.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : primaryColor, color: resendCountdown > 0 ? subTextColor : '#fff', fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginBottom: '8px' }} onClick={handleResend} disabled={resendCountdown > 0}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend link'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── OTP code entry ─────────────────────────────────────────────────────────\n\n if (screen === 'otp-code') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px', textAlign: 'center' }}>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Enter your code</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.5 }}>\n We sent a 6-digit code to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px', textAlign: 'left' }}>{error}</div>}\n <form onSubmit={handleOtpVerifySubmit} style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'center' }} onPaste={onOtpPaste}>\n {[0, 1, 2, 3, 4, 5].map(i => (\n <input\n key={i}\n ref={el => { otpBoxRefs.current[i] = el; }}\n className={`cavos-input-inner cavos-otp-box ${otpCode[i] ? 'cavos-otp-box-filled' : ''}`}\n style={{\n width: '44px',\n height: '52px',\n padding: 0,\n border: inputBorder,\n borderRadius: '12px',\n fontSize: '22px',\n fontWeight: 600,\n color: textColor,\n background: inputBg,\n fontFamily: 'inherit',\n boxSizing: 'border-box',\n textAlign: 'center',\n }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n value={otpCode[i] ?? ''}\n onChange={e => setOtpDigit(i, e.target.value)}\n onKeyDown={e => onOtpKeyDown(i, e)}\n onFocus={e => e.target.select()}\n disabled={busy}\n autoFocus={i === 0}\n />\n ))}\n </div>\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy || otpCode.length !== 6 ? 0.65 : 1 }} disabled={busy || otpCode.length !== 6}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Verifying…' : 'Continue'}\n </button>\n </form>\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : 'transparent', color: resendCountdown > 0 ? subTextColor : primaryColor, fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginTop: '8px' }} onClick={handleResend} disabled={resendCountdown > 0 || busy}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend code'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Email form ─────────────────────────────────────────────────────────────\n\n if (screen === 'magic-link') {\n const isOtp = emailMode === 'otp';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('select'); setError(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with email</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n {isOtp ? \"We'll send a secure sign-in code to your inbox.\" : \"We'll send a secure sign-in link to your inbox.\"}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={isOtp ? handleOtpRequestSubmit : handleMagicLinkSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <input className=\"cavos-input-inner\" style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', transition: 'border-color 0.15s' }} type=\"email\" placeholder=\"your@email.com\" value={email} onChange={e => setEmail(e.target.value)} required disabled={busy} autoFocus />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy ? 0.65 : 1 }} disabled={busy}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Sending…' : (isOtp ? 'Send code' : 'Send magic link')}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Provider selection ─────────────────────────────────────────────────────\n\n const showEmail = providers.includes('email');\n const showGoogle = providers.includes('google');\n const showApple = providers.includes('apple');\n const hasSocial = showGoogle || showApple;\n // Absolute-positioned icon so the label stays optically centered (matches the\n // Privy/Clerk full-width button look) instead of shifting when text changes.\n // No background box — the brand logos render clean, like native sign-in buttons.\n const btnIcon = (icon: React.ReactNode, busyIcon: React.ReactNode, color: string) => (\n <span style={{ position: 'absolute', left: '16px', width: 20, height: 20, display: 'flex', alignItems: 'center', justifyContent: 'center', color, flexShrink: 0 }}>\n {busy ? busyIcon : icon}\n </span>\n );\n\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n\n <div style={{ padding: isMobile ? '24px 20px 32px' : '40px 24px 24px' }}>\n <h2 style={{ margin: '0 0 22px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>\n {appName ? `Sign in to ${appName}` : 'Log in or sign up'}\n </h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n {showGoogle && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('google')} disabled={busy}>\n {btnIcon(<GoogleIcon />, <Spinner size={14} color=\"#888\" />, '#4285F4')}\n <span>Continue with Google</span>\n </button>\n )}\n\n {showApple && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('apple')} disabled={busy}>\n {btnIcon(<AppleIcon />, <Spinner size={14} color={isLight ? '#111' : '#fff'} />, isLight ? '#111' : '#fff')}\n <span>Continue with Apple</span>\n </button>\n )}\n\n {showEmail && hasSocial && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', margin: '6px 0 2px' }}>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n <span style={{ fontSize: '12px', color: subTextColor, textTransform: 'uppercase', letterSpacing: '0.05em' }}>or</span>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n </div>\n )}\n\n {showEmail && (\n <button className=\"cavos-provider\" style={{ ...pBtn, cursor: busy ? 'not-allowed' : 'pointer' }} onClick={() => setScreen('magic-link')} disabled={busy}>\n {btnIcon(<EmailIcon />, <Spinner size={14} color={subTextColor} />, subTextColor)}\n <span>Continue with email</span>\n </button>\n )}\n </div>\n\n {error && <div style={{ marginTop: '14px', background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor }}>{error}</div>}\n\n <p style={{ margin: '18px 0 0', fontSize: '11px', color: subTextColor, textAlign: 'center', lineHeight: 1.55 }}>\n By continuing you agree to the{' '}\n <a href=\"https://cavos.xyz/user-privacy\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Privacy Policy</a>\n{' & '}\n <a href=\"https://cavos.xyz/user-terms\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Terms</a>.\n </p>\n </div>\n\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n}\n\n// ─── useCavosAuth hook ────────────────────────────────────────────────────────\n\nexport function useCavosAuth() {\n const { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout } = useCavos();\n return { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout };\n}\n","'use client';\n\nimport {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n type ReactNode,\n} from 'react';\nimport { Cavos } from '../Cavos';\nimport { CavosAuth } from '../auth/CavosAuth';\nimport type { Identity } from '../auth/AuthProvider';\nimport type { StarknetNetwork } from '../chains/starknet/constants';\nimport type { ChainCall } from '../chains/ChainAdapter';\nimport { HttpRecoveryClient } from '../recovery/HttpRecoveryClient';\nimport { generateRecoveryCode } from '../recovery/BackupSigner';\nimport { CavosAuthModal } from './CavosAuthModal';\n\nexport interface CavosConfig {\n /** Cavos App ID from the dashboard. */\n appId?: string;\n network: StarknetNetwork;\n /** Per-app salt so the same user has distinct wallets per app. */\n appSalt: string;\n /** Cavos paymaster API key (sponsors deploy + execute). */\n paymasterApiKey: string;\n /** Override the Cavos auth backend (self-hosted / staging). */\n authBackendUrl?: string;\n /** Override the Starknet RPC. */\n rpcUrl?: string;\n}\n\nexport interface CavosModalConfig {\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n /** How the built-in email provider authenticates. Defaults to magic link. */\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark'. */\n theme?: 'light' | 'dark';\n onSuccess?: (address: string) => void;\n}\n\n/** Minimal wallet-status surface the React layer (and modal) needs. */\nexport interface WalletStatus {\n /** True while the device-signer account is being deployed. */\n isDeploying: boolean;\n /** True once deployed and this device is an authorized signer. */\n isReady: boolean;\n /** True if this device still needs approval to operate the wallet. */\n needsDeviceApproval: boolean;\n /** True while waiting for the owner to approve this device from another device. */\n awaitingApproval: boolean;\n /** The pending device-addition request id, when awaitingApproval. */\n pendingRequestId: string | null;\n}\n\nexport interface UserInfo {\n userId: string;\n email?: string;\n provider?: string;\n}\n\nexport interface CavosContextValue {\n /** Open / close the built-in auth modal. */\n openModal: () => void;\n closeModal: () => void;\n isAuthenticated: boolean;\n user: UserInfo | null;\n address: string | null;\n walletStatus: WalletStatus;\n isLoading: boolean;\n /** Last unrecoverable auth/connect error surfaced to the UI (e.g. a failed\n * OAuth callback). Null while things are healthy. Cleared on a new attempt. */\n authError: string | null;\n /** Clear `authError` (e.g. when the user starts a new login attempt). */\n clearAuthError: () => void;\n /** OAuth social login — opens the provider's hosted flow. */\n login: (provider: 'google' | 'apple') => Promise<void>;\n /** Send a passwordless magic-link email. */\n sendMagicLink: (email: string) => Promise<void>;\n /** Send an email OTP code. */\n sendOtp: (email: string) => Promise<void>;\n /** Verify an email OTP / complete a magic link and deploy the wallet. */\n verifyOtp: (email: string, code: string) => Promise<void>;\n /** Resolve identity from an OAuth callback (?auth_data=…) and deploy. */\n handleCallback: (authData: string) => Promise<void>;\n /** Execute a sponsored (gasless) multicall, signed by the device key. */\n execute: (calls: ChainCall[]) => Promise<{ transactionHash: string }>;\n /** Authorize another device signer on this wallet (sponsored add_signer). */\n addSigner: (pubkey: { x: bigint; y: bigint }) => Promise<{ transactionHash: string }>;\n /** Re-request the device-approval email for the current pending request. */\n resendDeviceApproval: () => Promise<void>;\n /**\n * Register a backup signer derived from `code` on the current account\n * (gasless). The code is generated by the kit and shown to the user once.\n * Resolves with the code so the caller can display it.\n */\n setupRecovery: () => Promise<string>;\n /**\n * Recover access after losing every device. Requires the recovery code. Runs\n * the full Cavos.recover flow and brings the provider to a ready state.\n */\n recover: (code: string) => Promise<void>;\n logout: () => void;\n}\n\nconst CavosContext = createContext<CavosContextValue | null>(null);\n\nexport interface CavosProviderProps {\n config: CavosConfig;\n modal?: CavosModalConfig;\n children: ReactNode;\n}\n\nconst INITIAL_STATUS: WalletStatus = {\n isDeploying: false,\n isReady: false,\n needsDeviceApproval: false,\n awaitingApproval: false,\n pendingRequestId: null,\n};\n\n/**\n * Drop-in Cavos provider. Wrap your app once; descendants call `useCavos()`.\n *\n * <CavosProvider config={{ network: 'sepolia', appSalt, paymasterApiKey }}\n * modal={{ appName: 'My App', theme: 'dark', emailMode: 'otp' }}>\n * <App />\n * </CavosProvider>\n *\n * Behind the scenes: login (social / email) resolves a stable identity, the kit\n * deploys a device-signer smart account gaslessly, and `execute()` submits\n * gasless multicalls signed silently by the browser's device key.\n */\nexport function CavosProvider({ config, modal, children }: CavosProviderProps) {\n const [auth] = useState(\n () => new CavosAuth({ appId: config.appId, backendUrl: config.authBackendUrl }),\n );\n const [cavos, setCavos] = useState<Cavos | null>(null);\n const [identity, setIdentity] = useState<Identity | null>(null);\n const [walletStatus, setWalletStatus] = useState<WalletStatus>(INITIAL_STATUS);\n const [isLoading, setIsLoading] = useState(false);\n const [authError, setAuthError] = useState<string | null>(null);\n const [modalOpen, setModalOpen] = useState(false);\n /** App name/logo fetched from the backend; overrides manual modal props when present. */\n const [branding, setBranding] = useState<{ appName?: string; appLogo?: string }>({});\n\n // Keep the latest config for callbacks that run after async gaps.\n const configRef = useRef(config);\n useEffect(() => {\n configRef.current = config;\n }, [config]);\n\n // Fetch app branding (name, logo) from the backend so the modal shows the\n // integrating app's identity without manual props.\n useEffect(() => {\n if (!config.appId || typeof window === 'undefined') return;\n const base = config.authBackendUrl ?? 'https://cavos.xyz';\n fetch(`${base}/api/oauth/firebase/app-branding?app_id=${encodeURIComponent(config.appId)}`)\n .then((r) => (r.ok ? r.json() : null))\n .then((d) => {\n if (d?.name) setBranding((b) => ({ ...b, appName: d.name }));\n if (d?.logo_url) setBranding((b) => ({ ...b, appLogo: d.logo_url }));\n })\n .catch(() => {});\n }, [config.appId, config.authBackendUrl]);\n\n const openModal = useCallback(() => setModalOpen(true), []);\n const closeModal = useCallback(() => setModalOpen(false), []);\n const clearAuthError = useCallback(() => setAuthError(null), []);\n\n // Re-request the device-approval email for the current pending request. The\n // backend dedups within its TTL; calling again re-sends the owner email so the\n // user can recover from a lost/spam-filtered message.\n const resendDeviceApproval = useCallback(async () => {\n if (!identity || !cavos || !cavos.pendingRequestId) return;\n const backendUrl = configRef.current.authBackendUrl ?? 'https://cavos.xyz';\n if (!configRef.current.appId) return;\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: configRef.current.appId });\n await recovery.requestDeviceAddition({\n userId: identity.userId,\n accountAddress: cavos.address,\n newSigner: cavos.publicKey,\n ...(identity.email ? { email: identity.email } : {}),\n });\n }, [identity, cavos]);\n\n // Bring the wallet online for an identity: Cavos.connect deploys if needed.\n const connect = useCallback(async (id: Identity): Promise<Cavos> => {\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n const c = await Cavos.connect({\n network: configRef.current.network,\n identity: id,\n appSalt: configRef.current.appSalt,\n paymasterApiKey: configRef.current.paymasterApiKey,\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n });\n setCavos(c);\n setIdentity(id);\n setWalletStatus({\n isDeploying: false,\n isReady: c.status === 'ready',\n needsDeviceApproval: c.status === 'needs-device-approval',\n awaitingApproval: c.status === 'needs-device-approval' && !!c.pendingRequestId,\n pendingRequestId: c.pendingRequestId,\n });\n modal?.onSuccess?.(c.address);\n return c;\n }, [modal]);\n\n // On mount: if we're returning from OAuth (?auth_data=…), finish the login.\n // Open the modal immediately so the user sees the \"deploying\" state while the\n // wallet is being brought online — it flips to \"done\" once `isReady`.\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n const authData = params.get('auth_data') || params.get('zk_auth_data');\n if (!authData) return;\n setModalOpen(true);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n let cancelled = false;\n (async () => {\n setIsLoading(true);\n try {\n await handleCallback(authData);\n if (!cancelled) window.history.replaceState({}, document.title, window.location.pathname);\n } catch (e) {\n console.error('[CavosProvider] OAuth callback error:', e);\n if (!cancelled) {\n // Surface the failure instead of closing the modal silently: the user\n // sees an actionable error with a retry, rather than the modal vanishing.\n const msg = e instanceof Error ? e.message : 'Sign-in failed. Please try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleCallback = useCallback(async (authData: string) => {\n const id = await auth.handleCallback(authData);\n await connect(id);\n }, [auth, connect]);\n\n const login = useCallback(async (provider: 'google' | 'apple') => {\n if (typeof window === 'undefined') throw new Error('OAuth requires a browser');\n setAuthError(null);\n const url = await (provider === 'google'\n ? auth.getGoogleOAuthUrl(window.location.origin + window.location.pathname)\n : auth.getAppleOAuthUrl(window.location.origin + window.location.pathname));\n window.location.href = url;\n }, [auth]);\n\n const sendMagicLink = useCallback(async (email: string) => {\n await auth.sendMagicLink(email);\n }, [auth]);\n\n const sendOtp = useCallback(async (email: string) => {\n await auth.sendOtp(email);\n }, [auth]);\n\n const verifyOtp = useCallback(async (email: string, code: string) => {\n setAuthError(null);\n const id = await auth.verifyOtp(email, code);\n await connect(id);\n }, [auth, connect]);\n\n const execute = useCallback(async (calls: ChainCall[]) => {\n if (!cavos) throw new Error('Not logged in');\n return cavos.execute(calls);\n }, [cavos]);\n\n const addSigner = useCallback(\n async (pubkey: { x: bigint; y: bigint }) => {\n if (!cavos) throw new Error('Not logged in');\n return cavos.addSigner(pubkey);\n },\n [cavos],\n );\n\n // Generate a recovery code and register its derived backup signer on-chain.\n // The code is returned so the UI can display it once — the kit never persists\n // it and the backend never sees it.\n const setupRecovery = useCallback(async (): Promise<string> => {\n if (!cavos) throw new Error('Not logged in');\n const code = generateRecoveryCode();\n await cavos.setupRecovery(code);\n return code;\n }, [cavos]);\n\n // Recover access after losing every device. The caller passes the recovery\n // code; the backup key it derives authorises adding this new device. Brings\n // the provider straight to a ready state.\n const recover = useCallback(async (code: string) => {\n if (!identity) throw new Error('Sign in first so we know which account to recover.');\n setAuthError(null);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n try {\n const c = await Cavos.recover({\n code,\n identity,\n network: configRef.current.network,\n appSalt: configRef.current.appSalt,\n paymasterApiKey: configRef.current.paymasterApiKey,\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n });\n setCavos(c);\n setWalletStatus({ ...INITIAL_STATUS, isReady: true });\n modal?.onSuccess?.(c.address);\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Recovery failed. Check your code and try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n throw e;\n }\n }, [identity, modal]);\n\n // Poll the pending device-addition request while this device is awaiting the\n // owner's approval. Once the owner approves (status === 'approved'), the new\n // signer is authorized on-chain, so reconnecting flips the device to \"ready\"\n // automatically — the requester no longer has to sign out and back in.\n useEffect(() => {\n if (!walletStatus.awaitingApproval || !walletStatus.pendingRequestId || !identity) return;\n if (!configRef.current.appId) return;\n const backendUrl = configRef.current.authBackendUrl ?? 'https://cavos.xyz';\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: configRef.current.appId });\n const requestId = walletStatus.pendingRequestId;\n let cancelled = false;\n const tick = async () => {\n try {\n const r = await recovery.getPendingRequest(requestId);\n if (cancelled || !r) return;\n if (r.status === 'expired') {\n // Surface expiry so the modal can offer \"request a new one\".\n setWalletStatus((s) => ({ ...s, pendingRequestId: null }));\n return;\n }\n if (r.status === 'approved') {\n // The owner added this device's signer on-chain — reconnect to flip\n // to \"ready\" without making the user log in again.\n await connect(identity);\n }\n } catch {\n /* transient network errors are fine; the next tick retries */\n }\n };\n const interval = setInterval(tick, 4000);\n return () => {\n cancelled = true;\n clearInterval(interval);\n };\n }, [walletStatus.awaitingApproval, walletStatus.pendingRequestId, identity, connect]);\n\n const logout = useCallback(() => {\n setCavos(null);\n setIdentity(null);\n setWalletStatus(INITIAL_STATUS);\n setAuthError(null);\n }, []);\n\n const value: CavosContextValue = {\n openModal,\n closeModal,\n isAuthenticated: !!cavos,\n user: identity\n ? { userId: identity.userId, email: identity.email, provider: identity.provider }\n : null,\n address: cavos?.address ?? null,\n walletStatus,\n isLoading,\n authError,\n clearAuthError,\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n handleCallback,\n execute,\n addSigner,\n resendDeviceApproval,\n setupRecovery,\n recover,\n logout,\n };\n\n return (\n <CavosContext.Provider value={value}>\n {children}\n {modal !== undefined && (\n <CavosAuthModal\n open={modalOpen}\n onClose={closeModal}\n appName={branding.appName ?? modal.appName}\n appLogo={branding.appLogo ?? modal.appLogo}\n providers={modal.providers}\n emailMode={modal.emailMode}\n primaryColor={modal.primaryColor}\n theme={modal.theme}\n />\n )}\n </CavosContext.Provider>\n );\n}\n\nexport function useCavos(): CavosContextValue {\n const ctx = useContext(CavosContext);\n if (!ctx) throw new Error('useCavos must be used within a CavosProvider');\n return ctx;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/CavosAuthModal.tsx","../../src/react/CavosProvider.tsx"],"names":["e","useState","useRef","useEffect","useCallback","jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\nimport React, {\n useState,\n useEffect,\n useCallback,\n useRef,\n type CSSProperties,\n} from 'react';\nimport { useCavos } from './CavosProvider';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CavosAuthModalProps {\n open: boolean;\n onClose: () => void;\n onSuccess?: (address: string) => void;\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark' */\n theme?: 'light' | 'dark';\n}\n\nconst cavosLogoBase64 = \"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\";\n\ntype Screen = 'select' | 'magic-link' | 'verify' | 'otp-code' | 'deploying' | 'device-approval' | 'recover';\n\n// ─── Style injection ──────────────────────────────────────────────────────────\n\nconst STYLE_ID = 'cavos-modal-styles-v2';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement('style');\n el.id = STYLE_ID;\n el.textContent = `\n @keyframes cavos-fade { from { opacity:0; } to { opacity:1; } }\n @keyframes cavos-up {\n from { opacity:0; transform:translateY(12px) scale(0.985); }\n to { opacity:1; transform:translateY(0) scale(1); }\n }\n @keyframes cavos-sheet {\n from { transform:translateY(100%); }\n to { transform:translateY(0); }\n }\n @keyframes cavos-spin {\n from { transform:rotate(0deg); } to { transform:rotate(360deg); }\n }\n @keyframes cavos-pop {\n 0% { transform:scale(0.5); opacity:0; }\n 60% { transform:scale(1.12); opacity:1; }\n 100% { transform:scale(1); opacity:1; }\n }\n @keyframes cavos-check-draw {\n from { stroke-dashoffset: 30; }\n to { stroke-dashoffset: 0; }\n }\n @keyframes cavos-ring-glow {\n 0%,100% { box-shadow: 0 0 0 0 rgba(34,197,94,0.4); }\n 50% { box-shadow: 0 0 0 10px rgba(34,197,94,0); }\n }\n .cavos-check-circle {\n animation: cavos-pop 0.45s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-check-path {\n stroke-dasharray: 30;\n stroke-dashoffset: 30;\n animation: cavos-check-draw 0.35s 0.2s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-input-inner:focus { outline:none; }\n .cavos-provider:active { transform:scale(0.99); }\n .cavos-primary-btn:active { transform:scale(0.98); }\n .cavos-otp-input {\n width: 100%;\n text-align: center;\n font-size: 22px;\n font-weight: 600;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font-family: inherit;\n caret-color: transparent;\n }\n .cavos-otp-box {\n transition: border-color 0.15s, box-shadow 0.15s, transform 0.1s;\n }\n .cavos-otp-box-filled {\n transform: scale(1.04);\n }\n .cavos-divider-line {\n flex: 1;\n height: 1px;\n }\n /* Theme-aware interaction styles. The overlay carries data-cavos-theme so\n hovers/focus rings stay legible in both light and dark — the previous\n rgba(0,0,0,…) rules disappeared against the dark background. */\n [data-cavos-theme=\"light\"] .cavos-input-row:focus-within {\n border-color: rgba(0,0,0,0.35) !important;\n box-shadow: 0 0 0 3px rgba(0,0,0,0.06) !important;\n }\n [data-cavos-theme=\"dark\"] .cavos-input-row:focus-within {\n border-color: rgba(255,255,255,0.45) !important;\n box-shadow: 0 0 0 3px rgba(255,255,255,0.08) !important;\n }\n [data-cavos-theme=\"light\"] .cavos-provider:hover { background: rgba(0,0,0,0.035) !important; }\n [data-cavos-theme=\"dark\"] .cavos-provider:hover { background: rgba(255,255,255,0.07) !important; }\n [data-cavos-theme=\"light\"] .cavos-close:hover { background: rgba(0,0,0,0.05) !important; }\n [data-cavos-theme=\"dark\"] .cavos-close:hover { background: rgba(255,255,255,0.08) !important; }\n [data-cavos-theme=\"light\"] .cavos-sub-btn:hover { color: rgba(0,0,0,0.6) !important; }\n [data-cavos-theme=\"dark\"] .cavos-sub-btn:hover { color: rgba(255,255,255,0.65) !important; }\n [data-cavos-theme=\"light\"] .cavos-submit-btn:hover { color: rgba(0,0,0,0.8) !important; }\n [data-cavos-theme=\"dark\"] .cavos-submit-btn:hover { color: rgba(255,255,255,0.85) !important; }\n [data-cavos-theme=\"light\"] .cavos-primary-btn:hover { opacity: 0.88; }\n [data-cavos-theme=\"dark\"] .cavos-primary-btn:hover { opacity: 0.9; }\n [data-cavos-theme=\"light\"] .cavos-divider-line { background: rgba(0,0,0,0.08); }\n [data-cavos-theme=\"dark\"] .cavos-divider-line { background: rgba(255,255,255,0.1); }\n `;\n document.head.appendChild(el);\n}\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nconst GoogleIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.875 2.684-6.615z\" fill=\"#4285F4\"/>\n <path d=\"M9 18c2.43 0 4.467-.806 5.956-2.184l-2.908-2.258c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 009 18z\" fill=\"#34A853\"/>\n <path d=\"M3.964 10.707A5.41 5.41 0 013.682 9c0-.593.102-1.17.282-1.707V4.961H.957A8.996 8.996 0 000 9c0 1.452.348 2.827.957 4.039l3.007-2.332z\" fill=\"#FBBC05\"/>\n <path d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 00.957 4.961L3.964 7.293C4.672 5.163 6.656 3.58 9 3.58z\" fill=\"#EA4335\"/>\n </svg>\n);\n\nconst AppleIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 814 1000\" fill=\"currentColor\">\n <path d=\"M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76 0-103.7 40.8-165.9 40.8s-105-57.8-155.5-127.4C46 790.7 0 663 0 541.8c0-194.3 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z\"/>\n </svg>\n);\n\nconst EmailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 01-2.06 0L2 7\"/>\n </svg>\n);\n\nconst CavosLogo = ({ invert }: { invert?: boolean }) => (\n <img src={`data:image/png;base64,${cavosLogoBase64}`} alt=\"Cavos\" style={{ width: 'auto', height: '16px', objectFit: 'contain', opacity: 0.55, flexShrink: 0, filter: invert ? 'invert(1)' : 'none' }} />\n);\n\nfunction Spinner({ size = 16, color = '#888' }: { size?: number; color?: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\"\n style={{ animation: 'cavos-spin 0.75s linear infinite', flexShrink: 0 }}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke={color} strokeOpacity=\"0.2\" strokeWidth=\"2.5\"/>\n <path d=\"M12 2a10 10 0 0110 10\" stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\"/>\n </svg>\n );\n}\n\n// ─── Mobile detection hook ────────────────────────────────────────────────────\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia('(max-width: 640px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n return isMobile;\n}\n\n// ─── Style helpers ────────────────────────────────────────────────────────────\n\nconst FONT = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif';\n\nfunction baseOverlay(isMobile: boolean): CSSProperties {\n return {\n position: 'fixed', inset: 0,\n background: 'rgba(0,0,0,0.5)',\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n zIndex: 9999,\n display: 'flex',\n alignItems: isMobile ? 'flex-end' : 'center',\n justifyContent: 'center',\n padding: isMobile ? '0' : '16px',\n animation: 'cavos-fade 0.18s ease',\n fontFamily: FONT,\n };\n}\n\nfunction lightCard(isMobile: boolean, bg: string): CSSProperties {\n return isMobile ? {\n background: bg,\n borderRadius: '20px 20px 0 0',\n width: '100%',\n maxWidth: '100%',\n boxShadow: '0 -8px 40px rgba(0,0,0,0.18)',\n animation: 'cavos-sheet 0.32s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n } : {\n background: bg,\n borderRadius: '22px',\n width: '100%',\n maxWidth: '400px',\n boxShadow: '0 24px 60px rgba(0,0,0,0.22), 0 0 0 1px rgba(0,0,0,0.05)',\n animation: 'cavos-up 0.25s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n };\n}\n\nfunction providerBtn(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n width: '100%',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '10px',\n padding: '12px 16px',\n background: isLight ? '#fff' : 'rgba(255,255,255,0.04)',\n border: `1px solid ${isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)'}`,\n borderRadius: '12px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: textColor,\n fontFamily: 'inherit',\n transition: 'background 0.15s, transform 0.1s, border-color 0.15s',\n position: 'relative',\n };\n}\n\nfunction footerBar(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n borderTop: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`,\n padding: '12px 20px',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '5px',\n fontSize: '11px',\n color: isLight ? 'rgba(0,0,0,0.28)' : 'rgba(255,255,255,0.28)',\n };\n}\n\nfunction closeBtn(textColor: string): CSSProperties {\n return {\n position: 'absolute', top: '16px', right: '16px',\n width: '28px', height: '28px', borderRadius: '50%',\n border: 'none', background: 'transparent',\n cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center',\n color: textColor === '#111111' || textColor === '#111' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.4)',\n padding: 0, transition: 'background 0.15s',\n };\n}\n\nfunction mobileHandle(): CSSProperties {\n return {\n width: '36px', height: '4px', borderRadius: '2px',\n background: 'rgba(0,0,0,0.15)', margin: '12px auto 0',\n };\n}\n\nconst CloseX = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n);\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function CavosAuthModal({\n open,\n onClose,\n appName,\n providers = ['google', 'apple', 'email'],\n emailMode = 'magic-link',\n primaryColor = '#0A0908',\n theme = 'light',\n}: CavosAuthModalProps) {\n const {\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n isAuthenticated,\n address,\n walletStatus,\n authError,\n clearAuthError,\n resendDeviceApproval,\n recover,\n } = useCavos();\n const isMobile = useIsMobile();\n\n // Theme-derived values\n const isLight = theme !== 'dark';\n const backgroundColor = isLight ? '#ffffff' : '#111111';\n const textColor = isLight ? '#111111' : '#ffffff';\n const subTextColor = isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n const inputBg = isLight ? '#fff' : 'rgba(255,255,255,0.06)';\n const inputBorder = isLight ? '1px solid rgba(0,0,0,0.12)' : '1px solid rgba(255,255,255,0.12)';\n const errBg = isLight ? 'rgba(239,68,68,0.06)' : 'rgba(239,68,68,0.08)';\n const errColor = isLight ? '#dc2626' : '#f87171';\n const errBorder = isLight ? 'rgba(239,68,68,0.18)' : 'rgba(239,68,68,0.2)';\n const card = lightCard(isMobile, backgroundColor);\n const overlay = baseOverlay(isMobile);\n const handle = mobileHandle();\n const footer = footerBar(textColor);\n const close = closeBtn(textColor);\n const pBtn = providerBtn(textColor);\n\n const [screen, setScreen] = useState<Screen>('select');\n const [email, setEmail] = useState('');\n const [otpCode, setOtpCode] = useState('');\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n const [deployState, setDeployState] = useState<'loading' | 'done'>('loading');\n const [resendCountdown, setResendCountdown] = useState(0);\n const [deviceResendBusy, setDeviceResendBusy] = useState(false);\n const [recoverCode, setRecoverCode] = useState('');\n const [recoverBusy, setRecoverBusy] = useState(false);\n\n const doneHandledRef = useRef(false);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // One ref per OTP box for focus management / auto-advance.\n const otpBoxRefs = useRef<Array<HTMLInputElement | null>>([null, null, null, null, null, null]);\n\n // Segmented OTP input helpers: keep `otpCode` (6-digit string) as the single\n // source of truth, drive focus by index, and handle paste/keystrokes cleanly.\n const setOtpDigit = (i: number, raw: string) => {\n const digit = raw.replace(/\\D/g, '').slice(-1);\n setOtpCode(prev => {\n const chars = prev.split('');\n while (chars.length < 6) chars.push('');\n chars[i] = digit;\n const next = chars.join('').slice(0, 6);\n // Auto-advance to the next empty box when a digit is typed.\n if (digit && i < 5) {\n const target = i + 1;\n otpBoxRefs.current[target]?.focus();\n }\n return next;\n });\n };\n\n const onOtpKeyDown = (i: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !otpCode[i] && i > 0) {\n // Empty box + backspace → move focus back instead of clearing nothing.\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowLeft' && i > 0) {\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowRight' && i < 5) {\n otpBoxRefs.current[i + 1]?.focus();\n e.preventDefault();\n }\n };\n\n const onOtpPaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n if (!text) return;\n e.preventDefault();\n setOtpCode(text);\n // Focus the box after the last pasted digit (or the last box).\n const focusIdx = Math.min(text.length, 5);\n otpBoxRefs.current[focusIdx]?.focus();\n };\n\n useEffect(() => { injectStyles(); }, []);\n\n // When the provider surfaces an unrecoverable connect error (e.g. a failed\n // OAuth callback), drop the user back on the provider-selection screen with\n // the message + a retry, instead of leaving the modal closed with no feedback.\n useEffect(() => {\n if (!authError) return;\n setBusy(false);\n setDeployState('loading');\n if (screen !== 'device-approval') setScreen('select');\n setError(authError);\n // The provider owns the error; once surfaced here it's \"consumed\" by the UI.\n clearAuthError();\n }, [authError, clearAuthError, screen]);\n\n const triggerDone = useCallback((addr: string) => {\n if (doneHandledRef.current) return;\n doneHandledRef.current = true;\n\n setScreen('deploying');\n setDeployState('done');\n\n closeTimerRef.current = setTimeout(() => {\n onClose();\n setScreen('select');\n setDeployState('loading');\n setEmail(''); setOtpCode(''); setError('');\n doneHandledRef.current = false;\n }, 1600);\n // addr unused beyond guarding the transition; keep the param for clarity.\n void addr;\n }, [onClose]);\n\n // Show the \"deploying\" screen whenever a deploy is in progress (e.g. while\n // returning from an OAuth redirect), or once authenticated, then flip to\n // \"done\" when the account is ready.\n useEffect(() => {\n if (!open) return;\n\n if (walletStatus.isDeploying && screen !== 'deploying' && screen !== 'verify') {\n setScreen('deploying');\n setDeployState('loading');\n doneHandledRef.current = false;\n }\n\n if (isAuthenticated && address && walletStatus.isReady) {\n triggerDone(address);\n }\n\n // This device needs approval: show the \"check your email\" screen. Don't\n // override the recover screen — the user navigated there intentionally from\n // device-approval to restore access with their recovery phrase.\n if (walletStatus.awaitingApproval && screen !== 'device-approval' && screen !== 'recover') {\n setScreen('device-approval');\n doneHandledRef.current = false;\n }\n }, [open, isAuthenticated, address, walletStatus.isReady, walletStatus.isDeploying, walletStatus.awaitingApproval, screen, triggerDone]);\n\n useEffect(() => () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n }, []);\n\n const handleClose = () => {\n if (screen === 'deploying') return;\n setScreen('select'); setEmail(''); setOtpCode(''); setError('');\n doneHandledRef.current = false;\n onClose();\n };\n\n const handleOAuth = async (provider: 'google' | 'apple') => {\n setError(''); setBusy(true);\n try {\n await login(provider);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : 'Authentication failed.';\n setError(msg); setBusy(false);\n }\n };\n\n const handleMagicLinkSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendMagicLink(email);\n setScreen('verify');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send magic link.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpRequestSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendOtp(email);\n setOtpCode('');\n setScreen('otp-code');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send code.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpVerifySubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email || otpCode.length !== 6) return;\n setError(''); setBusy(true);\n try {\n await verifyOtp(email, otpCode);\n setScreen('deploying');\n setDeployState('loading');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Invalid or expired code.');\n setBusy(false);\n }\n };\n\n const handleResend = async () => {\n if (resendCountdown > 0) return;\n setError('');\n try {\n if (emailMode === 'otp') {\n await sendOtp(email);\n setOtpCode('');\n } else {\n await sendMagicLink(email);\n }\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend.');\n }\n };\n\n useEffect(() => {\n if (resendCountdown <= 0) return;\n const t = setTimeout(() => setResendCountdown(c => c - 1), 1000);\n return () => clearTimeout(t);\n }, [resendCountdown]);\n\n if (!open) return null;\n\n // ── Device approval (waiting for the owner to approve from another device) ─\n\n const handleDeviceResend = async () => {\n if (resendCountdown > 0 || deviceResendBusy) return;\n setDeviceResendBusy(true);\n setError('');\n try {\n await resendDeviceApproval();\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend. Try again.');\n } finally {\n setDeviceResendBusy(false);\n }\n };\n\n if (screen === 'device-approval') {\n // The provider nulls pendingRequestId when the request expires (while the\n // device is still awaiting approval) — that's our signal to switch copy.\n const expired = walletStatus.awaitingApproval && !walletStatus.pendingRequestId;\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '48px 24px 32px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: expired ? 'rgba(239,68,68,0.08)' : 'rgba(59,130,246,0.08)', border: `1px solid ${expired ? 'rgba(239,68,68,0.18)' : 'rgba(59,130,246,0.18)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={expired ? '#dc2626' : '#3b82f6'} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2.5\" />\n <path d=\"M12 18h.01\" />\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {expired ? 'Approval link expired' : 'Approve this device'}\n </h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n {expired\n ? 'The approval link is no longer valid. Request a new one below.'\n : <>For your security, we sent an email to approve this device.{appName ? <> Open it on a device where you're already signed in to your {appName} account.</> : null}</>}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n {expired ? (\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', opacity: deviceResendBusy ? 0.65 : 1 }} onClick={handleDeviceResend} disabled={deviceResendBusy}>\n {deviceResendBusy && <Spinner size={15} color=\"#fff\" />}\n {deviceResendBusy ? 'Sending…' : 'Request a new link'}\n </button>\n ) : (\n <div style={{ background: isLight ? 'rgba(0,0,0,0.03)' : 'rgba(255,255,255,0.04)', border: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`, borderRadius: '12px', padding: '14px 16px', display: 'flex', alignItems: 'center', gap: 10, justifyContent: 'center', marginBottom: '14px' }}>\n <Spinner size={14} color={subTextColor} />\n <span style={{ fontSize: '12px', color: subTextColor }}>Waiting for approval…</span>\n </div>\n )}\n {!expired && (\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: resendCountdown > 0 ? 'default' : 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: 0, fontFamily: 'inherit', transition: 'color 0.15s', opacity: resendCountdown > 0 ? 0.6 : 1 }} onClick={handleDeviceResend} disabled={resendCountdown > 0 || deviceResendBusy}>\n {resendCountdown > 0 ? `Resend email in ${resendCountdown}s` : 'Resend approval email'}\n </button>\n )}\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '14px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('recover'); setError(''); }}>\n Sign in with recovery phrase instead\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Recover (lost all devices — restore access with the recovery code) ────\n\n const handleRecoverSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!recoverCode.trim()) return;\n setRecoverBusy(true);\n setError('');\n try {\n await recover(recoverCode);\n // The provider flips to ready; the existing effect drives triggerDone.\n setScreen('deploying');\n setDeployState('loading');\n } catch (e2) {\n setError(e2 instanceof Error ? e2.message : 'Sign-in failed. Check your recovery phrase and try again.');\n setRecoverBusy(false);\n }\n };\n\n if (screen === 'recover') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('device-approval'); setError(''); setRecoverCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with recovery phrase</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n Enter the recovery phrase you saved when you set up this account.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={handleRecoverSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <textarea\n className=\"cavos-input-inner\"\n style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', resize: 'vertical', minHeight: 72, lineHeight: 1.5 }}\n placeholder=\"Enter your recovery phrase\"\n value={recoverCode}\n onChange={e => setRecoverCode(e.target.value)}\n required\n disabled={recoverBusy}\n autoFocus\n />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: recoverBusy ? 0.65 : 1 }} disabled={recoverBusy}>\n {recoverBusy && <Spinner size={15} color=\"#fff\" />}\n {recoverBusy ? 'Restoring access…' : 'Restore access'}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Deploying ─────────────────────────────────────────────────────────────\n\n if (screen === 'deploying') {\n const isDone = deployState === 'done';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={card}>\n {isMobile && <div style={handle} />}\n <div style={{ padding: '52px 28px 44px', display: 'flex', flexDirection: 'column', alignItems: 'center', textAlign: 'center', gap: '16px' }}>\n {isDone ? (\n <div className=\"cavos-check-circle\" style={{ width: 64, height: 64, borderRadius: '50%', background: 'rgba(34,197,94,0.12)', border: '1.5px solid rgba(34,197,94,0.35)', display: 'flex', alignItems: 'center', justifyContent: 'center', animation: 'cavos-ring-glow 1.5s ease-out' }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <polyline className=\"cavos-check-path\" points=\"20 6 9 17 4 12\" stroke=\"#22c55e\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n ) : (\n <div style={{ width: 64, height: 64, borderRadius: '50%', background: isLight ? 'rgba(0,0,0,0.04)' : 'rgba(255,255,255,0.04)', border: `1.5px solid ${isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Spinner size={26} color={isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)'} />\n </div>\n )}\n <div>\n <h2 style={{ margin: 0, fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {isDone ? \"You're all set\" : 'Setting up your account'}\n </h2>\n <p style={{ margin: '6px 0 0', fontSize: '13px', color: subTextColor }}>\n {isDone ? 'Your account is ready' : 'This only takes a moment…'}\n </p>\n </div>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Check your inbox ───────────────────────────────────────────────────────\n\n if (screen === 'verify') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '40px 24px 24px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: 'rgba(34,197,94,0.08)', border: '1px solid rgba(34,197,94,0.18)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#22c55e\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Check your inbox</h2>\n <p style={{ margin: '0 0 22px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n We sent a sign-in link to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.<br />Open it on this device to continue.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : primaryColor, color: resendCountdown > 0 ? subTextColor : '#fff', fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginBottom: '8px' }} onClick={handleResend} disabled={resendCountdown > 0}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend link'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── OTP code entry ─────────────────────────────────────────────────────────\n\n if (screen === 'otp-code') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px', textAlign: 'center' }}>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Enter your code</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.5 }}>\n We sent a 6-digit code to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px', textAlign: 'left' }}>{error}</div>}\n <form onSubmit={handleOtpVerifySubmit} style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'center' }} onPaste={onOtpPaste}>\n {[0, 1, 2, 3, 4, 5].map(i => (\n <input\n key={i}\n ref={el => { otpBoxRefs.current[i] = el; }}\n className={`cavos-input-inner cavos-otp-box ${otpCode[i] ? 'cavos-otp-box-filled' : ''}`}\n style={{\n width: '44px',\n height: '52px',\n padding: 0,\n border: inputBorder,\n borderRadius: '12px',\n fontSize: '22px',\n fontWeight: 600,\n color: textColor,\n background: inputBg,\n fontFamily: 'inherit',\n boxSizing: 'border-box',\n textAlign: 'center',\n }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n value={otpCode[i] ?? ''}\n onChange={e => setOtpDigit(i, e.target.value)}\n onKeyDown={e => onOtpKeyDown(i, e)}\n onFocus={e => e.target.select()}\n disabled={busy}\n autoFocus={i === 0}\n />\n ))}\n </div>\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy || otpCode.length !== 6 ? 0.65 : 1 }} disabled={busy || otpCode.length !== 6}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Verifying…' : 'Continue'}\n </button>\n </form>\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : 'transparent', color: resendCountdown > 0 ? subTextColor : primaryColor, fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginTop: '8px' }} onClick={handleResend} disabled={resendCountdown > 0 || busy}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend code'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Email form ─────────────────────────────────────────────────────────────\n\n if (screen === 'magic-link') {\n const isOtp = emailMode === 'otp';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('select'); setError(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with email</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n {isOtp ? \"We'll send a secure sign-in code to your inbox.\" : \"We'll send a secure sign-in link to your inbox.\"}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={isOtp ? handleOtpRequestSubmit : handleMagicLinkSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <input className=\"cavos-input-inner\" style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', transition: 'border-color 0.15s' }} type=\"email\" placeholder=\"your@email.com\" value={email} onChange={e => setEmail(e.target.value)} required disabled={busy} autoFocus />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy ? 0.65 : 1 }} disabled={busy}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Sending…' : (isOtp ? 'Send code' : 'Send magic link')}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Provider selection ─────────────────────────────────────────────────────\n\n const showEmail = providers.includes('email');\n const showGoogle = providers.includes('google');\n const showApple = providers.includes('apple');\n const hasSocial = showGoogle || showApple;\n // Absolute-positioned icon so the label stays optically centered (matches the\n // Privy/Clerk full-width button look) instead of shifting when text changes.\n // No background box — the brand logos render clean, like native sign-in buttons.\n const btnIcon = (icon: React.ReactNode, busyIcon: React.ReactNode, color: string) => (\n <span style={{ position: 'absolute', left: '16px', width: 20, height: 20, display: 'flex', alignItems: 'center', justifyContent: 'center', color, flexShrink: 0 }}>\n {busy ? busyIcon : icon}\n </span>\n );\n\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n\n <div style={{ padding: isMobile ? '24px 20px 32px' : '40px 24px 24px' }}>\n <h2 style={{ margin: '0 0 22px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>\n {appName ? `Sign in to ${appName}` : 'Log in or sign up'}\n </h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n {showGoogle && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('google')} disabled={busy}>\n {btnIcon(<GoogleIcon />, <Spinner size={14} color=\"#888\" />, '#4285F4')}\n <span>Continue with Google</span>\n </button>\n )}\n\n {showApple && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('apple')} disabled={busy}>\n {btnIcon(<AppleIcon />, <Spinner size={14} color={isLight ? '#111' : '#fff'} />, isLight ? '#111' : '#fff')}\n <span>Continue with Apple</span>\n </button>\n )}\n\n {showEmail && hasSocial && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', margin: '6px 0 2px' }}>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n <span style={{ fontSize: '12px', color: subTextColor, textTransform: 'uppercase', letterSpacing: '0.05em' }}>or</span>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n </div>\n )}\n\n {showEmail && (\n <button className=\"cavos-provider\" style={{ ...pBtn, cursor: busy ? 'not-allowed' : 'pointer' }} onClick={() => setScreen('magic-link')} disabled={busy}>\n {btnIcon(<EmailIcon />, <Spinner size={14} color={subTextColor} />, subTextColor)}\n <span>Continue with email</span>\n </button>\n )}\n </div>\n\n {error && <div style={{ marginTop: '14px', background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor }}>{error}</div>}\n\n <p style={{ margin: '18px 0 0', fontSize: '11px', color: subTextColor, textAlign: 'center', lineHeight: 1.55 }}>\n By continuing you agree to the{' '}\n <a href=\"https://cavos.xyz/user-privacy\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Privacy Policy</a>\n{' & '}\n <a href=\"https://cavos.xyz/user-terms\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Terms</a>.\n </p>\n </div>\n\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n}\n\n// ─── useCavosAuth hook ────────────────────────────────────────────────────────\n\nexport function useCavosAuth() {\n const { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout } = useCavos();\n return { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout };\n}\n","'use client';\n\nimport {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n type ReactNode,\n} from 'react';\nimport { Cavos } from '../Cavos';\nimport type { Chain, NetworkEnv, CavosWallet } from '../Cavos';\nimport { CavosSolana } from '../chains/solana/CavosSolana';\nimport type { SolanaNetwork } from '../chains/solana/constants';\nimport { CavosAuth } from '../auth/CavosAuth';\nimport type { Identity } from '../auth/AuthProvider';\nimport type { ChainCall } from '../chains/ChainAdapter';\nimport type { PasskeySigner, PasskeyEnrollParams } from '../signer/PasskeySigner';\nimport { HttpRecoveryClient } from '../recovery/HttpRecoveryClient';\nimport { generateRecoveryCode } from '../recovery/BackupSigner';\nimport { CavosAuthModal } from './CavosAuthModal';\n\nexport interface CavosConfig {\n /** Cavos App ID from the dashboard. */\n appId?: string;\n /** Target chain. Defaults to 'starknet'. */\n chain?: Chain;\n /** Environment: 'testnet' (sepolia/devnet) or 'mainnet'. */\n network: NetworkEnv;\n /** Per-app salt so the same user has distinct wallets per app. */\n appSalt: string;\n /** Cavos paymaster API key (sponsors deploy + execute). Required for Starknet. */\n paymasterApiKey?: string;\n /** Override the Cavos auth backend (self-hosted / staging). */\n authBackendUrl?: string;\n /** Override the chain RPC. */\n rpcUrl?: string;\n}\n\nexport interface CavosModalConfig {\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n /** How the built-in email provider authenticates. Defaults to magic link. */\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark'. */\n theme?: 'light' | 'dark';\n onSuccess?: (address: string) => void;\n}\n\n/** Minimal wallet-status surface the React layer (and modal) needs. */\nexport interface WalletStatus {\n /** True while the device-signer account is being deployed. */\n isDeploying: boolean;\n /** True once deployed and this device is an authorized signer. */\n isReady: boolean;\n /** True if this device still needs approval to operate the wallet. */\n needsDeviceApproval: boolean;\n /** True while waiting for the owner to approve this device from another device. */\n awaitingApproval: boolean;\n /** The pending device-addition request id, when awaitingApproval. */\n pendingRequestId: string | null;\n}\n\nexport interface UserInfo {\n userId: string;\n email?: string;\n provider?: string;\n}\n\nexport interface CavosContextValue {\n /** Open / close the built-in auth modal. */\n openModal: () => void;\n closeModal: () => void;\n isAuthenticated: boolean;\n user: UserInfo | null;\n /** The active chain ('starknet' | 'solana'). */\n chain: Chain;\n /**\n * The raw connected wallet, discriminated by `wallet.chain`. Use this for\n * chain-native calls (e.g. Solana `wallet.execute(amount, dest)`); narrow on\n * `wallet.chain` first. Null until connected.\n */\n wallet: CavosWallet | null;\n address: string | null;\n walletStatus: WalletStatus;\n isLoading: boolean;\n /** Last unrecoverable auth/connect error surfaced to the UI (e.g. a failed\n * OAuth callback). Null while things are healthy. Cleared on a new attempt. */\n authError: string | null;\n /** Clear `authError` (e.g. when the user starts a new login attempt). */\n clearAuthError: () => void;\n /** OAuth social login — opens the provider's hosted flow. */\n login: (provider: 'google' | 'apple') => Promise<void>;\n /** Send a passwordless magic-link email. */\n sendMagicLink: (email: string) => Promise<void>;\n /** Send an email OTP code. */\n sendOtp: (email: string) => Promise<void>;\n /** Verify an email OTP / complete a magic link and deploy the wallet. */\n verifyOtp: (email: string, code: string) => Promise<void>;\n /** Resolve identity from an OAuth callback (?auth_data=…) and deploy. */\n handleCallback: (authData: string) => Promise<void>;\n /** Execute a sponsored (gasless) multicall, signed by the device key. */\n execute: (calls: ChainCall[]) => Promise<{ transactionHash: string }>;\n /** Authorize another device signer on this wallet (sponsored add_signer). */\n addSigner: (pubkey: { x: bigint; y: bigint }) => Promise<{ transactionHash: string }>;\n /** Re-request the device-approval email for the current pending request. */\n resendDeviceApproval: () => Promise<void>;\n /**\n * Enroll a passkey as an approver (2FA-style step-up). Works on every chain.\n * Call this when you want to let users approve new devices from any browser.\n * Requires a ready device; returns the passkey's public key.\n */\n enrollPasskey: (\n passkey: PasskeySigner,\n params: PasskeyEnrollParams,\n ) => Promise<{ publicKey: { x: bigint; y: bigint }; transactionHash?: string }>;\n /**\n * From a fresh browser (status `needs-device-approval`), approve adding THIS\n * device using the user's synced passkey. Works on every chain (Starknet\n * requires a `submit` relayer callback; Solana/Stellar go through the\n * configured relayer). Returns the tx hash.\n */\n approveThisDeviceWithPasskey: (\n passkey: PasskeySigner,\n submit?: (call: ChainCall) => Promise<{ transactionHash: string }>,\n ) => Promise<{ transactionHash: string }>;\n /**\n * Register a backup signer derived from `code` on the current account\n * (gasless). The code is generated by the kit and shown to the user once.\n * Resolves with the code so the caller can display it.\n */\n setupRecovery: () => Promise<string>;\n /**\n * Recover access after losing every device. Requires the recovery code. Runs\n * the full Cavos.recover flow and brings the provider to a ready state.\n */\n recover: (code: string) => Promise<void>;\n logout: () => void;\n}\n\nconst CavosContext = createContext<CavosContextValue | null>(null);\n\nexport interface CavosProviderProps {\n config: CavosConfig;\n modal?: CavosModalConfig;\n children: ReactNode;\n}\n\nconst INITIAL_STATUS: WalletStatus = {\n isDeploying: false,\n isReady: false,\n needsDeviceApproval: false,\n awaitingApproval: false,\n pendingRequestId: null,\n};\n\n/**\n * Drop-in Cavos provider. Wrap your app once; descendants call `useCavos()`.\n *\n * <CavosProvider config={{ network: 'sepolia', appSalt, paymasterApiKey }}\n * modal={{ appName: 'My App', theme: 'dark', emailMode: 'otp' }}>\n * <App />\n * </CavosProvider>\n *\n * Behind the scenes: login (social / email) resolves a stable identity, the kit\n * deploys a device-signer smart account gaslessly, and `execute()` submits\n * gasless multicalls signed silently by the browser's device key.\n */\nexport function CavosProvider({ config, modal, children }: CavosProviderProps) {\n const [auth] = useState(\n () => new CavosAuth({ appId: config.appId, backendUrl: config.authBackendUrl }),\n );\n const [cavos, setCavos] = useState<CavosWallet | null>(null);\n const [identity, setIdentity] = useState<Identity | null>(null);\n const [walletStatus, setWalletStatus] = useState<WalletStatus>(INITIAL_STATUS);\n const [isLoading, setIsLoading] = useState(false);\n const [authError, setAuthError] = useState<string | null>(null);\n const [modalOpen, setModalOpen] = useState(false);\n /** App name/logo fetched from the backend; overrides manual modal props when present. */\n const [branding, setBranding] = useState<{ appName?: string; appLogo?: string }>({});\n\n // Keep the latest config for callbacks that run after async gaps.\n const configRef = useRef(config);\n useEffect(() => {\n configRef.current = config;\n }, [config]);\n\n // Fetch app branding (name, logo) from the backend so the modal shows the\n // integrating app's identity without manual props.\n useEffect(() => {\n if (!config.appId || typeof window === 'undefined') return;\n const base = config.authBackendUrl ?? 'https://cavos.xyz';\n fetch(`${base}/api/oauth/firebase/app-branding?app_id=${encodeURIComponent(config.appId)}`)\n .then((r) => (r.ok ? r.json() : null))\n .then((d) => {\n if (d?.name) setBranding((b) => ({ ...b, appName: d.name }));\n if (d?.logo_url) setBranding((b) => ({ ...b, appLogo: d.logo_url }));\n })\n .catch(() => {});\n }, [config.appId, config.authBackendUrl]);\n\n const openModal = useCallback(() => setModalOpen(true), []);\n const closeModal = useCallback(() => setModalOpen(false), []);\n const clearAuthError = useCallback(() => setAuthError(null), []);\n\n // Re-request the device-approval email for the current pending request. The\n // backend dedups within its TTL; calling again re-sends the owner email so the\n // user can recover from a lost/spam-filtered message.\n const resendDeviceApproval = useCallback(async () => {\n if (!identity || !cavos || cavos.chain !== 'starknet' || !cavos.pendingRequestId) return;\n const backendUrl = configRef.current.authBackendUrl ?? 'https://cavos.xyz';\n if (!configRef.current.appId) return;\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: configRef.current.appId });\n await recovery.requestDeviceAddition({\n userId: identity.userId,\n accountAddress: cavos.address,\n newSigner: cavos.publicKey,\n ...(identity.email ? { email: identity.email } : {}),\n });\n }, [identity, cavos]);\n\n // Bring the wallet online for an identity: Cavos.connect deploys if needed.\n const connect = useCallback(async (id: Identity): Promise<CavosWallet> => {\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n const c = await Cavos.connect({\n chain: configRef.current.chain ?? 'starknet',\n network: configRef.current.network,\n identity: id,\n appSalt: configRef.current.appSalt,\n ...(configRef.current.paymasterApiKey ? { paymasterApiKey: configRef.current.paymasterApiKey } : {}),\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n });\n setCavos(c);\n setIdentity(id);\n // Only Starknet wallets surface a pending device-addition request id.\n const pendingRequestId = c.chain === 'starknet' ? c.pendingRequestId : null;\n setWalletStatus({\n isDeploying: false,\n isReady: c.status === 'ready',\n needsDeviceApproval: c.status === 'needs-device-approval',\n awaitingApproval: c.status === 'needs-device-approval' && !!pendingRequestId,\n pendingRequestId,\n });\n modal?.onSuccess?.(c.address);\n return c;\n }, [modal]);\n\n // On mount: if we're returning from OAuth (?auth_data=…), finish the login.\n // Open the modal immediately so the user sees the \"deploying\" state while the\n // wallet is being brought online — it flips to \"done\" once `isReady`.\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n const authData = params.get('auth_data') || params.get('zk_auth_data');\n if (!authData) return;\n setModalOpen(true);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n let cancelled = false;\n (async () => {\n setIsLoading(true);\n try {\n await handleCallback(authData);\n if (!cancelled) window.history.replaceState({}, document.title, window.location.pathname);\n } catch (e) {\n console.error('[CavosProvider] OAuth callback error:', e);\n if (!cancelled) {\n // Surface the failure instead of closing the modal silently: the user\n // sees an actionable error with a retry, rather than the modal vanishing.\n const msg = e instanceof Error ? e.message : 'Sign-in failed. Please try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleCallback = useCallback(async (authData: string) => {\n const id = await auth.handleCallback(authData);\n await connect(id);\n }, [auth, connect]);\n\n const login = useCallback(async (provider: 'google' | 'apple') => {\n if (typeof window === 'undefined') throw new Error('OAuth requires a browser');\n setAuthError(null);\n const url = await (provider === 'google'\n ? auth.getGoogleOAuthUrl(window.location.origin + window.location.pathname)\n : auth.getAppleOAuthUrl(window.location.origin + window.location.pathname));\n window.location.href = url;\n }, [auth]);\n\n const sendMagicLink = useCallback(async (email: string) => {\n await auth.sendMagicLink(email);\n }, [auth]);\n\n const sendOtp = useCallback(async (email: string) => {\n await auth.sendOtp(email);\n }, [auth]);\n\n const verifyOtp = useCallback(async (email: string, code: string) => {\n setAuthError(null);\n const id = await auth.verifyOtp(email, code);\n await connect(id);\n }, [auth, connect]);\n\n const execute = useCallback(async (calls: ChainCall[]) => {\n if (!cavos) throw new Error('Not logged in');\n if (cavos.chain !== 'starknet') {\n throw new Error(\n \"kit: useCavos().execute(calls) is Starknet-only. On Solana use the `wallet` handle: wallet.execute(amount, dest).\",\n );\n }\n return cavos.execute(calls);\n }, [cavos]);\n\n const addSigner = useCallback(\n async (pubkey: { x: bigint; y: bigint }) => {\n if (!cavos) throw new Error('Not logged in');\n if (cavos.chain !== 'starknet') {\n throw new Error('kit: addSigner via useCavos() is Starknet-only; use the `wallet` handle on Solana.');\n }\n return cavos.addSigner(pubkey);\n },\n [cavos],\n );\n\n const enrollPasskey = useCallback(\n async (passkey: PasskeySigner, params: PasskeyEnrollParams) => {\n if (!cavos) throw new Error('Not logged in');\n // Present on every chain's wallet handle.\n return cavos.enrollPasskey(passkey, params);\n },\n [cavos],\n );\n\n const approveThisDeviceWithPasskey = useCallback(\n async (\n passkey: PasskeySigner,\n submit?: (call: ChainCall) => Promise<{ transactionHash: string }>,\n ) => {\n if (!cavos) throw new Error('Not logged in');\n if (cavos.chain === 'starknet') {\n // Sponsored through the Cavos paymaster by default; `submit` overrides.\n return cavos.approveThisDeviceWithPasskey({ passkey, ...(submit ? { submit } : {}) });\n }\n // Solana / Stellar submit through their configured relayer.\n const transactionHash = await cavos.approveThisDeviceWithPasskey(passkey);\n return { transactionHash };\n },\n [cavos],\n );\n\n // Generate a recovery code and register its derived backup signer on-chain.\n // The code is returned so the UI can display it once — the kit never persists\n // it and the backend never sees it.\n const setupRecovery = useCallback(async (): Promise<string> => {\n if (!cavos) throw new Error('Not logged in');\n const code = generateRecoveryCode();\n // Both chains expose setupRecovery(code) on the wallet handle.\n await cavos.setupRecovery(code);\n return code;\n }, [cavos]);\n\n // Recover access after losing every device. The caller passes the recovery\n // code; the backup key it derives authorises adding this new device. Brings\n // the provider straight to a ready state. Works on both chains.\n const recover = useCallback(async (code: string) => {\n if (!identity) throw new Error('Sign in first so we know which account to recover.');\n setAuthError(null);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n try {\n const chain = configRef.current.chain ?? 'starknet';\n const c: CavosWallet =\n chain === 'solana'\n ? await CavosSolana.recover({\n code,\n identity,\n network: (configRef.current.network === 'mainnet'\n ? 'solana-mainnet'\n : 'solana-devnet') as SolanaNetwork,\n appSalt: configRef.current.appSalt,\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n })\n : await Cavos.recover({\n code,\n identity,\n network: configRef.current.network,\n appSalt: configRef.current.appSalt,\n paymasterApiKey: configRef.current.paymasterApiKey ?? '',\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n });\n setCavos(c);\n setWalletStatus({ ...INITIAL_STATUS, isReady: true });\n modal?.onSuccess?.(c.address);\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Recovery failed. Check your code and try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n throw e;\n }\n }, [identity, modal]);\n\n // Poll the pending device-addition request while this device is awaiting the\n // owner's approval. Once the owner approves (status === 'approved'), the new\n // signer is authorized on-chain, so reconnecting flips the device to \"ready\"\n // automatically — the requester no longer has to sign out and back in.\n useEffect(() => {\n if (!walletStatus.awaitingApproval || !walletStatus.pendingRequestId || !identity) return;\n if (!configRef.current.appId) return;\n const backendUrl = configRef.current.authBackendUrl ?? 'https://cavos.xyz';\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: configRef.current.appId });\n const requestId = walletStatus.pendingRequestId;\n let cancelled = false;\n const tick = async () => {\n try {\n const r = await recovery.getPendingRequest(requestId);\n if (cancelled || !r) return;\n if (r.status === 'expired') {\n // Surface expiry so the modal can offer \"request a new one\".\n setWalletStatus((s) => ({ ...s, pendingRequestId: null }));\n return;\n }\n if (r.status === 'approved') {\n // The owner added this device's signer on-chain — reconnect to flip\n // to \"ready\" without making the user log in again.\n await connect(identity);\n }\n } catch {\n /* transient network errors are fine; the next tick retries */\n }\n };\n const interval = setInterval(tick, 4000);\n return () => {\n cancelled = true;\n clearInterval(interval);\n };\n }, [walletStatus.awaitingApproval, walletStatus.pendingRequestId, identity, connect]);\n\n const logout = useCallback(() => {\n setCavos(null);\n setIdentity(null);\n setWalletStatus(INITIAL_STATUS);\n setAuthError(null);\n }, []);\n\n const value: CavosContextValue = {\n openModal,\n closeModal,\n isAuthenticated: !!cavos,\n user: identity\n ? { userId: identity.userId, email: identity.email, provider: identity.provider }\n : null,\n chain: config.chain ?? 'starknet',\n wallet: cavos,\n address: cavos?.address ?? null,\n walletStatus,\n isLoading,\n authError,\n clearAuthError,\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n handleCallback,\n execute,\n addSigner,\n enrollPasskey,\n approveThisDeviceWithPasskey,\n resendDeviceApproval,\n setupRecovery,\n recover,\n logout,\n };\n\n return (\n <CavosContext.Provider value={value}>\n {children}\n {modal !== undefined && (\n <CavosAuthModal\n open={modalOpen}\n onClose={closeModal}\n appName={branding.appName ?? modal.appName}\n appLogo={branding.appLogo ?? modal.appLogo}\n providers={modal.providers}\n emailMode={modal.emailMode}\n primaryColor={modal.primaryColor}\n theme={modal.theme}\n />\n )}\n </CavosContext.Provider>\n );\n}\n\nexport function useCavos(): CavosContextValue {\n const ctx = useContext(CavosContext);\n if (!ctx) throw new Error('useCavos must be used within a CavosProvider');\n return ctx;\n}\n"]}
|