@zappie/theme-base 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +37 -2
  4. package/dist/address.d.ts +32 -0
  5. package/dist/address.js +4 -0
  6. package/dist/address.js.map +1 -0
  7. package/dist/cart.d.ts +12 -0
  8. package/dist/cart.js +1140 -0
  9. package/dist/cart.js.map +1 -0
  10. package/dist/catalogue.d.ts +60 -0
  11. package/dist/catalogue.js +1389 -0
  12. package/dist/catalogue.js.map +1 -0
  13. package/dist/checkout.d.ts +36 -0
  14. package/dist/checkout.js +4 -0
  15. package/dist/checkout.js.map +1 -0
  16. package/dist/chunk-2MV6KU3R.js +352 -0
  17. package/dist/chunk-2MV6KU3R.js.map +1 -0
  18. package/dist/chunk-FB5DRCU7.js +146 -0
  19. package/dist/chunk-FB5DRCU7.js.map +1 -0
  20. package/dist/chunk-IG63ONID.js +139 -0
  21. package/dist/chunk-IG63ONID.js.map +1 -0
  22. package/dist/chunk-ILOCSCZL.js +217 -0
  23. package/dist/chunk-ILOCSCZL.js.map +1 -0
  24. package/dist/chunk-JFEI2OUZ.js +13 -0
  25. package/dist/chunk-JFEI2OUZ.js.map +1 -0
  26. package/dist/chunk-NTJONY3N.js +95 -0
  27. package/dist/chunk-NTJONY3N.js.map +1 -0
  28. package/dist/chunk-QWST2TA2.js +22 -0
  29. package/dist/chunk-QWST2TA2.js.map +1 -0
  30. package/dist/chunk-USSLDBDY.js +48 -0
  31. package/dist/chunk-USSLDBDY.js.map +1 -0
  32. package/dist/chunk-VIAJ27YC.js +59 -0
  33. package/dist/chunk-VIAJ27YC.js.map +1 -0
  34. package/dist/host-bridge.d.ts +100 -0
  35. package/dist/host-bridge.js +4 -0
  36. package/dist/host-bridge.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.js +6 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/item-frame.d.ts +20 -0
  41. package/dist/item-frame.js +5 -0
  42. package/dist/item-frame.js.map +1 -0
  43. package/dist/item.d.ts +20 -0
  44. package/dist/item.js +153 -0
  45. package/dist/item.js.map +1 -0
  46. package/dist/navigation.d.ts +64 -0
  47. package/dist/navigation.js +4 -0
  48. package/dist/navigation.js.map +1 -0
  49. package/dist/styles.css +842 -0
  50. package/package.json +74 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/catalogue/catalogue-cart.tsx","../src/catalogue/catalogue-header.tsx","../src/catalogue/catalogue-search.tsx","../src/catalogue/category-navigation.tsx","../src/catalogue/item-tile.tsx","../src/catalogue/category-section.tsx","../src/catalogue/info-banners.tsx","../src/catalogue/catalogue-pages.ts","../src/catalogue/saved-catalogue-sync.ts","../src/catalogue/loader.ts","../src/catalogue/use-catalogue-data.ts","../src/catalogue/use-category-scroll.ts","../src/catalogue/use-item-opener.ts","../src/catalogue/use-search-source.ts","../src/catalogue/catalogue.tsx"],"names":["jsxs","jsx","useState","useEffect","Fragment","Overlay","source","useRef","useCallback","useOverlay","useMemo","useZappie"],"mappings":";;;;;;;;;;;;;;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,4BACG,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAU,uBAAA,EAAwB,SAAS,MAAA,EAC9D,QAAA,EAAA;AAAA,IAAA,MAAA;AAAA,IAAO,cAAA;AAAA,IAAU,KAAA;AAAA,IAAM,aAAA;AAAA,IAAS,GAAA;AAAA,IAChC,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,GAAI;AAAA,GAAA,EAC9C,CAAA;AAEJ;AClBO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,EAgBG;AACD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,SAAA,CAAU,MAAM,YAAY,OAAO,SAAA,CAAU,UAAU,UAAU,CAAA,EAAG,EAAE,CAAA;AACtE,EAAA,MAAM,gBAAgB,KAAA,EAAO,aAAA;AAC7B,EAAA,uBACEA,KAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,QAAA,EAAU,EAAA,EAAI,EAAA,EAAG,0BAAyB,QAAA,EAAA,MAAA,EAE9C,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,YAAY,SAAA,CAAU,MAAA,GAAS,KAAK,SAAA,CAAU,MAAM,WAAW,EAAE,CAAA,CAAA;AAAA,QAC7E,OAAA,EAAS,UAAA;AAAA,QACV,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,IACC,MAAA,oBACC,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,mBAAA;AAAA,QACT,YAAA,EAAW,oBAAA;AAAA,QAEX,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EACT,QAAA,EAAA,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAM,KAChB,MAAA,CAAO,WAAW,MAAA,GACd,KAAA,GACA,MAAA,CAAO,MAAA,GACL,SACA,oBAAA,EAEV;AAAA;AAAA,KACF;AAAA,IAED,cAAA,oBACCA,IAAAA,CAAC,OAAA,EAAA,EAAM,QAAA,EAAA;AAAA,MAAA,MAAA;AAAA,sBAEL,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,cAAA;AAAA,UACP,UAAU,CAAC,KAAA,KAAU,YAAA,CAAa,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAEnD,QAAA,EAAA,KAAA,EAAO,IAAI,CAAC,IAAA,qBACXA,IAAAA,CAAC,QAAA,EAAA,EAAqB,KAAA,EAAO,IAAA,CAAK,EAAA,EAC/B,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,IAAA;AAAA,YAAK,IAAA;AAAA,YACV,UACE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,IAAA,CAAK,EAAE,CAAA,CACxC,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,YAAG,GAAA;AAAA,YAAI;AAAA,WAAA,EAAA,EAJ3C,IAAA,CAAK,EAMlB,CACD;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,wBAED,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,oBAAoB,QAAA,EAAA,eAAA,EAEnD,CAAA;AAAA,oBACA,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,SAAS,kBAAA,EAC5B,QAAA,EAAA,cAAA,KAAmB,QAAA,GAAW,UAAA,GAAa,QAAA,EAC9C,CAAA;AAAA,IACC,QAAA,oBACC,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM;AACb,UAAA,IAAI,UAAU,KAAA,EAAO;AACnB,YAAA,KAAK,UACF,KAAA,CAAM;AAAA,cACL,GAAA,EAAK,OAAO,QAAA,CAAS,IAAA;AAAA,cACrB,GAAI,SAAA,GAAY,EAAE,KAAA,EAAO,SAAA,KAAc;AAAC,aACzC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,YAAC,CAAC,CAAA;AAAA,UACnB;AAAA,QACF,CAAA;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,IAED,aAAA,oBACC,GAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAgB,WAAW,WAAA,EAAa,CAAA;AAAA,IAExD,UAAU,MAAA,GAAS,CAAA,IAAK,CAAC,QAAA,wBAAa,SAAA,EAAA,EAAU;AAAA,GAAA,EACnD,CAAA;AAEJ;AClHO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,0BACJA,IAAAA;AAAA,IAAC,MAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MACC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,eAAe,MAAA,CAAO,QAAA;AAAA,MACtB,QAAA,EAAU,CAAC,MAAA,KAAW;AACpB,QAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,UAAA,YAAA,CAAa,OAAO,IAAI,CAAA;AAAA,QAC1B,CAAA,MAAO;AACL,UAAA,gBAAA,CAAiB,MAAA,CAAO,SAAS,EAAE,CAAA;AAAA,QACrC;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAAC,MAAA,CAAO,KAAA;AAAA,UAAP;AAAA,YACC,YAAA,EAAW,aAAA;AAAA,YACX,WAAA,EAAY,aAAA;AAAA,YACZ,OAAA,EAAS;AAAA;AAAA,SACX;AAAA,QACC,MAAA,CAAO,KAAA,oBACNA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAM,MAAA,CAAO,QAAA,CAAS,EAAE,GAAG,QAAA,EAAA,cAAA,EAE1D,CAAA;AAAA,QAED,QAAQ,MAAA,CAAO,KAAA,oBACdA,GAAAA,CAAC,OAAO,OAAA,EAAP,EACE,QAAA,EAAA,CAAC,EAAE,SAAS,KAAA,EAAO,KAAA,EAAM,qBACxBD,KAAC,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,OAAO,SAAA,oBAAaC,IAAC,GAAA,EAAA,EAAE,IAAA,EAAK,UAAS,QAAA,EAAA,iBAAA,EAAU,CAAA;AAAA,UACtD,KAAA,oBACCD,IAAAA,CAAC,GAAA,EAAA,EAAE,MAAK,OAAA,EACL,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,4BACDC,GAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAS,OAAO,QAAA,EAAA,cAAA,EAEtC;AAAA,WAAA,EACF,CAAA;AAAA,UAED,CAAC,MAAA,CAAO,MAAA,CAAO,SAAA,IAAa,CAAC,KAAA,IAAS,CAAC,OAAA,CAAQ,MAAA,oBAC9CA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,UAEd,MAAA,CAAO,2BACNA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,QAAA,EAAU,OAAO,MAAA,CAAO,SAAA;AAAA,cACxB,SAAS,MAAA,CAAO,QAAA;AAAA,cACjB,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,UAED,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,0BACpBA,GAAAA;AAAA,YAAC,MAAA,CAAO,MAAA;AAAA,YAAP;AAAA,cAIC,KAAA;AAAA,cAEC,QAAA,EAAA,MAAA,CAAO,IAAA,KAAS,MAAA,mBACfD,KAAC,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,IAAA,CAAK,IAAA;AAAA,gBACZ,CAAC,MAAA,CAAO,IAAA,CAAK,WAAA,oBACZC,IAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,UAAA,IAAc,aAAA,EAAc;AAAA,eAAA,EAEnD,CAAA,GAEA,OAAO,QAAA,CAAS;AAAA,aAAA;AAAA,YAZhB,OAAO,IAAA,KAAS,MAAA,GAAS,OAAO,IAAA,CAAK,EAAA,GAAK,OAAO,QAAA,CAAS;AAAA,WAe/D;AAAA,SAAA,EACH,CAAA,EAEJ;AAAA;AAAA;AAAA,GAEJ;AAEF,EAAA,uBACED,KAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBAChDD,IAAAA,CAAC,OAAA,CAAQ,IAAA,EAAR,EAAa,OAAM,kBAAA,EAAmB,EAAA,EAAG,QAAA,EAAS,YAAA,EAAa,OAAA,EAC9D,QAAA,EAAA;AAAA,sBAAAC,IAAC,OAAA,CAAQ,OAAA,EAAR,EAAgB,SAAA,EAAU,wBAAuB,QAAA,EAAA,aAAA,EAElD,CAAA;AAAA,sBACAD,IAAAA;AAAA,QAAC,OAAA,CAAQ,OAAA;AAAA,QAAR;AAAA,UACC,mBAAA,EAAkB,MAAA;AAAA,UAClB,SAAA,EAAW,CAAC,2BAAA,EAA6B,UAAU,EAChD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AAAA,UAEX,QAAA,EAAA;AAAA,4BAAAC,GAAAA,CAAC,OAAA,CAAQ,KAAA,EAAR,EAAc,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,4BAC1BA,GAAAA,CAAC,OAAA,CAAQ,KAAA,EAAR,EAAc,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,YAC1B;AAAA;AAAA;AAAA;AACH,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC5GO,SAAS,kBAAA,CAAmB;AAAA,EACjC,UAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,sBAAA,EAAwB,YAAY,CAAA;AAC/D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,QAAAA,EAAiB;AAC/C,EAAA,MAAM,cAAc,KAAA,EAAO,WAAA;AAC3B,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,MAAA,EAAQ;AAC9B,MAAA,MAAM,KAAA,GAAQ,sBAAsB,MAAM;AACxC,QAAA,UAAA,CAAW,MAAS,CAAA;AACpB,QAAA,QAAA,CAAS,OAAO,CAAA;AAChB,QAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,MACzB,CAAC,CAAA;AACD,MAAA,OAAO,MAAM,qBAAqB,KAAK,CAAA;AAAA,IACzC;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,QAAQ,MAAA,EAAQ,QAAA,EAAU,eAAe,CAAC,CAAA;AACvD,EAAA,MAAM,WAAW,UAAA,CAAW,MAAA;AAAA,IAAO,CAAC,aAClC,QAAA,CAAS,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,MAAA,CAAO,WAAA,EAAa;AAAA,GAC3D;AACA,EAAA,uBACEH,IAAAA,CAACI,QAAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,IAAAA;AAAA,MAACK,OAAAA,CAAQ,IAAA;AAAA,MAAR;AAAA,QACC,KAAA,EAAM,sBAAA;AAAA,QACN,EAAA,EAAG,YAAA;AAAA,QACH,YAAA,EAAc,EAAE,IAAA,EAAM,OAAA,EAAS,IAAI,QAAA,EAAS;AAAA,QAE5C,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACI,OAAAA,CAAQ,OAAA,EAAR,EAAgB,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,0BAClCL,IAAAA;AAAA,YAACK,OAAAA,CAAQ,OAAA;AAAA,YAAR;AAAA,cACC,mBAAA,EAAkB,MAAA;AAAA,cAClB,SAAA,EAAW,CAAC,2BAAA,EAA6B,UAAU,EAChD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AAAA,cAEX,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAACI,OAAAA,CAAQ,KAAA,EAAR,EAAc,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,gCAChCJ,GAAAA,CAACI,OAAAA,CAAQ,KAAA,EAAR,EAAc,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,gCAC/BJ,GAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,mBAAA;AAAA,oBACX,KAAA,EAAO,MAAA;AAAA,oBACP,UAAU,CAAC,KAAA,KAAU,SAAA,CAAU,KAAA,CAAM,OAAO,KAAK;AAAA;AAAA,iBACnD;AAAA,gBACC,QAAA,CAAS,GAAA,CAAI,CAAC,QAAA,qBACbA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,IAAA,EAAK,QAAA;AAAA,oBACL,SAAS,MAAM;AACb,sBAAA,UAAA,CAAW,SAAS,EAAE,CAAA;AACtB,sBAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,oBAChB,CAAA;AAAA,oBAEC,QAAA,EAAA,QAAA,CAAS;AAAA,mBAAA;AAAA,kBAPL,QAAA,CAAS;AAAA,iBASjB,CAAA;AAAA,gBACA,SAAS,MAAA,KAAW,CAAA,oBAAKA,GAAAA,CAAC,OAAE,QAAA,EAAA,wBAAA,EAAsB;AAAA;AAAA;AAAA;AACrD;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,YAAA,EAAW,YAAA,EAAa,SAAA,EAAU,qBAAA,EACpC,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,QAAA,qBACfA,GAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAM,CAAA,eAAA,EAAkB,QAAA,CAAS,EAAE,CAAA,CAAA;AAAA,QACnC,cAAA,EAAc,MAAA,KAAW,QAAA,CAAS,EAAA,GAAK,MAAA,GAAS,MAAA;AAAA,QAChD,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,QACtB,CAAA;AAAA,QAEC,wCACCA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,QAAA;AAAA,YACA,MAAA,EAAQ,WAAW,QAAA,CAAS;AAAA;AAAA,YAG9B,QAAA,CAAS;AAAA,OAAA;AAAA,MAdN,QAAA,CAAS;AAAA,KAiBjB,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AC7FO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAQG;AACD,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,uBACED,IAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA,EAAU,kBAAA;AAAA,MACV,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,aAAA,CAAc,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AACjD,QAAA,MAAA,EAAO;AAAA,MACT,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAAA,YAClB,KAAA,EAAO,MAAA,KAAW,MAAA,GAAS,OAAA,GAAU,+BAAA;AAAA,YACrC;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,eAAK,IAAA,EAAK,CAAA;AAAA,QAC7C,KAAK,WAAA,oBAAeA,IAAC,WAAA,EAAA,EAAY,KAAA,EAAO,KAAK,WAAA,EAAa,CAAA;AAAA,QAC1D,KAAK,KAAA,oBAASA,IAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,MAAM,IAAA,EAAK,CAAA;AAAA,QACrC,IAAA,CAAK,cAAA,oBACJA,GAAAA,CAAC,KAAA,EAAA,EAAK,iBAAO,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,cAAc,CAAA,EAAE,CAAA;AAAA,QAEhD,KAAA,oBACCD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,QAAA,CAAS,IAAA;AAAA,YACb,CAAC,OAAA,KAAY,OAAA,CAAQ,KAAA,CAAM,gBAAgB,KAAA,CAAM;AAAA,cAE/C,OAAA,GACA,EAAA;AAAA,UACH,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAK;AAAA,SAAA,EAC5B,CAAA;AAAA,QAAA,CAEA,IAAA,CAAK,UAAA,IAAc,CAAC,IAAA,CAAK,WAAA,qBACzBC,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,UAAA,IAAc,aAAA,EAAc,CAAA;AAAA,QAEzC,MAAM,GAAA,CAAI,CAAC,IAAA,qBACVD,KAAC,MAAA,EAAA,EAAoB,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,QAAA;AAAA,UAAS;AAAA,SAAA,EAAA,EAAxB,IAAA,CAAK,EAAyB,CAC1C;AAAA;AAAA;AAAA,GACH;AAEJ;ACpDO,SAAS,eAAA,CAAgB;AAAA,EAC9B,QAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAeG;AACD,EAAA,MAAM,iBAAiB,KAAA,EAAO,cAAA;AAC9B,EAAA,MAAM,OAAO,KAAA,EAAO,IAAA;AACpB,EAAA,MAAM,OAAA,GAAU,OAAO,MAAA,EAAQ,OAAA;AAC/B,EAAA,MAAM,WAAA,GAAc,OAAO,OAAA,KAAY,QAAA,GAAW,QAAQ,IAAA,GAAO,OAAA;AACjE,EAAA,MAAM,aAAA,GAAgB,OAAO,OAAA,KAAY,QAAA,GAAW,QAAQ,MAAA,GAAS,OAAA;AACrE,EAAA,MAAM,YAAA,GAAe,OAAO,OAAA,KAAY,QAAA,GAAW,QAAQ,KAAA,GAAQ,OAAA;AACnE,EAAA,uBACEA,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,CAAA,cAAA,EAAiB,QAAA,CAAS,EAAE,CAAA,CAAA;AAAA,MAChC,SAAA,EAAU,iBAAA;AAAA,MACV,eAAA,EAAe,QAAA,CAAS,OAAA,CAAQ,MAAA,KAAW,CAAA;AAAA,MAC3C,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,EAAA,EAAI,IAAI,CAAA;AAAA,QACxC,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,QACrC;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,IAAA,EAAA,EAAG,QAAA,EAAU,EAAA,EACX,QAAA,EAAA,cAAA,mBACCA,GAAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAoB,CAAA,GAEpC,QAAA,CAAS,IAAA,EAEb,CAAA;AAAA,QACC,SAAS,WAAA,oBAAeA,IAAC,WAAA,EAAA,EAAY,KAAA,EAAO,SAAS,WAAA,EAAa,CAAA;AAAA,wBACnEA,GAAAA;AAAA,UAAC,IAAA,CAAK,IAAA;AAAA,UAAL;AAAA,YACC,SAAA,EAAU,kBAAA;AAAA,YACV,aAAA,EAAa,MAAA;AAAA,YACb,cAAA,EAAc,WAAA;AAAA,YACd,qBAAA,EAAqB,aAAA;AAAA,YACrB,oBAAA,EAAoB,YAAA;AAAA,YACpB,cAAA,EAAc,OAAO,MAAA,EAAQ,OAAA;AAAA,YAE5B,QAAA,EAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAI,KAAA,KAAU;AACnC,cAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,EAAE,CAAA;AAC/B,cAAA,IAAI,CAAC,IAAA,EAAM;AACT,gBAAA,OAAO,IAAA;AAAA,cACT;AACA,cAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,IAAA,KAAS,IAAA,CAAK,MAAA,KAAW,EAAE,CAAA;AACnE,cAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,EAAA,EAAI,MAAM,CAAA;AACrC,cAAA,uBACED,KAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,IAAA,mBACCC,GAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,IAAA;AAAA,oBACC,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,oBAC1C,IAAA;AAAA,oBACA,gBAAgB,KAAA,CAAM,MAAA;AAAA,sBACpB,CAAC,GAAA,EAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,QAAA;AAAA,sBAC1B;AAAA,qBACF;AAAA,oBACA,OAAO,MAAM;AAGX,sBAAA,IAAI;AACF,wBAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI;AAAA,0BACvB,GAAI,MAAA,KAAW,KAAA,CAAA,GAAY,EAAE,MAAA,KAAW;AAAC,yBAC1C,CAAA;AACD,wBAAA,UAAA,CAAW,KAAK,CAAA;AAAA,sBAClB,CAAA,CAAA,MAAQ;AACN,wBAAA,MAAA,CAAO,IAAI,CAAA;AAAA,sBACb;AAAA,oBACF,CAAA;AAAA,oBACA,MAAA,EAAQ,MAAM,MAAA,CAAO,IAAI;AAAA;AAAA,oCAG3BA,GAAAA;AAAA,kBAAC,YAAA;AAAA,kBAAA;AAAA,oBACC,IAAA;AAAA,oBACA,KAAA;AAAA,oBACA,IAAA;AAAA,oBACA,MAAA;AAAA,oBACA,QAAA,EAAU,aAAA,KAAkB,CAAA,IAAK,KAAA,GAAQ,CAAA;AAAA,oBACzC,MAAA;AAAA,oBACA,MAAA,EAAQ,MAAM,MAAA,CAAO,IAAI;AAAA;AAAA,iBAC3B;AAAA,gBAED,CAAC,QAAA,IACA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAASA,GAAAA,CAAC,QAAA,EAAA,EAAuB,IAAA,EAAA,EAAT,IAAA,CAAK,EAAgB,CAAE;AAAA,eAAA,EAAA,EApCpD,EAqCV,CAAA;AAAA,YAEJ,CAAC;AAAA;AAAA,SACH;AAAA,QACC,OAAA,oBACCD,IAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,QAAA,EAAA;AAAA,UAAA,YAAA;AAAA,UAC9C,QAAA,CAAS;AAAA,SAAA,EACtB;AAAA;AAAA;AAAA,GAEJ;AAEJ;AC5HA,IAAM,QAAA,GAAW,uBAAuB,aAAa,CAAA;AAE9C,SAAS,WAAA,CAAY,EAAE,KAAA,EAAM,EAAuB;AACzD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIE,QAAAA,CAAmB,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,CAAC,CAAA;AACpC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,QAAAA,CAAkC,EAAE,CAAA;AACpE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,OAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,EAAAC,UAAU,MAAM;AACd,IAAA,UAAA;AAAA,MACE,eAAA,CAAgB,KAAK,CAAA,CAClB,GAAA,CAAI,QAAQ,CAAA,CACZ,MAAA,CAAO,CAAC,MAAA,KAAW,OAAO,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,CAAE,MAAM;AAAA,KAC7D;AACA,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,EACvB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACV,EAAA,SAAS,MAAA,CAAO,IAAA,EAAc,WAAA,GAAc,IAAA,EAAM;AAChD,IAAA,UAAA,CAAW,OAAA,KAAX,WAAW,OAAA,GAAY,WAAA,CAAA;AACvB,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,IAAI,CAAA,EAAG,cAAA,CAAe;AAAA,MAC/C,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,OAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf;AACA,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAK,OAAO,CAAA;AACvD,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,UAAA,IAAc,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC9C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,MAAA,MAAM,OAAO,QAAA,CAAS,OAAA;AACtB,MAAA,IACE,CAAC,IAAA,IACD,UAAA,CAAW,OAAA,IACX,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA,IACtD,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,WAAA,EACzB;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAA,CAAQ,KAAA,GAAQ,CAAA,IAAK,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA;AAAA,IAC5C,GAAG,GAAI,CAAA;AACP,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,GAAG,CAAC,KAAA,EAAO,QAAQ,UAAA,EAAY,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC9C,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACEH,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,kBAAA;AAAA,MACX,YAAA,EAAc,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAClC,YAAA,EAAc,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,MACnC,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAC7B,MAAA,EAAQ,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,MAE7B,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qBAAA;AAAA,YACV,GAAA,EAAK,QAAA;AAAA,YACL,eAAe,MAAM;AACnB,cAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,YACvB,CAAA;AAAA,YACA,UAAU,MAAM;AACd,cAAA,MAAM,OAAO,QAAA,CAAS,OAAA;AACtB,cAAA,IAAI,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG;AACrB,gBAAA,QAAA;AAAA,kBACE,IAAA,CAAK,KAAA;AAAA,oBACH,KAAK,UAAA,GACH,IAAA,CAAK,SAAS,CAAC,CAAA,CAAE,uBAAsB,CAAE;AAAA;AAC7C,iBACF;AAAA,cACF;AAAA,YACF,CAAA;AAAA,YAEC,kBAAQ,GAAA,CAAI,CAAC,QAAQ,QAAA,qBACpBD,KAAC,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAC,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,kBAAA;AAAA,kBACV,eAAA,EAAe,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,kBACzC,uBAAA,EAAyB,EAAE,MAAA,EAAQ,MAAA;AAAO;AAAA,eAC5C;AAAA,8BACAD,IAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,eAAA,EAAe,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,kBACzC,OAAA,EAAS,MACP,WAAA,CAAY,CAAC,OAAA,MAAa;AAAA,oBACxB,GAAG,OAAA;AAAA,oBACH,CAAC,QAAQ,GAAG,CAAC,QAAQ,QAAQ;AAAA,mBAC/B,CAAE,CAAA;AAAA,kBAEL,QAAA,EAAA;AAAA,oBAAA,OAAA;AAAA,oBACO,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA,GAAS;AAAA;AAAA;AAAA;AACtC,aAAA,EAAA,EAjBY,MAAA,GAAS,QAkBvB,CACD;AAAA;AAAA,SACH;AAAA,QACC,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAChBA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAC,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,sBAAA;AAAA,cACX,UAAU,KAAA,KAAU,CAAA;AAAA,cACpB,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAAA,cAChC,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,kBAAA;AAAA,cACX,QAAA,EAAU,KAAA,IAAS,OAAA,CAAQ,MAAA,GAAS,CAAA;AAAA,cACpC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAAA,cAChC,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,UACC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,6BACfA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAY,CAAA,aAAA,EAAgB,QAAA,GAAW,CAAC,CAAA,CAAA;AAAA,cACxC,cAAA,EAAc,KAAA,KAAU,QAAA,GAAW,MAAA,GAAS,MAAA;AAAA,cAC5C,OAAA,EAAS,MAAM,MAAA,CAAO,QAAQ,CAAA;AAAA,cAE7B,QAAA,EAAA,QAAA,GAAW;AAAA,aAAA;AAAA,YANP;AAAA,WAQR;AAAA,SAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ;;;ACrIO,IAAM,UAAU,CAAC,MAAA,EAAgB,eACtC,CAAA,EAAG,MAAM,IAAI,UAAU,CAAA,CAAA;AAElB,SAAS,UAAU,UAAA,EAAgC;AACxD,EAAA,OAAO,EAAE,GAAI,UAAA,GAAa,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,EAAC,EAAI,IAAA,EAAM,CAAC,UAAA,EAAW;AAC1E;AAGO,SAAS,SAAA,CAAU,MAAY,IAAA,EAA0B;AAC9D,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,KAAA,EAAO,EAAE,GAAG,IAAA,CAAK,OAAO,GAAG,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,IAC3C,UAAA,EAAY,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,QAAA,KAAa;AAC5C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,IAAA;AAAA,QACpC,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,QAAA,CAAS;AAAA,OACnC;AACA,MAAA,OAAO,QAAA,GACH;AAAA,QACE,GAAG,QAAA;AAAA,QACH,OAAA,EAAS,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,QAAA,CAAS,OAAA,EAAS,GAAG,QAAA,CAAS,OAAO,CAAC,CAAC;AAAA,OAClE,GACA,QAAA;AAAA,IACN,CAAC,CAAA;AAAA,IACD,YAAA,EAAc;AAAA,GAChB;AACF;AAEO,SAAS,cAAA,CACd,MAAA,EACA,MAAA,EACA,QAAA,EACA,OACA,MAAA,EACsB;AACtB,EAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,IACb,KAAA,CAAM,GAAA,CAAI,OAAO,KAAA,MAAW;AAAA,MAC1B,GAAG,KAAA;AAAA,MACH,MAAM,MAAM,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,EAAQ,MAAM,UAAA,EAAY;AAAA,QACrD,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA;AAAA,QACA,GAAI,MAAM,MAAA,GAAS,EAAE,QAAQ,KAAA,CAAM,MAAA,KAAW;AAAC,OAChD;AAAA,KACH,CAAE;AAAA,GACJ;AACF;AAMO,SAAS,0BAAA,CACd,MACA,SAAA,EACM;AACN,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAsB;AACxC,EAAA,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,KAAA,MAAW,EAAE,UAAA,EAAY,IAAA,EAAK,IAAK,SAAA,EAAW;AAC5C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,UAAU,CAAA,EAAG,OAAA;AACnE,IAAA,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,CAAC,GAAI,MAAM,GAAA,CAAI,UAAU,CAAA,IAAK,EAAC,EAAI,GAAI,GAAA,IAAO,EAAG,CAAC,CAAA;AACxE,IAAA,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,GAAG,IAAA,CAAK,IAAA,CAAK,KAAA,EAAM,EAAE;AAAA,EACjE;AACA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,UAAA,EAAY,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,QAAA,KAAa;AAC5C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA;AACjC,MAAA,OAAO,MAAM,EAAE,GAAG,QAAA,EAAU,OAAA,EAAS,KAAI,GAAI,QAAA;AAAA,IAC/C,CAAC;AAAA,GACH;AACF;AAGO,SAAS,iBAAA,CACd,OACA,SAAA,EACA;AACA,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,MAAM,QAAQ,KAAA,CAAM,SAAA;AAAA,MAClB,CAAC,UACC,KAAA,CAAM,UAAA,KAAe,KAAK,UAAA,IAAc,KAAA,CAAM,WAAW,IAAA,CAAK;AAAA,KAClE;AACA,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,IACjB;AAAA,EACF;AACF;;;AChEA,eAAe,aAAA,CAAc,QAAgB,KAAA,EAAc;AACzD,EAAA,MAAM,CAAC,WAAA,EAAa,QAAQ,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAChD,OAAO,+BAA+B,CAAA;AAAA,IACtC,OAAO,qCAAqC;AAAA,GAC7C,CAAA;AACD,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,WAAA,CAAY,oBAAA,CAAqB,MAAA,EAAQ,KAAK,CAAA;AAAA,IACrD,QAAA,EAAU,QAAA,CAAS,wBAAA,CAAyB,MAAM;AAAA,GACpD;AACF;AAIO,SAAS,wBAAA,CAAyB;AAAA,EACvC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,IAAI,SAAA;AACJ,EAAA,SAAS,QAAA,GAA2B;AAClC,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,QAAA,EAAU,EAAE,OAAA,EAAS,CAAC,MAAM,MAAM,CAAA,EAAG,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS;AAAA,MAC9D,KAAA,EAAO,CAAC,GAAG,KAAA,CAAM,UAAU,CAAA;AAAA,MAC3B,IAAA,EAAM,MAAM,IAAA,CAAK,OAAA;AAAA,MACjB,OAAA,EAAS,KAAK,GAAA,EAAI;AAAA,MAClB,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,KACjC;AAAA,EACF;AACA,EAAA,eAAe,IAAA,GAAO;AACpB,IAAA,IAAI,MAAM,SAAA,CAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA,EAAG;AAChE,MAAA,KAAA,CAAM,KAAA,CAAM,OAAO,cAAA,EAAe;AAClC,MAAA,OAAA,GAAU,MAAM,IAAI,CAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,eAAe,OAAA,GAAU;AACvB,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAW,QAAA,CAAS,KAAK,KAAA,EAAO;AAAA,QACrD,MAAA,EAAQ,MAAM,KAAA,CAAM;AAAA,OACrB,CAAA;AACD,MAAA,KAAA,CAAM,KAAA,CAAM,OAAO,cAAA,EAAe;AAClC,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,OAAO,QAAA,CAAS,IAAA;AACtB,MAAA,MAAM,IAAA,EAAK;AACX,MAAA;AAAA,IACF;AACA,IAAA,MAAM,YAAY,MAAM,cAAA;AAAA,MACtB,MAAA;AAAA,MACA,KAAA,CAAM,MAAA;AAAA,MACN,KAAA,CAAM,QAAA;AAAA,MACN,KAAA,CAAM,UAAA;AAAA,MACN,MAAM,KAAA,CAAM;AAAA,KACd;AACA,IAAA,KAAA,CAAM,KAAA,CAAM,OAAO,cAAA,EAAe;AAClC,IAAA,KAAA,CAAM,IAAA,GAAO,0BAAA,CAA2B,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAC7D,IAAA,KAAA,MAAW,EAAE,UAAA,EAAY,IAAA,EAAK,IAAK,SAAA,EAAW;AAC5C,MAAA,KAAA,CAAM,KAAA,CAAM,GAAA;AAAA,QACV,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,UAAU,CAAA;AAAA,QAChC,SAAA,CAAU,KAAK,UAAU;AAAA,OAC3B;AAAA,IACF;AACA,IAAA,iBAAA,CAAkB,KAAA,CAAM,YAAY,SAAS,CAAA;AAC7C,IAAA,MAAM,IAAA,EAAK;AAAA,EACb;AACA,EAAA,OAAO;AAAA,IACL,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAAA;AAAA,IAEA,IAAA,GAAO;AACL,MAAA,KAAA,CAAM,KAAA,CAAM,OAAO,cAAA,EAAe;AAClC,MAAA,OAAA,GAAU,MAAM,IAAI,CAAA;AACpB,MAAA,KAAK,WAAW,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA,MAAM,OAAA,GAAU;AACd,MAAA,SAAA,GAAY,MAAM,aAAA,CAAc,MAAA,EAAQ,KAAK,CAAA;AAC7C,MAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,KAAA,CAAM,OAAA,EAAQ;AAC5C,MAAA,KAAA,CAAM,KAAA,CAAM,OAAO,cAAA,EAAe;AAClC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,KAAA,CAAM,OAAO,KAAA,CAAM,IAAA;AACnB,MAAA,KAAA,CAAM,QAAA,GAAW,MAAM,QAAA,CAAS,QAAA;AAChC,MAAA,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,QAAA,GAAW,OAAA,GAAU,aAAA;AACxC,MAAA,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,GAAG,KAAA,CAAM,KAAK,CAAA;AACpC,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,KAAA,EAAO;AAC/B,QAAA,KAAA,CAAM,KAAA,CAAM,GAAA;AAAA,UACV,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,UAAU,CAAA;AAAA,UACtC,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,UAAU;AAAA,SACjC;AAAA,MACF;AACA,MAAA,OAAA,GAAU,MAAM,IAAI,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,IAAY,KAAA,CAAM,QAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,KAAK,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MAC/B;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF;;;AC7HO,SAAS,sBACd,MAAA,EACA,QAAA,EACA,SACA,OAAA,EACA,YAAA,GAAiD,YAEjD,QAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,QAAQ,QAAQ,CAAA;AAAA,IACtB,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,IAAI,eAAA,EAAgB;AAAA,IAC3B,KAAA,sBAAW,GAAA,EAAI;AAAA,IACf,YAAY;AAAC,GACf;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAAA,IACrB,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,YAAA;AAAA,IACA,QAAQ,QAAA,CAAS,KAAA,GAAQ,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS;AAAA,GAC9C;AACA,EAAA,MAAM,QAAQ,wBAAA,CAAyB;AAAA,IACrC,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA2B;AAC/C,EAAA,IAAI,KAAA;AAGJ,EAAA,IAAI,WAAA;AACJ,EAAA,SAAS,SAAA,CAAU,MAAA,GAAsB,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ;AAC3D,IAAA,KAAA,KAAA,KAAA,GAAU,KAAA,CACP,SAAA,CAAW,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,CAC1C,IAAA,CAAK,OAAO,QAAA,KAAa;AACxB,MAAA,MAAA,CAAO,cAAA,EAAe;AACtB,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,MACjE;AACA,MAAA,KAAA,CAAM,QAAA,GAAW,IAAA;AACjB,MAAA,KAAA,CAAM,OAAO,QAAA,CAAS,IAAA;AACtB,MAAA,KAAA,CAAM,IAAA,EAAK;AACX,MAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IACf,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,OAAA,KAAqB;AAC3B,MAAA,KAAA,GAAQ,MAAA;AACR,MAAA,MAAM,OAAA;AAAA,IACR,CAAC,CAAA,CAAA;AACH,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,SAAS,SAAA,GAAY;AACnB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA;AAAA,IACF;AACA,IAAA,WAAA,GAAc,IAAI,eAAA,EAAgB;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,EAAa,KAAA,EAAM;AACxC,IAAA,KAAA,CAAM,KAAA,CAAM,OAAO,gBAAA,CAAiB,OAAA,EAAS,QAAQ,EAAE,IAAA,EAAM,MAAM,CAAA;AACnE,IAAA,KAAK,SAAA,CAAU,WAAA,CAAY,MAAM,CAAA,CAAE,MAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnD;AACA,EAAA,eAAe,QAAA,CACb,MAAA,EACA,UAAA,EACA,GAAA,EACA,MAAA,EACA;AACA,IAAA,MAAM,OAAO,MAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAA,EAAY;AAAA,MACtD,QAAQ,QAAA,CAAS,QAAA;AAAA,MACjB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,MACpB,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,KAC5B,CAAA;AACD,IAAA,KAAA,CAAM,KAAA,CAAM,OAAO,cAAA,EAAe;AAGlC,IAAA,IAAI,CAAC,MAAM,QAAA,EAAU;AACnB,MAAA,KAAA,CAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACzC;AACA,IAAA,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,EAAE,UAAA,EAAY,GAAI,MAAA,GAAS,EAAE,MAAA,EAAO,GAAI,EAAC,EAAI,IAAA,EAAM,CAAA;AACzE,IAAA,KAAA,CAAM,IAAA,EAAK;AACX,IAAA,KAAA,CAAM,MAAM,GAAA,CAAI,GAAA,EAAK,SAAA,CAAU,IAAA,CAAK,UAAU,CAAC,CAAA;AAC/C,IAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AACvB,MAAA,KAAA,CAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,EAAU,IAAA,CAAK,IAAI,CAAA,IAAK,aAAA;AAC7C,MAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,QAAA,WAAA,EAAa,KAAA,EAAM;AACnB,QAAA,KAAA,GAAQ,MAAA;AAAA,MACV;AAAA,IACF;AACA,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,EACf;AAGA,EAAA,MAAM,cAAc,KAAA,CAAM,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,KAAK,CAAA;AACrD,EAAA,OAAO;AAAA,IACL,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IACf,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IACf,CAAA;AAAA,IACA,OAAA,CAAQ,QAAgB,UAAA,EAAoB;AAC1C,MAAA,OACE,KAAA,CAAM,IAAA,KAAS,OAAA,IACf,CAAC,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,UAAU,CAAC,CAAA,EAAG,IAAA;AAAA,IAEnD,CAAA;AAAA;AAAA,IAEA,QAAA,CAAS,QAAgB,UAAA,EAAoB;AAC3C,MAAA,OACE,KAAA,CAAM,QAAA,IACL,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,UAAU,CAAC,CAAA;AAAA,IAE1E,CAAA;AAAA,IACA,MAAM,KAAA,CACJ,MAAA,EACA,UAAA,EACA,OAAO,KAAA,EACQ;AACf,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,MAAA,EAAQ,UAAU,CAAA;AACtC,MAAA,MAAM,OAAO,MAAM,WAAA;AACnB,MAAA,IAAI,KAAA,CAAM,YAAa,IAAA,IAAQ,KAAA,CAAM,MAAM,GAAA,CAAI,GAAG,CAAA,IAAK,CAAC,IAAA,EAAO;AAC7D,QAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACf;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,QAAA,OAAO,SAAA,EAAU;AAAA,MACnB;AACA,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAChC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAO,QAAA;AAAA,MACT;AACA,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAClC,MAAA,IAAI,MAAA,KAAW,CAAC,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAA,EAAO;AACpC,QAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACf;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AACvB,QAAA,SAAA,EAAU;AAAA,MACZ;AACA,MAAA,MAAM,UAAU,QAAA,CAAS,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,QAAQ,IAAI,CAAA;AAC9D,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,OAAO,CAAA;AACxB,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,OAAA;AAAA,MACf,CAAA,SAAE;AACA,QAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAAA;AAAA,IAEA,OAAA,GAAU;AACR,MAAA,KAAA,CAAM,MAAM,KAAA,EAAM;AAAA,IACpB,CAAA;AAAA,IACA,MAAA,GAAS;AACP,MAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS;AAC9B,QAAA,KAAA,CAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAAA,MACpC;AAAA,IACF;AAAA,GACF;AACF;;;ACpKO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,SAAS,WAAW,CAAA;AACtD,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IACX,CAAC,UACC,YAAA,CAAa;AAAA,MACX,GAAG,KAAA;AAAA,MACH,GAAI,YAAY,KAAA,GAAQ,EAAE,OAAO,WAAA,CAAY,KAAA,KAAU,EAAC;AAAA,MACxD,UAAA,EAAY,YAAY,UAAA,CAAW,GAAA;AAAA,QACjC,CAAC,QAAA,KACC,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,EAAA,KAAO,QAAA,CAAS,EAAE,CAAA,IAC3D;AAAA;AACJ,KACD,CAAA;AAAA,IACH,CAAC,WAAW;AAAA,GACd;AACA,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM;AAC3B,IAAA,MAAM,QAAA,GAAW,YAAY,KAAA,EAAO,IAAA;AAAA,MAClC,CAACI,OAAAA,KAAWA,OAAAA,CAAO,EAAA,KAAO;AAAA,KAC5B;AACA,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,GAAG,WAAA;AAAA,MACH,GAAI,WAAW,EAAE,KAAA,EAAO,CAAC,QAAQ,CAAA,KAAM,EAAC;AAAA,MACxC,UAAA,EAAY,YAAY,UAAA,CAAW,MAAA;AAAA,QACjC,CAAC,aAAa,CAAC,QAAA,IAAY,SAAS,WAAA,CAAY,QAAA,CAAS,SAAS,EAAE;AAAA;AACtE,KACF;AACA,IAAA,OAAO,qBAAA;AAAA,MACL,MAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA;AAAA,MACA,IAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,MAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAAH,UAAU,MAAM;AACd,IAAA,MAAA,CAAO,MAAA,EAAO;AACd,IAAA,OAAO,MAAM,OAAO,OAAA,EAAQ;AAAA,EAC9B,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,MAAM,MAAA,GACJ,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,cAAc,CAAA,IAC5D,SAAA,CAAU,KAAA,GAAQ,CAAC,CAAA;AACrB,EAAA,MAAM,UAAA,GAAa,OAAA;AAAA,IACjB,MACE,UAAU,UAAA,CAAW,MAAA;AAAA,MAAO,CAAC,QAAA,KAC3B,MAAA,EAAQ,WAAA,CAAY,QAAA,CAAS,SAAS,EAAE;AAAA,KAC1C;AAAA,IACF,CAAC,SAAA,CAAU,UAAA,EAAY,MAAM;AAAA,GAC/B;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,QAAAA,EAAiB;AAC3C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAA;AAAA,IACZ,OAAO,UAAA,EAAoB,IAAA,GAAO,KAAA,KAAU;AAC1C,MAAA,IAAI,CAAC,UAAW,CAAC,IAAA,IAAQ,OAAO,QAAA,CAAS,MAAA,CAAO,EAAA,EAAI,UAAU,CAAA,EAAI;AAChE,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,QAAA,CAAS,MAAS,CAAA;AAClB,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,MAAM,MAAA,CAAO,KAAA,CAAM,OAAO,EAAA,EAAI,UAAA,EAAY,IAAI,CAAC,CAAA;AAAA,MACtD,SAAS,OAAA,EAAS;AAChB,QAAA,IAAI,EAAE,OAAA,YAAmB,KAAA,CAAA,IAAU,OAAA,CAAQ,SAAS,YAAA,EAAc;AAChE,UAAA,QAAA,CAAS,sCAAsC,CAAA;AAAA,QACjD;AAAA,MACF,CAAA,SAAE;AACA,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,MAAA,EAAQ,IAAI;AAAA,GACvB;AACA,EAAA,OAAO,EAAE,SAAA,EAAW,MAAA,EAAQ,YAAY,MAAA,EAAQ,KAAA,EAAO,MAAM,KAAA,EAAM;AACrE;AC9FO,SAAS,iBAAA,CAAkB;AAAA,EAChC,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAQG;AACD,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIA,SAAS,kBAAA,IAAsB,UAAA,CAAW,CAAC,CAAA,EAAG,EAAE,CAAA;AAC5E,EAAA,MAAM,SAAA,GAAYK,OAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,EAAA,MAAM,QAAA,GAAWA,MAAAA,iBAAO,IAAI,GAAA,EAA0B,CAAA;AACtD,EAAA,MAAM,MAAA,GAASA,OAAe,MAAS,CAAA;AACvC,EAAA,MAAM,OAAA,GAAUA,OAAO,KAAK,CAAA;AAC5B,EAAA,MAAM,WAAA,GAAcC,WAAAA;AAAA,IAClB,CAAC,UAAA,KAAuB;AACtB,MAAA,MAAA,CAAO,OAAA,GAAU,UAAA;AACjB,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,MAAA,KAAA,CAAM,YAAY;AAChB,QAAA,IAAI;AACF,UAAA,OAAO,OAAO,OAAA,EAAS;AACrB,YAAA,MAAM,OAAO,MAAA,CAAO,OAAA;AACpB,YAAA,MAAA,CAAO,OAAA,GAAU,KAAA,CAAA;AACjB,YAAA,MAAM,MAAM,IAAI,CAAA;AAAA,UAClB;AAAA,QACF,CAAA,SAAE;AACA,UAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAAA,QACpB;AAAA,MACF,CAAA,GAAG;AAAA,IACL,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACA,EAAAL,UAAU,MAAM;AACd,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,kBAAA,IAAsB,UAAA,CAAW,CAAC,CAAA,EAAG,EAAA;AAChD,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,SAAA,CAAU,EAAE,CAAA;AACZ,MAAA,KAAK,MAAM,EAAE,CAAA;AAAA,IACf;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,oBAAoB,QAAA,EAAU,KAAA,EAAO,UAAU,CAAC,CAAA;AAC5D,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,IAAI,EAAA,GAAK,UAAA,CAAW,CAAC,CAAA,EAAG,EAAA;AACxB,MAAA,KAAA,MAAW,YAAY,UAAA,EAAY;AACjC,QAAA,MAAM,GAAA,GAAM,SAAS,OAAA,CAClB,GAAA,CAAI,SAAS,EAAE,CAAA,EACd,uBAAsB,CAAE,GAAA;AAC5B,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,MAAM,GAAA,EAAK;AACb,UAAA;AAAA,QACF;AACA,QAAA,EAAA,GAAK,QAAA,CAAS,EAAA;AAAA,MAChB;AACA,MAAA,IACE,OAAO,OAAA,GAAU,MAAA,CAAO,eACxB,QAAA,CAAS,eAAA,CAAgB,eAAe,CAAA,EACxC;AACA,QAAA,EAAA,GAAK,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA,EAAG,EAAA,IAAM,EAAA;AAAA,MAChC;AACA,MAAA,IAAI,EAAA,IAAM,EAAA,KAAO,SAAA,CAAU,OAAA,EAAS;AAClC,QAAA,SAAA,CAAU,EAAE,CAAA;AACZ,QAAA,WAAA,CAAY,EAAE,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AACA,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,KAAA,GAAQ,sBAAsB,MAAM,CAAA;AAAA,MACtC;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,iBAAiB,QAAA,EAAU,QAAA,EAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AAC7D,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,QAAQ,CAAA;AAC7C,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,IAC5B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,QAAA,EAAU,WAAW,CAAC,CAAA;AACtC,EAAA,MAAM,cAAA,GAAiBK,WAAAA;AAAA,IACrB,CAAC,EAAA,KAAe;AACd,MAAA,SAAA,CAAU,EAAE,CAAA;AACZ,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,EAAE,CAAA,EAAG,eAAe,EAAE,KAAA,EAAO,SAAS,CAAA;AAC3D,MAAA,KAAK,MAAM,EAAE,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,kBAAkB,KAAK;AAAA,GAC1B;AACA,EAAA,MAAM,cAAA,GAAiBD,OAAO,UAAU,CAAA;AACxC,EAAAJ,UAAU,MAAM;AACd,IAAA,IAAI,cAAA,CAAe,OAAA,KAAY,UAAA,IAAc,MAAA,EAAQ;AACnD,MAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,MAAM,CAAA,EAAG,eAAe,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,IACjE;AACA,IAAA,cAAA,CAAe,OAAA,GAAU,UAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AACvB,EAAA,MAAM,aAAA,GAAgBK,WAAAA,CAAY,CAAC,EAAA,KAAe;AAChD,IAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,EAAE,GAAG,aAAA,CAAc,IAAI,GAAG,KAAA,EAAM;AAAA,EACvD,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACF;ACvHO,SAAS,aAAA,CAAc;AAAA,EAC5B,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,aAAA,GAAgBC,UAAAA,CAAW,kBAAA,EAAoB,QAAQ,CAAA;AAC7D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIP,QAAAA,EAAe;AACrD,EAAA,MAAM,IAAA,GAAOM,WAAAA;AAAA,IACX,OAAO,IAAA,KAAe;AACpB,MAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAA,aAAA,CAAc,KAAA,EAAM;AACpB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,SAAA,GACJ,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAA,EAAQ,EAAE,CAAA,IAC5D,IAAA,CAAK,aAAa,CAAC,CAAA;AACrB,MAAA,MAAM,MAAA,GAAS,SAAA,EAAW,MAAA,IAAU,MAAA,EAAQ,EAAA;AAC5C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,WAAA,EAAY;AACZ,QAAA,MAAM,WAAW,QAAA,CAAS;AAAA,UACxB,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,IAAA;AAAA,UACA,MAAA;AAAA,UACA,GAAI,SAAA,GAAY,EAAE,YAAY,SAAA,CAAU,UAAA,KAAe;AAAC,SACzD,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,UAAA,EAAY,aAAA,EAAe,MAAM;AAAA,GACjD;AACA,EAAAL,UAAU,MAAM;AACd,IAAA,IAAI,WAAA,IAAe,CAAC,aAAA,CAAc,MAAA,EAAQ;AACxC,MAAA,MAAM,KAAA,GAAQ,sBAAsB,MAAM;AACxC,QAAA,cAAA,CAAe,MAAS,CAAA;AACxB,QAAA,KAAK,KAAK,WAAW,CAAA;AAAA,MACvB,CAAC,CAAA;AACD,MAAA,OAAO,MAAM,qBAAqB,KAAK,CAAA;AAAA,IACzC;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,aAAA,CAAc,MAAA,EAAQ,IAAI,CAAC,CAAA;AAC5C,EAAA,OAAO,IAAA;AACT;AC1CO,SAAS,eAAA,CAAgB,MAAY,OAAA,EAAkB;AAC5D,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,CAAC,CAAA;AACxC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,EAAiB;AAC7C,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIA,SAKzB,EAAE,KAAA,EAAO,IAAI,CAAA;AAChB,EAAA,MAAM,KAAA,GAAQQ,QAAQ,MAAM,iBAAA,CAAkB,IAAI,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAC3D,EAAA,MAAM,KAAA,GAAQA,QAAQ,MAAM,KAAA,CAAM,KAAK,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AACxD,EAAA,MAAM,gBAAgB,KAAA,CAAM,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,MAAM,CAAA;AACnE,EAAAP,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,SAAA,IAAa,CAAC,KAAA,CAAM,IAAA,MAAU,aAAA,EAAe;AAC3D,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,SAAA,CAAU,CAAC,QAAA,MAAc;AAAA,QACvB,GAAI,MAAA,IAAU,QAAA,CAAS,KAAA,KAAU,KAAA,GAAQ,WAAW,EAAC;AAAA,QACrD,KAAA;AAAA,QACA,OAAA,EAAS;AAAA,OACX,CAAE,CAAA;AACF,MAAA,KAAK,MAAA,CAAO,IAAA,CACT,MAAA,CAAO,KAAA,EAAO;AAAA,QACb,QAAQ,IAAA,CAAK,QAAA;AAAA,QACb,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,OAC5B,CAAA,CACA,IAAA;AAAA,QACC,CAAC,IAAA,KAAS;AACR,UAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS;AACzB,YAAA,SAAA,CAAU,CAAC,QAAA,KAAa;AACtB,cAAA,IAAI,CAAC,MAAA,IAAU,QAAA,CAAS,UAAU,KAAA,IAAS,CAAC,SAAS,IAAA,EAAM;AACzD,gBAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,cACvB;AACA,cAAA,OAAO;AAAA,gBACL,KAAA;AAAA,gBACA,IAAA,EAAM;AAAA,kBACJ,GAAG,IAAA;AAAA,kBACH,IAAA,EAAM;AAAA,oBACJ,GAAG,IAAA,CAAK,IAAA;AAAA,oBACR,KAAA,EAAO;AAAA,sBACL,GAAG,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,sBACtB,GAAG,KAAK,IAAA,CAAK;AAAA,qBACf;AAAA,oBACA,UAAA,EAAY;AAAA,sBACV,GAAG,IAAI,GAAA;AAAA,wBACL;AAAA,0BACE,GAAG,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,UAAA;AAAA,0BACtB,GAAG,KAAK,IAAA,CAAK;AAAA,yBACf,CAAE,IAAI,CAAC,QAAA,KAAa,CAAC,QAAA,CAAS,EAAA,EAAI,QAAQ,CAAC;AAAA,wBAC3C,MAAA;AAAO;AACX;AACF;AACF,eACF;AAAA,YACF,CAAC,CAAA;AAAA,UACH;AAAA,QACF,CAAA;AAAA,QACA,MAAM;AACJ,UAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS;AACzB,YAAA,SAAA,CAAU,CAAC,QAAA,MAAc;AAAA,cACvB,GAAI,MAAA,IAAU,QAAA,CAAS,KAAA,KAAU,KAAA,GAAQ,WAAW,EAAC;AAAA,cACrD,KAAA;AAAA,cACA,OAAA,EAAS,KAAA;AAAA,cACT,KAAA,EAAO;AAAA,aACT,CAAE,CAAA;AAAA,UACJ;AAAA,QACF;AAAA,OACF;AAAA,IACJ,GAAG,GAAG,CAAA;AACN,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,KAAA,CAAM,KAAA,EAAM;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,MAAA;AAAA,IACA,IAAA,CAAK,QAAA;AAAA,IACL,KAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,OAAA,GACJ,CAAC,SAAA,IAAa,MAAA,CAAO,UAAU,KAAA,IAAS,CAAC,gBAAgB,MAAA,GAAS,MAAA;AACpE,EAAA,MAAM,OAAA,GAAUO,QAAQ,MAAM;AAC5B,IAAA,MAAM,MAAA,GAAyB,CAAC,GAAG,KAAK,CAAA;AACxC,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,MAAA,CAAO,OAAA,EAAS,MAAM,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA,EAAG;AACjE,MAAA,IACE,CAAC,MAAA,CAAO,IAAA;AAAA,QACN,CAAC,WAAW,MAAA,CAAO,IAAA,KAAS,UAAU,MAAA,CAAO,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,OAChE,EACA;AACA,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AAAA,MAC9C;AAAA,IACF;AACA,IAAA,KAAA,MAAW,YAAY,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,UAAA,IAAc,EAAC,EAAG;AAC3D,MAAA,IACE,QAAA,CAAS,IAAA,CACN,iBAAA,EAAkB,CAClB,QAAA,CAAS,KAAA,CAAM,IAAA,EAAK,CAAE,iBAAA,EAAmB,CAAA,IAC5C,CAAC,MAAA,CAAO,IAAA;AAAA,QACN,CAAC,WACC,MAAA,CAAO,IAAA,KAAS,cAAc,MAAA,CAAO,QAAA,CAAS,OAAO,QAAA,CAAS;AAAA,OAClE,EACA;AACA,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,YAAY,QAAA,EAAU,KAAA,EAAO,GAAG,CAAA;AAAA,MACtD;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,GAAG,CAAC,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,KAAK,CAAC,CAAA;AAChC,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,QAAA,EAAU,CAAC,KAAA,KAAkB;AAC3B,MAAA,SAAA,CAAU,MAAS,CAAA;AACnB,MAAA,QAAA,CAAS,KAAK,CAAA;AAAA,IAChB,CAAA;AAAA,IACA,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AAAA,IAC1C,UAAU,MAAM;AACd,MAAA,IAAI,CAAC,OAAA,EAAS,OAAA,IAAW,OAAA,EAAS,MAAM,UAAA,EAAY;AAClD,QAAA,SAAA,CAAU,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,MACnC;AAAA,IACF,CAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAA;AAAA,MACA,SAAA,EAAW,SAAS,OAAA,IAAW,KAAA;AAAA,MAC/B,GAAI,SAAS,KAAA,GAAQ,EAAE,OAAO,OAAA,CAAQ,KAAA,KAAU,EAAC;AAAA,MACjD,OAAO,MAAM,UAAA,CAAW,CAAC,KAAA,KAAU,QAAQ,CAAC,CAAA;AAAA,MAC5C,mBAAA,EAAqB;AAAA;AACvB,GACF;AACF;ACtHO,SAAS,SAAA,CAAU;AAAA,EACxB,WAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA,GAAc,MAAA;AAAA,EACd,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,SAASC,SAAAA,EAAU;AACzB,EAAA,MAAM,cAAA,GACJ,iBAAA,EAAkB,CAAE,cAAA,KAAmB,WAAW,QAAA,GAAW,UAAA;AAC/D,EAAA,MAAM,aAAa,sBAAA,EAAuB;AAC1C,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,WAAA,GAAcF,UAAAA,CAAW,UAAA,EAAY,aAAa,CAAA;AACxD,EAAA,gBAAA,EAAiB;AACjB,EAAA,MAAM,cAAA,GACJ,WAAW,QAAA,CAAS,MAAA,IAAU,YAAY,KAAA,GAAQ,CAAC,CAAA,EAAG,EAAA,IAAM,WAAA,CAAY,EAAA;AAC1E,EAAA,MAAM,OAAO,gBAAA,CAAiB;AAAA,IAC5B,MAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa;AAAC,GAC9C,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,QAAA,CAAS,UAAA,IAAc,MAAA;AACjD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIP,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,IAAA,CAAK,SAAA,EAAW,UAAU,CAAA;AACzD,EAAA,MAAM,WAAA,GAAcM,YAAY,MAAM;AACpC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,MAAA,CAAO,SAAS,EAAE,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,MAAA,CAAO,QAAQ,CAAC,CAAA;AACpB,EAAA,MAAM,WAAW,aAAA,CAAc;AAAA,IAC7B,UAAA;AAAA,IACA,GAAI,KAAK,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO,GAAI,EAAC;AAAA,IAC3D;AAAA,GACD,CAAA;AACD,EAAA,MAAM,aAAa,iBAAA,CAAkB;AAAA,IACnC,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,GAAI,UAAA,CAAW,QAAA,CAAS,UAAA,KAAe,MAAA,GACnC,EAAE,kBAAA,EAAoB,UAAA,CAAW,QAAA,CAAS,UAAA,EAAW,GACrD,EAAC;AAAA,IACL,QAAA,EAAU,OAAA,CAAQ,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA;AAAA,IAC1C,GAAI,IAAA,CAAK,MAAA,EAAQ,EAAA,KAAO,MAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,EAAA,EAAG,GAAI,EAAC;AAAA,IAClE,GAAI,UAAA,CAAW,QAAA,CAAS,UAAA,KAAe,MAAA,GACnC,EAAE,UAAA,EAAY,UAAA,CAAW,QAAA,CAAS,UAAA,EAAW,GAC7C,EAAC;AAAA,IACL,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,gBAAA,EAAkB,CAAC,UAAA,KAAe,UAAA,CAAW,eAAe,UAAU;AAAA,GACvE,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,EAAM,QAAA,CAAS,IAAA;AAAA,IAClC,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,KAAK,SAAA,CAAU;AAAA,GACzC;AACA,EAAA,MAAM,aAAa,KAAA,EAAO,UAAA;AAC1B,EAAA,MAAM,YAAY,KAAA,EAAO,SAAA;AACzB,EAAA,uBACEP,GAAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAO,YACzB,QAAA,kBAAAD,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAC,kBAAA,EAAoB,UAAU,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,MACpE,mBAAA,EAAkB,MAAA;AAAA,MAClB,YAAA,EAAW,WAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACE,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,YACzC,GAAI,KAAA,CAAM,IAAA,EAAM,IAAA,KAAS,MAAA,GACtB,EAAE,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,IAAA,EAAK,GAC7B,EAAC;AAAA,YACJ,GAAI,IAAA,CAAK,SAAA,CAAU,KAAA,KAAU,MAAA,GAC1B,EAAE,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAM,GAC9B,EAAC;AAAA,YACJ,GAAI,IAAA,CAAK,MAAA,EAAQ,EAAA,KAAO,MAAA,GACrB,EAAE,cAAA,EAAgB,IAAA,CAAK,MAAA,CAAO,EAAA,EAAG,GACjC,EAAC;AAAA,YACL,WAAW,IAAA,CAAK,KAAA;AAAA,YAChB,UAAU,WAAA,CAAY,MAAA;AAAA,YACtB,cAAA;AAAA,YACA,MAAA;AAAA,YACC,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,YACxC,UAAA,EAAY,MAAM,KAAK,UAAA,CAAW,QAAA,EAAS;AAAA,YAC3C,mBAAA,EAAqB,MAAM,KAAK,UAAA,CAAW,iBAAA,IAAoB;AAAA,YAC/D,YAAA,EAAc,CAAC,MAAA,KAAW,UAAA,CAAW,WAAW,MAAM,CAAA;AAAA,YACtD,kBAAA,EAAoB,MAAM,KAAK,UAAA,CAAW,gBAAA,EAAiB;AAAA,YAC3D,oBAAoB,MAAM;AACxB,cAAA,KAAK,UAAA,CAAW,gBAAA;AAAA,gBACd,cAAA,KAAmB,WAAW,UAAA,GAAa;AAAA,eAC7C;AAAA,YACF,CAAA;AAAA,YACA,WAAA,EAAa,CAAC,KAAA,KAAU,UAAA,CAAW,UAAU,KAAK;AAAA;AAAA,SACpD;AAAA,QACC,8BAAcA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,UAAU,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,wBAC5CA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACE,GAAI,IAAA,CAAK,MAAA,EAAQ,UAAA,GACd,EAAE,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,EAAW,GAChC;AAAC;AAAA,SACP;AAAA,QACC,8BAAcA,GAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAM,KAAK,SAAA,EAAW,CAAA;AAAA,wBACjDA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,IAAA,EAAM,UAAA;AAAA,YACL,GAAI,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,KAAe,EAAC;AAAA,YAClD,MAAA,EAAQ,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,YAChC,YAAA,EAAc,CAAC,IAAA,KAAS,KAAK,SAAS,IAAI,CAAA;AAAA,YAC1C,kBAAkB,UAAA,CAAW;AAAA;AAAA,SAC/B;AAAA,wBACAA,GAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,YAAY,IAAA,CAAK,UAAA;AAAA,YAChB,GAAI,WAAW,MAAA,KAAW,MAAA,GACvB,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAO,GAC5B,EAAC;AAAA,YACJ,GAAI,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,KAAe,EAAC;AAAA,YACjD,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,YACxC,UAAU,UAAA,CAAW,cAAA;AAAA,YACrB,iBAAiB,UAAA,CAAW;AAAA;AAAA,SAC9B;AAAA,QACC,KAAK,KAAA,oBACJD,IAAAA,CAAC,GAAA,EAAA,EAAE,MAAK,OAAA,EACL,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,KAAA;AAAA,0BACNC,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAS,MAAM;AACb,gBAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,kBAAA,KAAK,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AAAA,gBACnC;AAAA,cACF,CAAA;AAAA,cACD,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF,CAAA;AAAA,QAED,CAAC,IAAA,CAAK,UAAA,CAAW,0BAAUA,GAAAA,CAAC,OAAE,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,QAChD,KAAK,UAAA,CAAW,GAAA,CAAI,CAAC,QAAA,EAAU,0BAC9BA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YAEC,QAAA;AAAA,YACA,aAAA,EAAe,KAAA;AAAA,YACf,WAAW,IAAA,CAAK,SAAA;AAAA,YACf,GAAI,IAAA,CAAK,MAAA,EAAQ,EAAA,KAAO,MAAA,GACrB,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,EAAA,EAAG,GACzB,EAAC;AAAA,YACL,MAAA;AAAA,YACC,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,YACxC,UAAU,UAAA,CAAW,QAAA;AAAA,YACrB,UAAU,WAAA,CAAY,MAAA;AAAA,YACtB,MAAA;AAAA,YACA,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,OAAA,EAAS,OAAA;AAAA,cACP,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAA,CAAK,MAAA,CAAO,EAAA,EAAI,QAAA,CAAS,EAAE;AAAA,aAChE;AAAA,YACA,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAA,KACjB,WAAW,OAAA,CAAQ;AAAA,cACjB,IAAA,EAAM,MAAA;AAAA,cACN,MAAA;AAAA,cACA,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,cACzC,YAAY,QAAA,CAAS;AAAA,aACtB,CAAA;AAAA,YAEH,MAAA,EAAQ,CAAC,IAAA,KAAS,KAAK,SAAS,IAAI,CAAA;AAAA,YACpC,YAAY,MAAM,KAAK,KAAK,KAAA,CAAM,QAAA,CAAS,IAAI,IAAI;AAAA,WAAA;AAAA,UAzB9C,QAAA,CAAS;AAAA,SA2BjB,CAAA;AAAA,QACA,6BAAaA,GAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,KAAK,SAAA,EAAW,CAAA;AAAA,QAC9C,KAAK,IAAA,oBAAQA,IAAC,GAAA,EAAA,EAAE,IAAA,EAAK,UAAS,QAAA,EAAA,wBAAA,EAAiB,CAAA;AAAA,wBAChDA,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,KAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAAA,YAC7D,GAAI,KAAK,QAAA,GAAW,EAAE,UAAU,IAAA,CAAK,QAAA,KAAa,EAAC;AAAA,YACpD,MAAA;AAAA,YACA,MAAA,EAAQ,MAAM,KAAK,UAAA,CAAW,QAAA;AAAS;AAAA;AACzC;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"catalogue.js","sourcesContent":["import type { Money, Zappie } from \"@zappie/sdk\";\n\nexport function CatalogueCart({\n action,\n count,\n subtotal,\n client,\n onOpen,\n}: {\n action: \"Place\" | \"Schedule\" | \"View\";\n count: number;\n subtotal?: Money;\n client: Zappie;\n onOpen(): void;\n}) {\n if (count === 0) {\n return null;\n }\n return (\n <button type=\"button\" className=\"z-base-catalogue-cart\" onClick={onOpen}>\n {action} Order · {count} items ·{\" \"}\n {subtotal ? client.format.money(subtotal) : \"Calculating…\"}\n </button>\n );\n}\n","import { OpenStatus } from \"@zappie/foundations\";\nimport type { Branch, CartLine, MenuSection } from \"@zappie/sdk\";\nimport { useEffect, useState } from \"react\";\nimport { ClearCart } from \"../cart/clear-cart\";\nimport type { CatalogueLayoutMode, CatalogueSlots } from \"./types\";\n\nexport function CatalogueHeader({\n branch,\n storeName,\n menus,\n selectedMenuId,\n cartLines,\n cartOpen,\n fulfilmentMode,\n layout,\n slots,\n onOpenCart,\n onOpenBranchDetails,\n onSelectMenu,\n onOpenBranchFinder,\n onSwitchFulfilment,\n onSetLayout,\n}: {\n branch?: Branch;\n storeName?: string;\n menus?: MenuSection[];\n selectedMenuId?: string;\n cartLines: readonly CartLine[];\n cartOpen: boolean;\n fulfilmentMode: \"pickup\" | \"delivery\";\n layout: CatalogueLayoutMode;\n slots?: CatalogueSlots;\n onOpenCart(): void;\n onOpenBranchDetails(): void;\n onSelectMenu(menuId: string): void;\n onOpenBranchFinder(): void;\n onSwitchFulfilment(): void;\n onSetLayout(layout: CatalogueLayoutMode): void;\n}) {\n const [canShare, setCanShare] = useState(false);\n useEffect(() => setCanShare(typeof navigator.share === \"function\"), []);\n const ToolbarAction = slots?.ToolbarAction;\n return (\n <header>\n <h2 tabIndex={-1} id=\"base-catalogue-heading\">\n Menu\n </h2>\n <button\n type=\"button\"\n aria-label={`Open cart${cartLines.length ? `, ${cartLines.length} items` : \"\"}`}\n onClick={onOpenCart}\n >\n Cart\n </button>\n {branch && (\n <button\n type=\"button\"\n onClick={onOpenBranchDetails}\n aria-label=\"View opening hours\"\n >\n <OpenStatus branch={branch}>\n {({ isOpen, label }) =>\n branch.isOpen === isOpen\n ? label\n : branch.isOpen\n ? \"Open\"\n : \"Temporarily closed\"\n }\n </OpenStatus>\n </button>\n )}\n {selectedMenuId && (\n <label>\n Menu\n <select\n value={selectedMenuId}\n onChange={(event) => onSelectMenu(event.target.value)}\n >\n {menus?.map((menu) => (\n <option key={menu.id} value={menu.id}>\n {menu.name} (\n {cartLines\n .filter((line) => line.menuId === menu.id)\n .reduce((sum, line) => sum + line.quantity, 0)}{\" \"}\n added)\n </option>\n ))}\n </select>\n </label>\n )}\n <button type=\"button\" onClick={onOpenBranchFinder}>\n Change branch\n </button>\n <button type=\"button\" onClick={onSwitchFulfilment}>\n {fulfilmentMode === \"pickup\" ? \"Delivery\" : \"Pickup\"}\n </button>\n {canShare && (\n <button\n type=\"button\"\n onClick={() => {\n if (navigator.share) {\n void navigator\n .share({\n url: window.location.href,\n ...(storeName ? { title: storeName } : {}),\n })\n .catch(() => {});\n }\n }}\n >\n Share menu\n </button>\n )}\n {ToolbarAction && (\n <ToolbarAction layout={layout} setLayout={onSetLayout} />\n )}\n {cartLines.length > 0 && !cartOpen && <ClearCart />}\n </header>\n );\n}\n","import { Overlay, Search } from \"@zappie/foundations\";\nimport type { Item } from \"@zappie/sdk\";\nimport { Fragment } from \"react\";\nimport type { useSearchSource } from \"./use-search-source\";\n\nexport function CatalogueSearch({\n search,\n open,\n themeClass,\n onOpen,\n onSelectItem,\n onSelectCategory,\n}: {\n search: ReturnType<typeof useSearchSource>;\n open: boolean;\n themeClass?: string;\n onOpen(): void;\n onSelectItem(item: Item): void;\n onSelectCategory(categoryId: string): void;\n}) {\n const content = (\n <Search.Root\n source={search.source}\n query={search.query}\n onQueryChange={search.setQuery}\n onSelect={(result) => {\n if (result.type === \"item\") {\n onSelectItem(result.item);\n } else {\n onSelectCategory(result.category.id);\n }\n }}\n >\n <Search.Input\n aria-label=\"Search menu\"\n placeholder=\"Search menu\"\n onFocus={onOpen}\n />\n {search.query && (\n <button type=\"button\" onClick={() => search.setQuery(\"\")}>\n Clear search\n </button>\n )}\n {open && search.query && (\n <Search.Results>\n {({ results, error, retry }) => (\n <Fragment>\n {search.source.isLoading && <p role=\"status\">Searching…</p>}\n {error && (\n <p role=\"alert\">\n {error}\n <button type=\"button\" onClick={retry}>\n Retry search\n </button>\n </p>\n )}\n {!search.source.isLoading && !error && !results.length && (\n <p>No results</p>\n )}\n {search.hasMore && (\n <button\n type=\"button\"\n disabled={search.source.isLoading}\n onClick={search.loadMore}\n >\n More search results\n </button>\n )}\n {results.map((result, index) => (\n <Search.Result\n key={\n result.type === \"item\" ? result.item.id : result.category.id\n }\n index={index}\n >\n {result.type === \"item\" ? (\n <Fragment>\n {result.item.name}\n {!result.item.isAvailable && (\n <span>{result.item.stockLabel ?? \"Unavailable\"}</span>\n )}\n </Fragment>\n ) : (\n result.category.name\n )}\n </Search.Result>\n ))}\n </Fragment>\n )}\n </Search.Results>\n )}\n </Search.Root>\n );\n return (\n <Fragment>\n <div className=\"z-base-search-desktop\">{content}</div>\n <Overlay.Root param=\"catalogue_search\" id=\"search\" presentation=\"sheet\">\n <Overlay.Trigger className=\"z-base-search-mobile\">\n Search menu\n </Overlay.Trigger>\n <Overlay.Content\n data-zappie-theme=\"base\"\n className={[\"z-base-cart z-base-editor\", themeClass]\n .filter(Boolean)\n .join(\" \")}\n >\n <Overlay.Title>Search menu</Overlay.Title>\n <Overlay.Close>Close search</Overlay.Close>\n {content}\n </Overlay.Content>\n </Overlay.Root>\n </Fragment>\n );\n}\n","import { Overlay, useOverlay } from \"@zappie/foundations\";\nimport type { Category } from \"@zappie/sdk\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport type { CatalogueSlots } from \"./types\";\n\nexport function CategoryNavigation({\n categories,\n active,\n themeClass,\n slots,\n onSelect,\n onFocusCategory,\n}: {\n categories: readonly Category[];\n active?: string;\n themeClass?: string;\n slots?: CatalogueSlots;\n onSelect(categoryId: string): void;\n onFocusCategory(categoryId: string): void;\n}) {\n const overlay = useOverlay(\"catalogue_categories\", \"categories\");\n const [filter, setFilter] = useState(\"\");\n const [pending, setPending] = useState<string>();\n const CategoryTab = slots?.CategoryTab;\n useEffect(() => {\n if (pending && !overlay.isOpen) {\n const frame = requestAnimationFrame(() => {\n setPending(undefined);\n onSelect(pending);\n onFocusCategory(pending);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [pending, overlay.isOpen, onSelect, onFocusCategory]);\n const filtered = categories.filter((category) =>\n category.name.toLowerCase().includes(filter.toLowerCase()),\n );\n return (\n <Fragment>\n <Overlay.Root\n param=\"catalogue_categories\"\n id=\"categories\"\n presentation={{ base: \"sheet\", lg: \"dialog\" }}\n >\n <Overlay.Trigger>Browse categories</Overlay.Trigger>\n <Overlay.Content\n data-zappie-theme=\"base\"\n className={[\"z-base-cart z-base-editor\", themeClass]\n .filter(Boolean)\n .join(\" \")}\n >\n <Overlay.Title>Browse categories</Overlay.Title>\n <Overlay.Close>Close categories</Overlay.Close>\n <input\n aria-label=\"Filter categories\"\n value={filter}\n onChange={(event) => setFilter(event.target.value)}\n />\n {filtered.map((category) => (\n <button\n key={category.id}\n type=\"button\"\n onClick={() => {\n setPending(category.id);\n overlay.close();\n }}\n >\n {category.name}\n </button>\n ))}\n {filtered.length === 0 && <p>No matching categories</p>}\n </Overlay.Content>\n </Overlay.Root>\n <nav aria-label=\"Categories\" className=\"z-base-category-nav\">\n {categories.map((category) => (\n <a\n key={category.id}\n href={`#base-category-${category.id}`}\n aria-current={active === category.id ? \"true\" : undefined}\n onClick={(event) => {\n event.preventDefault();\n onSelect(category.id);\n }}\n >\n {CategoryTab ? (\n <CategoryTab\n category={category}\n active={active === category.id}\n />\n ) : (\n category.name\n )}\n </a>\n ))}\n </nav>\n </Fragment>\n );\n}\n","import type { CartLine, Item, Zappie } from \"@zappie/sdk\";\nimport { Description, ItemImage } from \"./presentation\";\nimport type { CatalogueLayoutMode } from \"./types\";\n\nexport function BaseItemTile({\n item,\n lines,\n href,\n layout,\n priority,\n client,\n onOpen,\n}: {\n item: Item;\n lines: readonly CartLine[];\n href: string;\n layout: CatalogueLayoutMode;\n priority: boolean;\n client: Zappie;\n onOpen(): void;\n}) {\n const price = item.price;\n return (\n <a\n href={href}\n className=\"z-base-item-tile\"\n onClick={(event) => {\n event.preventDefault();\n event.currentTarget.focus({ preventScroll: true });\n onOpen();\n }}\n >\n <ItemImage\n src={item.images[0]}\n sizes={layout === \"LIST\" ? \"100vw\" : \"(min-width: 768px) 33vw, 50vw\"}\n priority={priority}\n />\n <span className=\"z-base-item-name\">{item.name}</span>\n {item.description && <Description value={item.description} />}\n {item.promo && <span>{item.promo.name}</span>}\n {item.compareAtPrice && (\n <del>{client.format.money(item.compareAtPrice)}</del>\n )}\n {price && (\n <span className=\"z-base-amount\">\n {item.variants.some(\n (variant) => variant.price.amountMinor !== price.amountMinor,\n )\n ? \"From \"\n : \"\"}\n {client.format.money(price)}\n </span>\n )}\n {(item.stockLabel || !item.isAvailable) && (\n <span>{item.stockLabel ?? \"Unavailable\"}</span>\n )}\n {lines.map((line) => (\n <span key={line.id}>{line.quantity} added</span>\n ))}\n </a>\n );\n}\n","import { Cart } from \"@zappie/foundations\";\nimport type { Category, Item, Menu, Zappie } from \"@zappie/sdk\";\nimport { countEvent } from \"@zappie/sdk/visits\";\nimport type { MutableRefObject } from \"react\";\nimport { CartLine } from \"../cart/cart-line\";\nimport { BaseItemTile } from \"./item-tile\";\nimport { Description } from \"./presentation\";\nimport type { CatalogueLayoutMode, CatalogueSlots } from \"./types\";\n\nexport function CategorySection({\n category,\n categoryIndex,\n catalogue,\n menuId,\n layout,\n slots,\n sections,\n cartOpen,\n client,\n busy,\n hasMore,\n itemHref,\n onOpen,\n onLoadMore,\n}: {\n category: Category;\n categoryIndex: number;\n catalogue: Menu;\n menuId?: string;\n layout: CatalogueLayoutMode;\n slots?: CatalogueSlots;\n sections: MutableRefObject<Map<string, HTMLElement>>;\n cartOpen: boolean;\n client: Zappie;\n busy: boolean;\n hasMore: boolean;\n itemHref(itemId: string, menuId?: string): string;\n onOpen(item: Item): void;\n onLoadMore(): void;\n}) {\n const CategoryHeader = slots?.CategoryHeader;\n const Tile = slots?.Tile;\n const columns = slots?.layout?.columns;\n const baseColumns = typeof columns === \"object\" ? columns.base : columns;\n const mediumColumns = typeof columns === \"object\" ? columns.medium : columns;\n const largeColumns = typeof columns === \"object\" ? columns.large : columns;\n return (\n <section\n id={`base-category-${category.id}`}\n className=\"z-base-category\"\n data-unloaded={category.itemIds.length === 0}\n ref={(node) => {\n if (node) {\n sections.current.set(category.id, node);\n } else {\n sections.current.delete(category.id);\n }\n }}\n >\n <h3 tabIndex={-1}>\n {CategoryHeader ? (\n <CategoryHeader category={category} />\n ) : (\n category.name\n )}\n </h3>\n {category.description && <Description value={category.description} />}\n <Cart.Root\n className=\"z-base-item-list\"\n data-layout={layout}\n data-columns={baseColumns}\n data-columns-medium={mediumColumns}\n data-columns-large={largeColumns}\n data-density={slots?.layout?.density}\n >\n {category.itemIds.map((id, index) => {\n const item = catalogue.items[id];\n if (!item) {\n return null;\n }\n const lines = client.cart.lines.filter((line) => line.itemId === id);\n const href = itemHref(item.id, menuId);\n return (\n <div key={id}>\n {Tile ? (\n <Tile\n item={item}\n {...(menuId !== undefined ? { menuId } : {})}\n href={href}\n quantityInCart={lines.reduce(\n (sum, line) => sum + line.quantity,\n 0,\n )}\n onAdd={() => {\n // An item the cart refuses as-is (required choices, an\n // ambiguous variant) opens the item to be configured.\n try {\n client.cart.add(item.id, {\n ...(menuId !== undefined ? { menuId } : {}),\n });\n countEvent(\"add\");\n } catch {\n onOpen(item);\n }\n }}\n onOpen={() => onOpen(item)}\n />\n ) : (\n <BaseItemTile\n item={item}\n lines={lines}\n href={href}\n layout={layout}\n priority={categoryIndex === 0 && index < 4}\n client={client}\n onOpen={() => onOpen(item)}\n />\n )}\n {!cartOpen &&\n lines.map((line) => <CartLine key={line.id} line={line} />)}\n </div>\n );\n })}\n </Cart.Root>\n {hasMore && (\n <button type=\"button\" disabled={busy} onClick={onLoadMore}>\n Load more {category.name}\n </button>\n )}\n </section>\n );\n}\n","\"use client\";\nimport {\n createSanitizeRichText,\n splitInfoBanner,\n} from \"@zappie/foundations/rich-text\";\nimport { parseRichText } from \"@zappie/foundations/rich-text/browser\";\nimport { useEffect, useRef, useState } from \"react\";\nconst sanitize = createSanitizeRichText(parseRichText);\n/** Safe rich text with touch scrolling, explicit controls and pausable rotation. */\nexport function InfoBanners({ value }: { value?: string }) {\n const [banners, setBanners] = useState<string[]>([]);\n const [index, setIndex] = useState(0);\n const [expanded, setExpanded] = useState<Record<number, boolean>>({});\n const [paused, setPaused] = useState(false);\n const viewport = useRef<HTMLDivElement>(null);\n const interacted = useRef(false);\n useEffect(() => {\n setBanners(\n splitInfoBanner(value)\n .map(sanitize)\n .filter((banner) => banner.replace(/<[^>]*>/g, \"\").trim()),\n );\n setIndex(0);\n setExpanded({});\n interacted.current = false;\n }, [value]);\n function select(next: number, interaction = true) {\n interacted.current ||= interaction;\n setExpanded({});\n viewport.current?.children[next]?.scrollIntoView({\n block: \"nearest\",\n inline: \"start\",\n behavior: \"instant\",\n });\n setIndex(next);\n }\n const isExpanded = Object.values(expanded).some(Boolean);\n useEffect(() => {\n if (paused || isExpanded || banners.length < 2) {\n return;\n }\n const interval = setInterval(() => {\n const node = viewport.current;\n if (\n !node ||\n interacted.current ||\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ||\n node.scrollWidth <= node.clientWidth\n ) {\n return;\n }\n select((index + 1) % banners.length, false);\n }, 5000);\n return () => clearInterval(interval);\n }, [index, paused, isExpanded, banners.length]);\n if (!banners.length) {\n return null;\n }\n return (\n <section\n aria-label=\"Menu information\"\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onBlur={() => setPaused(false)}\n >\n <div\n className=\"z-base-info-banners\"\n ref={viewport}\n onPointerDown={() => {\n interacted.current = true;\n }}\n onScroll={() => {\n const node = viewport.current;\n if (node?.children[0]) {\n setIndex(\n Math.round(\n node.scrollLeft /\n node.children[0].getBoundingClientRect().width,\n ),\n );\n }\n }}\n >\n {banners.map((banner, position) => (\n <article key={banner + position}>\n <div\n className=\"z-base-info-copy\"\n data-expanded={Boolean(expanded[position])}\n dangerouslySetInnerHTML={{ __html: banner }}\n />\n <button\n type=\"button\"\n aria-expanded={Boolean(expanded[position])}\n onClick={() =>\n setExpanded((current) => ({\n ...current,\n [position]: !current[position],\n }))\n }\n >\n Show {expanded[position] ? \"less\" : \"more\"}\n </button>\n </article>\n ))}\n </div>\n {banners.length > 1 && (\n <div>\n <button\n type=\"button\"\n aria-label=\"Previous information\"\n disabled={index === 0}\n onClick={() => select(index - 1)}\n >\n Previous\n </button>\n <button\n type=\"button\"\n aria-label=\"Next information\"\n disabled={index >= banners.length - 1}\n onClick={() => select(index + 1)}\n >\n Next\n </button>\n {banners.map((_, position) => (\n <button\n key={position}\n type=\"button\"\n aria-label={`Go to banner ${position + 1}`}\n aria-current={index === position ? \"true\" : undefined}\n onClick={() => select(position)}\n >\n {position + 1}\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n","import type { CategoryPage, Menu, Zappie } from \"@zappie/sdk\";\nimport type { SavedCatalogue } from \"@zappie/sdk/persist/catalogue\";\n\nexport type SavedPage = SavedCatalogue[\"pages\"][number];\nexport type PageState = { next?: string | undefined; done: boolean };\n\nexport const pageKey = (menuId: string, categoryId: string) =>\n `${menuId}:${categoryId}`;\n\nexport function pageState(nextCursor?: string): PageState {\n return { ...(nextCursor ? { next: nextCursor } : {}), done: !nextCursor };\n}\n\n/** Adds a page's items to their categories without dropping ones already reached. */\nexport function mergePage(menu: Menu, page: CategoryPage): Menu {\n return {\n ...menu,\n items: { ...menu.items, ...page.menu.items },\n categories: menu.categories.map((category) => {\n const incoming = page.menu.categories.find(\n (value) => value.id === category.id,\n );\n return incoming\n ? {\n ...category,\n itemIds: [...new Set([...category.itemIds, ...incoming.itemIds])],\n }\n : category;\n }),\n completeness: \"partial\",\n };\n}\n\nexport function readSavedPages(\n client: Zappie,\n menuId: string,\n branchId: string,\n saved: readonly SavedPage[],\n signal: AbortSignal,\n): Promise<SavedPage[]> {\n return Promise.all(\n saved.map(async (entry) => ({\n ...entry,\n page: await client.menu.page(menuId, entry.categoryId, {\n branch: branchId,\n signal,\n ...(entry.cursor ? { cursor: entry.cursor } : {}),\n }),\n })),\n );\n}\n\n/**\n * Only the refreshed categories are replaced, so pages reached while the\n * refresh ran stay; a refreshed category drops items no longer listed.\n */\nexport function replaceRefreshedCategories(\n menu: Menu,\n refreshed: readonly SavedPage[],\n): Menu {\n const fresh = new Map<string, string[]>();\n let next = menu;\n for (const { categoryId, page } of refreshed) {\n const ids = page.menu.categories.find((c) => c.id === categoryId)?.itemIds;\n fresh.set(categoryId, [...(fresh.get(categoryId) ?? []), ...(ids ?? [])]);\n next = { ...next, items: { ...next.items, ...page.menu.items } };\n }\n return {\n ...next,\n categories: next.categories.map((category) => {\n const ids = fresh.get(category.id);\n return ids ? { ...category, itemIds: ids } : category;\n }),\n };\n}\n\n/** Swaps each refreshed page into the saved list in place. */\nexport function replaceSavedPages(\n saved: SavedPage[],\n refreshed: readonly SavedPage[],\n) {\n for (const page of refreshed) {\n const index = saved.findIndex(\n (entry) =>\n entry.categoryId === page.categoryId && entry.cursor === page.cursor,\n );\n if (index >= 0) {\n saved[index] = page;\n }\n }\n}\n","import type { Menu, Zappie } from \"@zappie/sdk\";\nimport type { SavedCatalogue } from \"@zappie/sdk/persist/catalogue\";\nimport {\n pageKey,\n pageState,\n readSavedPages,\n replaceRefreshedCategories,\n replaceSavedPages,\n type PageState,\n type SavedPage,\n} from \"./catalogue-pages\";\n\n/** The loader's mutable read state, shared with the saved-catalogue sync. */\nexport type LoaderState = {\n menu: Menu;\n mode: \"eager\" | \"progressive\" | null;\n complete: boolean;\n // Replaced on resume: an effect can be cleaned up and run again (React\n // StrictMode, <Activity>) without the loader being recreated.\n abort: AbortController;\n readonly pages: Map<string, PageState>;\n readonly savedPages: SavedPage[];\n};\n\ntype Scope = SavedCatalogue[\"scope\"];\n\nasync function loadResources(client: Zappie, scope: Scope) {\n const [persistence, selected] = await Promise.all([\n import(\"@zappie/sdk/persist/catalogue\"),\n import(\"@zappie/sdk/transport/selected-menu\"),\n ]);\n return {\n saved: persistence.createSavedCatalogue(client, scope),\n selected: selected.createSelectedMenuReader(client),\n };\n}\n\nexport type CatalogueResources = Awaited<ReturnType<typeof loadResources>>;\n\nexport function createSavedCatalogueSync({\n client,\n state,\n scope,\n revision,\n publish,\n}: {\n client: Zappie;\n state: LoaderState;\n scope: Scope;\n /** Host catalogue revision; a saved copy at this revision is not refreshed. */\n revision?: string | undefined;\n publish?: ((menu: Menu) => void) | undefined;\n}) {\n let resources: CatalogueResources | undefined;\n function snapshot(): SavedCatalogue {\n return {\n scope,\n menu: state.menu,\n coverage: { menuIds: [scope.menuId], complete: state.complete },\n pages: [...state.savedPages],\n etag: state.menu.version,\n savedAt: Date.now(),\n ...(revision ? { revision } : {}),\n };\n }\n async function save() {\n if (await resources!.saved.publish(snapshot()).catch(() => true)) {\n state.abort.signal.throwIfAborted();\n publish?.(state.menu);\n }\n }\n async function refresh() {\n if (state.complete) {\n const response = await resources!.selected.read(scope, {\n signal: state.abort.signal,\n });\n state.abort.signal.throwIfAborted();\n if (\"notModified\" in response) {\n return;\n }\n state.menu = response.menu;\n await save();\n return;\n }\n const refreshed = await readSavedPages(\n client,\n scope.menuId,\n scope.branchId,\n state.savedPages,\n state.abort.signal,\n );\n state.abort.signal.throwIfAborted();\n state.menu = replaceRefreshedCategories(state.menu, refreshed);\n for (const { categoryId, page } of refreshed) {\n state.pages.set(\n pageKey(scope.menuId, categoryId),\n pageState(page.nextCursor),\n );\n }\n replaceSavedPages(state.savedPages, refreshed);\n await save();\n }\n return {\n get resources() {\n return resources;\n },\n /** Shows the current menu now; saving runs behind it and never fails a read. */\n emit() {\n state.abort.signal.throwIfAborted();\n publish?.(state.menu);\n void resources?.saved.publish(snapshot()).catch(() => {});\n },\n async restore() {\n resources = await loadResources(client, scope);\n const value = await resources.saved.restore();\n state.abort.signal.throwIfAborted();\n if (!value) {\n return false;\n }\n state.menu = value.menu;\n state.complete = value.coverage.complete;\n state.mode = state.complete ? \"eager\" : \"progressive\";\n state.savedPages.push(...value.pages);\n for (const saved of value.pages) {\n state.pages.set(\n pageKey(scope.menuId, saved.categoryId),\n pageState(saved.page.nextCursor),\n );\n }\n publish?.(state.menu);\n if (!revision || value.revision !== revision) {\n void refresh().catch(() => {});\n }\n return true;\n },\n };\n}\n","import type { Menu, Zappie } from \"@zappie/sdk\";\nimport { mergePage, pageKey, pageState } from \"./catalogue-pages\";\nimport {\n createSavedCatalogueSync,\n type LoaderState,\n} from \"./saved-catalogue-sync\";\nexport type CatalogueStrategy = (\n metadata: Menu,\n sample?: Menu,\n) => \"eager\" | \"progressive\" | null;\n/** Screen-local read state; never marks a progressive catalogue as complete. */\nexport function createCatalogueLoader(\n client: Zappie,\n metadata: Menu,\n resolve: CatalogueStrategy,\n publish?: (menu: Menu) => void,\n orderContext: \"delivery\" | \"pickup\" | \"dineIn\" = \"delivery\",\n /** Host catalogue revision; a saved copy at this revision is not refreshed. */\n revision?: string,\n) {\n const state: LoaderState = {\n menu: metadata,\n mode: resolve(metadata),\n complete: false,\n abort: new AbortController(),\n pages: new Map(),\n savedPages: [],\n };\n const scope = {\n store: client.config.store,\n branchId: metadata.branchId,\n orderContext,\n menuId: metadata.menus?.[0]?.id ?? metadata.id,\n };\n const saved = createSavedCatalogueSync({\n client,\n state,\n scope,\n revision,\n publish,\n });\n const pending = new Map<string, Promise<Menu>>();\n let eager: Promise<Menu> | undefined;\n // The complete read starts beside the size probe rather than after it, and\n // is cancelled if the probe's measurement rejects eager loading.\n let speculative: AbortController | undefined;\n function readEager(signal: AbortSignal = state.abort.signal) {\n eager ??= saved\n .resources!.selected.read(scope, { signal })\n .then(async (response) => {\n signal.throwIfAborted();\n if (\"notModified\" in response) {\n throw new Error(\"Unexpected conditional selected-menu response\");\n }\n state.complete = true;\n state.menu = response.menu;\n saved.emit();\n return state.menu;\n })\n .catch((failure: unknown) => {\n eager = undefined;\n throw failure;\n });\n return eager;\n }\n function speculate() {\n if (eager) {\n return;\n }\n speculative = new AbortController();\n const cancel = () => speculative?.abort();\n state.abort.signal.addEventListener(\"abort\", cancel, { once: true });\n void readEager(speculative.signal).catch(() => {});\n }\n async function readPage(\n menuId: string,\n categoryId: string,\n key: string,\n cursor: string | undefined,\n ) {\n const page = await client.menu.page(menuId, categoryId, {\n branch: metadata.branchId,\n signal: state.abort.signal,\n ...(cursor ? { cursor } : {}),\n });\n state.abort.signal.throwIfAborted();\n // The size probe is a real first page: it renders before any\n // complete read the measurement approves.\n if (!state.complete) {\n state.menu = mergePage(state.menu, page);\n }\n state.savedPages.push({ categoryId, ...(cursor ? { cursor } : {}), page });\n saved.emit();\n state.pages.set(key, pageState(page.nextCursor));\n if (state.mode === null) {\n state.mode = resolve(metadata, page.menu) ?? \"progressive\";\n if (state.mode !== \"eager\") {\n speculative?.abort();\n eager = undefined;\n }\n }\n return state.menu;\n }\n // Restoring starts with the loader, not at the first reach; any failure to\n // restore (no IndexedDB, a chunk error) falls back to the network.\n const initialized = saved.restore().catch(() => false);\n return {\n get value() {\n return state.menu;\n },\n get mode() {\n return state.mode;\n },\n hasMore(menuId: string, categoryId: string) {\n return (\n state.mode !== \"eager\" &&\n !state.pages.get(pageKey(menuId, categoryId))?.done\n );\n },\n /** True when reaching this category would neither read nor change. */\n isLoaded(menuId: string, categoryId: string) {\n return (\n state.complete ||\n (state.mode !== \"eager\" && state.pages.has(pageKey(menuId, categoryId)))\n );\n },\n async reach(\n menuId: string,\n categoryId: string,\n more = false,\n ): Promise<Menu> {\n const key = pageKey(menuId, categoryId);\n const warm = await initialized;\n if (state.complete || (warm && state.pages.has(key) && !more)) {\n return state.menu;\n }\n if (state.mode === \"eager\") {\n return readEager();\n }\n const existing = pending.get(key);\n if (existing) {\n return existing;\n }\n const loaded = state.pages.get(key);\n if (loaded && (!more || loaded.done)) {\n return state.menu;\n }\n if (state.mode === null) {\n speculate();\n }\n const request = readPage(menuId, categoryId, key, loaded?.next);\n pending.set(key, request);\n try {\n return await request;\n } finally {\n pending.delete(key);\n }\n },\n /** Aborts in-flight reads; `resume()` makes the loader usable again. */\n dispose() {\n state.abort.abort();\n },\n resume() {\n if (state.abort.signal.aborted) {\n state.abort = new AbortController();\n }\n },\n };\n}\n","import type { Menu, Zappie } from \"@zappie/sdk\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { createCatalogueLoader, type CatalogueStrategy } from \"./loader\";\n\nexport function useCatalogueData({\n client,\n initialMenu,\n selectedMenuId,\n fulfilmentMode,\n resolveStrategy,\n revision,\n}: {\n client: Zappie;\n initialMenu: Menu;\n selectedMenuId: string;\n fulfilmentMode: \"pickup\" | \"delivery\";\n resolveStrategy: CatalogueStrategy;\n revision?: string;\n}) {\n const [catalogue, setCatalogue] = useState(initialMenu);\n const show = useCallback(\n (value: Menu) =>\n setCatalogue({\n ...value,\n ...(initialMenu.menus ? { menus: initialMenu.menus } : {}),\n categories: initialMenu.categories.map(\n (category) =>\n value.categories.find((loaded) => loaded.id === category.id) ??\n category,\n ),\n }),\n [initialMenu],\n );\n const loader = useMemo(() => {\n const selected = initialMenu.menus?.find(\n (source) => source.id === selectedMenuId,\n );\n const scoped = {\n ...initialMenu,\n ...(selected ? { menus: [selected] } : {}),\n categories: initialMenu.categories.filter(\n (category) => !selected || selected.categoryIds.includes(category.id),\n ),\n };\n return createCatalogueLoader(\n client,\n scoped,\n resolveStrategy,\n show,\n fulfilmentMode,\n revision,\n );\n }, [\n client,\n initialMenu,\n selectedMenuId,\n fulfilmentMode,\n resolveStrategy,\n revision,\n show,\n ]);\n useEffect(() => {\n loader.resume();\n return () => loader.dispose();\n }, [loader]);\n const source =\n catalogue.menus?.find((value) => value.id === selectedMenuId) ??\n catalogue.menus?.[0];\n const categories = useMemo(\n () =>\n catalogue.categories.filter((category) =>\n source?.categoryIds.includes(category.id),\n ),\n [catalogue.categories, source],\n );\n const [error, setError] = useState<string>();\n const [busy, setBusy] = useState(false);\n const reach = useCallback(\n async (categoryId: string, more = false) => {\n if (!source || (!more && loader.isLoaded(source.id, categoryId))) {\n return;\n }\n setBusy(true);\n setError(undefined);\n try {\n show(await loader.reach(source.id, categoryId, more));\n } catch (failure) {\n if (!(failure instanceof Error) || failure.name !== \"AbortError\") {\n setError(\"Catalogue could not load. Try again.\");\n }\n } finally {\n setBusy(false);\n }\n },\n [loader, source, show],\n );\n return { catalogue, source, categories, loader, error, busy, reach };\n}\n","import type { Category } from \"@zappie/sdk\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport function useCategoryScroll({\n categories,\n selectedCategoryId,\n itemOpen,\n menuId,\n menuLayout,\n reach,\n onSelectCategory,\n}: {\n categories: readonly Category[];\n selectedCategoryId?: string;\n itemOpen: boolean;\n menuId?: string;\n menuLayout?: string;\n reach(categoryId: string): Promise<void>;\n onSelectCategory(categoryId: string): void;\n}) {\n const [active, setActive] = useState(selectedCategoryId ?? categories[0]?.id);\n const activeRef = useRef(active);\n activeRef.current = active;\n const sections = useRef(new Map<string, HTMLElement>());\n const wanted = useRef<string>(undefined);\n const reading = useRef(false);\n const reachLatest = useCallback(\n (categoryId: string) => {\n wanted.current = categoryId;\n if (reading.current) {\n return;\n }\n reading.current = true;\n void (async () => {\n try {\n while (wanted.current) {\n const next = wanted.current;\n wanted.current = undefined;\n await reach(next);\n }\n } finally {\n reading.current = false;\n }\n })();\n },\n [reach],\n );\n useEffect(() => {\n if (itemOpen) {\n return;\n }\n const id = selectedCategoryId ?? categories[0]?.id;\n if (id) {\n setActive(id);\n void reach(id);\n }\n }, [menuId, selectedCategoryId, itemOpen, reach, categories]);\n useEffect(() => {\n if (itemOpen) {\n return;\n }\n let frame = 0;\n const select = () => {\n frame = 0;\n let id = categories[0]?.id;\n for (const category of categories) {\n const top = sections.current\n .get(category.id)\n ?.getBoundingClientRect().top;\n if (top === undefined) {\n continue;\n }\n if (top > 200) {\n break;\n }\n id = category.id;\n }\n if (\n window.scrollY + window.innerHeight >=\n document.documentElement.scrollHeight - 2\n ) {\n id = categories.at(-1)?.id ?? id;\n }\n if (id && id !== activeRef.current) {\n setActive(id);\n reachLatest(id);\n }\n };\n const onScroll = () => {\n if (!frame) {\n frame = requestAnimationFrame(select);\n }\n };\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(frame);\n };\n }, [categories, itemOpen, reachLatest]);\n const selectCategory = useCallback(\n (id: string) => {\n setActive(id);\n onSelectCategory(id);\n sections.current.get(id)?.scrollIntoView({ block: \"start\" });\n void reach(id);\n },\n [onSelectCategory, reach],\n );\n const previousLayout = useRef(menuLayout);\n useEffect(() => {\n if (previousLayout.current !== menuLayout && active) {\n sections.current.get(active)?.scrollIntoView({ block: \"start\" });\n }\n previousLayout.current = menuLayout;\n }, [menuLayout, active]);\n const focusCategory = useCallback((id: string) => {\n sections.current.get(id)?.querySelector(\"h3\")?.focus();\n }, []);\n return {\n active,\n sections,\n selectCategory,\n focusCategory,\n };\n}\n","import { useOverlay } from \"@zappie/foundations\";\nimport type { Item, MenuSection } from \"@zappie/sdk\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { CatalogueNavigation } from \"../navigation\";\n\nexport function useItemOpener({\n navigation,\n source,\n clearSearch,\n}: {\n navigation: CatalogueNavigation;\n source?: MenuSection;\n clearSearch(): void;\n}) {\n const searchOverlay = useOverlay(\"catalogue_search\", \"search\");\n const [pendingItem, setPendingItem] = useState<Item>();\n const open = useCallback(\n async (item: Item) => {\n if (searchOverlay.isOpen) {\n setPendingItem(item);\n searchOverlay.close();\n return;\n }\n const placement =\n item.placements?.find((value) => value.menuId === source?.id) ??\n item.placements?.[0];\n const menuId = placement?.menuId ?? source?.id;\n if (menuId) {\n clearSearch();\n await navigation.openItem({\n itemId: item.id,\n item,\n menuId,\n ...(placement ? { categoryId: placement.categoryId } : {}),\n });\n }\n },\n [clearSearch, navigation, searchOverlay, source],\n );\n useEffect(() => {\n if (pendingItem && !searchOverlay.isOpen) {\n const frame = requestAnimationFrame(() => {\n setPendingItem(undefined);\n void open(pendingItem);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [pendingItem, searchOverlay.isOpen, open]);\n return open;\n}\n","\"use client\";\nimport { createSearchIndex, type SearchResult } from \"@zappie/foundations\";\nimport type { Menu, SearchPage } from \"@zappie/sdk\";\nimport { useZappie } from \"@zappie/sdk/react\";\nimport { useEffect, useMemo, useState } from \"react\";\n\n/** Loaded matches win; remote fallback never hydrates a complete catalogue. */\nexport function useSearchSource(menu: Menu, enabled: boolean) {\n const client = useZappie();\n const [query, setQuery] = useState(\"\");\n const [composing, setComposing] = useState(false);\n const [attempt, setAttempt] = useState(0);\n const [cursor, setCursor] = useState<string>();\n const [remote, setRemote] = useState<{\n query: string;\n page?: SearchPage;\n error?: string;\n loading?: boolean;\n }>({ query: \"\" });\n const index = useMemo(() => createSearchIndex(menu), [menu]);\n const local = useMemo(() => index(query), [index, query]);\n const hasLocalItems = local.some((result) => result.type === \"item\");\n useEffect(() => {\n if (!enabled || composing || !query.trim() || hasLocalItems) {\n return;\n }\n const abort = new AbortController();\n const timer = setTimeout(() => {\n setRemote((previous) => ({\n ...(cursor && previous.query === query ? previous : {}),\n query,\n loading: true,\n }));\n void client.menu\n .search(query, {\n branch: menu.branchId,\n signal: abort.signal,\n ...(cursor ? { cursor } : {}),\n })\n .then(\n (page) => {\n if (!abort.signal.aborted) {\n setRemote((previous) => {\n if (!cursor || previous.query !== query || !previous.page) {\n return { query, page };\n }\n return {\n query,\n page: {\n ...page,\n menu: {\n ...page.menu,\n items: {\n ...previous.page.menu.items,\n ...page.menu.items,\n },\n categories: [\n ...new Map(\n [\n ...previous.page.menu.categories,\n ...page.menu.categories,\n ].map((category) => [category.id, category]),\n ).values(),\n ],\n },\n },\n };\n });\n }\n },\n () => {\n if (!abort.signal.aborted) {\n setRemote((previous) => ({\n ...(cursor && previous.query === query ? previous : {}),\n query,\n loading: false,\n error: \"Search could not load. Try again.\",\n }));\n }\n },\n );\n }, 500);\n return () => {\n clearTimeout(timer);\n abort.abort();\n };\n }, [\n client,\n menu.branchId,\n query,\n enabled,\n composing,\n hasLocalItems,\n attempt,\n cursor,\n ]);\n const current =\n !composing && remote.query === query && !hasLocalItems ? remote : undefined;\n const results = useMemo(() => {\n const values: SearchResult[] = [...local];\n for (const item of Object.values(current?.page?.menu.items ?? {})) {\n if (\n !values.some(\n (result) => result.type === \"item\" && result.item.id === item.id,\n )\n ) {\n values.push({ type: \"item\", item, score: 0 });\n }\n }\n for (const category of current?.page?.menu.categories ?? []) {\n if (\n category.name\n .toLocaleLowerCase()\n .includes(query.trim().toLocaleLowerCase()) &&\n !values.some(\n (result) =>\n result.type === \"category\" && result.category.id === category.id,\n )\n ) {\n values.push({ type: \"category\", category, score: 0 });\n }\n }\n return values;\n }, [local, current?.page, query]);\n return {\n query,\n setQuery: (value: string) => {\n setCursor(undefined);\n setQuery(value);\n },\n hasMore: Boolean(current?.page?.nextCursor),\n loadMore: () => {\n if (!current?.loading && current?.page?.nextCursor) {\n setCursor(current.page.nextCursor);\n }\n },\n source: {\n results,\n isLoading: current?.loading ?? false,\n ...(current?.error ? { error: current.error } : {}),\n retry: () => setAttempt((value) => value + 1),\n onCompositionChange: setComposing,\n },\n };\n}\n","\"use client\";\nimport { useOverlay } from \"@zappie/foundations\";\nimport {\n useCart,\n useCartCatalogue,\n useStore,\n useZappie,\n} from \"@zappie/sdk/react\";\nimport { useCallback, useState } from \"react\";\nimport { ThemeClassProvider } from \"../cart/theme-class\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { useCatalogueNavigation } from \"../navigation\";\nimport { CatalogueCart } from \"./catalogue-cart\";\nimport { CatalogueHeader } from \"./catalogue-header\";\nimport { CatalogueSearch } from \"./catalogue-search\";\nimport { CategoryNavigation } from \"./category-navigation\";\nimport { CategorySection } from \"./category-section\";\nimport { InfoBanners } from \"./info-banners\";\nimport type { CatalogueProps } from \"./types\";\nimport { useCatalogueData } from \"./use-catalogue-data\";\nimport { useCategoryScroll } from \"./use-category-scroll\";\nimport { useItemOpener } from \"./use-item-opener\";\nimport { useSearchSource } from \"./use-search-source\";\n\nexport type * from \"./types\";\n\nexport function Catalogue({\n initialMenu,\n resolveStrategy,\n themeClass,\n orderAction = \"View\",\n menuNotice,\n revision,\n slots,\n}: CatalogueProps) {\n const client = useZappie();\n const fulfilmentMode =\n useBaseHostBridge().fulfilmentMode === \"pickup\" ? \"pickup\" : \"delivery\";\n const navigation = useCatalogueNavigation();\n const store = useStore();\n const cart = useCart();\n const cartOverlay = useOverlay(\"modal_id\", \"review-menu\");\n useCartCatalogue();\n const selectedMenuId =\n navigation.location.menuId ?? initialMenu.menus?.[0]?.id ?? initialMenu.id;\n const data = useCatalogueData({\n client,\n initialMenu,\n selectedMenuId,\n fulfilmentMode,\n resolveStrategy,\n ...(revision !== undefined ? { revision } : {}),\n });\n const layout = navigation.location.menuLayout ?? \"GRID\";\n const [searchOpen, setSearchOpen] = useState(false);\n const search = useSearchSource(data.catalogue, searchOpen);\n const clearSearch = useCallback(() => {\n setSearchOpen(false);\n search.setQuery(\"\");\n }, [search.setQuery]);\n const openItem = useItemOpener({\n navigation,\n ...(data.source !== undefined ? { source: data.source } : {}),\n clearSearch,\n });\n const categories = useCategoryScroll({\n categories: data.categories,\n ...(navigation.location.categoryId !== undefined\n ? { selectedCategoryId: navigation.location.categoryId }\n : {}),\n itemOpen: Boolean(navigation.location.item),\n ...(data.source?.id !== undefined ? { menuId: data.source.id } : {}),\n ...(navigation.location.menuLayout !== undefined\n ? { menuLayout: navigation.location.menuLayout }\n : {}),\n reach: data.reach,\n onSelectCategory: (categoryId) => navigation.selectCategory(categoryId),\n });\n const branch = store.data?.branches.find(\n (value) => value.id === data.catalogue.branchId,\n );\n const BeforeList = slots?.BeforeList;\n const AfterList = slots?.AfterList;\n return (\n <ThemeClassProvider value={themeClass}>\n <section\n className={[\"z-base-catalogue\", themeClass].filter(Boolean).join(\" \")}\n data-zappie-theme=\"base\"\n aria-label=\"Catalogue\"\n >\n <CatalogueHeader\n {...(branch !== undefined ? { branch } : {})}\n {...(store.data?.name !== undefined\n ? { storeName: store.data.name }\n : {})}\n {...(data.catalogue.menus !== undefined\n ? { menus: data.catalogue.menus }\n : {})}\n {...(data.source?.id !== undefined\n ? { selectedMenuId: data.source.id }\n : {})}\n cartLines={cart.lines}\n cartOpen={cartOverlay.isOpen}\n fulfilmentMode={fulfilmentMode}\n layout={layout}\n {...(slots !== undefined ? { slots } : {})}\n onOpenCart={() => void navigation.openCart()}\n onOpenBranchDetails={() => void navigation.openBranchDetails?.()}\n onSelectMenu={(menuId) => navigation.selectMenu(menuId)}\n onOpenBranchFinder={() => void navigation.openBranchFinder()}\n onSwitchFulfilment={() => {\n void navigation.switchFulfilment(\n fulfilmentMode === \"pickup\" ? \"delivery\" : \"pickup\",\n );\n }}\n onSetLayout={(value) => navigation.setLayout(value)}\n />\n {menuNotice && <p role=\"status\">{menuNotice}</p>}\n <InfoBanners\n {...(data.source?.infoBanner\n ? { value: data.source.infoBanner }\n : {})}\n />\n {BeforeList && <BeforeList menu={data.catalogue} />}\n <CatalogueSearch\n search={search}\n open={searchOpen}\n {...(themeClass !== undefined ? { themeClass } : {})}\n onOpen={() => setSearchOpen(true)}\n onSelectItem={(item) => void openItem(item)}\n onSelectCategory={categories.selectCategory}\n />\n <CategoryNavigation\n categories={data.categories}\n {...(categories.active !== undefined\n ? { active: categories.active }\n : {})}\n {...(themeClass !== undefined ? { themeClass } : {})}\n {...(slots !== undefined ? { slots } : {})}\n onSelect={categories.selectCategory}\n onFocusCategory={categories.focusCategory}\n />\n {data.error && (\n <p role=\"alert\">\n {data.error}\n <button\n onClick={() => {\n if (categories.active) {\n void data.reach(categories.active);\n }\n }}\n >\n Retry catalogue\n </button>\n </p>\n )}\n {!data.categories.length && <p>No items available</p>}\n {data.categories.map((category, index) => (\n <CategorySection\n key={category.id}\n category={category}\n categoryIndex={index}\n catalogue={data.catalogue}\n {...(data.source?.id !== undefined\n ? { menuId: data.source.id }\n : {})}\n layout={layout}\n {...(slots !== undefined ? { slots } : {})}\n sections={categories.sections}\n cartOpen={cartOverlay.isOpen}\n client={client}\n busy={data.busy}\n hasMore={Boolean(\n data.source && data.loader.hasMore(data.source.id, category.id),\n )}\n itemHref={(itemId, menuId) =>\n navigation.hrefFor({\n type: \"item\",\n itemId,\n ...(menuId !== undefined ? { menuId } : {}),\n categoryId: category.id,\n })\n }\n onOpen={(item) => void openItem(item)}\n onLoadMore={() => void data.reach(category.id, true)}\n />\n ))}\n {AfterList && <AfterList menu={data.catalogue} />}\n {data.busy && <p role=\"status\">Loading products…</p>}\n <CatalogueCart\n action={orderAction}\n count={cart.lines.reduce((sum, line) => sum + line.quantity, 0)}\n {...(cart.subtotal ? { subtotal: cart.subtotal } : {})}\n client={client}\n onOpen={() => void navigation.openCart()}\n />\n </section>\n </ThemeClassProvider>\n );\n}\n"]}
@@ -0,0 +1,36 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { CartModule } from '@zappie/sdk';
3
+ import { CheckoutClient } from '@zappie/sdk/checkout';
4
+ import { CustomerClient } from '@zappie/sdk/customer';
5
+ import { ReactNode } from 'react';
6
+
7
+ type CheckoutPayload = ReturnType<CartModule["toCheckoutPayload"]>;
8
+ type CheckoutHandoff = {
9
+ contactPhone?: boolean;
10
+ customer: {
11
+ name?: string;
12
+ phoneLast4?: string;
13
+ } | null;
14
+ signIn(): Promise<void> | void;
15
+ pay(payload: CheckoutPayload, details?: {
16
+ contactPhone?: string;
17
+ }): Promise<void>;
18
+ };
19
+ declare function CheckoutHandoffProvider({ handoff, children, }: {
20
+ handoff: CheckoutHandoff;
21
+ children: ReactNode;
22
+ }): react_jsx_runtime.JSX.Element;
23
+ declare function useCheckoutHandoff(): CheckoutHandoff;
24
+ declare function createSdkCheckoutHandoff({ customer, checkout, branchId, returnUrl, cancelUrl, attribution, }: {
25
+ customer: CustomerClient;
26
+ checkout: CheckoutClient;
27
+ branchId: string;
28
+ returnUrl?: string;
29
+ cancelUrl?: string;
30
+ attribution?: () => {
31
+ source: string;
32
+ campaign: string;
33
+ };
34
+ }): CheckoutHandoff;
35
+
36
+ export { type CheckoutHandoff, CheckoutHandoffProvider, type CheckoutPayload, createSdkCheckoutHandoff, useCheckoutHandoff };
@@ -0,0 +1,4 @@
1
+ "use client";
2
+ export { CheckoutHandoffProvider, createSdkCheckoutHandoff, useCheckoutHandoff } from './chunk-IG63ONID.js';
3
+ //# sourceMappingURL=checkout.js.map
4
+ //# sourceMappingURL=checkout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"checkout.js"}
@@ -0,0 +1,352 @@
1
+ import { useThemeClass } from './chunk-JFEI2OUZ.js';
2
+ import { ItemForm, Money, Quantity, useOverlay, Overlay, OptionGroup, Choice } from '@zappie/foundations';
3
+ import { useZappie } from '@zappie/sdk/react';
4
+ import { countEvent } from '@zappie/sdk/visits';
5
+ import { useState, Fragment, useEffect } from 'react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ function LineOptions() {
9
+ return /* @__PURE__ */ jsx(ItemForm.Options, { children: ({ groups }) => [...groups].sort(
10
+ (left, right) => Number(right.isAttribute) - Number(left.isAttribute)
11
+ ).map((group) => /* @__PURE__ */ jsx(OptionsSection, { group }, group.id)) });
12
+ }
13
+ function OptionsSection({ group }) {
14
+ const [expanded, setExpanded] = useState(true);
15
+ const count = group.selection.max === group.selection.min && group.selection.min > 0 ? `Exactly ${group.selection.min}` : group.selection.max ? `Choose up to ${group.selection.max}` : group.selection.min ? `Choose at least ${group.selection.min}` : "Optional";
16
+ return /* @__PURE__ */ jsx(
17
+ OptionGroup,
18
+ {
19
+ group,
20
+ className: "z-base-option-group",
21
+ "aria-label": group.name,
22
+ children: ({ quantities, setQuantity, invalid }) => /* @__PURE__ */ jsxs(Fragment, { children: [
23
+ /* @__PURE__ */ jsx("h3", { className: "z-base-option-heading", children: /* @__PURE__ */ jsxs(
24
+ "button",
25
+ {
26
+ type: "button",
27
+ "aria-expanded": expanded || invalid,
28
+ onClick: () => setExpanded(!expanded),
29
+ children: [
30
+ /* @__PURE__ */ jsx("span", { children: group.name }),
31
+ /* @__PURE__ */ jsxs("span", { className: "z-base-option-rule", children: [
32
+ count,
33
+ group.required && /* @__PURE__ */ jsx("strong", { children: " Required*" })
34
+ ] }),
35
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "z-base-option-chevron", children: expanded || invalid ? "\u2304" : "\u203A" })
36
+ ]
37
+ }
38
+ ) }),
39
+ (expanded || invalid) && /* @__PURE__ */ jsxs("div", { className: "z-base-option-choices", children: [
40
+ group.helpText && /* @__PURE__ */ jsx("p", { children: group.helpText }),
41
+ group.kind === "select" && group.choices.map((choice) => /* @__PURE__ */ jsxs("div", { className: "z-base-choice-row", children: [
42
+ /* @__PURE__ */ jsx(Choice, { choice, className: "z-base-choice", children: /* @__PURE__ */ jsxs("span", { className: "z-base-choice-label", children: [
43
+ /* @__PURE__ */ jsx("span", { children: choice.name }),
44
+ (choice.priceHint ?? choice.price).amountMinor !== 0 && /* @__PURE__ */ jsxs("span", { className: "z-base-choice-price", children: [
45
+ (choice.priceHint ?? choice.price).amountMinor > 0 ? "+" : "",
46
+ /* @__PURE__ */ jsx(Money, { value: choice.priceHint ?? choice.price })
47
+ ] }),
48
+ !choice.isAvailable && /* @__PURE__ */ jsx("span", { className: "z-base-choice-price", children: "Unavailable" })
49
+ ] }) }),
50
+ choice.quantity && (quantities[choice.id] ?? 0) > 0 && /* @__PURE__ */ jsxs(
51
+ Quantity.Root,
52
+ {
53
+ className: "z-base-quantity",
54
+ value: quantities[choice.id] ?? 0,
55
+ min: 0,
56
+ max: choice.quantity.max ?? 99,
57
+ disabled: !choice.isAvailable,
58
+ onValueChange: (quantity) => setQuantity(choice.id, quantity),
59
+ children: [
60
+ /* @__PURE__ */ jsx(
61
+ Quantity.Decrement,
62
+ {
63
+ "aria-label": `Decrease ${choice.name}`,
64
+ children: "\u2212"
65
+ }
66
+ ),
67
+ /* @__PURE__ */ jsx(
68
+ Quantity.Value,
69
+ {
70
+ "aria-label": `${choice.name} quantity`
71
+ }
72
+ ),
73
+ /* @__PURE__ */ jsx(
74
+ Quantity.Increment,
75
+ {
76
+ "aria-label": `Increase ${choice.name}`,
77
+ children: "+"
78
+ }
79
+ )
80
+ ]
81
+ }
82
+ )
83
+ ] }, choice.id)),
84
+ (group.kind !== "select" || group.isInformational) && /* @__PURE__ */ jsx(OptionGroup.Input, { className: "z-base-input" })
85
+ ] })
86
+ ] })
87
+ }
88
+ );
89
+ }
90
+
91
+ // src/item/configurator-commit.ts
92
+ function createConfiguratorCommit(client, line) {
93
+ if (!line) {
94
+ return void 0;
95
+ }
96
+ return (input) => {
97
+ const nextInput = { ...input };
98
+ delete nextInput.variantId;
99
+ return client.cart.update(line.id, nextInput);
100
+ };
101
+ }
102
+ function useConfiguratorDraft({
103
+ item,
104
+ menuId,
105
+ line,
106
+ scope
107
+ }) {
108
+ const key = `zappie:product-draft:${scope}:${item.id}:${menuId ?? ""}:${line?.id ?? "new"}`;
109
+ const initial = {
110
+ itemId: item.id,
111
+ ...menuId !== void 0 ? { menuId } : {},
112
+ quantity: line?.quantity ?? item.quantity.min,
113
+ choices: line?.choices.map((choice) => ({ ...choice })) ?? [],
114
+ inputs: { ...line?.inputs },
115
+ note: line?.note ?? ""
116
+ };
117
+ const [value, setValue] = useState(initial);
118
+ const [restored, setRestored] = useState(false);
119
+ useEffect(() => {
120
+ try {
121
+ const saved = JSON.parse(sessionStorage.getItem(key) ?? "null");
122
+ if (saved?.itemId === item.id && saved?.menuId === menuId && Number.isFinite(saved.quantity) && Array.isArray(saved.choices) && saved.choices.every((choice) => {
123
+ if (!choice || typeof choice !== "object") {
124
+ return false;
125
+ }
126
+ const value2 = choice;
127
+ return typeof value2.groupId === "string" && typeof value2.choiceId === "string" && Number.isFinite(value2.quantity);
128
+ }) && saved.inputs && typeof saved.inputs === "object" && !Array.isArray(saved.inputs) && Object.values(saved.inputs).every(
129
+ (value2) => typeof value2 === "string" || typeof value2 === "boolean" || typeof value2 === "number" && Number.isFinite(value2)
130
+ ) && typeof saved.note === "string") {
131
+ setValue({
132
+ ...initial,
133
+ quantity: saved.quantity,
134
+ choices: saved.choices,
135
+ inputs: saved.inputs,
136
+ note: saved.note
137
+ });
138
+ }
139
+ } catch {
140
+ }
141
+ setRestored(true);
142
+ }, [key]);
143
+ useEffect(() => {
144
+ if (restored) {
145
+ try {
146
+ sessionStorage.setItem(key, JSON.stringify(value));
147
+ } catch {
148
+ }
149
+ }
150
+ }, [key, value, restored]);
151
+ const clear = () => {
152
+ try {
153
+ sessionStorage.removeItem(key);
154
+ } catch {
155
+ }
156
+ };
157
+ return { clear, restored, setValue, value };
158
+ }
159
+ function ItemNote({
160
+ id,
161
+ value,
162
+ onChange
163
+ }) {
164
+ const overlay = useOverlay("product_note", id);
165
+ const themeClass = useThemeClass("z-base-cart z-base-note");
166
+ return /* @__PURE__ */ jsxs(
167
+ Overlay.Root,
168
+ {
169
+ param: "product_note",
170
+ id,
171
+ presentation: { base: "drawer", lg: "dialog" },
172
+ children: [
173
+ /* @__PURE__ */ jsx(Overlay.Trigger, { className: "z-base-button-secondary", children: value ? "Edit Note" : "Add Note" }),
174
+ /* @__PURE__ */ jsxs(Overlay.Content, { "data-zappie-theme": "base", className: themeClass, children: [
175
+ /* @__PURE__ */ jsxs("header", { className: "z-base-cart-header", children: [
176
+ /* @__PURE__ */ jsx(Overlay.Title, { children: "Add a note" }),
177
+ /* @__PURE__ */ jsx(
178
+ Overlay.Close,
179
+ {
180
+ className: "z-base-button-secondary",
181
+ "aria-label": "Close note",
182
+ children: "\u2715"
183
+ }
184
+ )
185
+ ] }),
186
+ /* @__PURE__ */ jsxs("div", { className: "z-base-cart-body", children: [
187
+ /* @__PURE__ */ jsxs("label", { className: "z-base-field", children: [
188
+ "Note",
189
+ /* @__PURE__ */ jsx(
190
+ "textarea",
191
+ {
192
+ className: "z-base-input",
193
+ maxLength: Math.max(35, value.length),
194
+ value,
195
+ onChange: (event) => onChange(event.target.value)
196
+ }
197
+ )
198
+ ] }),
199
+ /* @__PURE__ */ jsx(
200
+ "button",
201
+ {
202
+ type: "button",
203
+ className: "z-base-button",
204
+ onClick: overlay.close,
205
+ children: "Add note"
206
+ }
207
+ )
208
+ ] })
209
+ ] })
210
+ ]
211
+ }
212
+ );
213
+ }
214
+ function VariantStatus({
215
+ item,
216
+ value
217
+ }) {
218
+ const matches = item.variants.filter(
219
+ (variant) => Object.entries(variant.attributeChoices).every(
220
+ ([groupId, choiceId]) => value.choices?.some(
221
+ (choice) => choice.groupId === groupId && choice.choiceId === choiceId
222
+ )
223
+ )
224
+ );
225
+ const selected = matches.length === 1 ? matches[0] : void 0;
226
+ if (!item.isAvailable || !selected) {
227
+ return null;
228
+ }
229
+ return !selected.isAvailable ? /* @__PURE__ */ jsx("p", { role: "status", children: "Out of stock" }) : selected.lowStock ? /* @__PURE__ */ jsx("p", { role: "status", children: "Low stock" }) : null;
230
+ }
231
+ function ItemConfigurator({
232
+ item,
233
+ menuId,
234
+ line,
235
+ onComplete,
236
+ scope,
237
+ showPrice = false,
238
+ introduction
239
+ }) {
240
+ const client = useZappie();
241
+ const { clear, restored, setValue, value } = useConfiguratorDraft({
242
+ item,
243
+ ...menuId !== void 0 ? { menuId } : {},
244
+ ...line !== void 0 ? { line } : {},
245
+ scope
246
+ });
247
+ const [error, setError] = useState();
248
+ const onCommit = createConfiguratorCommit(client, line);
249
+ return /* @__PURE__ */ jsx(
250
+ ItemForm.Root,
251
+ {
252
+ item,
253
+ value,
254
+ onValueChange: (next) => {
255
+ const nextValue = { ...next };
256
+ delete nextValue.variantId;
257
+ setValue(nextValue);
258
+ setError(void 0);
259
+ },
260
+ ...onCommit ? { onCommit } : {},
261
+ onAdded: () => {
262
+ if (!line) {
263
+ countEvent("add");
264
+ }
265
+ clear();
266
+ onComplete();
267
+ },
268
+ className: "z-base-configurator",
269
+ children: (configuration) => /* @__PURE__ */ jsxs(Fragment, { children: [
270
+ /* @__PURE__ */ jsxs("div", { className: "z-base-item-summary", children: [
271
+ showPrice && /* @__PURE__ */ jsxs("p", { className: "z-base-item-price", children: [
272
+ /* @__PURE__ */ jsx(Money, { value: configuration.unitPrice }),
273
+ item.compareAtPrice && /* @__PURE__ */ jsx("del", { children: /* @__PURE__ */ jsx(Money, { value: item.compareAtPrice }) })
274
+ ] }),
275
+ !line && /* @__PURE__ */ jsx(
276
+ ItemNote,
277
+ {
278
+ id: item.id,
279
+ value: value.note ?? "",
280
+ onChange: (note) => configuration.setValue({ ...value, note })
281
+ }
282
+ )
283
+ ] }),
284
+ line && /* @__PURE__ */ jsxs("label", { className: "z-base-field", children: [
285
+ "Note",
286
+ /* @__PURE__ */ jsx(
287
+ "textarea",
288
+ {
289
+ className: "z-base-input",
290
+ maxLength: line ? 280 : Math.max(35, value.note?.length ?? 0),
291
+ value: value.note ?? "",
292
+ onChange: (event) => configuration.setValue({ ...value, note: event.target.value })
293
+ }
294
+ )
295
+ ] }),
296
+ showPrice && /* @__PURE__ */ jsx(VariantStatus, { item, value: configuration.value }),
297
+ introduction,
298
+ /* @__PURE__ */ jsx(LineOptions, {}),
299
+ configuration.issues.length > 0 && /* @__PURE__ */ jsx("div", { role: "alert", children: configuration.issues.map((issue, index) => /* @__PURE__ */ jsx("p", { children: issue.message }, `${issue.code}:${issue.groupId}:${index}`)) }),
300
+ error && /* @__PURE__ */ jsx("p", { role: "alert", children: error }),
301
+ line && /* @__PURE__ */ jsxs("p", { "aria-live": "polite", children: [
302
+ "Estimated total: ",
303
+ /* @__PURE__ */ jsx(Money, { value: configuration.total })
304
+ ] }),
305
+ /* @__PURE__ */ jsxs("footer", { className: "z-base-item-purchase", children: [
306
+ /* @__PURE__ */ jsxs(
307
+ Quantity.Root,
308
+ {
309
+ className: "z-base-quantity",
310
+ value: configuration.quantity,
311
+ min: item.quantity.min,
312
+ max: Math.min(item.quantity.max ?? 99, 99),
313
+ step: item.quantity.step,
314
+ onValueChange: configuration.setQuantity,
315
+ children: [
316
+ /* @__PURE__ */ jsx(Quantity.Decrement, { "aria-label": "Decrease quantity", children: "\u2212" }),
317
+ /* @__PURE__ */ jsx(Quantity.Value, { "aria-label": "Item quantity" }),
318
+ /* @__PURE__ */ jsx(Quantity.Increment, { "aria-label": "Increase quantity", children: "+" })
319
+ ]
320
+ }
321
+ ),
322
+ /* @__PURE__ */ jsxs(
323
+ "button",
324
+ {
325
+ type: "button",
326
+ className: "z-base-button",
327
+ disabled: !restored || !item.isAvailable,
328
+ onClick: () => {
329
+ try {
330
+ configuration.add();
331
+ } catch (failure) {
332
+ setError(
333
+ failure instanceof Error ? failure.message : "Unable to save this item. Please try again."
334
+ );
335
+ }
336
+ },
337
+ children: [
338
+ item.isAvailable ? line ? "Save changes" : "Add" : item.stockLabel ?? "Unavailable",
339
+ " ",
340
+ !line && /* @__PURE__ */ jsx(Money, { value: configuration.total })
341
+ ]
342
+ }
343
+ )
344
+ ] })
345
+ ] })
346
+ }
347
+ );
348
+ }
349
+
350
+ export { ItemConfigurator };
351
+ //# sourceMappingURL=chunk-2MV6KU3R.js.map
352
+ //# sourceMappingURL=chunk-2MV6KU3R.js.map