{"version":3,"file":"static/js/main.ad115071.js","mappings":"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Ib,EAAE,CAACu2H,KAAK11H,GAAG,GAAE,GAAE,CAACP,IAAIW,EAAElD,GAAUA,CAAC,EAC5M4B,EAAQ62H,0BAAqB,IAASh3H,EAAEg3H,qBAAqBh3H,EAAEg3H,qBAAqB71H,+BCPxUjB,EAAOC,QAAU,EAAjBD,6BCaF,IAEI+2H,EAAU,WAAY,EA2C1B/2H,EAAOC,QAAU82H,kBC7DjB,IAAIzpH,EAAM,CACT,oBAAqB,CACpB,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,GAED,uBAAwB,CACvB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,kBAAmB,CAClB,KACA,EACA,KAED,wBAAyB,CACxB,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,iBAAkB,CACjB,IACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,KAED,oBAAqB,CACpB,KACA,EACA,IAED,wBAAyB,CACxB,KACA,GAED,yBAA0B,CACzB,KACA,GAED,eAAgB,CACf,KACA,EACA,KAED,YAAa,CACZ,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,KAED,uBAAwB,CACvB,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,cAAe,CACd,KACA,GAED,sBAAuB,CACtB,GACA,EACA,IAED,aAAc,CACb,KACA,EACA,KAED,eAAgB,CACf,KACA,EACA,IAED,wBAAyB,CACxB,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,cAAe,CACd,KACA,EACA,KAED,mBAAoB,CACnB,KACA,GAED,aAAc,CACb,KACA,EACA,KAED,aAAc,CACb,IACA,EACA,KAED,eAAgB,CACf,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,aAAc,CACb,KACA,EACA,KAED,qBAAsB,CACrB,KACA,EACA,KAED,0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,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,GAAM,YACN,QAAS,YACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,WACP,SAAU,WACV,GAAM,aACN,QAAS,aACT,GAAM,YACN,QAAS,YACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,aACP,SAAU,aACV,GAAM,WACN,QAAS,WACT,GAAM,WACN,aAAc,WACd,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,YACN,QAAS,YACT,QAAS,WACT,IAAO,aACP,SAAU,aACV,GAAM,gBACN,QAAS,gBACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,GAAM,WACN,aAAc,WACd,aAAc,YACd,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,cACN,QAAS,cACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,aAAc,WACd,IAAO,WACP,SAAU,WACV,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,IAAO,WACP,SAAU,WACV,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,QAAS,aACT,IAAO,aACP,SAAU,aACV,IAAO,aACP,SAAU,aACV,SAAU,aACV,SAAU,aACV,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,WACN,QAAS,WACT,QAAS,aACT,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,aACP,SAAU,aACV,SAAU,aACV,IAAO,aACP,SAAU,aACV,SAAU,aACV,IAAO,WACP,SAAU,WACV,IAAO,WACP,SAAU,WACV,GAAM,aACN,QAAS,aACT,GAAM,WACN,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,GAAM,aACN,QAAS,WACT,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,aACP,SAAU,aACV,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,aAAc,WACd,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,eAAgB,aAChB,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,aAAc,aACd,aAAc,aACd,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,SAAU,WACV,QAAS,WACT,QAAS,WACT,QAAS,WACT,QAAS,WACT,GAAM,aACN,QAAS,cAGWA,EAAK7yB,eAAeS,cAAgB,cCvUY,KAAAhqE,OD0U3Co8F,KACR,CACjB,GAAM,QACN,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,GAAM,QACN,QAAS,SACT,GAAM,SACN,GAAM,SACN,GAAM,QACN,GAAM,OACN,GAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,QAAS,QACT,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,SACN,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,SACT,QAAS,SACT,QAAS,QACT,GAAM,QACN,QAAS,SACT,QAAS,OACT,QAAS,SACT,GAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,IAAO,SACP,GAAM,QACN,QAAS,QACT,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,WAAY,SACZ,WAAY,SACZ,GAAM,SACN,GAAM,QACN,GAAM,SACN,GAAM,OACN,GAAM,OACN,QAAS,QACT,GAAM,QACN,GAAM,OACN,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,SACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,GAAM,QACN,GAAM,OACN,GAAM,SACN,GAAM,QACN,GAAM,SACN,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,QAAS,QACT,GAAM,QACN,GAAM,QACN,SAAU,OACV,QAAS,SACT,GAAM,QACN,QAAS,QACT,GAAM,QACN,GAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,OACN,GAAM,OACN,GAAM,QACN,UAAW,OACX,GAAM,OACN,GAAM,SACN,GAAM,QACN,GAAM,UACN,GAAM,QACN,GAAM,SACN,IAAO,QACP,GAAM,QACN,GAAM,OACN,GAAM,QACN,QAAS,QACT,IAAO,QACP,GAAM,QACN,IAAO,QACP,WAAY,QACZ,IAAO,QACP,QAAS,QACT,GAAM,QACN,GAAM,QACN,UAAW,QACX,GAAM,QACN,GAAM,QACN,WAAY,QACZ,GAAM,SACN,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,SAGOA,EAAK7yB,gBAAkB,SCvdiCmrK,CAAoBj9J,KAAY,KDZ5G,IAA8B2kB,CCYkF,EA+BhH,GA5BiC+vE,IAAS30K,IAAa,IAAZ,KAACiiJ,GAAKjiJ,EAC/C,MAAMglO,EAAoB,OAAJ/iF,QAAI,IAAJA,OAAI,EAAJA,EAAM+iF,cACtBmY,EAAaH,GAAwB,OAAbhY,QAAa,IAAbA,OAAa,EAAbA,EAAekC,YACvCkW,EAAeJ,GAAW/6F,EAAK4iF,kBASrC,OAPAxkH,EAAAA,EAAAA,YAAU,KACRluG,YAAW,KACL,OAAJ8vI,QAAI,IAAJA,GAAAA,EAAMmkF,2BAA2B,GAChC,IAAK,GAEP,CAAK,OAAJnkF,QAAI,IAAJA,OAAI,EAAJA,EAAMkjF,wBAGR5mF,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,EACEuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,mCAAkCk7G,SAAA,CAC9CilC,EAAKwjF,wBAAyB3pF,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,4CAA2Ck7G,SACtFr6G,GAAE,mCAAoC,CAAC4mF,KAAM6zJ,MAC/CD,IAAcrhG,EAAAA,GAAAA,KAAA,OAAA9+B,SAAMr6G,GAAE,0BAA2B,CAAC4mF,KAAM4zJ,OACzDrhG,EAAAA,GAAAA,KAAA,KAAGzd,KAAmB,OAAb2mG,QAAa,IAAbA,OAAa,EAAbA,EAAeluN,YAAa1X,OAAO,SAASi+O,IAAI,sBAAqBrgI,SAAEr6G,GAAE,mCAE/E,OAAJs/I,QAAI,IAAJA,OAAI,EAAJA,EAAMkjF,wBAAwB5mF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,8BAA6Bk7G,SAAA,CACxEr6G,GAAE,+BACHm5I,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,sBAAsB7Q,MAAM,OAAOC,OAAO,OAAOwB,UAAU,sBAEvE,IClBP,GAhB+B9B,IAAyB,IAAxB,MAACw/F,EAAK,QAAG9wE,GAAS1uB,EAShD,OARAqgH,EAAAA,EAAAA,YAAU,KACRluG,YAAW,KAAO,IAADioO,EACV,OAAL56I,QAAK,IAALA,GAAiB,QAAZ46I,EAAL56I,EAAOknI,kBAAU,IAAA0T,GAAjBA,EAAmBjU,kBAAkB,GACpC,IAAK,GAEP,KAID5nF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,4BAA2Bk7G,SAAA,EACxC8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,cAAc7Q,MAAM,OAAOC,OAAO,SAASouB,IAClD,ECjBV,SAASilI,GAAQ5pI,GAAkC,OAAO4pI,GAAU,mBAAqBtwJ,QAAU,iBAAmBA,OAAOW,SAAW,SAAU+lB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqB1mB,QAAU0mB,EAAI3e,cAAgB/H,QAAU0mB,IAAQ1mB,OAAO3D,UAAY,gBAAkBqqB,CAAK,EAAG4pI,GAAQ5pI,EAAM,CAC/U,IAAIg6F,GAAY,CAAC,YAAa,YAAa,OAAQ,SAAU,QAAS,UAAW,MAAO,QAAS,YAAa,YAC9G,SAAS/kH,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAASuyG,GAAyBryG,EAAQ+nH,GAAY,GAAc,MAAV/nH,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQ+nH,GAAY,GAAc,MAAV/nH,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAOooH,EAAavoH,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAImoH,EAAWjoH,OAAQF,IAAOI,EAAM+nH,EAAWnoH,GAAQkoH,EAASl9G,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhNqoH,CAA8BjoH,EAAQ+nH,GAAuB,GAAItoH,OAAO2H,sBAAuB,CAAE,IAAIiyJ,EAAmB55J,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIw5J,EAAiBt5J,OAAQF,IAAOI,EAAMo5J,EAAiBx5J,GAAQkoH,EAASl9G,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAU8vD,qBAAqB5vD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASi7J,GAAkBj7J,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAIszG,EAAavyG,EAAMf,GAAIszG,EAAW5rG,WAAa4rG,EAAW5rG,aAAc,EAAO4rG,EAAWzlG,cAAe,EAAU,UAAWylG,IAAYA,EAAWxlG,UAAW,GAAMlO,OAAO6H,eAAe1H,EAAQuzG,EAAWlzG,IAAKkzG,EAAa,CAAE,CAG5T,SAASgR,GAAgBrgH,EAAGa,GAA6I,OAAxIw/G,GAAkB1kH,OAAO+2G,eAAiB/2G,OAAO+2G,eAAe72G,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE2wG,UAAY9vG,EAAUb,CAAG,EAAUqgH,GAAgBrgH,EAAGa,EAAI,CACvM,SAASm2J,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVC,MAAsB,OAAO,EAAM,IAAsF,OAAhF30J,QAAQvG,UAAUwG,QAAQtG,KAAK66J,QAAQC,UAAUz0J,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQm4J,GAA6B,OAAO,WAAkC,IAAsCj5H,EAAlCk5H,EAAQC,GAAgBR,GAAkB,GAAIC,EAA2B,CAAE,IAAIQ,EAAYD,GAAgBj7J,MAAMsL,YAAaw2B,EAAS64H,QAAQC,UAAUI,EAAOx7J,UAAW07J,EAAY,MAASp5H,EAASk5H,EAAMj7J,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlB+zJ,GAAQ/zJ,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAO4xJ,GAAuBn4J,EAAO,CAD4FkxG,CAA2Bl0G,KAAM8hC,EAAS,CAAG,CAExa,SAASq5H,GAAuBn4J,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIixG,eAAe,6DAAgE,OAAOjxG,CAAM,CAErK,SAASi4J,GAAgBz3J,GAA+J,OAA1Jy3J,GAAkB97J,OAAO+2G,eAAiB/2G,OAAOqF,eAAenF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE2wG,WAAah1G,OAAOqF,eAAehB,EAAI,EAAUy3J,GAAgBz3J,EAAI,CAOnN,IAAIg7G,GAAY,CACdtB,SAAUlM,KAAAA,KACVjvG,KAAMivG,KAAAA,OACNxjD,KAAMwjD,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,SAC7CwsI,OAAQxsI,KAAAA,OACR/1E,MAAO+1E,KAAAA,KACPj2D,QAASi2D,KAAAA,KACT3mG,IAAKuqJ,GACLjC,SAAU3hD,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,KAAgBA,KAAAA,SACjEtnG,UAAWsnG,KAAAA,KACXysI,MAAOzsI,KAAAA,KACPhvG,UAAWgvG,KAAAA,OACXsjD,UAAWtjD,KAAAA,QAET0sI,GAAqB,SAAU53H,IA3BnC,SAAmB9P,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI1sG,UAAU,sDAAyDysG,EAASp2G,UAAYT,OAAOiI,OAAO6uG,GAAcA,EAAWr2G,UAAW,CAAE0L,YAAa,CAAEpE,MAAO8uG,EAAU3oG,UAAU,EAAMD,cAAc,KAAWjO,OAAO6H,eAAegvG,EAAU,YAAa,CAAE3oG,UAAU,IAAc4oG,GAAY4N,GAAgB7N,EAAUC,EAAa,CA4BjcE,CAAUunI,EAAO53H,GACjB,IA9BoBhT,EAAaC,EAAYC,EA8BzC6oD,EAASrB,GAAakjF,GAC1B,SAASA,EAAMp9O,GACb,IAAI0zG,EAKJ,OAvCJ,SAAyBjqG,EAAU+oG,GAAe,KAAM/oG,aAAoB+oG,GAAgB,MAAM,IAAIvpG,UAAU,oCAAwC,CAmCpJwqG,CAAgB/zG,KAAM09O,IACtB1pI,EAAQ6nD,EAAO/7J,KAAKE,KAAMM,IACpB07J,OAAShoD,EAAMgoD,OAAO38J,KAAK87J,GAAuBnnD,IACxDA,EAAMkoD,MAAQloD,EAAMkoD,MAAM78J,KAAK87J,GAAuBnnD,IAC/CA,CACT,CAyEA,OA/GoBlB,EAuCP4qI,GAvCoB3qI,EAuCb,CAAC,CACnBpzG,IAAK,SACLuH,MAAO,SAAgBtG,GACjBZ,KAAKM,MAAMqyJ,UACb3yJ,KAAKM,MAAMqyJ,SAAS/xJ,GAEtBZ,KAAKY,IAAMA,CACb,GACC,CACDjB,IAAK,QACLuH,MAAO,WACDlH,KAAKY,KACPZ,KAAKY,IAAIs7J,OAEb,GACC,CACDv8J,IAAK,SACLuH,MAAO,WACL,IAAImgH,EAAcrnH,KAAKM,MACrB0B,EAAYqlH,EAAYrlH,UACxBsyJ,EAAYjtC,EAAYitC,UACxBqpF,EAAmBt2H,EAAYtlH,KAC/BA,OAA4B,IAArB47O,EAA8B,OAASA,EAC9CH,EAASn2H,EAAYm2H,OACrBviN,EAAQosF,EAAYpsF,MACpB8f,EAAUssE,EAAYtsE,QACtB1wC,EAAMg9G,EAAYh9G,IAClBozO,EAAQp2H,EAAYo2H,MACpB/zO,EAAY29G,EAAY39G,UACxBipJ,EAAWtrC,EAAYsrC,SACvB9N,EAAa9yC,GAAyBsV,EAAapD,IACjD25H,EAAa,CAAC,SAAU,QAAS,YAAYrzO,QAAQxI,IAAS,EAG9D87O,EAAuB,WAAT97O,EACd+7O,EAAsB,UAAT/7O,EACb40C,EAAMtsC,IAAQwzO,GAHW,aAAT97O,EAG6BA,EAAO,SACpDg8O,EAAmB,eACnBr0O,GACFq0O,EAAmB,GAAGr1O,OAAOq1O,EAAkB,cAC/CpnM,EAAMtsC,GAAO,SACJyzO,EACTC,EAAmB,aACVF,EACTE,EAAmB,cACVH,IAEPG,EADEN,EACiB,KAEA,oBAGnB54F,EAAWr3F,MApBI,MAoBiB3jD,KAAKg7I,EAAWr3F,QAClDinG,GAAS,oFACT+oF,EAAS34F,EAAWr3F,YACbq3F,EAAWr3F,MAEpB,IAAI5R,EAAUy4G,GAAgB14G,KAAW35C,EAAW+4C,GAAW,aAAc9f,GAAS,aAAYuiN,IAASK,EAAc,eAAen1O,OAAO80O,GAAU,gBAAgB90O,OAAO80O,IAAiBO,GAAmBzpF,GAQpN,OAPY,UAAR39G,GAAmBtsC,GAAsB,oBAARA,KACnCw6I,EAAW9iJ,KAAgB,WAATA,EAAoB,WAAaA,GAEjD8iJ,EAAW3nC,WAAcxzG,GAAsB,WAAT3H,GAAoC,kBAAR40C,GAA4B,WAARA,IACxF89G,GAAS,yBAA0B/rJ,OAAO3G,EAAM,8EACzC8iJ,EAAW3nC,UAEA+c,IAAAA,cAAoBtjF,EAAKz3C,GAAS,CAAC,EAAG2lJ,EAAY,CACpEjkJ,IAAK+xJ,EACL3wJ,UAAW45C,EACX,eAAgBb,IAEpB,MA7G0Ew/G,GAAkBznD,EAAYlzG,UAAWmzG,GAAiBC,GAAaunD,GAAkBznD,EAAaE,GAAc7zG,OAAO6H,eAAe8rG,EAAa,YAAa,CAAEzlG,UAAU,IA+GrPqwO,CACT,CApFyB,CAoFvBzjH,IAAAA,WACFyjH,GAAMl/H,UAAYA,GAClB,YC7GMw/H,GAAiB99O,IAAgC,IAA/B,SAAEuqK,EAAQ,YAAE98G,GAAaztD,EAC/C,MAAOmqK,EAAaC,IAAkB/wC,EAAAA,EAAAA,UAAS,IAY/C,OAAOklB,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,8BAA6Bk7G,SAAA,EACjD8+B,EAAAA,GAAAA,KAAC0hG,GAAK,CAAC37O,KAAK,OAAOmF,MAAOmjK,EAAaroK,UAAU,yBAAyByoK,SAAW7nK,IAAMq7O,OAXpE/2O,EAWoFtE,EAAEtD,OAAO4H,MAVpHojK,EAAepjK,QACfujK,EAASvjK,GAFcA,KAWoG,EAACymD,YAAaA,KACzIquF,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,kCAAiCk7G,SAC7CmtD,GAAcruB,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkBwqI,iBAAiB,wBAAwBr7I,MAAM,OAAOC,OAAO,OAAO4qI,QARvF8yG,KAC3B5zE,EAAe,IACfG,EAAS,GAAG,KAOTzuB,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,aAAawqI,iBAAiB,wBAAwBr7I,MAAM,OAAOC,OAAO,aAEpF,EAgDR,GA7CiBmS,IAAsH,IAArH,UAAEkvF,EAAS,MAAE36E,EAAK,cAAEykL,EAAa,SAAElhC,EAAQ,WAAE0zE,EAAU,eAAEC,EAAc,kBAAEC,EAAiB,SAAEthF,KAAa9yJ,GAAM0I,EAC/H,MAAO2rO,EAAcC,IAAmBhlH,EAAAA,EAAAA,WAAS,IAE1C8wC,EAAaC,IAAkB/wC,EAAAA,EAAAA,UAAS,IAEzCilH,EAAgBt3N,EAAM5d,QAAOoX,GAAwB,KAAhB2pJ,GAAsB3pJ,EAAKtP,KAAK6gE,cAAc1nE,QAAQ8/J,IAAgB,IAE3Go0E,EAAOh6N,IAAe,IAADi6N,EAAAC,EAAA,IAAb,KAAEj+N,GAAM+D,EACpB,OAAI/D,EAAK2kG,UACA4U,IAAAA,cAAoBv5G,EAAK2kG,YAE3Bo5B,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,2BAA0Bk7G,SAAA,CAC7Cx8F,EAAKqqJ,OAAQ/uB,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAMsP,EAAKqqJ,KAAM/oK,UAAU,sBAAsBzB,MAAiB,QAAZm+O,EAAEh+N,EAAKngB,aAAK,IAAAm+O,EAAAA,EAAI,OAAQl+O,OAAmB,QAAbm+O,EAAEj+N,EAAKlgB,cAAM,IAAAm+O,EAAAA,EAAI,SACxHj+N,EAAKtP,OACF,EAGR,OAEEqtI,EAAAA,GAAAA,MAACklB,GAAQ,CAACnI,OAAQ8iF,EAAcrhF,OAjBnBA,IAAMshF,GAAiB1nF,IAAeA,IAiBHh1D,UAAWA,EAAW7/F,UAAU,YAAWk7G,SAAA,CACxFkhI,GACEpiG,EAAAA,GAAAA,KAAC+qB,GAAc,CAAC/kK,UAAU,6BAA6B+6J,SAAUA,EAAS7/C,SAAEkhI,KAC5EpiG,EAAAA,GAAAA,KAAC+qB,GAAc,CAAChK,SAAUA,EAAU+J,OAAK,EAAA5pD,SAAe,OAAbyuF,QAAa,IAAbA,GAAAA,EAAev6L,KAAOu6L,EAAcv6L,MAAO4qI,EAAAA,GAAAA,KAAA,QAAA9+B,SAAM,YAE/FuhC,EAAAA,GAAAA,MAAC6oB,GAAY,IAAKr9J,EAAIizG,SAAA,CACnBihI,IAAcniG,EAAAA,GAAAA,KAACgiG,GAAc,CAACvzE,SAAUH,EAAgB38G,YAAa0wL,IACrEG,EAAcpuO,KAAI,CAACsQ,EAAM2L,IACpB3L,EAAKgiJ,SACA1mB,EAAAA,GAAAA,KAAC4mB,GAAY,CAAaF,SAAO,GAAdr2I,IAErB2vH,EAAAA,GAAAA,KAAC4mB,GAAY,CACCjD,UAAWA,IAAM8K,EAAS/pJ,GAC1B0qH,QAASA,IAAMq/B,EAAS/pJ,GACxB63I,QAAqB,OAAbozC,QAAa,IAAbA,OAAa,EAAbA,EAAezkM,SAAUwZ,EAAKxZ,MAAMg2G,UAE/D8+B,EAAAA,GAAAA,KAACyiG,EAAI,CAAC/9N,KAAMA,KALY2L,KAQF,IAAzBmyN,EAAc/+O,SAAgBu8I,EAAAA,GAAAA,KAAC4mB,GAAY,CAAC7F,UAAQ,EAAA7/C,SAAEr6G,GAAE,kCAElD,EChEF+7O,GACD,WADCA,GAEN,MA0HP,GAAe/pE,IAvHW30K,IAA8C,IAADo6O,EAAA,IAA5C,QAAEuE,EAAO,OAAEC,EAAM,MAAEp/I,EAAK,KAAEyiD,EAAI,MAAEzrH,GAAOx2B,EAChE,MAAO6+O,EAAkBC,IAAuBzlH,EAAAA,EAAAA,UAASqlH,KAClDjgL,EAAUsgL,IAAe1lH,EAAAA,EAAAA,UAAS,KAClC2lH,EAAcC,IAAmB5lH,EAAAA,EAAAA,UAAS,OAEjDhZ,EAAAA,EAAAA,YAAU,KACmB,IAAvB7gB,EAAMmoI,MAAMpoO,QAAgB0iJ,EAAKsjF,cACnCuZ,EAAoBJ,GACtB,GAEC,CAACl/I,KAEJ6gB,EAAAA,EAAAA,YAAU,KACR,GAAI7gB,EAAMmoI,MAAMpoO,OAAS,EAAG,CAC1B,MAAM2/O,EAAa1/I,EAAMmoI,MAAMv+N,QAAQnF,GAAMA,EAAErD,KAAOqhJ,EAAKrhJ,KAAOqD,EAAEshO,eAAc,GAC9E2Z,GACFD,EAAgB,CAAE/tO,KAAMguO,EAAWh/O,MAAO8G,MAAOk4O,EAAWt+O,IAEhE,IAEC,IAEH,MAAMu+O,EAAuC,IAAvB3/I,EAAMmoI,MAAMpoO,UAAkBigG,EAAMknI,aAA8B,QAApB0T,EAAI56I,EAAMknI,kBAAU,IAAA0T,OAAA,EAAhBA,EAAkB7U,eACpF6Z,EAAmB5/I,EAAMmoI,MAAMpoO,OAAS,IACxC8/O,EAAgB7/I,EAAMmoI,MAAMx+N,MAAMlF,GAAMA,EAAE/D,MAAMyH,OAAOoqE,gBAAkBtT,EAAS92D,OAAOoqE,gBACzFutK,GAA2B7gL,GAAYogL,IAAqBH,KAC9DM,GAAgBH,IAAqBH,IACvCW,EACIE,EAAgB78O,IACpBo8O,EAAoBp8O,EAAEtD,OAAO4H,OAC7B+3O,EAAY,GAAG,EAGjB,OACExgG,EAAAA,GAAAA,MAAC43C,GAAK,CAAC76B,QAAQ,EAAMq6B,eAAe,wBAAuB34E,SAAA,EACzDuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,iCAAiC,CAAC6zB,aAC1DslH,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,eAAeopI,QAASyzG,EAAQ3hI,UAChD8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkB7Q,MAAM,OAAOC,OAAO,eAGrDi+I,EAAAA,GAAAA,MAACy6C,GAAS,CAAAh8E,SAAA,CACPmiI,GACG5gG,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,EACA8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,qCACxBm5I,EAAAA,GAAAA,KAAC0hG,GAAK,CAAC37O,KAAK,OAAOmF,MAAOy3D,EAAU8rG,SAAW7nK,GAAMq8O,EAAYr8O,EAAEtD,OAAO4H,aAE1Eu3I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC5BuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,sCAAqCk7G,SAAA,EAClDuhC,EAAAA,GAAAA,MAAA,SAAOz8I,UAAU,eAAck7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAA,SACEj6I,KAAK,QACLqP,KAAK,iBACLlK,MAAO03O,GACPn0E,SAAUg1E,EACV7zC,QAASmzC,IAAqBH,KAE/B/7O,GAAE,0CACHm5I,EAAAA,GAAAA,KAAA,QAAMh6I,UAAU,wBAElBg6I,EAAAA,GAAAA,KAAC0jG,GAAQ,CACPx4N,MACEw4E,EAAMmoI,MACHv+N,QAAQnF,GAAMA,EAAErD,KAAOqhJ,EAAKrhJ,KAC5BsP,KAAKjM,IAAC,CAAQiN,KAAMjN,EAAE/D,MAAO8G,MAAO/C,EAAErD,OAE3C6qM,cAAeuzC,EACfz0E,SAAU00E,EACVpiF,SAAUgiF,IAAqBH,GAC/BT,YAAU,EACVn8O,UAAU,+CACVq8O,kBAAmBx7O,GAAE,oDAGzB47I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,qCAAoCk7G,SAAA,EACjDuhC,EAAAA,GAAAA,MAAA,SAAOz8I,UAAU,eAAck7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAA,SACEj6I,KAAK,QACLqP,KAAK,iBACLlK,MAAO03O,GACPn0E,SAAUg1E,EACV7zC,QAASmzC,IAAqBH,GAC9B7hF,SAAUuiF,IAEXz8O,GAAE,qCACHm5I,EAAAA,GAAAA,KAAA,QAAMh6I,UAAU,wBAElBg6I,EAAAA,GAAAA,KAAC0hG,GAAK,CACJ37O,KAAK,OACLmF,MAAOy3D,EACP8rG,SAAW7nK,GAAMq8O,EAAYr8O,EAAEtD,OAAO4H,OACtC61J,SAAUgiF,IAAqBH,GAC/B58O,UAAWu9O,GAAiBD,EAAmB,wCAA0C,KAE1FC,IAAiBvjG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,kCAAiCk7G,SAAEr6G,GAAE,8CACrEy8O,IAAoBtjG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,kCAAiCk7G,SAAEr6G,GAAE,yDAI/E47I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,iBAAgBk7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAC0qB,GAAM,CACLj+J,KAAM5F,GAAE,mCACRb,UAAU,0BACVopI,QAASyzG,KAEX7iG,EAAAA,GAAAA,KAAC0qB,GAAM,CACL3J,SAAUyiF,EACV/2O,KAAM5F,GAAE,mCACRb,UAAU,wBACVopI,QAASA,KACP0zG,EAAO,CAACa,SAAUZ,EAAkB73O,MAAO63O,IAAqBH,GAAuBjgL,EAAWugL,EAAah4O,OAAO,YAKxH,ICrBZ,GAAe2tK,IA9FK30K,IAKb,IAADo6O,EAAAK,EAAAC,EAAA,IALe,cACnBZ,EAAa,MACbt6I,EAAK,QACL40G,EAAO,WACPsrC,GAAa,GACd1/O,EACC,MAAM2/O,GAAa5/H,EAAAA,EAAAA,QAAO,MACpB6/H,GAAiB7/H,EAAAA,EAAAA,QAAO,OACvB8/H,EAAuB9D,IAA4B1iH,EAAAA,EAAAA,WAAS,GAE7Do9E,EAAmBryM,IACvBA,EAAQsD,SAAS2rD,IACZA,EAAMqjJ,gBACRipC,EAAWtzL,QAAQ3qD,MAAMm3E,SAAW,WACpC8mK,EAAWtzL,QAAQ3qD,MAAMo+O,UAAYh7O,SAASw2I,cAAc,WAAW9hC,wBAAwBl5G,OAAS,OAEvGq/O,EAAWtzL,QAAQ3qD,MAAMm3E,SAAW,QACrC8mK,EAAWtzL,QAAQ3qD,MAAMo+O,UAAY,GACvC,GACC,GAGJz/H,EAAAA,EAAAA,YAAU,KACR,GAAIq/H,EAAY,CACd,MAAMK,EAAgBj7O,SAASw2I,cAAc,WAMzB,IAAD0kG,EAAnB,GALAJ,EAAevzL,QAAU,IAAIuqJ,qBAAqBH,EAAiB,CACjE3kL,KAAM,KACN+kL,WAAY,MACZ3pG,UAAW,KAET6yI,EACoB,QAAtBC,EAAAJ,EAAevzL,eAAO,IAAA2zL,GAAtBA,EAAwB3qE,QAAQvwK,SAASw2I,cAAc,WAE3D,CACA,MAAO,KACY,IAAD2kG,EAAZP,IACoB,QAAtBO,EAAAL,EAAevzL,eAAO,IAAA4zL,GAAtBA,EAAwBxqE,aAC1B,CACD,GAEA,IAGH,MASMyqE,EAA0B,OAAL1gJ,QAAK,IAALA,GAAiB,QAAZ46I,EAAL56I,EAAOknI,kBAAU,IAAA0T,GAAjBA,EAAmBlV,YAAc,mCAAqC,GASjG,OACE3mF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAS,gBAAA0G,OAAkB03O,GAAsBx/O,IAAKi/O,EAAW3iI,SAAA,EACpE8+B,EAAAA,GAAAA,KAACqkG,GAAkB,CACjBrG,cAAeA,EACft6I,MAAOA,EACP40G,QAASA,KAEXt4D,EAAAA,GAAAA,KAACm2B,GAAI,CAAC/gK,KAAK,+BACL,OAALsuF,QAAK,IAALA,GAAAA,EAAO4pI,aAAoC,OAAhB,OAAL5pI,QAAK,IAALA,OAAK,EAALA,EAAOknI,YAAqB,MACjD5qF,EAAAA,GAAAA,KAACskG,GAAiB,CAAC5gJ,MAAOA,EAAO40G,QAASA,EAAS2nC,yBAA0BA,KAE/EjgG,EAAAA,GAAAA,KAACm2B,GAAI,CAAC/gK,KAAK,gCACL,OAALsuF,QAAK,IAALA,GAAiB,QAAZi7I,EAALj7I,EAAOknI,kBAAU,IAAA+T,OAAZ,EAALA,EAAmBzV,iBACflpF,EAAAA,GAAAA,KAACukG,GAAwB,CAACp+F,KAAW,OAALziD,QAAK,IAALA,OAAK,EAALA,EAAOknI,cACtC,OAALlnI,QAAK,IAALA,GAAiB,QAAZk7I,EAALl7I,EAAOknI,kBAAU,IAAAgU,OAAZ,EAALA,EAAmBxV,eAClBppF,EAAAA,GAAAA,KAACwkG,GAAsB,CAAC9gJ,MAAOA,EAAO9wE,QAAS/rB,GAAE,8BAClDm3O,EAAcyG,sBAAuBzkG,EAAAA,GAAAA,KAACihG,GAAgB,CAACruN,QAAS/rB,GAAE,uCAC7D,OAAL68F,QAAK,IAALA,OAAK,EAALA,EAAOwzI,kBAAuB,OAALxzI,QAAK,IAALA,OAAK,EAALA,EAAOxxE,OAAO5kB,QAAOyC,GAA6B,KAApBA,EAAMmwH,YAAkB9rH,KAAKrE,IAC5EiwI,EAAAA,GAAAA,KAACihG,GAAgB,CAAaruN,QAAS7iB,EAAM6iB,SAAtB7iB,MAE/Bg0O,IACC/jG,EAAAA,GAAAA,KAAC0kG,GAAiB,CAChB7B,QAASA,IAAM5C,GAAyB,GACxC6C,OAzCuBzyO,UAC7B4vO,GAAyB,GACrB/0O,EAAMy4O,WAAaf,SACfl/I,EAAMknI,WAAWX,SAAS/+N,EAAMA,OAAO,GACpCA,EAAMy4O,WAAaf,UACtBl/I,EAAMknI,WAAWV,cAAch/N,EAAMA,OAAO,EACpD,EAoCMw4F,MAAOA,EACPyiD,KAAW,OAALziD,QAAK,IAALA,OAAK,EAALA,EAAOknI,WACblwM,MAjCkBiqN,MAAO,IAADpG,EACgEkB,EAA9F,OAAS,OAAL/7I,QAAK,IAALA,GAAAA,EAAO4pI,cAAoB,OAAL5pI,QAAK,IAALA,GAAiB,QAAZ66I,EAAL76I,EAAOknI,kBAAU,IAAA2T,OAAZ,EAALA,EAAmBz5O,MAAOujO,GAAcyC,gBAAgBE,WACpE,OAALtnI,QAAK,IAALA,GAAc,QAAT+7I,EAAL/7I,EAAOgwI,eAAO,IAAA+L,OAAT,EAALA,EAAgBjT,mBAElB,CAAC,EA6BKmY,OAGP,ICvCV,GA3D+BzgP,IASxB,IATyB,MAC9B0a,EAAK,iBACLs/N,EAAgB,aAChBC,EAAY,eACZF,EAAc,KACd98E,EAAI,MACJz9D,EAAK,SACLkhJ,EAAQ,QACRtsC,GACDp0M,EACC,MAAO8zM,EAAS6sC,IAActnH,EAAAA,EAAAA,WAAS,GAEjCunH,EAAcA,KAClBD,GAAY7sC,EAAQ,EAGtB,OACEv1D,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,EACE8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAS,sBAAA0G,OAAwBy0J,EAAO,GAAK,SAAUjgD,UAC1DuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,4BAA2Bk7G,SAAA,EACxCuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAW,4BAA8BgyM,EAAU,QAAU,IAAI92F,SAAA,CACnE82F,IACCh4D,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,QAAQopI,QAASA,IAAM01G,IAAc5jI,UACrD8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkB7Q,MAAM,OAAOC,OAAO,YAGrDw7I,EAAAA,GAAAA,KAACqkG,GAAkB,CACjBnG,iBAAkBA,EAClBC,aAAcA,EACdF,eAAgBA,EAChBv6I,MAAOA,EACP40G,QAASA,KAEXt4D,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,oBAEjBy8I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,2BAA0Bk7G,SAAA,EACvC8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,qBAAoBk7G,SAChCo3F,GACCt4D,EAAAA,GAAAA,KAACuiC,GAAW,CAACv8K,UAAU,8CACrBy8I,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,CACGtiG,EACAs/N,IAAoBz7F,EAAAA,GAAAA,MAAA,QAAMz8I,UAAU,gCAA+Bk7G,SAAA,CAAC,OAAOi9H,MAC5En+F,EAAAA,GAAAA,KAAA,QAAM5Q,QAAS01G,EAAY5jI,UACzB8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAM4iM,EAAU,qBAAuB,qBAAsBzzM,MAAM,OAAOC,OAAO,iBAMjGw7I,EAAAA,GAAAA,KAACskG,GAAiB,CAAChsC,QAASA,EAAS50G,MAAOA,EAAOkhJ,SAAUA,YAIlE5sC,IAAWh4D,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,uBAAuBopI,QAAS01G,MAC1D,ECNP,GAAejsE,IA5Cc30K,IAKtB,IAADu7O,EAAAsF,EAAA,IALwB,cAC5B/G,EAAa,MACbt6I,EAAK,QACL40G,EAAO,WACPsrC,GAAa,GACd1/O,EACC,MAAO8gP,EAAYC,IAAiB1nH,EAAAA,EAAAA,WAAS,GACvC2nH,GAAejhI,EAAAA,EAAAA,QAAO,OACtB,gBAAEk2F,EAAe,cAAEU,EAAa,iBAAEG,GAAoBhB,GAAUkrC,GAetE,OAbA3gI,EAAAA,EAAAA,YAAU,KACRs2F,IAEO,KACLG,GAAkB,IAGnB,KAEHz2F,EAAAA,EAAAA,YAAU,KACR0gI,EAAc9qC,EAAgB,GAC7B,CAACA,KAGF13D,EAAAA,GAAAA,MAAA,OAAKz8I,UAAS,+BAAA0G,OAAsC,OAALg3F,QAAK,IAALA,GAAAA,EAAO4pI,YAAc,0BAA4B,IAAM1oO,IAAKsgP,EAAahkI,SAAA,EACtH8+B,EAAAA,GAAAA,KAAA,OAAKp7I,IAAKsgP,EAAahkI,UACrB8+B,EAAAA,GAAAA,KAACmlG,GAAW,CACVzhJ,MAAOA,EACP40G,QAASA,EACT0lC,cAAeA,EACf4F,WAAYA,OAGhB5jG,EAAAA,GAAAA,KAAColG,GAAsB,CACrBxmO,MAAY,OAAL8kF,QAAK,IAALA,GAAc,QAAT+7I,EAAL/7I,EAAOgwI,eAAO,IAAA+L,GAAmB,QAAnBsF,EAAdtF,EAAgB7S,yBAAiB,IAAAmY,OAA5B,EAALA,EAAmChzI,MAC1CisI,cAAeA,EACf78E,KAAM6jF,EACNthJ,MAAOA,EACP40G,QAASA,MAEP,ICtBH,IAAI+sC,GAAW,WAQlB,OAPAA,GAAWliP,OAAOC,QAAU,SAAkByD,GAC1C,IAAK,IAAIe,EAAGrE,EAAI,EAAG+D,EAAI9D,UAAUC,OAAQF,EAAI+D,EAAG/D,IAE5C,IAAK,IAAI8E,KADTT,EAAIpE,UAAUD,GACOJ,OAAOS,UAAUC,eAAeC,KAAK8D,EAAGS,KAAIxB,EAAEwB,GAAKT,EAAES,IAE9E,OAAOxB,CACf,EACWw+O,GAASthP,MAAMC,KAAMR,UAChC,EClCA,IAAI8hP,GAAe,GACfzsE,GAAW,KACX0sE,GAAe,KACfC,GAAiB,KAErB,SAAS1+M,KACPw+M,GAAe,GACE,OAAbzsE,IAAmBA,GAASc,aACX,OAAjB4rE,KACFp+O,OAAO8sD,aAAasxL,IACpBA,GAAe,KAEnB,CAEA,SAASE,GAAqBvhM,GAG5B,MAFiB,CAAC,SAAU,QAAS,SAAU,YAGnCzkB,SAASykB,EAAQ76C,WAAa66C,EAAQwhM,aAAa,aAF9C,CAAC,IAAK,QAGXjmN,SAASykB,EAAQ76C,UAAY66C,EAAQwhM,aAAa,OAEhE,CAEA,SAASC,KACP,IAAIzhM,EAAU,KACd,GAAqB,MAAjBohM,GAKFphM,EAAUl7C,SAAS0H,SACd,CAGL,IAAM5L,EAAKwgP,GAAal4O,QAAQ,IAAK,IAErB,QADhB82C,EAAUl7C,SAASwoK,eAAe1sK,KACO,SAAjBwgP,KAEtBphM,EAAUl7C,SAAS0H,MAIvB,GAAgB,OAAZwzC,EAAkB,CACpBshM,GAAethM,GAIf,IAAI0hM,EAAmB1hM,EAAQk7E,aAAa,YAc5C,OAbyB,OAArBwmH,GAA8BH,GAAqBvhM,IACrDA,EAAQ3tC,aAAa,YAAa,GAEpC2tC,EAAQg8G,MAAM,CAAE2lF,eAAe,IACN,OAArBD,GAA8BH,GAAqBvhM,KAIrDA,EAAQ4hM,OACR5hM,EAAQ6vG,gBAAgB,aAG1BjtH,MACO,EAET,OAAO,CACT,UAsBgBi/M,GAAgBC,GAC9B,OAAO/nH,IAAAA,YAAiB,SAAC35H,EAAOM,GAC9B,IAAIqhP,EAAW,GACS,kBAAb3hP,EAAM+lB,IAAmB/lB,EAAM+lB,GAAGoV,SAAS,KACpDwmN,EAAW,IAAI3hP,EAAM+lB,GAAG1e,MAAM,KAAKlC,MAAM,GAAGqE,KAAK,KAE7B,kBAAbxJ,EAAM+lB,IACY,kBAAlB/lB,EAAM+lB,GAAGqT,OAEhBuoN,EAAW3hP,EAAM+lB,GAAGqT,MAGtB,IAAMwoN,EAAgB,CAAC,EACnBF,IAAOt1G,KACTw1G,EAAcx0G,SAAW,SAACtjI,EAAOrF,GAC/B,OAAAqF,GAASA,EAAM+3O,SAAWp9O,EAAS20B,OAASuoN,QAyBDG,ED1F5C,SAAgBx+O,EAAGhB,GACtB,IAAIC,EAAI,CAAC,EACT,IAAK,IAAIwB,KAAKT,EAAOzE,OAAOS,UAAUC,eAAeC,KAAK8D,EAAGS,IAAMzB,EAAE2H,QAAQlG,GAAK,IAC9ExB,EAAEwB,GAAKT,EAAES,IACb,GAAS,MAALT,GAAqD,oBAAjCzE,OAAO2H,sBACtB,KAAIvH,EAAI,EAAb,IAAgB8E,EAAIlF,OAAO2H,sBAAsBlD,GAAIrE,EAAI8E,EAAE5E,OAAQF,IAC3DqD,EAAE2H,QAAQlG,EAAE9E,IAAM,GAAKJ,OAAOS,UAAU8vD,qBAAqB5vD,KAAK8D,EAAGS,EAAE9E,MACvEsD,EAAEwB,EAAE9E,IAAMqE,EAAES,EAAE9E,IAF4B,CAItD,OAAOsD,CACX,CCgFgEw/O,CAAK/hP,EAA3D,2CACN,OACE25H,IAAAA,cAAC+nH,EAAEX,GAAA,GAAKa,EAAmBE,EAAa,CAAEh3G,QAxB5C,SAAqBxoI,GAtCzB,IAAwB04H,EAuClBx4F,KACAw+M,GAAehhP,EAAMgiP,UAAY,IAAIhiP,EAAMgiP,UAAcL,EACrD3hP,EAAM8qI,SAAS9qI,EAAM8qI,QAAQxoI,GAEd,KAAjB0+O,IAGC1+O,EAAE6pI,kBACU,IAAb7pI,EAAEqpI,QACA3rI,EAAMhB,QAA2B,UAAjBgB,EAAMhB,QACtBsD,EAAEspI,SAAWtpI,EAAEupI,QAAUvpI,EAAEwpI,SAAWxpI,EAAEypI,WAE1Cm1G,GACElhP,EAAMohJ,QACL,SAAC5iC,GACA,OAAAx+G,EAAMiiP,OACFzjI,EAAGq8E,eAAe,CAAEqnD,SAAU,WAC9B1jI,EAAGq8E,kBAxDK7/D,EAyDDh7H,EAAMg7H,QAvD3Bn4H,OAAOkP,YAAW,YACS,IAArBsvO,OACe,OAAb9sE,KACFA,GAAW,IAAIf,iBAAiB6tE,KAElC9sE,GAASU,QAAQvwK,SAAU,CACzB6/I,YAAY,EACZ2wB,WAAW,EACXE,SAAS,IAGX6rE,GAAep+O,OAAOkP,YAAW,WAC/BywB,OACCw4F,GAAW,QAEf,KA6CiE16H,IAAKA,IAClEN,EAAM48G,YAIf,CAEwB6kI,GAAgB72G,QAE3Bu3G,GAAcV,GAAgBr1G,IC5I3C,MCoBA,GAAemoC,IAhBM30K,IAAA,IAAC,KAAEkR,EAAI,GAAEtQ,EAAE,QAAE8qM,EAAO,MAAEjnL,EAAK,SAAE+9N,GAAUxiP,EAAA,OAC1Du+I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,6BAA4Bk7G,SAAA,EACzC8+B,EAAAA,GAAAA,KAAA,SAAO5Q,QAASs3G,EAAU3gP,KAAK,WAAWjB,GAAIA,EAAIsQ,KAAMA,KACxDqtI,EAAAA,GAAAA,MAAA,SAAOoqD,QAAS/nM,EAAGo8G,SAAA,EACjB8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,iCAAiCJ,MAAO,CAAEq8G,QAAS2tF,EAAU,cAAgB,QAAS1uF,UACnG8+B,EAAAA,GAAAA,KAACL,GAAI,CACHp7I,MAAM,OACNC,OAAO,OACP4Q,KAAK,iBAGT4qI,EAAAA,GAAAA,KAAA,QAAMh6I,UAAU,kBAAiBk7G,SAAEv4F,SAEjC,ICmBR,GA/B0BzkB,IAA+B,IAA9B,QAAC2+O,EAAO,OAAEC,EAAM,MAAE53O,GAAMhH,EACjD,MAAOy+D,EAAUsgL,IAAe1lH,EAAAA,EAAAA,UAASryH,GAEzC,OACEu3I,EAAAA,GAAAA,MAAC43C,GAAK,CAAC76B,QAAQ,EAAMq6B,eAAe,wBAAuB34E,SAAA,EACzDuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,qCACxBm5I,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,eAAeopI,QAASyzG,EAAQ3hI,UAChD8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkB7Q,MAAM,OAAOC,OAAO,eAGrDi+I,EAAAA,GAAAA,MAACy6C,GAAS,CAAAh8E,SAAA,EACR8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,6CACxBm5I,EAAAA,GAAAA,KAAC0hG,GAAK,CAAC37O,KAAK,OAAOmF,MAAOy3D,EAAU8rG,SAAW7nK,GAAMq8O,EAAYr8O,EAAEtD,OAAO4H,UAC1Eu3I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,iBAAgBk7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAC0qB,GAAM,CACLj+J,KAAM5F,GAAE,mCACRb,UAAU,0BACVopI,QAASyzG,KAEX7iG,EAAAA,GAAAA,KAAC0qB,GAAM,CACLj+J,KAAM5F,GAAE,iCACRb,UAAU,wBACVopI,QAAS0zG,YAIT,ECoBZ,GA/C2B5+O,IAQpB,IARqB,KAC1BkxK,EAAI,iBACJuxE,EAAgB,kBAChBC,EAAiB,iBACjBC,EAAgB,SAChBC,EAAQ,UACRC,EAAS,cACTC,GACD9iP,EACC,MAAO+iP,EAAMC,IAAW3pH,EAAAA,EAAAA,WAAS,GACjC,OACEklB,EAAAA,GAAAA,MAAC43C,GAAK,CAAC76B,OAAQ4V,EAAMpvK,UAAU,8BACxBszL,kBAAmB2tD,EAAO,uCAAyC,GAAG/lI,SAAA,EAC3E8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,cAAak7G,UAC1B8+B,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,YAAYopI,QAASA,IAAM03G,IAAW5lI,UACtD8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkB7Q,MAAM,OAAOC,OAAO,cAGrDi+I,EAAAA,GAAAA,MAACy6C,GAAS,CAACl3L,UAAU,sBAAqBk7G,SAAA,CACvC8lI,IACChnG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,oBAAmBk7G,UAChC8+B,EAAAA,GAAAA,KAAA,OAAKxgB,IAAKwnH,EAAevhF,IAAI,iBAAiBz/J,UAAU,sCAG5Dg6I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,4BAA2Bk7G,SACvCylI,KAEHlkG,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,oBAAmBk7G,SAAA,EAChC8+B,EAAAA,GAAAA,KAAC0qB,GAAM,CACL1kK,UAAU,4CACVopI,QAASA,KACP83G,GAAQ,GACRH,GAAW,EAEbt6O,KAAMm6O,KAER5mG,EAAAA,GAAAA,KAAC0qB,GAAM,CACL1kK,UAAU,8CACVopI,QAASA,IAAM03G,IACfr6O,KAAMo6O,YAIN,ECTZ,GAhCoC3iP,IAAqC,IAApC,QAAE2+O,EAAO,KAAE18F,EAAI,YAAEghG,GAAajjP,EAKjE,OACEu+I,EAAAA,GAAAA,MAAC43C,GAAK,CAAC76B,QAAQ,EAAOq6B,eAAe,iCAAgC34E,SAAA,EACnE8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,cAAak7G,UAC1B8+B,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,eAAeopI,QAASyzG,EAAQ3hI,UAChD8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkB7Q,MAAM,OAAOC,OAAO,cAGrDi+I,EAAAA,GAAAA,MAACy6C,GAAS,CAAAh8E,SAAA,EACR8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,+CACxBm5I,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,+CACxB47I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,iBAAgBk7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAC0qB,GAAM,CACLj+J,KAAM5F,GAAE,4CACRb,UAAU,0BACVopI,QAASyzG,KAEX7iG,EAAAA,GAAAA,KAAC0qB,GAAM,CACLj+J,KAAM5F,GAAE,8CAA8C,CAAE6zB,MAnBpD,OAoBJ10B,UAAU,wBACVopI,QAASA,IAAM+3G,EAAYhhG,aAI3B,EC9BNihG,GAAoBjhG,IAAUA,EAAKqnF,oBAAsBrnF,EAAKsjF,cAAiBtjF,EAAKsjF,cAAgBtjF,EAAKuiF,WAAa,GACtH2e,GAAgBlhG,GAASA,EAAKsjF,cAAgBtjF,EAAKuiF,WAAa,EAEzD4e,GAA0BzuE,IAAUv0K,IAC/C,MAAM,eAAEijP,EAAc,KAAEphG,GAAQ7hJ,EAC1BkjP,EAAmBrhG,EAAKyjF,WAExB1+M,EAAQ,CACZm8N,GAAalhG,IAAS,CAAE/wI,KAAMvO,GAAE,yBAA0BqE,MAAO,iBAAkB6jK,KAAM,WAAYxqK,MAAM,OAAQC,OAAO,QAC1HgjP,GAAoB,CAAEt8O,MAAO,iBAAkBm+G,UAAWA,KAAA,IAAAo+H,EAAA,OACtDhlG,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,gBAAek7G,SAAA,EAAC8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,oBAAoB7Q,MAAM,OAAOC,OAAO,OAC7Co7I,iBAAiB,4BAA4Bx7I,MAAO,MACvF47I,EAAAA,GAAAA,KAAA,KAAGzd,KAAwB,QAApBklH,EAAEthG,EAAK+iF,qBAAa,IAAAue,OAAA,EAAlBA,EAAoBzsO,YAAa1X,OAAO,SAAUi+O,IAAI,aAAYrgI,SAAEr6G,GAAE,iCAAuC,GAE5HugP,GAAiBjhG,KAAUkhG,GAAalhG,IAAUqhG,IAAqB,CAAE9gF,SAAS,GAClF0gF,GAAiBjhG,IAAS,CAAE/wI,KAAMvO,GAAE,uBAAwBqE,MAAO,WAAY6jK,KAAM,eACrFzhK,QAAO/J,KAAOA,IAMV6+O,GAAiBpiG,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,aAAa7Q,MAAM,OAAOC,OAAO,SACnE,OAAOi+I,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,CACJilC,EAAKwjF,wBAAyB3pF,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,6CAA4Ck7G,UACxF8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,WAAW7Q,MAAM,OAAOC,OAAO,OAAOo7I,iBAAiB,4BAA4Bx7I,MAAO,QAEvGq+I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,yCAAwCk7G,SAAA,EACrD8+B,EAAAA,GAAAA,KAAA,QAAMh6I,UAAU,mBAAkBk7G,SAAEqmI,GAAc,IAAA76O,OAAQy5I,EAAKuiF,WAAU,QACzE1oF,EAAAA,GAAAA,KAAC2nB,GAAQ,CAAOz8I,QAAOujJ,SAXTxK,IAChB3/J,EAAM2/J,EAAS/4J,QAAQ,EAUYk3O,iBAAkBn9K,KAAG,EAAC87F,SAAU5a,EAAKxoE,SAAWwoE,EAAKsjF,oBAEvF,IAGQie,GAA2B7uE,IAAS30K,IAAyD,IAAxD,eAAEqjP,EAAc,KAAEphG,EAAI,eAAEwhG,EAAc,SAAEC,GAAU1jP,EAClG,MAAMsjP,EAAmBrhG,EAAKyjF,WAE9B,OAAOnnF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,0CAAyCk7G,SAAA,CAC5DsmI,IACC/kG,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,CACGilC,EAAKwjF,wBAAyBlnF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,sCAAqCk7G,SAAA,EACjF8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,WAAW7Q,MAAM,OAAOC,OAAO,OAAOo7I,iBAAiB,4BAA4Bx7I,MAAO,MACrGq+I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,+BAA8Bk7G,SAAA,CAAC,IAAEr6G,GAAE,wCAEpDm5I,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,gBAAgBu8H,KAAU,OAAJ4jB,QAAI,IAAJA,OAAI,EAAJA,EAAM+iF,cAAcluN,YAAa1X,OAAO,SAAUi+O,IAAI,aAAYrgI,SAAEr6G,GAAE,kCAG5GwgP,GAAalhG,IACVnG,EAAAA,GAAAA,KAACL,GAAI,CACHvqI,KAAK,WACL7Q,MAAM,OACNC,OAAO,OACPo7I,iBAAiB,0BACjBxQ,QAASu4G,EACTvjP,MAAOyC,GAAE,oCAEX,KAIHugP,GAAiBjhG,KAChB1D,EAAAA,GAAAA,MAAA,UAAQz8I,UAAS,2BAA8BopI,QAASw4G,EAAS1mI,SAAA,EAC/D8+B,EAAAA,GAAAA,KAACL,GAAI,CAACC,iBAAiB,yBAAyBxqI,KAAK,aAAa7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,wBAAwB,QACxHm5I,EAAAA,GAAAA,KAAA,QAAMh6I,UAAU,mBAAkBk7G,SAAEqmI,GAAc,IAAA76O,OAAQy5I,EAAKuiF,WAAU,YAG/E,IC3DFmf,GAAkB3jP,IAAyC,IAAxC,UAAE4jP,EAAS,OAAEC,EAAM,KAAE5hG,EAAI,MAAEziD,GAAOx/F,EACzD,OACEu+I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,6BAA4Bk7G,SAAA,EACvCxd,EAAM8pI,mBAAoBxtF,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,gBAAgB7Q,MAAM,OAAOC,OAAO,MAAMwB,UAAU,6BAC1F8hP,IAIG,EAIJE,GAAoBnvE,IAASliK,IAU5B,IAV6B,MAClC+sF,EAAK,KACLyiD,EAAI,6BACJ8hG,EAA4B,0BAC5BC,EAAyB,eACzBX,EAAc,eACdI,EAAc,2BACdQ,GAGDxxO,EACC,MAAMixO,EAAWA,KACVzhG,EAAKsjF,cAAoC,IAApBtjF,EAAKuiF,YAI/Bwf,EAA0B/hG,EAAKsjF,aAAe5iO,GAAE,iDAAmDA,GAAE,yCACrGohP,GAA6B,IAJ3BE,GAIgC,EAGpC,OAAKzkJ,EAAM4pI,aAGJ7qF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,oCAAmCk7G,SAAA,EACvD8+B,EAAAA,GAAAA,KAAC0nG,GAAwB,CAAMH,iBAAgBphG,OAAMwhG,iBAAgBC,cACrE5nG,EAAAA,GAAAA,KAACsnG,GAAuB,CAACc,eAAgBA,OAAeR,WAAUL,iBAAgBphG,OAAMwhG,sBAJjF,IAKH,IAgMR,GAAe9uE,IA7LCpwJ,IAOT,IAAD4/N,EAAAC,EAAAza,EAAA0a,EAAAC,EAAA,IAPW,MACf9kJ,EAAK,KACLyiD,EAAI,UACJ2hG,EAAS,aACTvf,EAAY,eACZgf,GAAiB,EAAI,aACrBkB,GACDhgO,EACC,MAAOigO,EAA2BT,IAAgC1qH,EAAAA,EAAAA,WAAS,IACpEwmH,EAAuB9D,IAA4B1iH,EAAAA,EAAAA,WAAS,IAC5DorH,EAAwBC,IAA6BrrH,EAAAA,EAAAA,WAAS,IAC9DsrH,EAAkBC,IAAuBvrH,EAAAA,EAAAA,WAAS,IAClDwrH,EAAwBb,IAA6B3qH,EAAAA,EAAAA,UAAS12H,GAAE,4CAEvE,IAAK68F,EAAO,OAAO,KAEnB,MAgCMslJ,EAA+B34O,UACnC43O,GAA6B,GACzBvkJ,EAAMwzI,gBAAmBxzI,EAAM4pI,aAAennF,EAAKsjF,mBAC/CtjF,EAAK6jF,YACFtmI,EAAM4pI,oBACTnnF,EAAK6jF,YACN7jF,EAAKsjF,oBACFtjF,EAAK/qI,aAEf,EAgCF,OACEqnI,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,EACEuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAjBqBijP,MAAO,IAAD3K,EAClC,MAAM1+L,EAAU,CAAC,iBAWjB,OAVoB,QAAhB0+L,EAAA56I,EAAMknI,kBAAU,IAAA0T,OAAA,EAAhBA,EAAkBx5O,MAAOqhJ,EAAKrhJ,KAAO4+F,EAAM4pI,aAAe5pI,EAAM8pI,mBAChE5tL,EAAQ/0C,KAAK,cAER,OAAL64F,QAAK,IAALA,GAAAA,EAAOszI,mBAAqBtzI,EAAM8pI,mBACpC5tL,EAAQ/0C,KAAK,2BAEX64F,EAAM8pI,kBACR5tL,EAAQ/0C,KAAK,oBAGR+0C,EAAQ9xC,KAAK,IAAI,EAKNm7O,GAAwB/nI,SAAA,CACrCilC,EAAKrhJ,KAAOujO,GAAcyC,gBAAgBG,WAAajrF,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,kBAAiBk7G,SAAE4mI,KAElE,IAAlBpkJ,EAAM40G,SAAoBt4D,EAAAA,GAAAA,KAAA,OACxBh6I,UAAS,GAAA0G,OAAKg3F,EAAM4pI,YAAc,0BAA4B,IAC9Dl+F,QAASA,IAAM1rC,EAAM4pI,aAAemb,IAAevnI,SAElDxd,EAAM4pI,aAAe5pI,EAAM8pI,kBAC1BxtF,EAAAA,GAAAA,KAAC6nG,GAAe,CAAEnkJ,MAAOA,EAAOokJ,UAAWA,EAAWC,OAnFhDmB,KAClBJ,GAAoB,EAAK,EAkF8D3iG,KAAMA,KAEjFnG,EAAAA,GAAAA,KAACmpG,GAAY,CACX/zO,KAAI,0BAAA1I,OAAwD,QAAxD27O,EAA4BliG,EAAKsiF,+BAAuB,IAAA4f,EAAAA,EAAIliG,EAAKrhJ,IACrEA,GAAE,0BAAA4H,OAAwD,QAAxD47O,EAA4BniG,EAAKsiF,+BAAuB,IAAA6f,EAAAA,EAAIniG,EAAKrhJ,IACnE4hP,SAAUA,IAAMvgG,EAAK4jF,kBACrBn6B,SAAa,OAAJzpD,QAAI,IAAJA,GAAW,QAAP0nF,EAAJ1nF,EAAMj7H,aAAK,IAAA2iN,OAAP,EAAJA,EAAapqO,WAAe,OAAJ0iJ,QAAI,IAAJA,GAAc,QAAVoiG,EAAJpiG,EAAM8d,gBAAQ,IAAAskF,OAAV,EAAJA,EAAgB9kP,UAAc,OAAJ0iJ,QAAI,IAAJA,GAAW,QAAPqiG,EAAJriG,EAAMj7H,aAAK,IAAAs9N,OAAP,EAAJA,EAAa/kP,QAAS,EACjFuC,UAAU,iCACV2iB,MAAOm/N,OAGJ9nG,EAAAA,GAAAA,KAAA,UAEZt8C,EAAM4pI,aAAe5pI,EAAM8pI,kBACxBxtF,EAAAA,GAAAA,KAACgoG,GAAiB,CAEdtkJ,QACAyiD,OACA8hG,+BACAC,4BACAX,iBACAI,eApGSA,KACrB1H,GAAyB,EAAK,EAoGlBmJ,gBAjGUA,KACtBR,GAA0B,EAAK,EAkGrBT,2BAA4Ba,KAE9BhpG,EAAAA,GAAAA,KAAA,OAAA9+B,SACCxd,EAAMszI,mBACLv0F,EAAAA,GAAAA,MAAA,UACEz8I,UAAS,qBAAA0G,OAAuBy5I,EAAK0jF,YAAc,iCAAmC,IACtFz6F,QArEmB/+H,SAC3B81I,EAAKujF,YACPwe,EAA0BrhP,GAAE,qDAC5BohP,GAA6B,IAG3B9hG,EAAK0jF,aAAgB1jF,EAAKqjF,WAAa9lI,EAAMszI,mBAC/CkR,EAA0BrhP,GAAE,kDAC5BohP,GAA6B,eAGzBvkJ,EAAMpoF,sBA0DkC4lG,SAAA,EAEhCilC,EAAK2jF,kBAAmB9pF,EAAAA,GAAAA,KAACL,GAAI,CAACC,iBAAiB,yBAAyBxqI,KAAK,aAAa7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,yBAC3H,OAAJs/I,QAAI,IAAJA,OAAI,EAAJA,EAAMrhJ,MAAOujO,GAAcyC,gBAAgBC,UAAWtoF,EAAAA,GAAAA,MAAA,QAAMz8I,UAAU,iBAAgBk7G,SAAA,CAAEqnH,EAAa,WACpGpiF,EAAK2jF,kBAAmBrnF,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,CAAE,QAAM8+B,EAAAA,GAAAA,KAAA,QAAMh6I,UAAU,mBAAkBk7G,SAAEqmI,GAAc,IAAA76O,OAAQy5I,EAAKj7H,MAAMznB,OAAM,cAG/Gg/I,EAAAA,GAAAA,MAAA,UACEz8I,UAAU,yCACVopI,QAASA,KACH+W,EAAKujF,WACPwe,EAA0BrhP,GAAE,gDAE5BqhP,EAA0BrhP,GAAE,4CAE9BohP,GAA6B,EAAK,EAClC/mI,SAAA,EAEF8+B,EAAAA,GAAAA,KAACL,GAAI,CAACC,iBAAiB,yBAAyBxqI,KAAK,aAAa7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,yBACtG47I,EAAAA,GAAAA,MAAA,QAAMz8I,UAAU,iBAAgBk7G,SAAA,CAAEqnH,EAAa,UAAa,QACtDvoF,EAAAA,GAAAA,KAAA,QAAMh6I,UAAU,mBAAkBk7G,SAAEqmI,GAAc,IAAA76O,OAAQy5I,EAAKuiF,WAAU,gBAKzF1oF,EAAAA,GAAAA,KAACqpG,GAAkB,CACjB1C,iBAAkBoC,EAClBnC,kBAAiB,GAAAl6O,OAAK7F,GAAE,8CAA6C,MAAA6F,OAAKy5I,EAAKuiF,WAAU,KACzFme,iBAAkBhgP,GAAE,uCACpBkgP,UAAWiC,EACXlC,SAAUA,IAAMmB,GAA6B,GAC7C7yE,KAAMszE,IAEPG,IACC7oG,EAAAA,GAAAA,KAACspG,GAAiB,CAChBzG,QAASA,IAAMiG,GAAoB,GACnChG,OAzIgByG,IAEtBT,GAAoB,EAAM,EAwIpB59O,MAAOi7I,EAAK/hJ,QAGf2/O,IACC/jG,EAAAA,GAAAA,KAAC0kG,GAAiB,CAChB7B,QAASA,IAAM5C,GAAyB,GACxC6C,OA3ImBzyO,UACzB4vO,GAAyB,GACrB/0O,EAAMy4O,WAAaf,SACfz8F,EAAK8jF,SAAS/+N,EAAMA,OACjBA,EAAMy4O,WAAaf,UACtBz8F,EAAK+jF,cAAch/N,EAAMA,MACjC,EAsIMw4F,MAAOA,EACPyiD,KAAMA,EACNzrH,MAAOyrH,EAAKuiF,aAGfigB,IACC3oG,EAAAA,GAAAA,KAACwpG,GAA2B,CAC1B3G,QAASA,IAAM+F,GAA0B,GACzCzB,YA1IqBj8O,IAE3B09O,GAA0B,EAAM,EAyI1BziG,KAAMA,MAGT,IC7OMm4B,GAA8BA,CAAC5nC,EAAQ6nC,KAClD,MAAM,eAAEC,EAAc,OAAEjjH,EAAM,cAAEkjH,EAAa,iBAAEC,GAAqBH,GAE7DI,EAAWn/F,GAAYk3D,EAAO1kC,QAAQysE,GAAej1K,WAAWmC,MAAM,KAE7E,OAAO6yK,EACJpxK,QAAQ,YAAamuD,GAIrBnuD,QAAQ,YAAaqpI,GAAkBkoC,EAAWJ,EAAajiC,eAAiB98D,EAAWk/F,EAAmBl/F,EAAW,IAAI,EC0ClI,GAAeq5F,IAhDM30K,IAMd,IANe,MACpB0a,EAAK,WACL8rN,EAAU,cACV+e,EAAa,cACbzL,EAAa,kBACb0L,GACDxlP,EACC,GACoB,MAAlB0a,EAAM6rN,WACFC,IACAsT,GACDzzO,OAAOyzE,MAAW,OAALp/D,QAAK,IAALA,OAAK,EAALA,EAAO6rN,WACpBlgO,OAAOyzE,MAAW,OAALp/D,QAAK,IAALA,OAAK,EAALA,EAAOG,KAEvB,MAAO,GAET,IAAIw/J,EAAe,CACjBY,UAAWuqE,GAAqB1L,EAAc7+D,UAC9C5jH,OAAQyiL,EAAcC,eACtBz5N,KAAMw5N,EAAcG,aACpB3/D,eAAgBw/D,EAAcx/D,eAC9BE,iBAAkBs/D,EAAct/D,iBAChCD,cAAeu/D,EAAcv/D,cAC7BniC,aAAc0hG,EAAc1hG,cAG9B,MAAQ19H,MAAO+qO,EAAS,IAAE5qO,EAAG,kBAAEE,GAAsB9P,GAAAA,eAAepC,MAAMkT,QAAQtB,mBAAmB,CACnGE,MAAY,OAALD,QAAK,IAALA,OAAK,EAALA,EAAO6rN,SACdzrN,IAAU,OAALJ,QAAK,IAALA,OAAK,EAALA,EAAOG,MAGd,GAAIxU,OAAOyzE,MAAM2rK,IAAcp/O,OAAOyzE,MAAMj/D,IAAQxU,OAAOyzE,MAAM/+D,GAC/D,MAAO,GAGT,MAAMugK,EAAqBjB,EAAaY,UACrC/xK,QAAQ,WAAYkxK,GAA4BqrE,EAAWprE,IAC3DnxK,QAAQ,SAAUkxK,GAA4Bv/J,EAAKw/J,IACnDnxK,QAAQ,uBAAwBkxK,GAA4Br/J,EAAmBs/J,IAElF,OACE97B,EAAAA,GAAAA,MAAA,KAAGz8I,UAAS,QAAA0G,OAAU+8O,EAAgB,aAAe,IAAKvoI,SAAA,CACvDs+D,EACAw+D,EAAcE,mBAAoBz7F,EAAAA,GAAAA,MAAA,QAAMz8I,UAAU,6BAA4Bk7G,SAAA,CAAC,IAAEq9D,EAAa/5J,UAC7F,ICoER,GAAeq0J,IA9GS30K,IASjB,IATkB,aACvB0lP,EAAY,KACZllO,EAAI,gBACJmlO,EAAe,OACf9B,EAAM,qBACN+B,EAAoB,iBACpBC,EAAgB,SAChBnC,EAAQ,gBACRoC,GACD9lP,EACC,MAAO+lP,EAAwBC,IAA6B3sH,EAAAA,EAAAA,WAAS,IAC9DwmH,EAAuB9D,IAA4B1iH,EAAAA,EAAAA,WAAS,IAE7D,WAAGyrG,EAAU,WAAE2I,GAAejtN,EAC9B4oN,EAAetE,EAAWsE,YAC1B5D,EAAaiI,EAAWjI,WACxB8D,EAAmBxE,EAAWwE,iBAYpC,OACE/qF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,eAAck7G,SAAA,CAC1Bx8F,EAAKooN,iBACJ9sF,EAAAA,GAAAA,KAAA,UACEh6I,UAAU,SACV+6J,SAAU6oF,EACVx6G,QAASA,IAAM24G,IAAS7mI,UAExB8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,WAAW7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,wBAG7DymO,IAAettF,EAAAA,GAAAA,KAAAmuB,GAAAA,SAAA,CAAAjtD,UACd8+B,EAAAA,GAAAA,KAAA,UACEh6I,UAAU,SACVopI,QAASA,IAAM6wG,GAAyB,GAAM/+H,UAE9C8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,WAAW7Q,MAAM,OAAOC,OAAO,OAAOo7I,iBAAiB,0BAA0Bx7I,MAAOyC,GAAE,wCAUxG6d,EAAKooN,iBAAmBQ,IAAgBE,IACvCxtF,EAAAA,GAAAA,KAAA,UACEh6I,UAAU,SACVopI,QAASA,KACPy6G,EAAgBhjP,GAAE,gCAClBijP,GAAsB,EACtB5oI,UAEJ8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,wBAAwB7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,2BAExE6iO,IACC1pF,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,SAASopI,QAASA,KAClCy6G,EAAgBhjP,GAAE,gCAClBkjP,GAAkB,EAClB7oI,UACA8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,mBAAmB7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,wBAGtEm5I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,aACfg6I,EAAAA,GAAAA,KAAA,UACEh6I,UAAU,SACVopI,QAASA,KACFs6F,GAGHmgB,EAAgBhjP,GAAE,yBAClB+gP,KAHAsC,GAA0B,EAI5B,EACFhpI,UACA8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,aAAa7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,2BAE9Dm5I,EAAAA,GAAAA,KAACqpG,GAAkB,CACjBj0E,KAAM60E,EACNjD,cAAetiO,EAAK2sN,aACpBsV,iBAAkB9/O,GAAE,wCACpB+/O,kBAAmB//O,GAAE,8CACrBggP,iBAAkBhgP,GAAE,uCACpBigP,SAAUA,IAAMoD,GAA0B,GAC1CnD,UAAWA,KACTmD,GAA0B,EAAM,IAGnCnG,IACC/jG,EAAAA,GAAAA,KAAC0kG,GAAiB,CAChB7B,QAASA,IAAM5C,GAAyB,GACxC6C,OAjFmBzyO,UACzB4vO,GAAyB,GACrB/0O,EAAMy4O,WAAaf,SACfl+N,EAAKulN,SAAS/+N,EAAMA,OACjBA,EAAMy4O,WAAaf,UACtBl+N,EAAKwlN,cAAch/N,EAAMA,OAEjC+0O,GAAyB,EAAM,EA2EzBv8I,MAAOh/E,EAAKskN,WACZ7iF,KAAMzhI,EAAKitN,WACXwY,kBAAkB,EAClBzvN,MAAO,MAGP,qCCjHV,MCOa0vN,GAAelmP,IAAsC,IAArC,QAAE2+O,EAAO,SAAEtR,EAAQ,SAAE9iE,GAAUvqK,EAC1D,MAAOy+D,EAAUsgL,IAAe1lH,EAAAA,EAAAA,UAASg0G,GAOzC,OACE9uF,EAAAA,GAAAA,MAAC43C,GAAK,CAAC76B,QAAQ,EAAMx5J,UAAU,gBAAgB6zL,eAAe,4BAA2B34E,SAAA,EACvFuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,4BACxBm5I,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,eAAeopI,QAASyzG,EAAQ3hI,UAChD8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkB7Q,MAAM,OAAOC,OAAO,eAGrDi+I,EAAAA,GAAAA,MAACy6C,GAAS,CAAAh8E,SAAA,EACR8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,QAAOk7G,SAAEr6G,GAAE,6BACxBm5I,EAAAA,GAAAA,KAAA,SACEh6I,UAAU,QACV2rD,YAAY,mBACZzmD,MAAOy3D,EACP8rG,SAAW7nK,GAAMq8O,EAAYr8O,EAAEtD,OAAO4H,UAExCu3I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,iBAAgBk7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAC0qB,GAAM,CACLj+J,KAAM5F,GAAE,mCACRb,UAAU,0BACVopI,QAASyzG,KAEX7iG,EAAAA,GAAAA,KAAC0qB,GAAM,CACLj+J,KAAM5F,GAAE,iCACRb,UAAU,wBACVopI,QA9BK0zG,KACbr0E,EAAiB,OAAR9rG,QAAQ,IAARA,OAAQ,EAARA,EAAU92D,QACnBg3O,GAAS,YAgCD,ECtCCjP,GAAW1vO,IAAwD,IAAvD,SAAEqtO,EAAQ,YAAE8Y,EAAW,YAAEC,EAAW,UAAEC,GAAWrmP,EACxE,MAAOsmP,EAAeC,IAAoBltH,EAAAA,EAAAA,UAASg0G,IAC5CmZ,EAAWC,IAAgBptH,EAAAA,EAAAA,WAAS,IACpCqtH,EAAcC,IAAmBttH,EAAAA,EAAAA,WAAS,GAC3CutH,GAAW7mI,EAAAA,EAAAA,QAAO,OAExBM,EAAAA,EAAAA,YAAU,KACJmmI,GACFI,EAASv6L,QAAQ2vG,OACnB,GACC,CAACwqF,KAEJnmI,EAAAA,EAAAA,YAAU,KACRkmI,EAAiBlZ,EAAS,GACzB,CAACA,IAEJ,MAAM0V,EAAOA,KACX0D,GAAa,GACbN,EAAYG,GACZD,GAAaA,GAAW,EAepBQ,GAAeC,EAAAA,GAAAA,GAAsB,CAAEtnI,YAZrB98G,IACtBA,EAAEs0L,kBACkB,UAAhBt0L,EAAEtD,OAAOwB,IAAuC,QAArB8B,EAAEtD,OAAO+F,SACtC49O,GACF,IAUIgE,EAAqBA,KACzBN,GAAa,GACbL,GAAeA,GAAa,EAU9B,OACE7nG,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,CACgB,KAAbqwH,IAAoBmZ,IACnBjoG,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,EACE8+B,EAAAA,GAAAA,KAAA,OAAK5Q,QAAS67G,EAAoBjlP,UAAU,wBAAuBk7G,UACjE8+B,EAAAA,GAAAA,KAACL,GAAI,CAAC76I,GAAG,4BAA4BsQ,KAAK,eAAe7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,iCAE/Fm5I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,uBAAuBopI,QAASA,IAAMy7G,GAAgB,GAAM3pI,UACzE8+B,EAAAA,GAAAA,KAACL,GAAI,CAAC76I,GAAG,4BAA4BsQ,KAAK,eAAe7Q,MAAM,OAAOC,OAAO,cAIlFkmP,IACCjoG,EAAAA,GAAAA,MAAA,OAAK79I,IAAKmmP,EAAc/kP,UAAU,eAAck7G,SAAA,EAC9C8+B,EAAAA,GAAAA,KAAA,SACEp7I,IAAKkmP,EACL9kP,UAAU,iBACV2rD,YAAa9qD,GAAE,4BACfqE,MAAOs/O,EACP/7E,SAAW7nK,GAAM6jP,EAAiB7jP,EAAEtD,OAAO4H,OAC3Cy4J,UAxCO/8J,IACD,UAAVA,EAAEjD,KACJsjP,GACF,KAuCMjnG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,0BAA0BopI,QA7BhCw4G,KACf6C,EAAiB,IACjBE,GAAa,GACbN,EAAY,IACZE,GAAaA,GAAW,EAyByCrpI,UACzD8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,aAAa7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,uCAIhE6jP,GAAanZ,IACb9uF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,eAAck7G,SAAA,EAC3B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,WAAWklP,cAAeD,EAAmB/pI,SAAEqwH,KAC5DvxF,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,wBAAwBopI,QAAS67G,EAAmB/pI,UACjE8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,WAAW7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,kCAE5Dm5I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,uBAAuBopI,QAASA,IAAMy7G,GAAgB,GAAM3pI,UACzE8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,WAAW7Q,MAAM,OAAOC,OAAO,cAI/ComP,IAAgB5qG,EAAAA,GAAAA,KAACoqG,GAAY,CAC5BvH,QAASA,KACPgI,GAAgB,EAAM,EAExBtZ,SAAUiZ,EACV/7E,SAAW08E,IACT19O,QAAQmC,IAAI,CAACu7O,gBACbd,EAAYc,EAAY,MAE3B,ECOP,GAAetyE,IAtGK30K,IAAe,IAAd,KAAEwgB,GAAMxgB,EAC3B,MAAOknP,EAAaC,IAAkB9tH,EAAAA,EAAAA,WAAS,IACxC+tH,EAAeC,IAAoBhuH,EAAAA,EAAAA,WAAS,IAC5CiuH,EAAmBC,IAAwBluH,EAAAA,EAAAA,WAAS,GACrDmuH,GAAaznI,EAAAA,EAAAA,QAAO,MACpB0nI,GAAU1nI,EAAAA,EAAAA,QAAO,OAIvBM,EAAAA,EAAAA,YAAU,KACR,MAAMuwD,EAAW9iG,GAAS,KAAK,KAC7B,MAAM9tB,EAAoB,OAAVwnM,QAAU,IAAVA,OAAU,EAAVA,EAAYn7L,QAC5B,IAAKrM,EAAS,OACd,MAAM0nM,EAAmB1nM,EAAQt+C,MAAM8+E,SACjCmnK,EAAuB3nM,EAAQt+C,MAAMkmP,aACrCC,EAAqB7nM,EAAQt+C,MAAMi4K,WACnCmuE,EAAgB9nM,EAAQ62D,YAG9B72D,EAAQt+C,MAAM8+E,SAAW,SACzBxgC,EAAQt+C,MAAMkmP,aAAe,WAC7B5nM,EAAQt+C,MAAMi4K,WAAa,SAG3B,MAAMouE,EAAgB/nM,EAAQ22D,YAAcmxI,EAG5C9nM,EAAQt+C,MAAM8+E,SAAWknK,EACzB1nM,EAAQt+C,MAAMkmP,aAAeD,EAC7B3nM,EAAQt+C,MAAMi4K,WAAakuE,EAE3BV,EAAeY,EAAc,IAI/B,OAFAn3E,IACA3tK,OAAOuP,iBAAiB,SAAUo+J,GAC3B,IAAM3tK,OAAOk1G,oBAAoB,SAAUy4D,EAAS,GAC1D,IAMH,OAAKpwJ,GAGH+9H,EAAAA,GAAAA,MAAA,OACEz8I,UAAS,aAAA0G,OACPgY,EAAK6sN,UAAYia,EAAoB,YAAc,IAErD5mP,IAAK+mP,EAAQzqI,SAAA,EAEb8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,gBAAek7G,UAC5B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,aAAYk7G,UACzBuhC,EAAAA,GAAAA,MAAA,MACEz8I,UAAS,qBACTpB,IAAK8mP,EACL5mP,GAAE,WAAA4H,OAAagY,EAAK+tL,aACpB7sM,MAAO,CACL8+E,SAAU,UACVw8B,SAAA,CAEDx8F,EAAK47H,QAAQlrI,KACbsP,EAAK47H,QAAQukD,eAAa,MAAAn4L,OAAUgY,EAAK47H,QAAQukD,uBAIxD7kD,EAAAA,GAAAA,KAAC4zF,GAAQ,CACPrC,SAAU7sN,EAAK6sN,SACf8Y,YA9BwB9Y,IAC5B7sN,EAAKstN,eAAuB,OAART,QAAQ,IAARA,EAAAA,EAAY,KAAK,EA8BjC+Y,YAAaA,IAAMmB,GAAqB,GACxClB,UAAWA,IAAMkB,GAAqB,KAEvCL,IACCprG,EAAAA,GAAAA,KAACwgC,GAAO,CACNx6K,UAAU,uBACVuhJ,UAAU,SACViY,OAAQ8rF,EACRhoP,OAAQooP,EAAWn7L,QACnB0wG,OAvEOA,IAAMsqF,GAAkBD,GAwE/BnpI,UAAU,YACVulC,UAAW,CACT,CACEtyI,KAAM,SACNg9B,QAAS,CACPgd,OAAQz4C,IAAoB,IAAnB,UAAE4wI,GAAW5wI,EACpB,MAAkB,QAAd4wI,EACK,CAAC,EAAG,IAEJ,EACT,KAINrmC,SAEDx8F,EAAK47H,QAAQlrI,UArDJ,IAwDV,ICpGG82O,GAAiBhoP,IAAqB,IAApB,WAAE4Y,GAAY5Y,EAC3C,MAAO8zM,EAAS6sC,IAActnH,EAAAA,EAAAA,UAASzgH,EAAWrZ,QAAU,GACtD0oP,EAAen0C,EAAUl7L,EAAaA,EAAWrT,MAAM,EAAG,GAMhE,OACEg5I,EAAAA,GAAAA,MAAA,OAAAvhC,SAAA,EACE8+B,EAAAA,GAAAA,KAAA,MAAIh6I,UAAU,kBAAiBk7G,SAC5BirI,EAAa/3O,KAAKmc,IACjBkyH,EAAAA,GAAAA,MAAA,MAAIz8I,UAAU,WAAUk7G,SAAA,CAAiB3wF,EAASnb,KAAK,KAAGmb,EAASrlB,QAArCqlB,QAGvB,OAAVzT,QAAU,IAAVA,OAAU,EAAVA,EAAYrZ,QAAS,IAAKg/I,EAAAA,GAAAA,MAAA,UAAQz8I,UAAU,0BAA0BopI,QAXxDg9G,KACjBvH,GAAY7sC,EAAQ,EAUyE92F,SAAA,CACxF82F,EAAU,YAAc,aACzBh4D,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAM4iM,EAAU,qBAAuB,qBAAsBzzM,MAAM,OAAOC,OAAO,cAErF,ECEV,GAAeq0K,IApBW30K,IAAwB,IAAvB,KAAEwgB,EAAI,QAAE47H,GAASp8I,EAI1C,OACEu+I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,uBAAsBk7G,SAAA,CAClCx8F,EAAK5H,WAAWrZ,OAAS,GAAIu8I,EAAAA,GAAAA,KAACksG,GAAc,CAACpvO,WAAY4H,EAAK5H,aAAgB,KAC9EwjI,EAAQ4yF,eAAgBzwF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,WAAUk7G,SAAA,CAAC,IANnC,GAAAx0G,OACf4zI,EAAQp0D,KAAK6xF,SAAQ,KAAArxK,OAAI4zI,EAAQp0D,KAAK6xF,SAAW,EAAIz9B,EAAQp0D,KAAK+mJ,OAAS3yF,EAAQp0D,KAAK8mJ,SAAQ,OAAAtmO,OAAM4zI,EAAQp0D,KAAKgnJ,cAKjD,OAClExuN,EAAK+sN,cAAgB,GAAK/sN,EAAK8sN,uBAG9B/uF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,aAAYk7G,SAAA,EACzBuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,WAAUk7G,SAAA,CAAEr6G,GAAE,wBAAwB,KAAG6d,EAAK+sN,kBAC7DhvF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,WAAUk7G,SAAA,CAAEr6G,GAAE,sBAAsB,KAAG6d,EAAK8sN,6BAG3D,ICtBV,IAAI3oO,GAAI1F,OAAO6H,eAEX/C,GAAIA,CAACX,EAAGT,EAAGD,KADPmB,EAACT,EAAGT,EAAGD,KAAMC,KAAKS,EAAIuB,GAAEvB,EAAGT,EAAG,CAAEoE,YAAY,EAAImG,cAAc,EAAIC,UAAU,EAAInG,MAAOtE,IAAOU,EAAET,GAAKD,CAAC,EACxFmB,CAAET,EAAe,iBAALT,EAAgBA,EAAI,GAAKA,EAAGD,GAAIA,GAElE,MAAMyB,GAAIA,CAACf,EAAGT,WAAam8G,iBAAmB,IAAMA,iBAAiB17G,EAAG,MAAMgoK,iBAAiBzoK,GAAKS,EAAE1B,MAAM0pK,iBAAiBzoK,GAAIlB,GAAK2B,GAAMe,GAAEf,EAAG,YAAce,GAAEf,EAAG,cAAgBe,GAAEf,EAAG,cAWzL,MAAMF,WAAU8C,EAAAA,UACdoF,WAAAA,CAAY1I,GACVkc,MAAMlc,GACNqB,GAAEjE,KAAM,mBACRiE,GAAEjE,KAAM,WACRiE,GAAEjE,KAAM,mBAAoB4C,IAC1B,IAAIY,EAAGjE,EACP,MACE8oP,iBAAkBzkP,GAChB5D,KAAKM,OAAQmC,GAAKG,GACpBg0M,eAAgBzyM,GACd1B,EACJ,GAAI0B,EAAG,CACLnE,KAAKu2G,SAAS,CACZ+5E,SAAS,IACR,KACD1sL,GAAKA,GAAG,IAEV,MAAMF,EAA0B,OAArBF,EAAIxD,KAAKmmE,cAAmB,EAAS3iE,EAAE+oD,QAClD7oD,GAAKA,aAAa0B,cAA8C,OAA7B7F,EAAIS,KAAKsoP,kBAA4B/oP,EAAEm5K,UAAUh1K,GACtF,KAEF1D,KAAKsoP,gBAAkB,KAAMtoP,KAAKmmE,QAAU5hE,EAAAA,YAAevE,KAAK+I,MAAQ,CACtEunL,SAAS,EAEb,CACAlqE,iBAAAA,GACE,IAAI5iH,EACJxD,KAAKuoP,eACL,MACEn9L,OAAQxoD,EACRwqG,UAAWxpG,GACT5D,KAAKM,MAAOmC,EAAI,CAClBs0M,WAAwB,iBAALn0M,EAAgB,GAAH8F,OAAM9F,EAAC,MAAOA,GAAK,MACnDwqG,UAAWxpG,GAAK,GAElB5D,KAAKsoP,gBAAkB,IAAIxxC,qBAAqB92M,KAAKwoP,gBAAiB/lP,GACtE,MAAM0B,EAA0B,OAArBX,EAAIxD,KAAKmmE,cAAmB,EAAS3iE,EAAE+oD,QAClDpoD,aAAaiB,aAAepF,KAAKsoP,gBAAgB/yE,QAAQpxK,EAC3D,CACAskP,qBAAAA,CAAsB7lP,EAAGgB,GACvB,OAAOA,EAAE0sL,OACX,CACA5pE,oBAAAA,GACE,IAAI9iH,EAAGnB,EACP,MAAMG,EAA0B,OAArBgB,EAAI5D,KAAKmmE,cAAmB,EAASviE,EAAE2oD,QAClD3pD,GAAKA,aAAawC,cAA8C,OAA7B3C,EAAIzC,KAAKsoP,kBAA4B7lP,EAAEi2K,UAAU91K,GACtF,CACA2lP,YAAAA,GACE,IAAI3lP,EACJ,MA7DyMU,KAC3M,KAAMA,aAAa8B,aACjB,OAAOjC,OACT,IAAIN,EAAIS,EACR,KAAOT,GAAOA,IAAMmC,SAAS0H,MAAQ7J,IAAMmC,SAASwF,iBAAoB3H,EAAE8/G,YAAe,CACvF,GAAI,gBAAgB94G,KAAKlI,GAAEkB,IACzB,OAAOA,EACTA,EAAIA,EAAE8/G,UACR,CACA,OAAOx/G,MAAM,EAoDJuB,CAAwB,OAArB9B,EAAI5C,KAAKmmE,cAAmB,EAASvjE,EAAE2pD,QACnD,CACA1oC,MAAAA,GACE,MACEq5F,SAAUt6G,EACVZ,UAAW4B,EACXpD,OAAQiC,EACRlC,MAAO4D,EACPssG,YAAajtG,GACXxD,KAAKM,OACPgwL,QAAS/wL,GACPS,KAAK+I,MAAOrF,EAAI,CAClBlD,OAAQiC,EACRlC,MAAO4D,GACNhD,EAAI,WAAHuH,OAAcnJ,EAAI,cAAgB,IAAEmJ,OAAG9E,EAAI,IAAH8E,OAAO9E,GAAM,IACzD,OAAO8C,EAAAA,EAAAA,eAAElD,GAAK,MAAO,CACnBxB,UAAWb,EACXS,MAAO8B,EACP9C,IAAKZ,KAAKmmE,SACT5mE,GAAKoF,EAAAA,SAAEk0J,KAAKj2J,GACjB,EAEFqB,GAAEb,GAAG,eAAgB,CACnBqtG,YAAa,MACbzuG,UAAW,GACXopD,OAAQ,EACRgiD,UAAW,EACX7sG,MAAO,KACP8nP,iBAAkB,KAClB7nP,OAAQ,OCxFV,MAAMkoP,GAAuBzuH,EAAAA,cAAoB,CAAC,GAG5C0uH,IAAyB,EAE/B,SAASC,GAA2B1oP,GAAqI,IAApI,UAAE2oP,EAAS,eAAEC,EAAc,MAAEvoP,EAAK,OAAEC,EAAM,aAAE4xG,EAAY,OAAE22I,EAAM,UAAElnJ,EAAS,SAAE9D,EAAQ,gBAAEirJ,EAAkBL,IAAyBzoP,EACnK,MAAM0B,EAAQ,CAAC,EAmBf,MAlBkB,QAAdigG,IACAjgG,EAAM,yBAA2B,WACb,kBAAbm8F,IACPn8F,EAAM,wBAA0B,GAAH8G,OAAMq1F,EAAQ,MAC1CirJ,IACDpnP,EAAM,4BAA8B,QACnB,kBAAVrB,GAAuC,kBAAVA,IACpCqB,EAAMrB,MAAQA,GACI,kBAAXC,GAAyC,kBAAXA,IACrCoB,EAAMpB,OAASA,GACS,kBAAjB4xG,GAAqD,kBAAjBA,IAC3CxwG,EAAMwwG,aAAeA,GACrB22I,IACAnnP,EAAMwwG,aAAe,OACA,qBAAdy2I,IACPjnP,EAAM,gBAAkBinP,GACE,qBAAnBC,IACPlnP,EAAM,qBAAuBknP,GAC1BlnP,CACX,CACA,SAASqnP,GAAQt2O,GAAmK,IAAlK,MAAE+jB,EAAQ,EAAGyvC,QAAS+iL,EAASlnP,UAAWmnP,EAAe,mBAAEC,EAAkB,gBAAEC,EAAe,OAAEN,GAAS,EAAOnnP,MAAOirI,KAAcy8G,GAA2B32O,EAC9K,IAAIgO,EAAImG,EAAI8hB,EACZ,MAAM2gN,EAAsBtvH,EAAAA,WAAiByuH,IACvCc,EAAoB,IAAKF,GAG/B,IAAK,MAAO3pP,EAAKuH,KAAU/H,OAAOmF,QAAQglP,GACjB,qBAAVpiP,UACAsiP,EAAkB7pP,GAIjC,MAAM8pP,EAAe,IACdF,KACAC,EACHT,UAGEnnP,EAAQ,IACPirI,KACA+7G,GAA4Ba,IAEnC,IAAIznP,EAAY,yBACZmnP,IACAnnP,GAAa,IAAJ0G,OAAQygP,IACrB,MAAMO,EAAwC,QAA9B/oO,EAAK8oO,EAAaC,cAA2B,IAAP/oO,GAAgBA,EAChEikI,EAAW,GACX+kG,EAAYl8O,KAAK6iD,KAAK55B,GAC5B,IAAK,IAAIn3B,EAAI,EAAGA,EAAIoqP,EAAWpqP,IAAK,CAChC,IAAIqqP,EAAYhoP,EAChB,GAAI+nP,EAAYjzN,GAASn3B,IAAMoqP,EAAY,EAAG,CAO1C,MAAMppP,EAAmC,QAA1BumB,EAAK8iO,EAAUrpP,aAA0B,IAAPumB,EAAgBA,EAAK,OAChE+iO,EAAiBnzN,EAAQ,EACzBozN,EAAmC,kBAAVvpP,EACzBA,EAAQspP,EAAc,QAAAnhP,OACdnI,EAAK,OAAAmI,OAAMmhP,EAAc,KACvCD,EAAY,IAAKA,EAAWrpP,MAAOupP,EACvC,CACA,MAAMC,EAAgB9vH,EAAAA,cAAoB,OAAQ,CAAEj4H,UAAWA,EAAWJ,MAAOgoP,EAAWjqP,IAAKJ,GAAK,UAClGmqP,EACA9kG,EAAS/9I,KAAKkjP,GAKdnlG,EAAS/9I,KAAKozH,EAAAA,cAAoBA,EAAAA,SAAgB,CAAEt6H,IAAKJ,GACrDwqP,EACA9vH,EAAAA,cAAoB,KAAM,OAEtC,CACA,OAAQA,EAAAA,cAAoB,OAAQ,CAAEj4H,UAAWonP,EAAoB,cAAeC,EAAiB,YAAa,SAAU,YAAqD,QAAvCzgN,EAAK6gN,EAAaT,uBAAoC,IAAPpgN,EAAgBA,EAAK+/M,IAA0BO,EAClOtkG,EAASx0I,KAAI,CAAC0uG,EAAIv/G,IAAM06H,EAAAA,cAAoBivH,EAAS,CAAEvpP,IAAKJ,GAAKu/G,KACjE8lC,EACV,CC3FA,MC6CA,GAAeiwB,IAxCW30K,IAA0D,IAAzD,iBAAE8pP,EAAgB,IAAExuH,EAAG,YAAEizE,EAAW,aAAEm3C,GAAa1lP,EAC5E,MAAO+pP,EAAkBC,IAAuB3wH,EAAAA,EAAAA,WAAS,GACnD4wH,GAAelqI,EAAAA,EAAAA,WACdmqI,EAAiBC,IAAsB9wH,EAAAA,EAAAA,WAAS,IAEvDhZ,EAAAA,EAAAA,YAAU,KACF4pI,EAAa59L,SAAWppD,OAAOs4M,cAAgBt4M,OAAOs4M,aAAahN,IAAgBtrM,OAAOs4M,aAAahN,GAAahvM,OAAS,IAC/H0qP,EAAa59L,QAAQivE,IAAMgD,IAAIo3E,gBAAgBzyM,OAAOs4M,aAAahN,GAAa,IAClF,GAED,CAAC07C,EAAa59L,QAASkiJ,IAU1B,OACEhwD,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,0BAAyBk7G,SAAA,CACrCse,IAAOwgB,EAAAA,GAAAA,KAACsuG,GAAQ,CAACtoP,UAAU,cAAak7G,UACvC8+B,EAAAA,GAAAA,KAAA,OACEp6I,MAAO,CAAEpB,OAAO,GAADkI,OAAK0hP,EAAkB,OAAS,QAAU7pP,MAAM,GAADmI,OAAK0hP,EAAkB,OAAS,SAC9F3oF,IAAI,gBACJjmC,IAAKA,EACL56H,IAAKupP,EACL/+G,QAAUxoI,IAAOgjP,GAAgBoE,EAAiBpnP,GAClD28K,OAAQA,IAjBegrE,MAAO,IAADC,EAAAC,EAAAC,EAAAC,EACnC,MAAMC,EAAyB,OAAZT,QAAY,IAAZA,GAAqB,QAATK,EAAZL,EAAc59L,eAAO,IAAAi+L,GAAqC,QAArCC,EAArBD,EAAuBK,QAAQ,mCAA2B,IAAAJ,OAA9C,EAAZA,EAA4D/wI,wBAC3EkxI,IAA0B,OAAZT,QAAY,IAAZA,GAAqB,QAATO,EAAZP,EAAc59L,eAAO,IAAAm+L,OAAT,EAAZA,EAAuBnqP,OAAMqqP,EAAWrqP,OAAoB,OAAZ4pP,QAAY,IAAZA,GAAqB,QAATQ,EAAZR,EAAc59L,eAAO,IAAAo+L,OAAT,EAAZA,EAAuBnqP,QAAOoqP,EAAWpqP,QACzG6pP,GAAmB,GAErBH,GAAoB,EAAM,EAYNK,GACdvoP,UAAS,iBAAA0G,OAAmBuhP,GAAoB,OAAM,KAAAvhP,OAAIk9O,GAAgB,gBAG7EqE,GAAoBzuH,IACnBwgB,EAAAA,GAAAA,KAACitG,GAAQ,CAACjnP,UAAU,4BAA4BzB,MAAO,IAAKC,OAAQ,QAElE,IC3BV,GAXsBN,IAAA,IAAC,QAAE0uB,EAAO,UAAE5sB,GAAW9B,EAAA,OAC3C87I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAS,oBAAA0G,OAAsB1G,GAAYk7G,UAC9CuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,UAASk7G,SAAA,EACtB8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,mBAAkBk7G,UAC/B8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,kBAAkB7Q,MAAM,OAAOC,OAAO,YAEnDw7I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,OAAMk7G,SAAEtuF,QAErB,ECAR,GAAeimJ,IAPK30K,IAAA,IAAA4qP,EAAA,IAAC,KAAE/oP,EAAI,SAAEgvB,GAAU7wB,EAAA,OAAa,OAAR6wB,QAAQ,IAARA,GAAa,QAAL+5N,EAAR/5N,EAAU3gB,WAAG,IAAA06O,OAAL,EAARA,EAAAhrP,KAAAixB,GAAgBpe,IAAA,IAAC,QAAEic,GAASjc,EAAA,OACtE8rI,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,oBAAmBk7G,SAAA,EAChC8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAI,GAAA1I,OAAK3G,EAAI,QAAQxB,MAAM,OAAOC,OAAO,UAC/Cw7I,EAAAA,GAAAA,KAAA,KAAGh6I,UAAWD,EAAKm7G,SAAEtuF,MACjB,GACN,ICOI/T,GAAQg6J,IAAS30K,IAAA,IAAC,cAAE85O,EAAa,MAAEp/N,EAAK,WAAE8rN,GAAYxmO,EAAA,OAC1D0a,GACEohI,EAAAA,GAAAA,KAAC+uG,GAAY,CACXnwO,MAAOA,EACP8rN,WAAYA,EACZ+e,eAAa,EACbzL,cAAeA,KAGjBh+F,EAAAA,GAAAA,KAACuiC,GAAW,CAACv8K,UAAU,gBACxB,IAmNH,GAAe6yK,IAhNEliK,IAAoD,IAAnD,cAAEqnO,EAAa,KAAEt5N,EAAI,cAAEsqO,GAAgB,GAAMr4O,EAC7D,MAAM,YACJ87L,EAAW,QACX7C,EAAO,SACP7xB,EAAQ,aACRszD,EAAY,qBACZG,EAAoB,cACpBC,EAAa,QACbnxF,EAAO,OACPpuH,EAAM,SACNi8M,EAAQ,MACRvvN,EAAK,WACL+yN,EAAU,WACV3I,EAAU,WACVlsN,GACE4H,GACGuqO,EAAcpF,IAAmBtsH,EAAAA,EAAAA,UAAS,IAE3C2xH,EAAkBA,KACtB,MAAMC,EACJ1d,GAAiBD,EACbC,EAAgBD,EAChBzzD,EACN,OAAIz9B,EAAQp0D,KAAKgnJ,aACRn1D,EAAW,EAAC,GAAArxK,OACZyiP,EAAa,KAAAziP,OAAI4zI,EAAQp0D,KAAKinJ,YAAU,GAAAzmO,OACxCyiP,EAAa,KAAAziP,OAAI4zI,EAAQp0D,KAAKgnJ,cAE9Bn1D,EAAW,EAAC,GAAArxK,OACZyiP,EAAa,KAAAziP,OAAI4zI,EAAQp0D,KAAK+mJ,QAAM,GAAAvmO,OACpCyiP,EAAa,KAAAziP,OAAI4zI,EAAQp0D,KAAK8mJ,SACvC,EAqCI4U,EAAWA,KACfiC,EAAgBhjP,GAAE,yBAClB6d,EAAKtM,QAAQ,EAmBTwxO,EACI,MAARllO,GACAwN,EAAO7kB,MACLub,IAAA,IAAC,UAAEs3G,GAAWt3G,EAAA,OACZs3G,IAAcivG,GAAeK,iBAAiBI,mBAAmB,IAEjEwf,GAAkBzd,EAAWlI,cAAgBT,EAAWsE,YAE9D,OACE7qF,EAAAA,GAAAA,MAAA,OACEz8I,UAAS,sBAAA0G,OACPilO,EAAW9H,YAAc,kBAAoB,GAAE,KAAAn9N,OAC7CuiP,EAAe,aAAe,IAClChzF,gBAvByBr1J,IAEzBA,EAAEtD,OAAO68I,UAAUj7F,SAAS,yCAC5Bt+C,EAAEtD,OAAO68I,UAAUj7F,SAAS,UAC3Bt+C,EAAEtD,OAAO68I,UAAUj7F,SAAS,SAE7B0iM,GACF,EAgBuC1mI,SAAA,EAErC8+B,EAAAA,GAAAA,KAACqvG,GAAa,CACZz8N,QAASq8N,EACTjpP,UAAWipP,EAAe,aAAe,MAE3CxsG,EAAAA,GAAAA,MAAA,OACEz8I,UAAS,YAAA0G,OAAcuiP,EAAe,aAAe,GAAE,KAAAviP,OACrDsiP,EAAgB,gBAAkB,GAAE,KAClC9tI,SAAA,EAEJuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,yBAAwBk7G,SAAA,EACrCuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,sBAAqBk7G,SAAA,CACjC8tI,IACChvG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,0BAAyBk7G,UACtC8+B,EAAAA,GAAAA,KAACmpG,GAAY,CACXrkP,GAAI2tM,EACJr9L,KAAMq9L,EACNzsM,UAAU,gBACV4pM,QAASA,EACT82C,SAAUA,IAAMhiO,EAAKmtN,oBAI3B7xF,EAAAA,GAAAA,KAACsvG,GAAW,CAAC5qO,KAAMA,QAErBs7H,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,kBAAiBk7G,SAC7Bx8F,EAAK6sN,WACJvxF,EAAAA,GAAAA,KAAC4zF,GAAQ,CACPrC,SAAU7sN,EAAK6sN,SACf8Y,YAAcc,GAAgBzmO,EAAKstN,eAAemZ,UAKzD6D,IACChvG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,0BAAyBk7G,UACtC8+B,EAAAA,GAAAA,KAACmpG,GAAY,CACXrkP,GAAI2tM,EACJr9L,KAAMq9L,EACNzsM,UAAU,gBACV4pM,QAASA,EACT82C,SAAUA,IAAMhiO,EAAKmtN,oBAI3B7xF,EAAAA,GAAAA,KAACuvG,GAAiB,CAChB/vH,IAAK6xG,EACL2c,iBAAkBA,IAAMtpO,EAAKguN,OAC7BjgC,YAAaA,EACbm3C,aAAcA,KAEhBnnG,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,mBAAkBk7G,SAAA,EAC/B8+B,EAAAA,GAAAA,KAACsvG,GAAW,CAAC5qO,KAAMA,KACnBs7H,EAAAA,GAAAA,KAACnhI,GAAK,CACJD,MAAOA,EACP8rN,WAAYpqF,EAAQoqF,WACpBsT,cAAeA,KAEjBh+F,EAAAA,GAAAA,KAACwvG,GAAiB,CAAClvG,QAASA,EAAS57H,KAAMA,KAC3C+9H,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,QAAOk7G,SAAA,CACnBr6G,GAAE,mBAAmB,KAAGqoP,WAG7BzsG,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,eAAck7G,SAAA,EAC3B8+B,EAAAA,GAAAA,KAACnhI,GAAK,CACJD,MAAOA,EACPo/N,cAAeA,EACftT,WAAYpqF,EAAQoqF,cAEtBjoF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,QAAOk7G,SAAA,CACnBr6G,GAAE,mBAAmB,KAAGqoP,QAE3BlvG,EAAAA,GAAAA,KAACyvG,GAAe,CAEZ7F,eACAllO,OACAmlO,kBACA9B,OAhJG13O,UACb,GAAIyM,EAAWrZ,OAAS,EAAG,CACzB,MAAMqB,EAAKgY,EAAWwC,MAAM0iB,GAAuB,kBAAdA,EAAK5sB,aACpCvE,MAEJ,2DACEwD,mBAAmBvP,EAAGoG,QAEvBgM,MAAMq8J,GAAaA,EAASjjK,SAC5B4G,MAAMq8J,IACL,MAAMm8E,EAAe,CACnBjtC,QAASlvC,EAAS,GAAGo8E,OACrBjtC,UAAWnvC,EAAS,GAAGgvC,UACvBI,YAAapvC,EAAS,GAAG+uC,aAE3BnzM,GAAAA,eAAepC,MAAM8F,YAAY9I,IAAI,eAAgB2lP,EAAa,IAEnEv4O,OAAM,SAAUya,GAEfnkB,QAAQoC,KAAK,wBAAyB+hB,EACxC,GACJ,CAEAlN,EAAKguN,MAAM,EA0HDoX,qBAvHiBA,KAC3BplO,EAAKotN,oBAAoB,EAuHfiY,iBArHaA,KACvBrlO,EAAKqtN,gBAAgB,EAqHX6V,WACAoC,gBAhHYA,OAiHZrC,eA9GWl/N,IAA0B,IAAzB,SAAEk7N,EAAQ,MAAEz4O,GAAOud,CAAA,OAkH9B,OAANyJ,QAAM,IAANA,GAAAA,EAAQzuB,QAAkB,OAAR0qO,QAAQ,IAARA,GAAAA,EAAU1qO,QAC3Bg/I,EAAAA,GAAAA,MAAA,OACEz8I,UAAS,oCAAA0G,OACP0iP,EAAiB,uBAAyB,IACzCluI,SAAA,CAEI,OAANhvF,QAAM,IAANA,GAAAA,EAAQzuB,QACPu8I,EAAAA,GAAAA,KAAC4vG,GAAW,CAAC7pP,KAAK,QAAQgvB,SAAU7C,IAClC,KACK,OAARi8M,QAAQ,IAARA,GAAAA,EAAU1qO,QACTu8I,EAAAA,GAAAA,KAAC4vG,GAAW,CAAC7pP,KAAK,UAAUgvB,SAAUo5M,IACpC,QAEJ,UAEF,IC5KV,GAAet1D,IAlDW30K,IAKnB,IAAD2pO,EAAA0Q,EAAAI,EAAA,IALqB,cACzBX,EAAa,MACbt6I,EAAK,QACL40G,EAAO,KACPnyD,GACDjiJ,EACC,MAAO6/O,EAAuB9D,IAA4B1iH,EAAAA,EAAAA,WAAS,GAW7DsyH,EAA2C,KAApB,OAAJ1pG,QAAI,IAAJA,GAAW,QAAP0nF,EAAJ1nF,EAAMj7H,aAAK,IAAA2iN,OAAP,EAAJA,EAAapqO,QAAe,kCAAmC,GAQxF,OACEg/I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAS,yBAAA0G,OAA2BmjP,GAAmB3uI,SAAA,EAC1D8+B,EAAAA,GAAAA,KAACqkG,GAAkB,CACjBrG,cAAeA,EACft6I,MAAOA,EACP40G,QAASA,KAEXt4D,EAAAA,GAAAA,KAACskG,GAAiB,CAAC5gJ,MAAOA,EAAO40G,QAASA,EAAS2nC,yBAA0BA,KACvE,OAALv8I,QAAK,IAALA,GAAiB,QAAZ66I,EAAL76I,EAAOknI,kBAAU,IAAA2T,OAAZ,EAALA,EAAmBrV,iBACflpF,EAAAA,GAAAA,KAACukG,GAAwB,CAACp+F,KAAMA,IACpC63F,EAAcyG,sBAAuBzkG,EAAAA,GAAAA,KAACihG,GAAgB,CAACruN,QAAS/rB,GAAE,uCAC7D,OAAL68F,QAAK,IAALA,GAAiB,QAAZi7I,EAALj7I,EAAOknI,kBAAU,IAAA+T,OAAZ,EAALA,EAAmBvV,eAAeppF,EAAAA,GAAAA,KAACwkG,GAAsB,CAAC9gJ,MAAOA,EAAO9wE,QAAS/rB,GAAE,8BACnFk9O,IACC/jG,EAAAA,GAAAA,KAAC0kG,GAAiB,CAChB7B,QAASA,IAAM5C,GAAyB,GACxC6C,OAhCuBzyO,UAC7B4vO,GAAyB,GACrB/0O,EAAMy4O,WAAaf,SACfz8F,EAAK8jF,SAAS/+N,EAAMA,OAAO,GACxBA,EAAMy4O,WAAaf,UACtBz8F,EAAK+jF,cAAch/N,EAAMA,OAAO,EACxC,EA2BMw4F,MAAOA,EACPyiD,KAAMA,EACNzrH,MAzBkBiqN,MAAO,IAADrG,EACgEmB,EAA9F,OAAS,OAAL/7I,QAAK,IAALA,GAAAA,EAAO4pI,cAAoB,OAAL5pI,QAAK,IAALA,GAAiB,QAAZ46I,EAAL56I,EAAOknI,kBAAU,IAAA0T,OAAZ,EAALA,EAAmBx5O,MAAOujO,GAAcyC,gBAAgBE,WACpE,OAALtnI,QAAK,IAALA,GAAc,QAAT+7I,EAAL/7I,EAAOgwI,eAAO,IAAA+L,OAAT,EAALA,EAAgBjT,mBAElB,CAAC,EAqBKmY,OAGP,IC3CJmL,GAAgB3pG,GAElBA,EAAKrhJ,KAAOujO,GAAcyC,gBAAgBC,SAC1C5kF,EAAK6iF,WAAWgO,kBAETnwO,GAAE,yBACJs/I,EAAK/hJ,MAkJd,GAAey0K,IA/IF30K,IAAqC,IAADo6O,EAAAmB,EAAA,IAAnC,MAAE/7I,EAAK,KAAEyiD,EAAI,cAAE63F,GAAe95O,EAC1C,MAAO6rP,EAAaC,IAAkBzyH,EAAAA,EAAAA,UAChC,OAAJ4oB,QAAI,IAAJA,OAAI,EAAJA,EAAMj7H,MAAMzhB,MAAM,EAdbgI,KAAK+iD,MAAMrtD,OAAOkgH,YADF,QAiBhB4oI,EAAUC,IAAe3yH,EAAAA,EAAAA,WACd,QAAhB+gH,EAAA56I,EAAMknI,kBAAU,IAAA0T,OAAA,EAAhBA,EAAkBx5O,MAAOqhJ,EAAKrhJ,KAAO4+F,EAAM4pI,aAEvC6iB,GAAiBlsI,EAAAA,EAAAA,QAAO,MACxBmsI,EAAc1sJ,EAAM4pI,YACpB+iB,EACgB,IAApBlqG,EAAKuiF,aAAqBhlI,EAAM4pI,aAAe5pI,EAAM8pI,mBAEvDjpH,EAAAA,EAAAA,YAAU,KACJ4hC,EAAKj7H,QACP8kO,EAAe7pG,EAAKj7H,OACpB7U,YAAW,IAAMi6O,KAAgB,GACnC,GAEC,CAACnqG,EAAKj7H,QAET,MAAMolO,EAAeA,KAC+B,IAAD/R,EAA7C76I,EAAM4pI,aAAe6iB,EAAe5/L,WAClB,QAAhBguL,EAAA76I,EAAMknI,kBAAU,IAAA2T,OAAA,EAAhBA,EAAkBz5O,MAAOqhJ,EAAKrhJ,IAChCorP,GAAY,GACZC,EAAe5/L,QAAQ3qD,MAAM27G,UAC3B4uI,EAAe5/L,QAAQuqD,aAAe,OAExCo1I,GAAY,GACZC,EAAe5/L,QAAQ3qD,MAAM27G,UAAY,OAE7C,EAqBF,IAlBAgD,EAAAA,EAAAA,YAAU,KACR,MAAMgsI,EAAwBv+K,GAAS,IAAKs+K,GAC5C,GAAI5sJ,EAAM4pI,YAAa,CACrBnmO,OAAOuP,iBAAiB,SAAU65O,GAClC,MAAM5oD,EAAkB,IAAI7vB,iBAAiBy4E,GAM7C,OALA5oD,EAAgBpuB,QAAQ42E,EAAe5/L,QAAS,CAC9CipH,WAAW,EACXE,SAAS,EACT7wB,YAAY,IAEP,KACL1hJ,OAAOk1G,oBAAoB,SAAUk0I,GACrC5oD,EAAgBhuB,YAAY,CAEhC,IAEC,IAECj2E,EAAMuyI,YAAcx1F,GAAUE,UAAkC,IAAtBwF,EAAKj7H,MAAMznB,OACvD,OAAO,KA8CT,OACEg/I,EAAAA,GAAAA,MAAA,OAAKz8I,UAtCgBwqP,MACrB,GAAS,OAAL9sJ,QAAK,IAALA,GAAAA,EAAO4pI,YAAa,CAAC,IAADsR,EACtB,MAAMh/L,EAAU,CAAC,mBAUjB,OATIumG,EAAKrhJ,KAAOujO,GAAcyC,gBAAgBE,YAC5CprL,EAAQ/0C,KAAK,mBAEXs7I,EAAKrhJ,MAAY,OAAL4+F,QAAK,IAALA,GAAiB,QAAZk7I,EAALl7I,EAAOknI,kBAAU,IAAAgU,OAAZ,EAALA,EAAmB95O,KACjC86C,EAAQ/0C,KAAK,gBAEXwlP,GACFzwM,EAAQ/0C,KAAK,cAER+0C,EAAQ9xC,KAAK,IACtB,CACA,OACEq4I,EAAKrhJ,KAAOujO,GAAcyC,gBAAgBC,SAC1C1C,GAAcyC,gBAAgBK,eAEvB,eAGF,EAAE,EAiBOqlB,GAAiBtvI,SAAA,EAC/B8+B,EAAAA,GAAAA,KAACywG,GAAO,CAEN/sJ,MAAOA,EACPyiD,KAAMA,EACNoiF,aAAcpiF,EAAKoiF,aACnBuf,UAAWgI,GAAa3pG,GACxBsiG,aAAc/kJ,EAAM4pI,YApDLmb,KAAO,IAAD9J,EACpBj7I,EAAM4pI,aAGX5pI,EAAMwoI,SAAS/lF,EAAKrhJ,MAAuB,QAArB65O,EAAKj7I,EAAMknI,kBAAU,IAAA+T,OAAA,EAAhBA,EAAkB75O,IAAK,KAAOqhJ,EAAKrhJ,GAAG,EAgDZ,MAAK,YAAA4H,OALrCy5I,EAAKrhJ,MAOxB29I,EAAAA,GAAAA,MAAA,OACEz8I,UAxBwB0qP,MAC5B,MAAM9wM,EAAU,CAAC,gBAIjB,OAHKqwM,GACHrwM,EAAQ/0C,KAAK,eAER+0C,EAAQ9xC,KAAK,IAAI,EAmBT4iP,GACX9rP,IAAKurP,EACLl0F,gBAlBmBr1J,IACnBA,EAAEtD,SAAW6sP,EAAe5/L,SAChC+/L,GAAc,EAgBuBpvI,SAAA,CAEhCmvI,GACCrwG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,wBAAuBk7G,SAAEr6G,GAAE,wBAE1CkpP,EAAY37O,KAAKsQ,IACfs7H,EAAAA,GAAAA,KAAC2wG,GAAQ,CAEP3S,cAAeA,EACft5N,KAAMA,EACNsqO,cACEtrJ,EAAM4pI,YACFnnF,EAAKsjF,aACLtjF,EAAKqjF,WAAarjF,EAAK2jF,iBAAmB3jF,EAAK0jF,YAErD/sN,WAAY4H,EAAK5H,YARZ4H,EAAK+tL,eAYf29C,IACCpwG,EAAAA,GAAAA,KAAC4wG,GAAkB,CACjB5S,cAAeA,EACft6I,MAAY,OAALA,QAAK,IAALA,EAAAA,EAAS,KAChB40G,SAAU50G,IAAc,OAALA,QAAK,IAALA,GAAc,QAAT+7I,EAAL/7I,EAAOgwI,eAAO,IAAA+L,OAAT,EAALA,EAAgBnnC,SACnCnyD,KAAMA,SAIR,IChGV,GAAe0yB,IAvDE30K,IAA+B,IAA9B,MAAEw/F,EAAK,cAAEs6I,GAAe95O,EACtC,MAAM2sP,GAAiB5sI,EAAAA,EAAAA,UACjB6sI,EAAsB9tI,iBAAiBh6G,SAASwF,iBAAiB8gK,iBAAiB,2BAUxF,OAAK5rE,GAGL++C,EAAAA,GAAAA,MAAA,OAAKz8I,UAAS,kBAAA0G,OAAoBg3F,EAAM4pI,YAAc,kBAAoB,IAAMxoO,GAAG,YAAWo8G,SAAA,EAC5FuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC1BuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,aAAYk7G,SAAA,CACxBr6G,GAAE,0BAA0B,IAAE68F,EAAMuzI,mBAAmBxzO,QAAUigG,EAAMwzI,eAAc,IAAAxqO,OAAOg3F,EAAMuzI,mBAAmBxzO,OAAM,KAAM,QAGlIigG,EAAMmoI,MAAMx+N,MAAM84I,GAASA,EAAKrhJ,KAAOujO,GAAcyC,gBAAgBG,cAEjEjrF,EAAAA,GAAAA,KAACymG,GAAW,CAAC7hP,IAAKisP,EAAgBxmO,GAAE,cAAA3d,OAAgB27N,GAAcyC,gBAAgBG,WAAavlF,OAAQ5iC,GAftFA,KACvB37G,OAAOksK,SAAS,CAAC/8D,IAAKwM,EAAGpF,wBAAwBpH,IAAMnvG,OAAOgsK,SAHvDhsK,OAAOixJ,WAAa34I,SAASsxO,GAAe1+E,KAAOy+E,EAAsB,EAAIrxO,SAASqxO,IAGFtK,SAAU,UAAU,EAcIwK,CAAkBluI,GAAI5B,UACnI8+B,EAAAA,GAAAA,KAACL,GAAI,CAACvqI,KAAK,sBAAsB7Q,MAAM,OAAOC,OAAO,OAAOJ,MAAOyC,GAAE,6BAK7Em5I,EAAAA,GAAAA,KAACm2B,GAAI,CAAC/gK,KAAK,qBAETsuF,EAAM0yI,mBACJp2F,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,YAAY6lH,wBAAyB,CAAEC,OAAQpoB,EAAM0yI,oBAGlC,IAApC1yI,EAAMuzI,mBAAmBxzO,QAAgBigG,EAAMwzI,iBAC/Cz0F,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,aAAYk7G,SAAA,EACzB8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,mBAAkBk7G,SAAEr6G,GAAE,sCACrCm5I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,0BAIjB09F,EAAM+nI,mBAAmBr3N,KAAK+xI,IAAI,IAAAkiG,EAAA,OAChCroG,EAAAA,GAAAA,KAACixG,GAAI,CAEHvtJ,MAAOA,EACPyiD,KAAMA,EACN63F,cAAeA,GAAc,QAAAtxO,OAHY,QAGZ27O,EAHhBliG,EAAKsiF,+BAAuB,IAAA4f,EAAAA,EAAIliG,EAAKrhJ,IAIlD,OApCW,IAuCb,IClBV,GAAe+zK,IApCE30K,IAAA,IAAC,MAAEw/F,EAAK,KAAEyiD,GAAMjiJ,EAAA,OAC/Bu+I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,2BAA2BlB,GAAE,aAAA4H,OAAe27N,GAAcyC,gBAAgBG,WAAY/pH,SAAA,EACnG8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAS,eAAA0G,OAAwC,KAAnB,OAAJy5I,QAAI,IAAJA,OAAI,EAAJA,EAAMj7H,MAAMznB,QAAe,gBAAkB,IAAKy9G,UAC/EuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,aAAYk7G,SAAA,CACxBilC,EAAK/hJ,MAAM,KAAG+hJ,EAAKj7H,MAAMznB,OAAO,SAGd,IAAtB0iJ,EAAKj7H,MAAMznB,QACVu8I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,aAAYk7G,UACzB8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,mBAAkBk7G,SAAEr6G,GAAE,wCAGvC47I,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,EACE8+B,EAAAA,GAAAA,KAACywG,GAAO,CAEN/sJ,MAAOA,EACPyiD,KAAMA,EACN2hG,UAAWjhP,GAAE,8BACb0hO,aAAc1hO,GAAE,iCAChBqqP,aAAcrqP,GAAE,+BAA8B,YAAA6F,OAL7By5I,EAAKrhJ,MAOxBk7I,EAAAA,GAAAA,KAAA,OAAA9+B,SACGilC,EAAKj7H,MAAM5d,QAAQoX,GAASA,EAAK8lN,SAAWrkF,EAAKrhJ,KAAIsP,KAAKsQ,IACvDs7H,EAAAA,GAAAA,KAAC2wG,GAAQ,CAEPjsO,KAAMA,EACNsqO,eAAe,GAFVtqO,EAAK+tL,sBASlB,ICpCK0+C,GAAmBA,KAC9B1uG,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,qBAAoBk7G,SAAA,EACjC8+B,EAAAA,GAAAA,KAACitG,GAAQ,CAACjnP,UAAU,wBAEpBy8I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC1B8+B,EAAAA,GAAAA,KAACitG,GAAQ,CAACjnP,UAAU,mBACpBg6I,EAAAA,GAAAA,KAACitG,GAAQ,CAACjnP,UAAU,4BACpBg6I,EAAAA,GAAAA,KAACitG,GAAQ,CAACjnP,UAAU,4BACpBg6I,EAAAA,GAAAA,KAACitG,GAAQ,CAACjnP,UAAU,iCCa1B,GArB8B9B,IAA4B,IAA3B,WAAEwkO,EAAU,MAAEtkO,GAAOF,EAClD,OACE87I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,iBAAgBk7G,UAC7BuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,sBAAqBk7G,SAAA,EAClC8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,cAAak7G,UAC1B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,aAAYk7G,SAAA,GAAAx0G,OACrBtI,EAAK,MAAAsI,OAAKg8N,EAAU,UAG1B1oF,EAAAA,GAAAA,KAACywG,GAAO,CACNtqG,KAAM,CAAEmyD,SAAS,EAAMptL,MAAO,IAAIziB,MAAMigO,IACxCH,aAAc1hO,GAAE,0BAEhB,IAAI4B,MAAMigO,GAAazjO,KAAK,GAAGmP,KAAI,CAAC3J,EAAG4lB,KAC9B2vH,EAAAA,GAAAA,KAACmxG,GAAgB,oBAAAzkP,OAAuB2jB,UAGnD,ECmCV,GAAewoJ,IA/CO30K,IAIf,IAJgB,cACrB85O,EAAa,MACbt6I,EAAK,WACLglI,GACDxkO,EACC,OACGw/F,GACGA,EAAMwzI,iBAAmBxzI,EAAM2kI,GAAcyC,gBAAgBC,UAC7DrnI,EAAM4pI,cAAgB5pI,EAAM2kI,GAAcyC,gBAAgBE,aAC3DtnI,EAAM+nI,mBAAmBp+N,MAAM84I,GAASA,EAAKmyD,WAExC71D,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,+BAA8Bk7G,SAAA,EACnD8+B,EAAAA,GAAAA,KAACoxG,GAAqB,CAAC1oB,WAAYA,EAAYtkO,MAAOyC,GAAE,6BACxDm5I,EAAAA,GAAAA,KAACoxG,GAAqB,CAAC1oB,WAAY,EAAGtkO,MAAOyC,GAAE,qCAKjD47I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,sBAAqBk7G,SAAA,EAClC8+B,EAAAA,GAAAA,KAACqxG,GAAQ,CAACrT,cAAeA,EAAet6I,MAAOA,IAC9CA,EAAMuzI,mBAAmBxzO,OAAS,IACjCu8I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,sBAAqBk7G,UAClC8+B,EAAAA,GAAAA,KAACsxG,GAAoB,CACnB5tJ,MAAY,OAALA,QAAK,IAALA,EAAAA,EAAS,KAChB40G,SAAU50G,GAASA,EAAM40G,QAAQo7B,QACjCsK,cAAeA,MAIpBt6I,EAAMwzI,gBACLz0F,EAAAA,GAAAA,MAAA0rB,GAAAA,SAAA,CAAAjtD,SAAA,EACE8+B,EAAAA,GAAAA,KAACm2B,GAAI,CAAC/gK,KAAK,gCACVsuF,EAAM2kI,GAAcyC,gBAAgBG,YACjCjrF,EAAAA,GAAAA,KAACW,GAAQ,CAETq9F,cAAeA,EACft6I,MAAOA,EACPyiD,KAAMziD,EAAM2kI,GAAcyC,gBAAgBG,YAHrC5C,GAAcyC,gBAAgBG,YAKnCjrF,EAAAA,GAAAA,KAACoxG,GAAqB,CAAC1oB,WAAY,EAAGtkO,MAAOyC,GAAE,oCAGnD,OACA,ICxBV,GAzBkB3C,IAMX,IANY,MACjBE,EAAK,KACLqI,EAAI,WACJk5K,EAAa,GAAE,UACf4rE,EAAY,GAAE,iBACdnb,EAAmB,IACpBlyO,EACC,MAAMwlI,EAAWR,IAEjB,OACE8W,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,aAAYk7G,UACzBuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC1B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,yBAAwBk7G,SAAE98G,KACzC47I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,sBAAqBk7G,SAAEz0G,IACrCk5K,GAAc4rE,GACbvxG,EAAAA,GAAAA,KAAC0qB,GAAM,CAAC1kK,UAAU,4BAA4ByG,KAAMk5K,EAAYv2C,QAASA,IAAM1F,EAAS,OACtF,KACH0sG,GACCp2F,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,qBAAqB6lH,wBAAyB,CAACC,OAAQsqH,KACpE,SAEF,ECWV,GA/BsBlyO,IAAe,IAAd,KAAEkxK,GAAMlxK,EAC7B,OACE87I,EAAAA,GAAAA,KAACq6C,GAAK,CAAC76B,OAAQ4V,EAAMpvK,UAAU,yBAA0B6zL,eAAe,2BAA2BP,kBAAkB,gCAAgCc,cAAc,iCAAgCl5E,UACjMuhC,EAAAA,GAAAA,MAACy6C,GAAS,CAACl3L,UAAU,iBAAgBk7G,SAAA,EACnC8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,kBAAiBk7G,UAC9BuhC,EAAAA,GAAAA,MAAA,OAAKl+I,MAAM,OAAOC,OAAO,OAAOC,QAAQ,YAAY0tG,QAAQ,MAAMztG,MAAM,6BAA4Bw8G,SAAA,EAClG8+B,EAAAA,GAAAA,KAAA,SAAA9+B,SAAO,8BACP8+B,EAAAA,GAAAA,KAAA,KAAGl7I,GAAG,2BAA2BC,OAAO,OAAOC,YAAY,IAAIC,KAAK,OAAOC,SAAS,UAAUgB,QAAQ,cAAag7G,UACjHuhC,EAAAA,GAAAA,MAAA,KAAG39I,GAAG,YAAYM,UAAU,gCAAgCH,KAAK,UAAUC,SAAS,UAASg8G,SAAA,EAC3F8+B,EAAAA,GAAAA,KAAA,QAAM76I,EAAE,4eAA4eL,GAAG,WACvfk7I,EAAAA,GAAAA,KAAA,QAAM76I,EAAE,yfAAyfL,GAAG,WACpgBk7I,EAAAA,GAAAA,KAAA,QAAM76I,EAAE,mqDAAmqDL,GAAG,WAC9qDk7I,EAAAA,GAAAA,KAAA,QAAM76I,EAAE,s/CAAs/CL,GAAG,WACjgDk7I,EAAAA,GAAAA,KAAA,QAAM76I,EAAE,ipCAAipCL,GAAG,WAC5pCk7I,EAAAA,GAAAA,KAAA,QAAM76I,EAAE,yTAAyTL,GAAG,UACpUk7I,EAAAA,GAAAA,KAAA,QAAM76I,EAAE,qUAAqUL,GAAG,oBAKxVk7I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,cAAak7G,SACzBr6G,GAAE,4CAELm5I,EAAAA,GAAAA,KAAA,OAAA9+B,UACE8+B,EAAAA,GAAAA,KAACuiC,GAAW,CAACv8K,UAAU,uBAGrB,ECqBZ,GAAe6yK,IA5CA30K,IAIR,IAADu7O,EAAA+R,EAAA,IAJU,cACdxT,EAAa,MACbt6I,EAAK,WACLglI,GACDxkO,EAKC,OAJAqgH,EAAAA,EAAAA,YAAU,KACRp9G,OAAOksK,SAAS,CAAE/8D,IAAK,EAAGkwI,SAAU,WAAY,GAC/C,IAGI,OAAL9iJ,QAAK,IAALA,GAAAA,EAAO6yI,YACG,OAAL7yI,QAAK,IAALA,GAAAA,EAAOwzI,gBAAyC,IAAvBxzI,EAAMx4E,MAAMznB,QAAgBigG,EAAM+nI,mBAAmBhoO,OAAS,GACnF,OAALigG,QAAK,IAALA,GAAAA,EAAO4pI,aAAyC,IAA1B5pI,EAAMyzI,iBAAgD,IAAvBzzI,EAAMmoI,MAAMpoO,SAClEigG,EAAM+nI,mBAAmBlsM,OAAO4mH,IAAUA,EAAKmyD,WAE3Ct4D,EAAAA,GAAAA,KAACyxG,GAAS,CACfrtP,MAAOyC,GAAE,uBACT4F,KAAM5F,GAAE,sBACR8+K,WAAY9+K,GAAE,4BACd0qP,UAAW9xG,GAAa51I,IAAI,CAACszI,KAAM,SACnCi5F,iBAAuB,OAAL1yI,QAAK,IAALA,OAAK,EAALA,EAAO0yI,oBAK3B3zF,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,iBAAgBk7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAC0xG,GAAa,CACZ1T,cAAeA,EACft6I,MAAY,OAALA,QAAK,IAALA,EAAAA,EAAS,KAChBglI,WAAYA,KAEd1oF,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,uBAAsBk7G,UACnC8+B,EAAAA,GAAAA,KAACsxG,GAAoB,CACnBtT,cAAeA,EACft6I,MAAY,OAALA,QAAK,IAALA,EAAAA,EAAS,KAChB40G,SAAU50G,IAAc,OAALA,QAAK,IAALA,GAAc,QAAT+7I,EAAL/7I,EAAOgwI,eAAO,IAAA+L,OAAT,EAALA,EAAgBnnC,SACnCsrC,YAAY,OAGhB5jG,EAAAA,GAAAA,KAAC2xG,GAAa,CAACv8E,KAAoB,QAAhBo8E,EAAO,OAAL9tJ,QAAK,IAALA,OAAK,EAALA,EAAO40G,eAAO,IAAAk5C,GAAAA,MAC/B,IC2CV,GAjFcltP,IAAW,IAADstP,EAAAC,EAAAC,EAAAC,EACtB,MAAQhlP,OAAO,aAAE2F,EAAY,gBAAEO,EAAe,eAAEF,IAAqBzO,GAC9D05O,EAAegU,IAAoBz0H,EAAAA,EAAAA,WAAS,MACjDknH,oBAAqBxxO,EAAgB+B,KAAOtC,EAAauC,kBACzDipO,iBAAkBxrO,EAAau/O,iBAC/B9T,aAAclrO,EAAgBuiK,KAC9ByoE,eAAgBhrO,EAAgB1L,YAE5B,aAAEsuO,EAAY,aAAEv5F,EAAY,OAAEpF,GAAWmD,GAAaxwI,OACrDiL,EAAgButI,IAAqB9kB,EAAAA,EAAAA,YACtCmM,EAAWR,IACXo/F,GAAYrkH,EAAAA,EAAAA,WAElBM,EAAAA,EAAAA,YAAU,KACRytI,EAAiB,CACfvN,oBAAqBxxO,EAAgB+B,KAAOtC,EAAauC,kBACzDipO,iBAAkBxrO,EAAau/O,iBAC/B9T,aAAclrO,EAAgBuiK,KAC9ByoE,eAAgBhrO,EAAgB1L,OAChC43K,UAAWzsK,EAAa0sK,UACxBZ,eAAgBzrK,EAAessK,eAC/BX,iBAAkB3rK,EAAeusK,iBACjCb,cAAe1rK,EAAewsK,cAC9BjjC,aAAcvpI,EAAegC,cAC7B,GACD,CACD9B,EAAgBuiK,KAChBviK,EAAgB+B,GAChB/B,EAAgB1L,OAChBmL,EAAau/O,iBACbv/O,EAAauC,kBACblC,EAAessK,eACftsK,EAAeusK,iBACfvsK,EAAewsK,cACfxsK,EAAegC,aACfrC,EAAa0sK,YA2Bf,OAXA76D,EAAAA,EAAAA,YAAU,KACJu8B,GAAYpuI,KAAkB+tI,GAAUC,MAd7BrwI,WACfi4N,EAAU/3K,QAAU,IAAIolL,GAAU,CAChCC,SAAU90F,GAAYpuI,GACtBvD,eAAgBA,GAAAA,eAChB0mO,eACAC,kBAAmBx5F,EACnBy5F,YAAa7+F,EACbxN,aAGF4+F,EAAU/3K,QAAQ9vC,MAAM,EAKtByxO,EACF,GAEC,KAEH3tI,EAAAA,EAAAA,YAAU,KAAO,IAAD4tI,EACd9vG,EAA4C,QAA3B8vG,EAAC7tP,EAAMyI,MAAM+H,sBAAc,IAAAq9O,OAAA,EAA1BA,EAA4B/vG,WAAW,GACxD,CAA2B,QAA3BwvG,EAACttP,EAAMyI,MAAM+H,sBAAc,IAAA88O,OAAA,EAA1BA,EAA4BxvG,aAE5BtB,GAAYpuI,KAAkB+tI,GAAUC,MAExC+B,EAAAA,GAAAA,MAACq6B,GAAM,CAAC92K,UAAU,aAAc1B,EAAK48G,SAAA,EACnC8+B,EAAAA,GAAAA,KAACm2B,GAAI,CAAC/gK,KAAK,uBACX4qI,EAAAA,GAAAA,KAACoyG,GAAM,CACLpU,cAAeA,EACft6I,MAAwB,QAAnBmuJ,EAAEvpB,EAAU/3K,eAAO,IAAAshM,EAAAA,EAAI,KAC5BnpB,WACGJ,EAAU/3K,QAEPz7C,EADArD,KAAK+iC,IAA0C,QAAvCs9M,EAA2B,QAA3BC,EAACztP,EAAMyI,MAAM+H,sBAAc,IAAAi9O,OAAA,EAA1BA,EAA4B3vG,kBAAU,IAAA0vG,EAAAA,EAAI,EAAG,UAO7D9xG,EAAAA,GAAAA,KAACsvC,GAAM,IAAKhrL,GAAQ,EC3E7B,GAT2BA,KACzBigH,EAAAA,EAAAA,YAAU,KACRp1G,GAAAA,eAAepC,MAAMyI,MAAM0I,oBAAoB,GAC9C,KAEI8hI,EAAAA,GAAAA,KAACsvC,GAAM,IAAKhrL,KCRN,MAAM+tP,WAAsB9vI,EAAAA,UACzC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMguP,WAAuB/vI,EAAAA,UAC1C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMiuP,WAAkChwI,EAAAA,UACrD16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMkuP,WAAyBjwI,EAAAA,UAC5C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMmuP,WAAqBlwI,EAAAA,UACxC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMouP,WAA4BnwI,EAAAA,UAC/C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMquP,WAAsBpwI,EAAAA,UACzC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMsuP,WAA2BrwI,EAAAA,UAC9C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMuuP,WAA+BtwI,EAAAA,UAClD16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMwuP,WAAqBvwI,EAAAA,UACxC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMyuP,WAA2BxwI,EAAAA,UAC9C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAM0uP,WAAkBzwI,EAAAA,UACrC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAM2uP,WAA2B1wI,EAAAA,UAC9C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAM4uP,WAAe3wI,EAAAA,UAClC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMmtP,WAAkBlvI,EAAAA,UACrC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAM6uP,WAAkB5wI,EAAAA,UACrC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECLF,MCuGA,GA/EgBA,IAAW,IAAD8uP,EACxB,MAAM/kF,EAAcpkC,IAAYnlI,GAC1B4P,EAA8B,QAApB0+O,EAAG9uP,EAAMuO,mBAAW,IAAAugP,OAAA,EAAjBA,EAAmB1+O,YAC/B2+O,EAAeC,IAAoB/1H,EAAAA,EAAAA,UAAS,KAC5Cg2H,EAAoBC,IAAyBj2H,EAAAA,EAAAA,YAC9CmxD,EAAe6kE,EAAqB1sP,GAAE,+BAAgC,CAAE6zB,MAAO64N,IAAwB,IAE7GhvI,EAAAA,EAAAA,YAAU,KACR,WACE,MAAQopE,SAAU0lE,EAAe3lE,MAAO6lE,SAA6BpkP,GAAAA,eAAeuR,IAAIvL,SAASyH,OAAOyxJ,EAAa,EAlBhG,GAmBrBilF,EAAiBD,GACjBG,EAAsBD,EACvB,EAJD,EAII,GACH,CAACllF,IAaJ,OAAK/pK,EAAMyI,OAAUzI,EAAMyI,MAAM2F,cAAiBpO,EAAMuO,aAIjDmtI,EAAAA,GAAAA,KAAC88B,GAAM,IAAKx4K,EAAO0B,UAAU,YAAWk7G,SAC1CmyI,GAAiBE,EAAqB,GACnC9wG,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,iBAAgBk7G,SAAA,EAC/B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,mBAAkBk7G,SAAEr6G,GAAE,0BACrCm5I,EAAAA,GAAAA,KAAC4tC,GAAiB,CAACxpL,MAAOsqL,EAAcb,cAAc,EAAMnxE,SAnB/CrsG,UAAa,IAADojP,EAC/B,IAAmC,QAA/BA,EAAAnvP,EAAMuO,YAAYwgP,qBAAa,IAAAI,OAAA,EAA/BA,EAAiChwP,UAAW8vP,EAAoB,OAEpE,MAAMvkE,EAAWv9K,KAAK6iD,KAAK++L,EAAc5vP,OA3BlB,GA2BiD,GAChEkqL,SAAUx4K,SAAmBhG,GAAAA,eAAeuR,IAAIvL,SAASyH,OAAOyxJ,EAAa2gB,EA5B9D,GA6BjBC,EAAiBokE,EAAc3mP,OAAOyI,GAE5ChG,GAAAA,eAAepC,MAAM8F,YAAY9I,IAAI,gBAAiBklL,GACtDqkE,EAAiBrkE,EAAe,EAWyD/tE,SAChFmyI,EAAcj/O,KAAKsvF,IAClBs8C,EAAAA,GAAAA,KAACkvC,GAAW,CAEVxrF,MAAOA,EAAO6gF,UAAQ,EACtBD,iBAAiB,IACjBD,iBAAiB,IACjBtlD,IAAKshB,GAAe38C,GAChB+7C,GAAa51I,IAAI,CAAEszI,KAAM,WAAYr4I,GAAI4+F,EAAMlkF,WAAYpK,KAAM6gI,GAAmBvyC,EAAM5oF,QAC1F2kI,GAAa51I,IAAI,CAAEszI,KAAM,UAAWr4I,GAAI4+F,EAAMlkF,WAAYpK,KAAM6gI,GAAmBvyC,EAAM5oF,SANxF4oF,EAAM1uF,WAYhBq+O,IAAkBA,EAAc5vP,QAC/Bg/I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,aAAYk7G,SAAA,EACzBuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,cAAak7G,SAAA,EAC1B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,yBAAwBk7G,SAAEr6G,GAAE,qCAC3Cm5I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,sBAAqBk7G,SAAEr6G,GAAE,0CAEzC6N,GAAcA,EAAWjR,OAAS,IACjCg/I,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,iBAAgBk7G,SAAA,EAC7B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,aACfg6I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,6BAA4Bk7G,SAAEr6G,GAAE,oDAC/Cm5I,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,qBAAoBk7G,UACjC8+B,EAAAA,GAAAA,KAACgqC,GAAM,CAACW,OAAK,EAAAzpE,SAETxsG,EAAWN,KAAKsvF,IACPs8C,EAAAA,GAAAA,KAAC+uC,GAAY,CAElBrrF,MAAOA,EACPq7B,IAAK0gB,GAAa51I,IAAI,CAAEszI,KAAM,WAAYr4I,GAAI4+F,EAAMlkF,WAAYpK,KAAM6gI,GAAmBvyC,EAAM5oF,SAF1F4oF,EAAM1uF,gBAU3B,OA/CD,IAiDE,EClGE,MAAM0+O,WAA0BnxI,EAAAA,UAC7C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMqvP,WAAmBpxI,EAAAA,UACtC16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAMsvP,WAA6BrxI,EAAAA,UAChD16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECHa,MAAM6/M,WAAuB5hG,EAAAA,UAC1C16F,MAAAA,GACE,OAAOm4H,EAAAA,GAAAA,KAACsvC,GAAM,IAAKtrL,KAAKM,OAC1B,ECuEF,MACA,GAAe,sBAA0B,8DCpDzC,GAtByBuvP,KACvB,MAAOz/N,GAAU09G,KAcjB,OAAO2Q,EAAAA,GAAAA,MAAA,OAAK78I,MAbW,CACrBrB,MAAO,QACPC,OAAQ,QACRy9G,QAAS,OACTopE,eAAgB,aAChByoE,WAAY,SACZC,cAAe,SACfC,SAAU,uBAMsB9yI,SAAA,EAEhC8+B,EAAAA,GAAAA,KAAA,OAAKp6I,MANY,CACjBo+O,UAAW,SAKaxkH,IAAKy0H,GAAW1vP,MAAM,QAAQC,OAAO,QAAQihK,IAAI,YACzEzlB,EAAAA,GAAAA,KAAA,OAAA9+B,SAAM9sF,EAAOvqB,IAAI,eACb,ECvBKqqP,GACN,MADMA,GAEN,KAFMA,GAGL,KAGKC,GACN,WADMA,GAEN,eAFMA,GAGD,gBAHCA,GAIL,eCiBR,GAzBsBjwP,IAA4B,IAA3B,SAAEkwP,EAAQ,QAAEhlH,GAASlrI,EAC1C,OACE87I,EAAAA,GAAAA,KAAAmuB,GAAAA,SAAA,CAAAjtD,SACGkzI,EAAShgP,KAAKigP,IACb,MAAM,YAAE/xC,EAAW,GAAEx9M,EAAE,OAAE6qP,EAAM,UAAEptC,GAAc8xC,EAC/C,OACE5xG,EAAAA,GAAAA,MAAA,MAAAvhC,SAAA,EACE8+B,EAAAA,GAAAA,KAAA,MAAA9+B,SAAKp8G,KACLk7I,EAAAA,GAAAA,KAAA,MAAA9+B,UACE8+B,EAAAA,GAAAA,KAAA,OACE5Q,QAASA,IAAMA,EAAQugH,EAAQptC,EAAWD,GAC1C18M,MAAO,CAAE4kK,MAAO,OAAQh0D,OAAQ,WAAY0K,SAE3CyuI,OAGL3vG,EAAAA,GAAAA,KAAA,MAAA9+B,SAAKohG,KACLtiE,EAAAA,GAAAA,KAAA,MAAA9+B,SAAKqhG,MAXEz9M,EAYJ,KAGR,ECvBP,IAAImjH,GAAY,CAAC,YAAa,YAAa,OAAQ,WAAY,aAAc,UAAW,OAAQ,QAAS,aAAc,MAAO,gBAAiB,YAC/I,SAAS/kH,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAASuyG,GAAyBryG,EAAQ+nH,GAAY,GAAc,MAAV/nH,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQ+nH,GAAY,GAAc,MAAV/nH,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAOooH,EAAavoH,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAImoH,EAAWjoH,OAAQF,IAAOI,EAAM+nH,EAAWnoH,GAAQkoH,EAASl9G,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhNqoH,CAA8BjoH,EAAQ+nH,GAAuB,GAAItoH,OAAO2H,sBAAuB,CAAE,IAAIiyJ,EAAmB55J,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIw5J,EAAiBt5J,OAAQF,IAAOI,EAAMo5J,EAAiBx5J,GAAQkoH,EAASl9G,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAU8vD,qBAAqB5vD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAM3e,IAAIk/G,GAAY,CAEd8xI,SAAUt/I,KAAAA,KAEVu/I,WAAYv/I,KAAAA,KAEZhvG,UAAWgvG,KAAAA,OAEXsjD,UAAWtjD,KAAAA,OAEXm2D,KAAMn2D,KAAAA,KAENw/I,MAAOx/I,KAAAA,KACP2hD,SAAU3hD,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,OAAkBA,KAAAA,SAEjE8gF,WAAY9gF,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,SACjDy/I,cAAe77F,GAEfpnG,KAAMwjD,KAAAA,OAEN0/I,QAAS1/I,KAAAA,KAET3mG,IAAKuqJ,IAEP,SAAS+7F,GAAMrwP,GACb,IAAI0B,EAAY1B,EAAM0B,UACpBsyJ,EAAYh0J,EAAMg0J,UAClB9mG,EAAOltD,EAAMktD,KACb8iM,EAAWhwP,EAAMgwP,SACjBC,EAAajwP,EAAMiwP,WACnBG,EAAUpwP,EAAMowP,QAChBvpF,EAAO7mK,EAAM6mK,KACbqpF,EAAQlwP,EAAMkwP,MACd1+D,EAAaxxL,EAAMwxL,WACnBr4B,EAAan5J,EAAM+J,IACnBssC,OAAqB,IAAf8iH,EAAwB,QAAUA,EACxCm3F,EAAuBtwP,EAAMmwP,cAC7BI,OAAyC,IAAzBD,EAAkC,MAAQA,EAC1Dj+F,EAAWryJ,EAAMqyJ,SACjB9N,EAAa9yC,GAAyBzxG,EAAO2jH,IAC3CroE,EAAUy4G,GAAgB14G,KAAW35C,EAAW,UAASwrD,GAAO,SAAWA,IAAc8iM,GAAW,mBAA0BC,GAAa,qBAA4BG,GAAU,kBAAyBvpF,GAAO,eAAsBqpF,GAAQ,eAAwBl8F,GACvQw8F,EAAqB72H,IAAAA,cAAoBtjF,EAAKz3C,GAAS,CAAC,EAAG2lJ,EAAY,CACzEjkJ,IAAK+xJ,EACL3wJ,UAAW45C,KAEb,GAAIk2I,EAAY,CACd,IAAIi/D,EAAsB18F,IAA+B,IAAfy9B,EAAsB,mBAAqB,oBAAoBppL,OAAOopL,GAAax9B,GAC7H,OAAoBr6B,IAAAA,cAAoB42H,EAAe,CACrD7uP,UAAW+uP,GACVD,EACL,CACA,OAAOA,CACT,CACAH,GAAMnyI,UAAYA,GAClB,YCuGA,GAAIrzG,GAAAA,gBAAoE,OAAlDA,GAAAA,eAAepC,MAAM8F,YAAYsvM,aAAuB,CAC5E,MAAMutC,EAAe,CACnB,CAAE5qP,GAAI,EAAGgW,KAAM,UAAW5P,MAAO,IACjC,CAAEpG,GAAI,EAAGgW,KAAM,YAAa5P,MAAO,IACnC,CAAEpG,GAAI,EAAGgW,KAAM,cAAe5P,MAAO,KAEvCiE,GAAAA,eAAepC,MAAM8F,YAAY9I,IAAI,eAAgB2lP,EACvD,CAMAvgP,GAAAA,eAAepC,MAAM8F,YAAY9I,IAAI,eALhB,CACnB,CAAEjF,GAAI,EAAGgW,KAAM,UAAW5P,MAAO,UACjC,CAAEpG,GAAI,EAAGgW,KAAM,YAAa5P,MAAO,MACnC,CAAEpG,GAAI,EAAGgW,KAAM,cAAe5P,MAAO,qCAIvC,MC5GA,GArCe,CACbuyI,KAAI,GACJ9oI,SAAQ,GACR06K,QAAO,GACP1B,SAAQ,GACRi4B,eAAc,GACdC,UAAS,GACTvvC,KAAI,GACJ0+E,iBAAgB,GAChB3C,cAAa,GACbC,eAAc,GACdC,0BAAyB,GACzBC,iBAAgB,GAChBC,aAAY,GACZC,oBAAmB,GACnBC,cAAa,GACbsC,mBAAkB,GAClBpC,uBAAsB,GACtBC,aAAY,GACZC,mBAAkB,GAClBC,UAAS,GACTC,mBAAkB,GAClBC,OAAM,GACNzB,UAAS,GACT0B,UAAS,GACT98E,OAAM,GACNq9E,kBAAiB,GACjBC,WAAU,GACVC,qBAAoB,GACpBzvC,eAAc,GACd0vC,iBAAgB,GAChBqB,SDtDgB5wP,IAChB,MAAO8vP,EAAUe,IAAe53H,EAAAA,EAAAA,UAAS,KAClC63H,EAAYC,IAAiB93H,EAAAA,EAAAA,UAAS,KACtCiyD,EAAW8lE,IAAgB/3H,EAAAA,EAAAA,UAAS,IACrCmM,EAAWR,KAEjB3kB,EAAAA,EAAAA,YAAU,KACRgxI,EAAapuP,OAAO4B,SAASmuH,KAAK,IAGpC,MAAMq+H,EAAgBx2H,IAChBA,EAAIt/F,SAAS00N,IACfmB,EAAapB,IACJn1H,EAAIt/F,SAAS00N,IACtBmB,EAAapB,IACJn1H,EAAIt/F,SAAS00N,KAAkBp1H,EAAIt/F,SAAS00N,IACrDmB,EAAapB,IAEboB,EAAapB,GACf,EA8CF,OACEl0G,EAAAA,GAAAA,KAAC88B,GAAM,IAAKx4K,EAAO0B,UAAU,WAAUk7G,UACrC8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,kBAAiBk7G,UAC9BuhC,EAAAA,GAAAA,MAAA,OAAKuxC,MAAM,OAAOlvL,GAAG,WAAUo8G,SAAA,EAC7BuhC,EAAAA,GAAAA,MAAA,OAAKuxC,MAAM,MAAK9yE,SAAA,EACd8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,gBAAek7G,SAAC,cAC/B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,YAAWk7G,SAAC,mYAS3B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,YAAWk7G,SAAC,qHAI3B8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,YAAWk7G,SAAC,yGAK7B8+B,EAAAA,GAAAA,KAAA,OAAKg0C,MAAM,SAAQ9yE,UACjB8+B,EAAAA,GAAAA,KAAA,SACEg0C,MAAM,eACNlvL,GAAG,SACH2pK,SAtDM7nK,IAChByuP,EAAczuP,EAAEtD,OAAO4H,MAAM,EAsDnBqxL,QAASA,KAlDf64D,EAAW3xP,OAAS,GACtBoN,MAEE,2DACEwD,mBAAmB+gP,IAEpBl+O,MAAK,CAACq8J,EAAU/+J,IAAS++J,EAASjjK,SAClC4G,MAAM1C,IACDA,EAAK/Q,OAAS,EAChB0xP,EAAY3gP,GAEZ2gP,EAAY,GACd,IAEDh+O,OAAM,SAAUya,GAEfnkB,QAAQoC,KAAK,wBAAyB+hB,EACxC,GAiCwC,EAClC+/B,YAAY,mDACZ5rD,KAAK,OACLmF,MAAOkqP,MAGU,IAApBhB,EAAS3wP,QAA+B,KAAf2xP,GACxBp1G,EAAAA,GAAAA,KAAA,OAAA9+B,UACE8+B,EAAAA,GAAAA,KAAA,SAAA9+B,SAAO,gFAKP,KACHkzI,EAAS3wP,OAAS,GACjBu8I,EAAAA,GAAAA,KAAA,OAAA9+B,UACEuhC,EAAAA,GAAAA,MAACkyG,GAAK,CAACD,SAAO,EAAAxzI,SAAA,EACZ8+B,EAAAA,GAAAA,KAAA,SAAA9+B,UACEuhC,EAAAA,GAAAA,MAAA,MAAAvhC,SAAA,EACE8+B,EAAAA,GAAAA,KAAA,MAAIrvH,MAAM,MAAKuwF,SAAC,OAChB8+B,EAAAA,GAAAA,KAAA,MAAIrvH,MAAM,MAAKuwF,SAAC,kBAChB8+B,EAAAA,GAAAA,KAAA,MAAIrvH,MAAM,MAAKuwF,SAAC,mBAChB8+B,EAAAA,GAAAA,KAAA,MAAIrvH,MAAM,MAAKuwF,SAAC,qBAGpB8+B,EAAAA,GAAAA,KAAA,SAAOl7I,GAAG,QAAOo8G,UACf8+B,EAAAA,GAAAA,KAACw1G,GAAa,CAACpB,SAAUA,EAAUhlH,QAlGtC+xB,CAACs0F,EAAO72O,EAAO0jM,KAC1B,MAAMotC,EAAe,CACnBjtC,QAASgzC,EACT/yC,UAAW9jM,EACX+jM,YAAaL,GAEfnzM,GAAAA,eAAepC,MAAM8F,YAAY9I,IAAI,eAAgB2lP,GAErDhmH,EACE+V,GAAa51I,IAAI,CACfszI,KAAM,WACNr4I,GAAI0qL,EACJp6K,KAAM,mBAET,WAwFS,MACJqtI,EAAAA,GAAAA,MAAA,OAAKuxC,MAAM,MAAK9yE,SAAA,EACduhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,YAAWk7G,SAAA,CAAC,QACnB,KACNuhC,EAAAA,GAAAA,MAAA,KAAAvhC,SAAA,CAAG,sVAMmC,KACpC8+B,EAAAA,GAAAA,KAAA,KAAGzd,KAAK,gCAA+BrhB,SAAC,2BAEpC,WAIRuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,gBAAek7G,SAAA,CAAC,MAC3B8+B,EAAAA,GAAAA,KAAA,KAAA9+B,SAAG,4DAKN,EC5FXw0I,UC3DiBpxP,IAEb07I,EAAAA,GAAAA,KAAC88B,GAAM,IAAKx4K,EAAO0B,UAAU,aAAYk7G,UACvCuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,kBAAiBk7G,SAAA,EAC9B8+B,EAAAA,GAAAA,KAAA,MAAIh6I,UAAU,cAAak7G,SAAC,gBAC5BuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,WAAUk7G,SAAA,EACvBuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,gBAAek7G,SAAA,EAC5B8+B,EAAAA,GAAAA,KAAA,KAAA9+B,SAAG,OACH8+B,EAAAA,GAAAA,KAAA,KAAA9+B,UAAG8+B,EAAAA,GAAAA,KAAA,UAAA9+B,SAAQ,+CACX8+B,EAAAA,GAAAA,KAAA,KAAA9+B,SAAG,0SACH8+B,EAAAA,GAAAA,KAAA,KAAA9+B,UAAG8+B,EAAAA,GAAAA,KAAA,UAAA9+B,SAAQ,4BACX8+B,EAAAA,GAAAA,KAAA,KAAA9+B,SAAG,uFACH8+B,EAAAA,GAAAA,KAAA,KAAA9+B,UAAG8+B,EAAAA,GAAAA,KAAA,UAAA9+B,SAAQ,iCACX8+B,EAAAA,GAAAA,KAAA,KAAA9+B,UAAG8+B,EAAAA,GAAAA,KAAA,UAAA9+B,SAAQ,qCACXuhC,EAAAA,GAAAA,MAAA,KAAAvhC,SAAA,CAAG,mBAAe8+B,EAAAA,GAAAA,KAAA,KAAGzd,KAAK,sBAAqBrhB,SAAC,4BAChD8+B,EAAAA,GAAAA,KAAA,KAAA9+B,SAAG,uGACHuhC,EAAAA,GAAAA,MAAA,KAAAvhC,SAAA,CAAG,qNACH8+B,EAAAA,GAAAA,KAAA,KAAGzd,KAAK,kCAAkCj/H,OAAO,SAAQ49G,SAAC,iBAI5DuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,WAAUk7G,SAAA,EACvBuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,MAAKk7G,SAAA,EAClB8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,sBAAqBk7G,UAClC8+B,EAAAA,GAAAA,KAAA,SAAOh6I,UAAU,eAAelB,GAAG,OAAOsQ,KAAK,OAAOu8C,YAAY,OAAO5rD,KAAK,OAAOs1C,UAAQ,OAE/F2kG,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,sBAAqBk7G,UAClC8+B,EAAAA,GAAAA,KAAA,SAAOh6I,UAAU,eAAelB,GAAG,QAAQsQ,KAAK,QAAQu8C,YAAY,QAAQ5rD,KAAK,QAAQs1C,UAAQ,UAGrG2kG,EAAAA,GAAAA,KAAA,YAAUh6I,UAAU,eAAelB,GAAG,WAAWsQ,KAAK,WAAWu8C,YAAY,UAAUgkM,KAAK,OAAe31G,EAAAA,GAAAA,KAAA,UAC3GA,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,MAAKk7G,UAClB8+B,EAAAA,GAAAA,KAAA,OAAKh6I,UAAU,uBAAsBk7G,UACnC8+B,EAAAA,GAAAA,KAAA,UAAQh6I,UAAU,YAAYD,KAAK,SAAQm7G,SAAC,mCD2B5D00I,IE5DWtxP,IAEP07I,EAAAA,GAAAA,KAAC88B,GAAM,IAAKx4K,EAAO0B,UAAU,MAAKk7G,UAChCuhC,EAAAA,GAAAA,MAAA,OAAKz8I,UAAU,kBAAiBk7G,SAAA,EAC9B8+B,EAAAA,GAAAA,KAAA,MAAIh6I,UAAU,aAAYk7G,SAAC,gCAC3B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,yBAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,0MAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,qGAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,wKAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,0DAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,4JAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,iCAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,4LAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,qCAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,sRAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,uDAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,gDAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,gDAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,qIAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,0CAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,+VAC1B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,eAAck7G,SAAC,0DAC5B8+B,EAAAA,GAAAA,KAAA,KAAGh6I,UAAU,aAAYk7G,SAAC,4JCfvB20I,GAAUA,KACrB,MAAOC,EAAcC,IAAmBx4H,EAAAA,EAAAA,UAAS,CAAC,GAC5Cy4H,GAAe/xI,EAAAA,EAAAA,QAAO,OAErBgyI,EAAS34I,IAAe44I,EAAAA,EAAAA,aAAWxwP,GAAKA,EAAI,GAAG,GAEhDqD,EAAYggI,IACZzR,EAAQwa,KACR19G,EAAS61G,IACTP,EAAWR,IAEjB90G,EAAO+oH,KAAO/oH,EAAO+oH,MAAQ,OAE7B,MAAMjG,EAAS/nI,GAAAA,eAAeqR,eAAehR,SAAS,WAEtD+0G,EAAAA,EAAAA,YAAU,KACR81B,GAAa4C,kBAAkB7oH,GAC/BimH,GAAa55H,KAAK2T,EAAO,GAEzB,CAACrrB,KAEHw7G,EAAAA,EAAAA,YAAU,KACR,MAuBMjyG,EAAcnD,GAAAA,eAAepC,MAAMmF,WAAU,KAE7C/C,GAAAA,eAAepC,MAAMlD,MAAM6I,cAC7B2nI,GAAatwI,IAAI,kBAAmBoF,GAAAA,eAAepC,MAAMlD,MAAM6I,aAAa8M,YAG9E89F,GAAa,IAKf,MAlCYjtG,iBACJ02G,GAAY3yF,GAElB,MAAM,aAAE1hB,EAAY,YAAEC,GAAgBxD,GAAAA,eAAepC,MAAMlD,MACvD6I,GAA2C,IAA3BA,EAAa8pI,WAAmB7pI,EAAYw6J,cAAgB6oF,EAAazlM,UAC3FylM,EAAazlM,QAAU4uD,aAAY9uG,UAEjC,MAAM8lP,QAAiBhnP,GAAAA,eAAeuR,IAAIlL,MAAM+H,aAEhDpO,GAAAA,eAAeqR,eAAe/Q,SAAS,gBAAiB0mP,EAASz4O,OACjE46H,GAAegB,UAAU,CAAC31I,IAAKi0I,GAAkBpuD,MAAOt+E,MAAOirP,EAASz4O,QACxE28H,GAAatwI,IAAI,gBAAiBosP,EAASz4O,MAAM,GAChD,OAIL,MAAM04O,EAAY1jP,GAAgBA,EAAa2M,WAAWC,MAAMkhI,GAAiC,cAAnBA,EAAU1lI,OACxC,IAA5C3T,OAAO4B,SAASw5H,KAAKh0H,QAAQ,YAAoB6nP,GAAiC,cAApBA,EAAU72O,QAC1E9R,QAAQmC,IAAI,wBACZzI,OAAO4B,SAASw5H,KAAOp7H,OAAO4B,SAASw5H,KAAKn1H,QAAQ,UAAW,YACjE,EAYF8hM,GAEO,KACL58L,IACAy9J,GAAoBsmF,UAChBL,EAAazlM,SAAWoqD,cAAcq7I,EAAazlM,QAAS,CACjE,GACA,KAEHg0D,EAAAA,EAAAA,YAAU,KACR,MAAM+xI,EAAUttP,SAASwoK,eAAe,WACpC8kF,IACFA,EAAQ/zH,KAAO0sC,GAAiB,gBAAiB,IAAI,IAGvD,MAAM14B,EAASpvI,OAAO4B,SAASw5H,KAK/B,GAAIgU,EAAO92G,SAAS,KAAM,CACxB,IAAI8iG,EAAOgU,EAMX,GAJAhU,EAAOA,EAAKn1H,QAAQ,oEAAqE,IAEzFm1H,EAAOA,EAAKn1H,QAAQ,QAAS,IAEzBmpI,IAAWhU,EAAM,CACnB,IAAI0hE,EAAe98L,OAAO66H,QAAQj1H,MAEb,OAAjBk3L,QAA0Cp/L,IAAjBo/L,IAC3BA,EAAe,CAAEllE,IAAK,GAAIlvB,GAAI,GAAIz9D,QAAS,CAAC,IAE9C6xJ,EAAallE,IAAMwD,EACnB0hE,EAAap0F,GAAK0yB,EAElBp7H,OAAO66H,QAAQS,aAAawhE,EAAc,GAAI1hE,EAChD,CACF,MAGFhe,EAAAA,EAAAA,YAAU,KAYJp1G,GAAAA,eAAeqR,eAAehR,SAAS,WAX/Ba,WACV,GAAI+jB,EAAQ,CACV,MAAMmiO,EAAoBvgH,GAAcD,GAAY3hH,EAAO+oH,OACrDq5G,EAAgBj5G,GAAMg5G,GAC5B,GAAIC,GAAiBA,EAAch5G,gBAAiB,CAClD,MAAMs4G,QAAqBU,EAAch5G,gBAAgB,CAAElmB,MAAOljG,IAClE2hO,EAAgBD,GAAgB,CAAC,EACnC,CACF,GAIA5mD,EACF,GACC,CAAC96K,EAAQ8iH,KAEZ3yB,EAAAA,EAAAA,YAAU,IAAMwrD,GAAoBC,YAAY,GAADtjK,OAAI3D,EAASo4H,SAAQ,KAAAz0H,OAAI3D,EAAS6T,UAAW,CAAC7T,IAqB7F,IAdKA,EAASo4H,SAAS/yH,MAAM,QAAU,IAAI3K,OAAS,IACxB,MAAtBsF,EAASo4H,SACXuI,EAAS+V,GAAa51I,IAAI,CAACszI,KAAK,UAEhCh2I,OAAO4B,SAASw5H,KAAOp7H,OAAO4B,SAASw5H,KAAO,IAAMp7H,OAAO4B,SAAS6T,QAMnE06G,EAAM0kB,gBACT1kB,EAAM0kB,cAAgB3B,GAAaxwI,IAAI,mBAGpCuqB,IAAWA,EAAO+oH,KACrB,OAAO,KAGT,MAAMo5G,EAAoBvgH,GAAcD,GAA4B,UAAhB3hH,EAAO+oH,KAAkB/oH,EAAOtvB,GAAKsvB,EAAO+oH,OAG1FpwI,EAAQoC,GAAAA,eAAiBA,GAAAA,eAAepC,MAAMlD,MAAQ,CAAC,EAGvD4sP,EAAW,CAAE1pP,QAAO8F,YAAa,IAAKijP,KAAiB/oP,EAAM8F,cAEnE,MAA0B,qBAAtB0jP,EACKt4H,IAAAA,cAAoBsf,GAAMg5G,GAAoB,CAAC,GAGpDxpP,EAAM6F,UAAkB,KAErBqrH,IAAAA,cAAoBsf,GAAMg5G,GAAoBE,EAAS,EC9J1DC,GAAuBpyP,IACtB6C,OAAO4B,SAASo4H,SAASrkD,SAAS,MACrC31E,OAAO66H,QAAQS,aAAat7H,OAAO66H,QAAQj1H,MAAM/D,SAAS5E,MAAO+C,OAAO4B,SAASo4H,SAAW,IAAMh6H,OAAO4B,SAAS6T,SAE7GojI,EAAAA,GAAAA,KAAC61G,GAAO,IAAKvxP,KAItBq8H,IAAAA,QAEIqf,EAAAA,GAAAA,KAACvS,GAAM,CAAAvsB,UACH8+B,EAAAA,GAAAA,KAAChS,GAAM,CAAA9sB,SACLkiB,GAAOhvH,KAAI,CAACgwH,EAAO7gI,KAAMy8I,EAAAA,GAAAA,KAACxS,GAAK,CAAS7vE,KAAMymE,EAAOlgF,SAAS87F,EAAAA,GAAAA,KAAC02G,GAAmB,IAAIrtL,UAAQ,GAAzD9lE,SAI7CyF,SAASwoK,eAAe,SAU1BmlF","sources":["assets/icons/dark_left_arrow.svg","assets/icons/dark_right_arrow.svg","assets/icons/error.svg","assets/icons/left_arrow.svg","assets/icons/pencil_section.svg","assets/icons/proof.svg","assets/icons/right_arrow.svg","assets/icons/tick.svg","../_ustore_core/webpack/universalModuleDefinition","../_ustore_core/node_modules/type-detect/type-detect.js","../_ustore_core/src/buffer.mjs","../_ustore_core/src/detector.mjs","../_ustore_core/src/collection.mjs","../_ustore_core/src/global.mjs","../_ustore_core/src/copy_map.mjs","../_ustore_core/src/copier.mjs","../_ustore_core/src/index.mjs","../_ustore_core/node_modules/logdown/dist/logdown.min.js","../_ustore_core/webpack/bootstrap","../_ustore_core/webpack/runtime/compat get default export","../_ustore_core/webpack/runtime/define property getters","../_ustore_core/webpack/runtime/global","../_ustore_core/webpack/runtime/hasOwnProperty shorthand","../_ustore_core/webpack/runtime/make namespace object","../_ustore_core/src/services/context.js","../_ustore_core/src/services/logger.js","../_ustore_core/src/api/http.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/typeof.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../_ustore_core/node_modules/redux/es/redux.js","../_ustore_core/node_modules/@redux-devtools/extension/lib/esm/index.js","../_ustore_core/node_modules/redux-thunk/es/index.js","../_ustore_core/src/redux/defaultState.js","../_ustore_core/src/redux/actionsTypes.js","../_ustore_core/src/utils/utils.js","../_ustore_core/src/redux/reducer.js","../_ustore_core/src/services/providerState.js","../_ustore_core/src/redux/store.js","../_ustore_core/src/services/config.js","../_ustore_core/src/services/binding.js","../_ustore_core/src/api/httpUpload.js","../_ustore_core/src/api/orders.js","../_ustore_core/src/api/categories.js","../_ustore_core/src/api/store.js","../_ustore_core/src/api/assets.js","../_ustore_core/src/services/api.js","../_ustore_core/src/api/httpDeleteFiles.js","../_ustore_core/src/api/products.js","../_ustore_core/src/services/orders.js","../_ustore_core/src/services/store.js","../_ustore_core/src/services/culture.js","../_ustore_core/src/services/initialState.js","../_ustore_core/src/services/categories.js","../_ustore_core/src/services/products.js","../_ustore_core/src/services/newState.js","../_ustore_core/src/services/assets.js","../_ustore_core/src/UStoreProvider.js","../node_modules/add-px-to-style/index.js","../node_modules/ajv/lib/ajv.ts","../node_modules/ajv/lib/compile/codegen/code.ts","../node_modules/ajv/lib/compile/codegen/index.ts","../node_modules/ajv/lib/compile/codegen/scope.ts","../node_modules/ajv/lib/compile/errors.ts","../node_modules/ajv/lib/compile/index.ts","../node_modules/ajv/lib/compile/names.ts","../node_modules/ajv/lib/compile/ref_error.ts","../node_modules/ajv/lib/compile/resolve.ts","../node_modules/ajv/lib/compile/rules.ts","../node_modules/ajv/lib/compile/util.ts","../node_modules/ajv/lib/compile/validate/applicability.ts","../node_modules/ajv/lib/compile/validate/boolSchema.ts","../node_modules/ajv/lib/compile/validate/dataType.ts","../node_modules/ajv/lib/compile/validate/defaults.ts","../node_modules/ajv/lib/compile/validate/index.ts","../node_modules/ajv/lib/compile/validate/keyword.ts","../node_modules/ajv/lib/compile/validate/subschema.ts","../node_modules/ajv/lib/core.ts","../node_modules/ajv/lib/runtime/equal.ts","../node_modules/ajv/lib/runtime/ucs2length.ts","../node_modules/ajv/lib/runtime/uri.ts","../node_modules/ajv/lib/runtime/validation_error.ts","../node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts","../node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts","../node_modules/ajv/lib/vocabularies/applicator/allOf.ts","../node_modules/ajv/lib/vocabularies/applicator/anyOf.ts","../node_modules/ajv/lib/vocabularies/applicator/contains.ts","../node_modules/ajv/lib/vocabularies/applicator/dependencies.ts","../node_modules/ajv/lib/vocabularies/applicator/if.ts","../node_modules/ajv/lib/vocabularies/applicator/index.ts","../node_modules/ajv/lib/vocabularies/applicator/items.ts","../node_modules/ajv/lib/vocabularies/applicator/items2020.ts","../node_modules/ajv/lib/vocabularies/applicator/not.ts","../node_modules/ajv/lib/vocabularies/applicator/oneOf.ts","../node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts","../node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts","../node_modules/ajv/lib/vocabularies/applicator/properties.ts","../node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts","../node_modules/ajv/lib/vocabularies/applicator/thenElse.ts","../node_modules/ajv/lib/vocabularies/code.ts","../node_modules/ajv/lib/vocabularies/core/id.ts","../node_modules/ajv/lib/vocabularies/core/index.ts","../node_modules/ajv/lib/vocabularies/core/ref.ts","../node_modules/ajv/lib/vocabularies/discriminator/index.ts","../node_modules/ajv/lib/vocabularies/discriminator/types.ts","../node_modules/ajv/lib/vocabularies/draft7.ts","../node_modules/ajv/lib/vocabularies/format/format.ts","../node_modules/ajv/lib/vocabularies/format/index.ts","../node_modules/ajv/lib/vocabularies/metadata.ts","../node_modules/ajv/lib/vocabularies/validation/const.ts","../node_modules/ajv/lib/vocabularies/validation/enum.ts","../node_modules/ajv/lib/vocabularies/validation/index.ts","../node_modules/ajv/lib/vocabularies/validation/limitItems.ts","../node_modules/ajv/lib/vocabularies/validation/limitLength.ts","../node_modules/ajv/lib/vocabularies/validation/limitNumber.ts","../node_modules/ajv/lib/vocabularies/validation/limitProperties.ts","../node_modules/ajv/lib/vocabularies/validation/multipleOf.ts","../node_modules/ajv/lib/vocabularies/validation/pattern.ts","../node_modules/ajv/lib/vocabularies/validation/required.ts","../node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts","../node_modules/classnames/index.js","../node_modules/deepcopy/node_modules/type-detect/type-detect.js","../node_modules/deepcopy/src/buffer.mjs","../node_modules/deepcopy/src/detector.mjs","../node_modules/deepcopy/src/collection.mjs","../node_modules/deepcopy/src/global.mjs","../node_modules/deepcopy/src/copy_map.mjs","../node_modules/deepcopy/src/copier.mjs","../node_modules/deepcopy/src/index.mjs","../node_modules/dom-css/index.js","../node_modules/fast-deep-equal/index.js","../node_modules/json-schema-traverse/index.js","../node_modules/lodash/lodash.js","../node_modules/logdown/dist/logdown.min.js","../node_modules/moment/moment.js","../node_modules/performance-now/src/performance-now.coffee","../node_modules/prefix-style/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/raf/index.js","../node_modules/react-custom-scrollbars-2/lib/Scrollbars/defaultRenderElements.js","../node_modules/react-custom-scrollbars-2/lib/Scrollbars/index.js","../node_modules/react-custom-scrollbars-2/lib/Scrollbars/styles.js","../node_modules/react-custom-scrollbars-2/lib/index.js","../node_modules/react-custom-scrollbars-2/lib/utils/getInnerHeight.js","../node_modules/react-custom-scrollbars-2/lib/utils/getInnerWidth.js","../node_modules/react-custom-scrollbars-2/lib/utils/getScrollbarWidth.js","../node_modules/react-custom-scrollbars-2/lib/utils/isString.js","../node_modules/react-custom-scrollbars-2/lib/utils/returnFalse.js","../node_modules/react-detect-click-outside/src/useDetectClickOutside.tsx","../node_modules/react-fast-compare/index.js","../node_modules/react-infinite-scroller/dist/InfiniteScroll.js","../node_modules/react-infinite-scroller/index.js","../node_modules/react-lines-ellipsis/lib/html.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../node_modules/roddeh-i18n/dist/i18n.js","../node_modules/to-camel-case/index.js","../node_modules/to-no-case/index.js","../node_modules/to-space-case/index.js","../node_modules/uri-js/src/util.ts","../node_modules/uri-js/src/regexps-uri.ts","../node_modules/uri-js/src/regexps-iri.ts","../node_modules/uri-js/node_modules/punycode/punycode.es6.js","../node_modules/uri-js/src/uri.ts","../node_modules/uri-js/src/schemes/http.ts","../node_modules/uri-js/src/schemes/https.ts","../node_modules/uri-js/src/schemes/ws.ts","../node_modules/uri-js/src/schemes/wss.ts","../node_modules/uri-js/src/schemes/mailto.ts","../node_modules/uri-js/src/schemes/urn.ts","../node_modules/uri-js/src/schemes/urn-uuid.ts","../node_modules/uri-js/src/index.ts","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/warning/warning.js","assets/icons|lazy|/^/.*$/|referencedExports: [[\"ReactComponent\"]]|groupOptions: {}|namespace object","../external var \"React\"","../node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../external var \"ReactDOM\"","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","reportWebVitals.js","../node_modules/throttle-debounce/throttle.js","../node_modules/throttle-debounce/debounce.js","ui.config.js","routeList.js","ustore-internal/services/logger.js","../node_modules/path-to-regexp/src/index.ts","ustore-internal/services/utils.js","ustore-internal/services/cookies.js","ustore-internal/services/redirect.js","ustore-internal/services/initialLoad.js","services/initThemeState.js","ustore-internal/services/themeContext.js","localizations/index.js","components/layout/HeadSEO.js","ustore-internal/services/urlGenerator.js","core-components/Icon.js","services/utils.js","components/layout/Header/Cart.js","../node_modules/react-popper/lib/esm/Manager.js","../node_modules/react-popper/lib/esm/utils.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/reactstrap/esm/utils.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/react-popper/lib/esm/usePopper.js","../node_modules/react-popper/lib/esm/Popper.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/reactstrap/esm/Fade.js","../node_modules/reactstrap/esm/PopperContent.js","../node_modules/reactstrap/esm/TooltipPopoverWrapper.js","../node_modules/reactstrap/esm/Popover.js","../node_modules/reactstrap/esm/PopoverBody.js","components/layout/Header/NavigationMenu.js","components/layout/Header/CategoriesNavbar.js","components/layout/Header/CategoriesSidebar.js","../node_modules/reactstrap/esm/DropdownContext.js","../node_modules/reactstrap/esm/DropdownItem.js","../node_modules/reactstrap/esm/InputGroupContext.js","../node_modules/reactstrap/esm/Dropdown.js","../node_modules/react-popper/lib/esm/Reference.js","../node_modules/reactstrap/esm/CloseButton.js","../node_modules/reactstrap/esm/Button.js","../node_modules/reactstrap/esm/DropdownToggle.js","../node_modules/reactstrap/esm/DropdownMenu.js","components/layout/Header/SignIn.js","components/layout/Header/SignOut.js","components/layout/Header/Profile.js","../node_modules/reactstrap/esm/InputGroup.js","components/layout/Header/Search.js","ustore-internal/services/hooks.js","core-components/Overlay.js","core-components/Flag.js","core-components/Switcher.js","ustore-internal/services/cssVariables.js","styles/_theme.scss","ustore-internal/services/legacyIframeHandler.js","ustore-internal/services/withRouter.js","components/widgets/Slot.js","components/layout/Header/index.js","components/layout/Footer.js","core-components/CrossCloseButton.js","components/layout/CookiesRibbon/CookiesConsent.js","components/layout/CookiesRibbon/CookiesPolicy.js","components/layout/CookiesRibbon/index.js","../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","core-components/RouteChangeListener.js","components/layout/index.js","webpack://IEEEPubsstore/./src/components/category/CategoryItem.scss?6486","components/category/CategoryItem.js","components/products/Inventory.js","ustore-internal/services/withState.js","components/products/Price.js","components/products/BaseQuantity.js","../node_modules/reactstrap/esm/Tooltip.js","components/products/ProductItemQuantity.js","core-components/Tooltip.js","components/products/UnitsOfMeasure.js","core-components/LoadingDots.js","core-components/Button.js","core-components/ImageLoader.js","components/products/ProductItem.js","components/products/PromotionItem.js","../node_modules/react-swipeable/src/types.ts","../node_modules/react-swipeable/src/index.ts","core-components/Swipeable.js","core-components/Slider.js","routes/Home.js","core-components/ScrollableGallery.js","routes/Category.js","routes/Legacy.js","routes/Product.js","components/products/kit/KitQuantity.js","components/products/kit/KitItemQuantity.js","../node_modules/reactstrap/esm/CarouselContext.js","../node_modules/reactstrap/esm/CarouselItem.js","../node_modules/reactstrap/esm/Carousel.js","components/products/DotCarousel.js","core-components/ImageZoom.js","webpack://IEEEPubsstore/./src/core-components/MultiItemsCarousel.scss?fc5f","core-components/MultiItemsCarousel.js","webpack://IEEEPubsstore/./src/components/products/ImageCarousel.scss?e4f6","components/products/ImageCarousel.js","../node_modules/reactstrap/esm/Portal.js","../node_modules/reactstrap/esm/Modal.js","../node_modules/reactstrap/esm/ModalHeader.js","../node_modules/reactstrap/esm/ModalBody.js","../node_modules/reactstrap/esm/ModalFooter.js","components/products/kit/consts.js","components/products/kit/KitItem.js","components/products/kit/KitItemsList.js","components/products/kit/KitProduct.js","webpack://IEEEPubsstore/./src/components/products/static/Popper.scss?8722","components/products/static/Popper.js","components/products/Section.js","../node_modules/hashids/src/util.ts","../node_modules/hashids/src/hashids.ts","webpack://IEEEPubsstore/./src/components/products/DynamicForm.scss?e683","components/products/DynamicForm.js","components/products/ErrorBalloon.js","components/products/static/PreviewErrorBalloon.js","components/products/ProductDetails.js","core-components/RadioGroup.js","components/products/ProductDeliveryMethod.js","components/products/ProductOrderSummary.js","components/products/ProductStickyPrice.js","components/products/dynamic/DynamicImageViewer.js","components/products/dynamic/ProductThumbnailsPreview.js","components/products/static/RefreshPreviewButton.js","components/products/ProductLayout.js","components/products/static/Proof.js","components/products/static/Price.js","components/products/static/utils.js","services/fastProof.js","components/products/ProductQuantity.js","components/products/ProductProof.js","components/products/ProductApproval.js","components/products/static/useErrors.js","components/products/static/useUpdateProperties.js","components/products/dynamic/DynamicProductApproval.js","components/products/static/useSticky.js","components/products/static/StaticProduct.js","routes/Products.js","routes/OrderFinalStep.js","routes/Addresses.js","../node_modules/mobx/src/errors.ts","../node_modules/mobx/src/utils/global.ts","../node_modules/mobx/src/utils/utils.ts","../node_modules/mobx/src/api/decorators.ts","../node_modules/mobx/src/types/overrideannotation.ts","../node_modules/mobx/src/core/atom.ts","../node_modules/mobx/src/api/become-observed.ts","../node_modules/mobx/src/utils/comparer.ts","../node_modules/mobx/src/types/modifiers.ts","../node_modules/mobx/src/types/actionannotation.ts","../node_modules/mobx/src/types/flowannotation.ts","../node_modules/mobx/src/types/computedannotation.ts","../node_modules/mobx/src/types/observableannotation.ts","../node_modules/mobx/src/types/autoannotation.ts","../node_modules/mobx/src/api/observable.ts","../node_modules/mobx/src/types/dynamicobject.ts","../node_modules/mobx/src/api/computed.ts","../node_modules/mobx/src/core/action.ts","../node_modules/mobx/src/types/observablevalue.ts","../node_modules/mobx/src/core/computedvalue.ts","../node_modules/mobx/src/core/derivation.ts","../node_modules/mobx/src/core/observable.ts","../node_modules/mobx/src/core/globalstate.ts","../node_modules/mobx/src/core/reaction.ts","../node_modules/mobx/src/api/action.ts","../node_modules/mobx/src/api/autorun.ts","../node_modules/mobx/src/api/configure.ts","../node_modules/mobx/src/api/extendobservable.ts","../node_modules/mobx/src/api/extras.ts","../node_modules/mobx/src/api/flow.ts","../node_modules/mobx/src/api/isobservable.ts","../node_modules/mobx/src/api/transaction.ts","../node_modules/mobx/src/types/intercept-utils.ts","../node_modules/mobx/src/types/listen-utils.ts","../node_modules/mobx/src/api/makeObservable.ts","../node_modules/mobx/src/types/observablearray.ts","../node_modules/mobx/src/core/spy.ts","../node_modules/mobx/src/types/observablemap.ts","../node_modules/mobx/src/types/observableset.ts","../node_modules/mobx/src/types/observableobject.ts","../node_modules/mobx/src/types/legacyobservablearray.ts","../node_modules/mobx/src/types/type-utils.ts","../node_modules/mobx/src/utils/eq.ts","../node_modules/mobx/src/utils/iterable.ts","../node_modules/mobx/src/mobx.ts","components/cart/model/CartListModel.js","components/cart/model/CartSummaryModel.js","components/cart/model/CartErrorModel.js","components/cart/model/CartItemPriceModel.js","components/cart/model/CartItemModel.js","components/cart/model/CartProductModel.js","components/cart/model/CartProductUnitModel.js","components/cart/model/CartActionsModel.js","components/cart/model/CartOrderApprovalModel.js","components/cart/model/CartModel.js","../node_modules/mobx-react-lite/src/utils/assertEnvironment.ts","../node_modules/mobx-react-lite/src/utils/observerBatching.ts","../node_modules/mobx-react-lite/src/utils/printDebugValue.ts","../node_modules/mobx-react-lite/src/staticRendering.ts","../node_modules/mobx-react-lite/src/utils/UniversalFinalizationRegistry.ts","../node_modules/mobx-react-lite/src/utils/observerFinalizationRegistry.ts","../node_modules/mobx-react-lite/src/useObserver.ts","../node_modules/mobx-react-lite/src/observer.ts","../node_modules/mobx-react-lite/src/index.ts","webpack://IEEEPubsstore/./src/components/cart/CartSummary/CartSummaryPriceBlock.scss?d88e","components/cart/CartSummary/CartSummaryPriceBlock.js","components/cart/CartSummary/CartSummaryContent.js","components/cart/CartSummary/CartTooltip.js","components/cart/CartSummary/CartSummaryButton.js","components/cart/CartSummary/CartSummaryError.js","ustore-internal/services/locale.js","components/cart/CartSummary/CartSummaryExportSuccess.js","components/cart/CartSummary/CartSummaryExportError.js","../node_modules/reactstrap/esm/Input.js","core-components/DropDown.js","components/cart/CartList/AssignToListModal.js","components/cart/CartSummary/index.js","components/cart/CartSummary/CartSummaryStickyBlock.js","components/cart/CartSummary/CartSummaryContainer.js","../node_modules/react-router-hash-link/node_modules/tslib/tslib.es6.js","../node_modules/react-router-hash-link/src/HashLink.jsx","webpack://IEEEPubsstore/./src/components/cart/CartList/CartCheckbox.scss?96ab","components/cart/CartList/CartCheckbox.js","components/cart/CartList/EditListNameModal.js","components/cart/ConfirmationDialog.js","components/cart/CartList/ConfirmListDuplicationModal.js","components/cart/CartList/CustomListActions.js","components/cart/CartList/ListBar.js","components/cart/model/utils.js","components/cart/CartItem/DisplayPrice.js","components/cart/CartItem/CartItemActions.js","webpack://IEEEPubsstore/./src/components/cart/CartItem/PromptDialog.scss?3f25","components/cart/CartItem/PromptDialog.js","components/cart/CartItem/Nickname.js","components/cart/CartItem/ProductName.js","components/cart/CartItem/ExpandableList.js","components/cart/CartItem/ProductProperties.js","../node_modules/react-lazy-load/dist/LazyLoad.js","../node_modules/react-loading-skeleton/dist/index.js","webpack://IEEEPubsstore/./src/components/cart/CartItem/CartItemThumbnail.scss?0c8c","components/cart/CartItem/CartItemThumbnail.js","components/cart/CartItem/CartItemAlert.js","components/cart/CartItem/InfoMessage.js","components/cart/CartItem/index.js","components/cart/CartSummary/InListsCartSummary.js","components/cart/CartList/List.js","components/cart/CartList/index.js","components/cart/CartList/WishList.js","components/cart/CartItem/CartItemSkeleton.js","components/cart/CartList/ListContainerSkeleton.js","components/cart/CartList/ListContainer.js","components/cart/EmptyPage.js","components/cart/LoadingDialog.js","components/cart/CartNG.js","routes/Cart.js","routes/CheckoutComplete.js","routes/CheckoutFinal.js","routes/FileSubmission.js","routes/CheckoutPaymentSubmission.js","routes/MyRecipientLists.js","routes/OrderHistory.js","routes/PersonalInformation.js","routes/Customization.js","routes/uEditCustomization.js","routes/SplitShippingAddresses.js","routes/OrderDetails.js","routes/SplitShippingItems.js","routes/Recipient.js","routes/ProductUnavailable.js","routes/Drafts.js","routes/EmptyPage.js","routes/ErrorPage.js","webpack://IEEEPubsstore/./src/routes/Search.scss?7803","routes/Search.js","routes/OrderApprovalList.js","routes/CustomMain.js","routes/ClearingUnknownOrder.js","routes/ProductDetails.js","assets/images/xmpieLogo.svg","routes/ConnectLoggedOut.js","components/consts.js","components/Search/SearchResults.js","../node_modules/reactstrap/esm/Table.js","routes/Articles.js","routes/index.js","routes/ContactUs.js","routes/FAQ.js","generic.js","index.js"],"sourcesContent":["var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgDarkLeftArrow(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"7px\",\n height: \"12px\",\n viewBox: \"0 0 7 12\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Arrowleft/7x12/dark \") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowleft/7x12/dark-\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.594129609,12 C0.436295689,12.0006917 0.284818042,11.9418159 0.173908243,11.8366637 C-0.0579694142,11.6192731 -0.0579694142,11.2670999 0.173908243,11.0497092 L5.56542766,6.00132212 L0.173908243,0.952934998 C-0.0579694142,0.735544361 -0.0579694142,0.383371172 0.173908243,0.165980535 C0.284345427,0.0598546899 0.435882591,0 0.594129609,0 C0.752376627,0 0.903913791,0.0598546899 1.01435098,0.165980535 L6.82609176,5.60784488 C7.05796941,5.82523552 7.05796941,6.17740871 6.82609176,6.39479935 L1.01435098,11.8366637 C0.903441176,11.9418159 0.751963529,12.0006917 0.594129609,12 L0.594129609,12 Z\",\n id: \"Arrowleft/12x20/dark\",\n fill: \"#484848\",\n fillRule: \"nonzero\",\n transform: \"translate(3.500000, 6.000000) rotate(-180.000000) translate(-3.500000, -6.000000) \"\n }))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDarkLeftArrow);\nexport default __webpack_public_path__ + \"static/media/dark_left_arrow.8fa6e0b077d957a48bbb2d40a56b6867.svg\";\nexport { ForwardRef as ReactComponent };","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgDarkRightArrow(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"7px\",\n height: \"12px\",\n viewBox: \"0 0 7 12\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Arrowright/7x12/dark\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowright/7x12/dark\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.594129609,12 C0.436295689,12.0006917 0.284818042,11.9418159 0.173908243,11.8366637 C-0.0579694142,11.6192731 -0.0579694142,11.2670999 0.173908243,11.0497092 L5.56542766,6.00132212 L0.173908243,0.952934998 C-0.0579694142,0.735544361 -0.0579694142,0.383371172 0.173908243,0.165980535 C0.284345427,0.0598546899 0.435882591,0 0.594129609,0 C0.752376627,0 0.903913791,0.0598546899 1.01435098,0.165980535 L6.82609176,5.60784488 C7.05796941,5.82523552 7.05796941,6.17740871 6.82609176,6.39479935 L1.01435098,11.8366637 C0.903441176,11.9418159 0.751963529,12.0006917 0.594129609,12 L0.594129609,12 Z\",\n id: \"Arrowright/12x20/dark\",\n fill: \"#484848\",\n fillRule: \"nonzero\",\n transform: \"translate(3.500000, 6.000000) scale(-1, 1) rotate(-180.000000) translate(-3.500000, -6.000000) \"\n }))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDarkRightArrow);\nexport default __webpack_public_path__ + \"static/media/dark_right_arrow.518e444f07e6cc0c2a54420106f60a3b.svg\";\nexport { ForwardRef as ReactComponent };","var _style, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgError(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 15 13\",\n style: {\n enableBackground: \"new 0 0 15 13\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \"\\n\\t.st0{fill:#FF625A;}\\n\")), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M14.3,11l-2.8-4.9L8.6,1.2c-0.5-0.9-1.8-0.9-2.3,0L3.5,6.1L0.7,11c-0.5,0.9,0.1,2,1.1,2h5.7h5.7 C14.2,13,14.8,11.9,14.3,11z M6.9,4.1c0.3-0.3,0.8-0.3,1.1,0c0.2,0.2,0.2,0.4,0.2,0.6L8.2,8.6c0,0.4-0.3,0.7-0.7,0.7 C7.1,9.3,6.8,9,6.8,8.6L6.7,4.7C6.7,4.5,6.8,4.3,6.9,4.1z M7.5,11.2c-0.5,0-0.8-0.4-0.8-0.8S7,9.5,7.5,9.5s0.8,0.4,0.8,0.8 S8,11.2,7.5,11.2z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgError);\nexport default __webpack_public_path__ + \"static/media/error.539c18d23caf6ad6eba73d60ad666df0.svg\";\nexport { ForwardRef as ReactComponent };","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLeftArrow(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"40px\",\n height: \"40px\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Arrowbutton/left/40px\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\",\n opacity: 0.9\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/left/40px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/left/36px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(20.000000, 20.000000) rotate(-180.000000) translate(-20.000000, -20.000000) \"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20,40 C8.954305,40 0,31.045695 0,20 C0,8.954305 8.954305,0 20,0 C31.045695,0 40,8.954305 40,20 C39.9900302,31.0415627 31.0415627,39.9900302 20,40 Z\",\n id: \"Shape\",\n fillOpacity: 0.8,\n fill: \"#FFFFFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.0185079,30 C15.7479355,30.0011528 15.4882595,29.9030265 15.2981284,29.7277728 C14.9006239,29.3654551 14.9006239,28.7784998 15.2981284,28.4161821 L24.5407331,20.0022035 L15.2981284,11.588225 C14.9006239,11.2259073 14.9006239,10.638952 15.2981284,10.2766342 C15.4874493,10.0997578 15.7472273,10 16.0185079,10 C16.2897885,10 16.5495665,10.0997578 16.7388874,10.2766342 L26.7018716,19.3464081 C27.0993761,19.7087259 27.0993761,20.2956812 26.7018716,20.6579989 L16.7388874,29.7277728 C16.5487563,29.9030265 16.2890803,30.0011528 16.0185079,30 L16.0185079,30 Z\",\n id: \"Shape\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n })))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgLeftArrow);\nexport default __webpack_public_path__ + \"static/media/left_arrow.58c5bdca641ffe0d7cc3db8e26d74b09.svg\";\nexport { ForwardRef as ReactComponent };","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgPencilSection(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Edit/24x24/ultradark\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Edit/24x24/ultradark\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n stroke: \"#000000\",\n strokeWidth: 0.8\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.3698783,2.484 L2.44883478,16.3476522 C2.45196522,16.356 2.45092174,16.3653913 2.44883478,16.3737391 L7.62448696,21.5493913 L7.62657391,21.5493913 C7.63492174,21.5493913 7.64222609,21.5514783 7.64848696,21.5556522 L21.5737043,7.68678261 L16.3698783,2.484 Z\",\n id: \"Stroke-1\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.44090435,16.3661217 C2.43881739,16.3629913 2.43464348,16.3640348 2.4336,16.3671652 L0.5376,22.7271652 C0.4896,22.9327304 0.551165217,23.1497739 0.701426087,23.2989913 C0.850643478,23.4482087 1.06664348,23.5108174 1.2722087,23.4628174 L7.62386087,21.5689043 C7.63116522,21.5668174 7.63325217,21.5584696 7.62803478,21.5532522 L2.44090435,16.3661217 Z\",\n id: \"Stroke-3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.5736,7.6872 L22.3833391,6.82006957 C23.323513,5.89241739 23.6939478,4.5338087 23.3548174,3.2565913 C23.015687,1.98041739 22.0191652,0.983895652 20.7429913,0.644765217 C19.4668174,0.306678261 18.1071652,0.677113043 17.179513,1.61728696 L16.3697739,2.48441739 L21.5736,7.6872 Z\",\n id: \"Stroke-5\"\n })))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPencilSection);\nexport default __webpack_public_path__ + \"static/media/pencil_section.cfcaeafc66548e53bea7fa91027b988c.svg\";\nexport { ForwardRef as ReactComponent };","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgProof(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"21px\",\n height: \"25px\",\n viewBox: \"0 0 21 25\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Group 6\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Proof/16x16/ultra-dark\",\n transform: \"translate(0.000000, 1.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group\",\n transform: \"translate(1.000000, 0.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-6\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"document\",\n transform: \"translate(2.727273, 8.888889)\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.47035573,0.865700483 L0.509881423,0.865700483 C0.272727273,0.865700483 0.0592885375,1.05120773 0.0592885375,1.30628019 C0.0592885375,1.53816425 0.249011858,1.7468599 0.509881423,1.7468599 L4.47035573,1.7468599 C4.70750988,1.7468599 4.92094862,1.56135266 4.92094862,1.30628019 C4.92094862,1.07439614 4.70750988,0.865700483 4.47035573,0.865700483 Z\",\n id: \"Path\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.58838142,21.3333333 L1.45239158,21.3333333 C0.650261296,21.3333333 0,20.7036495 0,19.9269025 L0,1.40643088 C0,0.629683881 0.650261296,0 1.45239158,0 L15.8203702,0 C16.622466,0 17.2727273,0.629683881 17.2727273,1.40643088 L17.2727273,12.6975065\",\n id: \"Stroke-1\",\n stroke: \"#000000\",\n strokeLinecap: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.72727273,4.88888889 C2.72727273,5.12280702 2.92261458,5.33333333 3.19120962,5.33333333 L14.0815177,5.33333333 C14.325695,5.33333333 14.5454545,5.14619883 14.5454545,4.88888889 C14.5454545,4.65497076 14.3501127,4.44444444 14.0815177,4.44444444 L3.19120962,4.44444444 C2.94703231,4.44444444 2.72727273,4.63157895 2.72727273,4.88888889 Z\",\n id: \"Path\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.0815177,7.11111111 L3.19120962,7.11111111 C2.94703231,7.11111111 2.72727273,7.29824561 2.72727273,7.55555556 C2.72727273,7.78947368 2.92261458,8 3.19120962,8 L14.0815177,8 C14.325695,8 14.5454545,7.8128655 14.5454545,7.55555556 C14.5454545,7.29824561 14.3501127,7.11111111 14.0815177,7.11111111 Z\",\n id: \"Path\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Search/16x16/ultradark\",\n transform: \"translate(9.090909, 13.333333)\",\n stroke: \"#000000\"\n }, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval\",\n fillRule: \"nonzero\",\n cx: 4.05263158,\n cy: 4.05263158,\n r: 4.05263158\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.11999791,6.92411236 L9.19894528,6.92411236 L9.11999791,6.84516499 L9.11999791,6.42411236 L8.90947159,6.63463868 L8.69894528,6.42411236 L8.69894528,6.84516499 L8.61999791,6.92411236 L8.69894528,6.92411236 L8.69894528,10.8948308 L8.61999791,10.8948308 L8.69894528,10.9737782 L8.69894528,11.3948308 L8.90947159,11.1843045 L9.11999791,11.3948308 L9.11999791,10.9737782 L9.19894528,10.8948308 L9.11999791,10.8948308 L9.11999791,6.92411236 Z\",\n id: \"Rectangle-4\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n transform: \"translate(8.909472, 8.909472) rotate(-45.000000) translate(-8.909472, -8.909472) \"\n })))))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgProof);\nexport default __webpack_public_path__ + \"static/media/proof.bb89def73ccd4e0e457c69db9c6eff48.svg\";\nexport { ForwardRef as ReactComponent };","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgRightArrow(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"40px\",\n height: \"40px\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Arrowbutton/right/40px\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\",\n opacity: 0.9\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/right/40px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/left/36px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(20.000000, 20.000000) rotate(-180.000000) translate(-20.000000, -20.000000) \"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20,40 C8.954305,40 0,31.045695 0,20 C0,8.954305 8.954305,0 20,0 C31.045695,0 40,8.954305 40,20 C39.9900302,31.0415627 31.0415627,39.9900302 20,40 Z\",\n id: \"Shape\",\n fillOpacity: 0.8,\n fill: \"#FFFFFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.0185079,30 C13.7479355,30.0011528 13.4882595,29.9030265 13.2981284,29.7277728 C12.9006239,29.3654551 12.9006239,28.7784998 13.2981284,28.4161821 L22.5407331,20.0022035 L13.2981284,11.588225 C12.9006239,11.2259073 12.9006239,10.638952 13.2981284,10.2766342 C13.4874493,10.0997578 13.7472273,10 14.0185079,10 C14.2897885,10 14.5495665,10.0997578 14.7388874,10.2766342 L24.7018716,19.3464081 C25.0993761,19.7087259 25.0993761,20.2956812 24.7018716,20.6579989 L14.7388874,29.7277728 C14.5487563,29.9030265 14.2890803,30.0011528 14.0185079,30 L14.0185079,30 Z\",\n id: \"Shape\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n transform: \"translate(19.000000, 20.000000) scale(-1, 1) translate(-19.000000, -20.000000) \"\n })))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgRightArrow);\nexport default __webpack_public_path__ + \"static/media/right_arrow.ea37d187890112803687493ae6bbf853.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgTick(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 512 512\",\n style: {\n enableBackground: \"new 0 0 512 512\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M504.502,75.496c-9.997-9.998-26.205-9.998-36.204,0L161.594,382.203L43.702,264.311c-9.997-9.998-26.205-9.997-36.204,0 c-9.998,9.997-9.998,26.205,0,36.203l135.994,135.992c9.994,9.997,26.214,9.99,36.204,0L504.502,111.7 C514.5,101.703,514.499,85.494,504.502,75.496z\",\n fill: \"#a7a7a7\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgTick);\nexport default __webpack_public_path__ + \"static/media/tick.c5b7ea54a6beac59eb4550ff5929d694.svg\";\nexport { ForwardRef as ReactComponent };","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"_ustore_core\"] = factory();\n\telse\n\t\troot[\"_ustore_core\"] = factory();\n})(self, () => {\nreturn ","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.typeDetect = factory());\n}(this, (function () { 'use strict';\n\n/* !\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\nvar promiseExists = typeof Promise === 'function';\n\n/* eslint-disable no-undef */\nvar globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist\n\nvar symbolExists = typeof Symbol !== 'undefined';\nvar mapExists = typeof Map !== 'undefined';\nvar setExists = typeof Set !== 'undefined';\nvar weakMapExists = typeof WeakMap !== 'undefined';\nvar weakSetExists = typeof WeakSet !== 'undefined';\nvar dataViewExists = typeof DataView !== 'undefined';\nvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\nvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\nvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\nvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\nvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\nvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\nvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\nvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\nvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\nvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\nvar toStringLeftSliceLength = 8;\nvar toStringRightSliceLength = -1;\n/**\n * ### typeOf (obj)\n *\n * Uses `Object.prototype.toString` to determine the type of an object,\n * normalising behaviour across engine versions & well optimised.\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nfunction typeDetect(obj) {\n /* ! Speed optimisation\n * Pre:\n * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)\n * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)\n * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)\n * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)\n * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)\n * Post:\n * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)\n * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)\n * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)\n * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)\n * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)\n */\n var typeofObj = typeof obj;\n if (typeofObj !== 'object') {\n return typeofObj;\n }\n\n /* ! Speed optimisation\n * Pre:\n * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)\n * Post:\n * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)\n */\n if (obj === null) {\n return 'null';\n }\n\n /* ! Spec Conformance\n * Test: `Object.prototype.toString.call(window)``\n * - Node === \"[object global]\"\n * - Chrome === \"[object global]\"\n * - Firefox === \"[object Window]\"\n * - PhantomJS === \"[object Window]\"\n * - Safari === \"[object Window]\"\n * - IE 11 === \"[object Window]\"\n * - IE Edge === \"[object Window]\"\n * Test: `Object.prototype.toString.call(this)``\n * - Chrome Worker === \"[object global]\"\n * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n */\n if (obj === globalObject) {\n return 'global';\n }\n\n /* ! Speed optimisation\n * Pre:\n * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)\n * Post:\n * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)\n */\n if (\n Array.isArray(obj) &&\n (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n ) {\n return 'Array';\n }\n\n // Not caching existence of `window` and related properties due to potential\n // for `window` to be unset before tests in quasi-browser environments.\n if (typeof window === 'object' && window !== null) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n * WhatWG HTML$7.7.3 - The `Location` interface\n * Test: `Object.prototype.toString.call(window.location)``\n * - IE <=11 === \"[object Object]\"\n * - IE Edge <=13 === \"[object Object]\"\n */\n if (typeof window.location === 'object' && obj === window.location) {\n return 'Location';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#document)\n * WhatWG HTML$3.1.1 - The `Document` object\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * WhatWG HTML states:\n * > For historical reasons, Window objects must also have a\n * > writable, configurable, non-enumerable property named\n * > HTMLDocument whose value is the Document interface object.\n * Test: `Object.prototype.toString.call(document)``\n * - Chrome === \"[object HTMLDocument]\"\n * - Firefox === \"[object HTMLDocument]\"\n * - Safari === \"[object HTMLDocument]\"\n * - IE <=10 === \"[object Document]\"\n * - IE 11 === \"[object HTMLDocument]\"\n * - IE Edge <=13 === \"[object HTMLDocument]\"\n */\n if (typeof window.document === 'object' && obj === window.document) {\n return 'Document';\n }\n\n if (typeof window.navigator === 'object') {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n * - IE <=10 === \"[object MSMimeTypesCollection]\"\n */\n if (typeof window.navigator.mimeTypes === 'object' &&\n obj === window.navigator.mimeTypes) {\n return 'MimeTypeArray';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n * Test: `Object.prototype.toString.call(navigator.plugins)``\n * - IE <=10 === \"[object MSPluginsCollection]\"\n */\n if (typeof window.navigator.plugins === 'object' &&\n obj === window.navigator.plugins) {\n return 'PluginArray';\n }\n }\n\n if ((typeof window.HTMLElement === 'function' ||\n typeof window.HTMLElement === 'object') &&\n obj instanceof window.HTMLElement) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n * - IE <=10 === \"[object HTMLBlockElement]\"\n */\n if (obj.tagName === 'BLOCKQUOTE') {\n return 'HTMLQuoteElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('td'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TD') {\n return 'HTMLTableDataCellElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('th'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TH') {\n return 'HTMLTableHeaderCellElement';\n }\n }\n }\n\n /* ! Speed optimisation\n * Pre:\n * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)\n * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)\n * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)\n * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)\n * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)\n * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)\n * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)\n * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)\n * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)\n * Post:\n * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)\n * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)\n * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)\n * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)\n * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)\n * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)\n * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)\n * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)\n * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)\n */\n var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n if (typeof stringTag === 'string') {\n return stringTag;\n }\n\n var objPrototype = Object.getPrototypeOf(obj);\n /* ! Speed optimisation\n * Pre:\n * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)\n * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)\n * Post:\n * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)\n * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)\n */\n if (objPrototype === RegExp.prototype) {\n return 'RegExp';\n }\n\n /* ! Speed optimisation\n * Pre:\n * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)\n * Post:\n * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)\n */\n if (objPrototype === Date.prototype) {\n return 'Date';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n * Test: `Object.prototype.toString.call(Promise.resolve())``\n * - Chrome <=47 === \"[object Object]\"\n * - Edge <=20 === \"[object Object]\"\n * - Firefox 29-Latest === \"[object Promise]\"\n * - Safari 7.1-Latest === \"[object Promise]\"\n */\n if (promiseExists && objPrototype === Promise.prototype) {\n return 'Promise';\n }\n\n /* ! Speed optimisation\n * Pre:\n * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)\n * Post:\n * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)\n */\n if (setExists && objPrototype === Set.prototype) {\n return 'Set';\n }\n\n /* ! Speed optimisation\n * Pre:\n * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)\n * Post:\n * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)\n */\n if (mapExists && objPrototype === Map.prototype) {\n return 'Map';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)\n * Post:\n * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)\n */\n if (weakSetExists && objPrototype === WeakSet.prototype) {\n return 'WeakSet';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)\n * Post:\n * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)\n */\n if (weakMapExists && objPrototype === WeakMap.prototype) {\n return 'WeakMap';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n * - Edge <=13 === \"[object Object]\"\n */\n if (dataViewExists && objPrototype === DataView.prototype) {\n return 'DataView';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n * Test: `Object.prototype.toString.call(new Map().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (mapExists && objPrototype === mapIteratorPrototype) {\n return 'Map Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n * Test: `Object.prototype.toString.call(new Set().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (setExists && objPrototype === setIteratorPrototype) {\n return 'Set Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n return 'Array Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n return 'String Iterator';\n }\n\n /* ! Speed optimisation\n * Pre:\n * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)\n * Post:\n * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)\n */\n if (objPrototype === null) {\n return 'Object';\n }\n\n return Object\n .prototype\n .toString\n .call(obj)\n .slice(toStringLeftSliceLength, toStringRightSliceLength);\n}\n\nreturn typeDetect;\n\n})));\n","const isBufferExists = typeof Buffer !== 'undefined';\nconst isBufferFromExists = isBufferExists && typeof Buffer.from !== 'undefined';\n\nexport const isBuffer = isBufferExists\n ? /**\n * is value is Buffer?\n *\n * @param {*} value\n * @return {boolean}\n */\n function isBuffer(value) {\n return Buffer.isBuffer(value);\n }\n : /**\n * return false\n *\n * NOTE: for Buffer unsupported\n *\n * @return {boolean}\n */\n function isBuffer() {\n return false;\n };\n\nexport const copy = isBufferFromExists\n ? /**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return Buffer.from(value);\n }\n : isBufferExists\n ? /**\n * copy Buffer\n *\n * NOTE: for old node.js\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return new Buffer(value);\n }\n : /**\n * shallow copy\n *\n * NOTE: for Buffer unsupported\n *\n * @param {*}\n * @return {*}\n */\n function copy(value) {\n return value;\n };\n","import typeDetect from 'type-detect';\n\nimport { isBuffer } from './buffer.mjs';\n\n/**\n * detect type of value\n *\n * @param {*} value\n * @return {string}\n */\nexport function detectType(value) {\n // NOTE: isBuffer must execute before type-detect,\n // because type-detect returns 'Uint8Array'.\n if (isBuffer(value)) {\n return 'Buffer';\n }\n\n return typeDetect(value);\n}\n","import { detectType } from './detector.mjs';\n\n/**\n * collection types\n */\nconst collectionTypeSet = new Set([\n 'Arguments',\n 'Array',\n 'Map',\n 'Object',\n 'Set'\n]);\n\n/**\n * get value from collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {string} [type=null]\n * @return {*}\n */\nexport function get(collection, key, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n return collection[key];\n case 'Map':\n return collection.get(key);\n case 'Set':\n // NOTE: Set.prototype.keys is alias of Set.prototype.values\n // it means key is equals value\n return key;\n default:\n }\n}\n\n/**\n * check to type string is collection\n *\n * @param {string} type\n */\nexport function isCollection(type) {\n return collectionTypeSet.has(type);\n}\n\n/**\n * set value to collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {*} value\n * @param {string} [type=null]\n * @return {Array|Object|Map|Set}\n */\nexport function set(collection, key, value, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n collection[key] = value;\n break;\n case 'Map':\n collection.set(key, value);\n break;\n case 'Set':\n collection.add(value);\n break;\n default:\n }\n\n return collection;\n}\n","const freeGlobalThis =\n typeof globalThis !== 'undefined' &&\n globalThis !== null &&\n globalThis.Object === Object &&\n globalThis;\n\nconst freeGlobal =\n typeof global !== 'undefined' &&\n global !== null &&\n global.Object === Object &&\n global;\n\nconst freeSelf =\n typeof self !== 'undefined' &&\n self !== null &&\n self.Object === Object &&\n self;\n\nexport const globalObject =\n freeGlobalThis || freeGlobal || freeSelf || Function('return this')();\n","import { copy as cloneBuffer } from './buffer.mjs';\nimport { globalObject } from './global.mjs';\n\n/**\n * copy ArrayBuffer\n *\n * @param {ArrayBuffer} value\n * @return {ArrayBuffer}\n */\nfunction copyArrayBuffer(value) {\n return value.slice(0);\n}\n\n/**\n * copy Boolean\n *\n * @param {Boolean} value\n * @return {Boolean}\n */\nfunction copyBoolean(value) {\n return new Boolean(value.valueOf());\n}\n\n/**\n * copy DataView\n *\n * @param {DataView} value\n * @return {DataView}\n */\nfunction copyDataView(value) {\n // TODO: copy ArrayBuffer?\n return new DataView(value.buffer);\n}\n\n/**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\nfunction copyBuffer(value) {\n return cloneBuffer(value);\n}\n\n/**\n * copy Date\n *\n * @param {Date} value\n * @return {Date}\n */\nfunction copyDate(value) {\n return new Date(value.getTime());\n}\n\n/**\n * copy Number\n *\n * @param {Number} value\n * @return {Number}\n */\nfunction copyNumber(value) {\n return new Number(value);\n}\n\n/**\n * copy RegExp\n *\n * @param {RegExp} value\n * @return {RegExp}\n */\nfunction copyRegExp(value) {\n return new RegExp(value.source, value.flags);\n}\n\n/**\n * copy String\n *\n * @param {String} value\n * @return {String}\n */\nfunction copyString(value) {\n return new String(value);\n}\n\n/**\n * copy TypedArray\n *\n * @param {*} value\n * @return {*}\n */\nfunction copyTypedArray(value, type) {\n const typedArray = globalObject[type];\n\n if (typedArray.from) {\n return globalObject[type].from(value);\n }\n\n return new globalObject[type](value);\n}\n\n/**\n * shallow copy\n *\n * @param {*} value\n * @return {*}\n */\nfunction shallowCopy(value) {\n return value;\n}\n\n/**\n * get empty Array\n *\n * @return {Array}\n */\nfunction getEmptyArray() {\n return [];\n}\n\n/**\n * get empty Map\n *\n * @return {Map}\n */\nfunction getEmptyMap() {\n return new Map();\n}\n\n/**\n * get empty Object\n *\n * @return {Object}\n */\nfunction getEmptyObject() {\n return {};\n}\n\n/**\n * get empty Set\n *\n * @return {Set}\n */\nfunction getEmptySet() {\n return new Set();\n}\n\nexport default new Map([\n // deep copy\n ['ArrayBuffer', copyArrayBuffer],\n ['Boolean', copyBoolean],\n ['Buffer', copyBuffer],\n ['DataView', copyDataView],\n ['Date', copyDate],\n ['Number', copyNumber],\n ['RegExp', copyRegExp],\n ['String', copyString],\n\n // typed arrays\n // TODO: pass bound function\n ['Float32Array', copyTypedArray],\n ['Float64Array', copyTypedArray],\n ['Int16Array', copyTypedArray],\n ['Int32Array', copyTypedArray],\n ['Int8Array', copyTypedArray],\n ['Uint16Array', copyTypedArray],\n ['Uint32Array', copyTypedArray],\n ['Uint8Array', copyTypedArray],\n ['Uint8ClampedArray', copyTypedArray],\n\n // shallow copy\n ['Array Iterator', shallowCopy],\n ['Map Iterator', shallowCopy],\n ['Promise', shallowCopy],\n ['Set Iterator', shallowCopy],\n ['String Iterator', shallowCopy],\n ['function', shallowCopy],\n ['global', shallowCopy],\n // NOTE: WeakMap and WeakSet cannot get entries\n ['WeakMap', shallowCopy],\n ['WeakSet', shallowCopy],\n\n // primitives\n ['boolean', shallowCopy],\n ['null', shallowCopy],\n ['number', shallowCopy],\n ['string', shallowCopy],\n ['symbol', shallowCopy],\n ['undefined', shallowCopy],\n\n // collections\n // NOTE: return empty value, because recursively copy later.\n ['Arguments', getEmptyArray],\n ['Array', getEmptyArray],\n ['Map', getEmptyMap],\n ['Object', getEmptyObject],\n ['Set', getEmptySet]\n\n // NOTE: type-detect returns following types\n // 'Location'\n // 'Document'\n // 'MimeTypeArray'\n // 'PluginArray'\n // 'HTMLQuoteElement'\n // 'HTMLTableDataCellElement'\n // 'HTMLTableHeaderCellElement'\n\n // TODO: is type-detect never return 'object'?\n // 'object'\n]);\n","import copyMap from './copy_map.mjs';\nimport { detectType } from './detector.mjs';\n\n/**\n * no operation\n */\nfunction noop() {}\n\n/**\n * copy value\n *\n * @param {*} value\n * @param {string} [type=null]\n * @param {Function} [customizer=noop]\n * @return {*}\n */\nexport function copy(value, type = null, customizer = noop) {\n if (arguments.length === 2 && typeof type === 'function') {\n customizer = type;\n type = null;\n }\n\n const valueType = type || detectType(value);\n const copyFunction = copyMap.get(valueType);\n\n if (valueType === 'Object') {\n const result = customizer(value, valueType);\n\n if (result !== undefined) {\n return result;\n }\n }\n\n // NOTE: TypedArray needs pass type to argument\n return copyFunction ? copyFunction(value, valueType) : value;\n}\n","import { detectType } from './detector.mjs';\nimport { get, isCollection, set } from './collection.mjs';\nimport { copy } from './copier.mjs';\n\n/**\n * deepcopy function\n *\n * @param {*} value\n * @param {Object|Function} [options]\n * @return {*}\n */\nexport default function deepcopy(value, options = {}) {\n if (typeof options === 'function') {\n options = {\n customizer: options\n };\n }\n\n const {\n // TODO: before/after customizer\n customizer\n // TODO: max depth\n // depth = Infinity,\n } = options;\n\n const valueType = detectType(value);\n\n if (!isCollection(valueType)) {\n return recursiveCopy(value, null, null, null, customizer);\n }\n\n const copiedValue = copy(value, valueType, customizer);\n\n const references = new WeakMap([[value, copiedValue]]);\n const visited = new WeakSet([value]);\n\n return recursiveCopy(value, copiedValue, references, visited, customizer);\n}\n\n/**\n * recursively copy\n *\n * @param {*} value target value\n * @param {*} clone clone of value\n * @param {WeakMap} references visited references of clone\n * @param {WeakSet} visited visited references of value\n * @param {Function} customizer user customize function\n * @return {*}\n */\nfunction recursiveCopy(value, clone, references, visited, customizer) {\n const type = detectType(value);\n const copiedValue = copy(value, type);\n\n // return if not a collection value\n if (!isCollection(type)) {\n return copiedValue;\n }\n\n let keys;\n\n switch (type) {\n case 'Arguments':\n case 'Array':\n keys = Object.keys(value);\n break;\n case 'Object':\n keys = Object.keys(value);\n keys.push(...Object.getOwnPropertySymbols(value));\n break;\n case 'Map':\n case 'Set':\n keys = value.keys();\n break;\n default:\n }\n\n // walk within collection with iterator\n for (let collectionKey of keys) {\n const collectionValue = get(value, collectionKey, type);\n\n if (visited.has(collectionValue)) {\n // for [Circular]\n set(clone, collectionKey, references.get(collectionValue), type);\n } else {\n const collectionValueType = detectType(collectionValue);\n const copiedCollectionValue = copy(collectionValue, collectionValueType);\n\n // save reference if value is collection\n if (isCollection(collectionValueType)) {\n references.set(collectionValue, copiedCollectionValue);\n visited.add(collectionValue);\n }\n\n set(\n clone,\n collectionKey,\n recursiveCopy(\n collectionValue,\n copiedCollectionValue,\n references,\n visited,\n customizer\n ),\n type\n );\n }\n }\n\n // TODO: isSealed/isFrozen/isExtensible\n\n return clone;\n}\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.logdown=e():t.logdown=e()}(window,function(){return function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}return o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,\"a\",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p=\"\",o(o.s=0)}([function(t,e,r){var n,o=r(1)(),i=r(3),s=r(5),f=r(8)();o.prefixColors=[\"#F2777A\",\"#F99157\",\"#FFCC66\",\"#99CC99\",\"#66CCCC\",\"#6699CC\",\"#CC99CC\"],o._setPrefixRegExps=function(){try{f.localStorage&&\"string\"==typeof f.localStorage.getItem(\"debug\")&&(o._prefixRegExps=[],f.localStorage.getItem(\"debug\").split(\",\").forEach(function(t){var e=\"enable\";\"-\"===(t=t.trim())[0]&&(t=t.substr(1),e=\"disable\");var r=o._prepareRegExpForPrefixSearch(t);o._prefixRegExps.push({type:e,regExp:r})}))}catch(t){}},o._getNextPrefixColor=(n=0,function(){return n+=1,o.prefixColors[n%o.prefixColors.length]}),o.prototype._getDecoratedPrefix=function(){var t=[];return s()?(t.push(\"%c\"+this.opts.prefix+\"%c \"),t.push(\"color:\"+this.opts.prefixColor+\"; font-weight:bold;\",\"\")):t.push(\"[\"+this.opts.prefix+\"] \"),t},o.prototype._prepareOutput=function(t){var e,r=this._getDecoratedPrefix();return\"string\"==typeof t[0]?this.opts.markdown&&s()?(e=i.parse(t[0]),r[0]=r[0]+e.text,r=r.concat(e.styles)):r[0]=r[0]+t[0]:r.push(t[0]),1<t.length&&(r=r.concat(t.slice(1))),r},o._setPrefixRegExps(),t.exports=o},function(t,e,r){var f=r(2);t.exports=function(){function s(t,e){return this instanceof s?s._isPrefixAlreadyInUse(t)?s._getInstanceByPrefix(t):(this.opts=s._normalizeOpts(t,e),this.state=s._getInitialState(this.opts),s._decorateLoggerMethods(this),s._instances.push(this),this):new s(t,e)}return s.transports=[],s._instances=[],s._prefixRegExps=[],s._prepareRegExpForPrefixSearch=function(t){return new RegExp(\"^\"+t.replace(/\\*/g,\".*?\")+\"$\")},s._isPrefixAlreadyInUse=function(e){return s._instances.some(function(t){return t.opts.prefix===e})},s._getInstanceByPrefix=function(e){return s._instances.filter(function(t){return t.opts.prefix===e})[0]},s._normalizeOpts=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"prefix must be a string\");var r=void 0===(e=e||{}).markdown||Boolean(e.markdown),n=e.prefixColor||s._getNextPrefixColor();return{logger:e.logger||console,markdown:r,plaintext:Boolean(e.plaintext),prefix:t,prefixColor:n}},s._getInitialState=function(t){return{isEnabled:s._getEnableState(t)}},s._getEnableState=function(e){var r=!1;return s._prefixRegExps.forEach(function(t){\"enable\"===t.type&&t.regExp.test(e.prefix)?r=!0:\"disable\"===t.type&&t.regExp.test(e.prefix)&&(r=!1)}),r},s._decorateLoggerMethods=function(t){var i=t.opts.logger,e=Object.keys(i).filter(function(t){return\"function\"==typeof i[t]});0===e.length&&(e=[\"debug\",\"log\",\"warn\",\"error\",\"info\"]),e.forEach(function(o){t[o]=function(){var e=f(arguments),r=this.opts.prefix;if(s.transports.length){var n=\"[\"+r+\"] \"+e.filter(function(t){return\"object\"!=typeof t}).join(\" \");s.transports.forEach(function(t){t({state:this.state,instance:r,level:o,args:e,msg:n})}.bind(this))}if(this.state.isEnabled){var t=this._prepareOutput(e,o);i[o].apply(i,t)}}})},s}},function(t,e){t.exports=function(t){return Array.prototype.slice.call(t,0)}},function(t,e,r){var n=[];function o(e){return function(t){return n.push(e),n.push(\"\"),\"%c\"+t+\"%c\"}}var i=new(r(4))({renderer:{\"*\":o(\"font-weight:bold;\"),_:o(\"font-style:italic;\"),\"`\":o(\"background-color:rgba(255,204,102, 0.1);color:#FFCC66;padding:2px 5px;border-radius:2px;\")}});t.exports={parse:function(t){var e={text:i.parse(t),styles:[].concat(n)};return n.length=0,e}}},function(t,e){var x=/([_*`\\\\]|[^_*`\\\\]+)/g,r=/[_*`]/;function n(t){this.renderer=t.renderer}function d(t){return r.test(t)}n.prototype.parse=function(t){if(\"\"===t)return\"\";var r,e,n,o=t.match(x),i=this.renderer,s=\"\",f=[],u={},a=0;function p(t){for(var e=\"\";r&&r.tag!==t;)e=r.tag+r.text+e,u[r.tag]=!1,r=f.pop();return e}for(;n=o[a];){if(e=\"\",a++,d(n))if(u[n])e=p(n),e=i[r.tag](r.text+e),u[n]=!1,r=f.pop();else{var c=\"\";if(\"`\"===n){var l=o.indexOf(n,a);-1!==l&&(s+=p(),c=o.slice(a,l).join(\"\"),a=l)}r&&f.push(r),u[n]=!0,r={tag:n,text:c}}else if(\"\\\\\"===(e=n)){var g=o[a];(d(g)||\"\\\\\"===g)&&(e=g,a++)}e&&(r?r.text+=e:s+=e,e=\"\")}return s+p()},t.exports=n},function(t,e,r){var n=r(6),o=r(7);t.exports=function(){return n()||o()}},function(t,e){t.exports=function(){try{return\"WebkitAppearance\"in document.documentElement.style&&!/Edge/.test(navigator.userAgent)}catch(t){return!1}}},function(t,e){t.exports=function(){try{return/firefox\\/(\\d+)/i.test(navigator.userAgent)}catch(t){return!1}}},function(r,t,e){(function(t){function e(t,e){return\"object\"==typeof t&&t.self===t&&t||\"object\"==typeof e&&e.global===e&&e||this}r.exports=e.bind(this,self,t),r.exports.getGlobal=e}).call(this,e(9))},function(ob,pb){var qb;qb=function(){return this}();try{qb=qb||Function(\"return this\")()||eval(\"this\")}catch(ob){\"object\"==typeof window&&(qb=window)}ob.exports=qb}])});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","class Context {\n constructor () {\n this.context = {}\n }\n\n set (obj) {\n this.context = Object.assign({}, this.context, obj)\n }\n\n getValue (key) {\n return this.context[key]\n }\n\n setValue (key, value) {\n this.context[key] = value\n }\n\n clear () {\n this.context = {}\n }\n\n get () {\n return this.context\n }\n}\n\nexport default new Context()\n","\nclass Logger {\n get logger () {\n if (!this._logger) {\n this._logger = require('logdown')('ustore')\n this._logger.isEnabled = process.env.NODE_ENV !== 'production'\n }\n return this._logger\n }\n\n log (...args) {\n this.logger.log(...args)\n }\n\n warn (...args) {\n this.logger.warn(...args)\n }\n\n info (...args) {\n this.logger.info(...args)\n }\n\n error (...args) {\n this.logger.error(...args)\n }\n}\n\nexport default new Logger()\n","import contextService from '../services/context'\nimport logger from '../services/logger'\n\nfunction createHeaders (options) {\n // get parameters from coreStateParams to init data in header\n const token = contextService.getValue('securityToken')\n const contentLanguage = contextService.getValue('languageCode')\n\n if (!options.static) {\n const headers = Object.assign({}, {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'Accept-Language': contentLanguage\n })\n\n if (options.auth) {\n Object.assign(headers, { 'Authorization': `uStore ${token}` })\n }\n\n return headers\n }\n\n return {}\n}\n\nasync function formatResponse (callOptions, response) {\n try {\n if (callOptions.download) {\n return response.blob()\n }\n\n if (callOptions.json) {\n return await response.json()\n }\n return await response.text()\n } catch (e) {\n logger.error('Error on formatting response : ', callOptions, response)\n return response\n }\n}\n\nconst http = ['get', 'post', 'put', 'delete'].reduce(function (map, method) {\n map[method] = async function (url, requestBody, options) {\n const callOptions = Object.assign({\n auth: true,\n json: true,\n static: false,\n download: false\n }, options)\n\n const reqOptions = {\n headers: createHeaders(callOptions),\n method,\n body: requestBody ? JSON.stringify(requestBody) : undefined\n }\n\n const res = await fetch(`${url}`, reqOptions)\n logger.info('Request to API : ', url, reqOptions)\n\n const formattedResponse = await formatResponse(callOptions, res)\n logger.info('Response from API : ', JSON.stringify(formattedResponse))\n\n if (!res.ok) {\n if (formattedResponse.TypeName === 'OperationFailed') {\n throw formattedResponse\n }\n try {\n logger.error('Error in request : ', url, reqOptions)\n if (res.status === 404 && options.download) {\n return null\n }\n if (formattedResponse.TypeName === 'AccessDenied') {\n contextService.getValue('onAccessDenied')()\n } else if (formattedResponse.TypeName === 'ResourceNotAvailable.Store') {\n contextService.getValue('onStoreNotAvailable')()\n } else contextService.getValue('onGeneralError')()\n throw formattedResponse\n } catch (error) {\n // logger.info('General Error')\n if (!error || !error.TypeName) contextService.getValue('onGeneralError')()\n\n throw formattedResponse\n }\n }\n return formattedResponse\n }\n\n return map\n}, {})\n\nexport default http\n","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nexport default function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changedâ€. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","import { compose } from 'redux';\nfunction extensionComposeStub() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n if (funcs.length === 0) return undefined;\n if (typeof funcs[0] === 'object') return compose;\n return compose(...funcs);\n}\nexport const composeWithDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : extensionComposeStub;\nexport const devToolsEnhancer = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () {\n return function (noop) {\n return noop;\n };\n};\nexport { composeWithDevTools as composeWithDevToolsDevelopmentOnly, devToolsEnhancer as devToolsEnhancerDevelopmentOnly } from './developmentOnly';\nexport { composeWithDevTools as composeWithDevToolsLogOnly, devToolsEnhancer as devToolsEnhancerLogOnly } from './logOnly';\nexport { composeWithDevTools as composeWithDevToolsLogOnlyInProduction, devToolsEnhancer as devToolsEnhancerLogOnlyInProduction } from './logOnlyInProduction';","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n // Standard Redux middleware definition pattern:\n // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n var middleware = function middleware(_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n // If this \"action\" is really a function, call it and return the result.\n if (typeof action === 'function') {\n // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n return action(dispatch, getState, extraArgument);\n } // Otherwise, pass the action down the middleware chain as usual\n\n\n return next(action);\n };\n };\n };\n\n return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","export default {\n currentStore: null,\n currentUser: null,\n initState: true,\n customState: {},\n cultures: [],\n currentCulture: null,\n currencies: [],\n currentCurrency: null,\n assets: [],\n}\n","export const LOAD_CURRENT_STORE = 'LOAD_CURRENT_STORE'\nexport const LOAD_CURRENT_USER = 'LOAD_CURRENT_USER'\nexport const LOAD_USER_ORDERS_SUMMARY = 'LOAD_USER_ORDERS_SUMMARY'\nexport const LOAD_PRODUCTS = 'LOAD_PRODUCTS'\nexport const SET_CUSTOM_VAR = 'SET_CUSTOM_VAR'\nexport const DELETE_CUSTOM_VAR = 'DELETE_CUSTOM_VAR'\nexport const MERGE_CUSTOM_STATE = 'MERGE_CUSTOM_STATE'\nexport const LOAD_CATEGORIES = 'LOAD_CATEGORIES'\nexport const LOAD_CATEGORIES_TREE = 'LOAD_CATEGORIES_TREE'\nexport const LOAD_SUB_CATEGORIES = 'LOAD_SUB_CATEGORIES'\nexport const LOAD_CULTURES = 'LOAD_CULTURES'\nexport const LOAD_CURRENT_CATEGORY = 'LOAD_CURRENT_CATEGORY'\nexport const LOAD_CART_ITEMS_COUNT = 'LOAD_CART_ITEMS_COUNT'\nexport const LOAD_CURRENCIES = 'LOAD_CURRENCIES'\nexport const SET_CURRENT_CURRENCY = 'SET_CURRENT_CURRENCY'\nexport const SET_CURRENT_CULTURE = 'SET_CURRENT_CULTURE'\nexport const SET_CURRENT_CULTURE_BY_LANGUAGE = 'SET_CURRENT_CULTURE_BY_LANGUAGE'\nexport const CLEAR_STATE = 'CLEAR_STATE'\nexport const GET_ASSETS = 'GET_ASSETS'\nexport const GET_ASSET = 'GET_ASSET'\nexport const DELETE_ASSET = 'DELETE_ASSET'\nexport const UPLOAD_ASSET = 'UPLOAD_ASSET'\n","import deepcopy from 'deepcopy'\n\nexport const convertObjectToQueryString = (obj) =>\n Object.entries(obj).map(\n ([key, value]) => key && value ? `${key}=${encodeURIComponent(value)}` : ''\n ).filter(s => !!s).join('&')\n\nexport const merge = (o1, o2) => {\n const o = deepcopy(o1)\n for (let n in o2) {\n if (typeof o2[n] !== 'object' || o2[n] === null) {\n o[n] = o2[n]\n } else if (Array.isArray(o2[n])) {\n o[n] = [...o2[n]]\n } else {\n o[n] = o[n] ? merge(o[n], o2[n]) : merge({}, o2[n])\n }\n }\n return o\n}\n","// import update from 'immutability-helper'\nimport * as types from './actionsTypes'\nimport defaultState from './defaultState'\nimport { merge } from '../utils/utils'\n\n// REDUCERS\nexport default (state = defaultState, action) => {\n switch (action.type) {\n case '@@INIT_STATE':\n return Object.assign({}, state, action.data, { initState: false })\n case types.LOAD_CURRENT_STORE:\n return Object.assign({}, state, { currentStore: action.data })\n case types.LOAD_CURRENT_USER:\n return Object.assign({}, state, { currentUser: action.data })\n case types.LOAD_USER_ORDERS_SUMMARY:\n return Object.assign({}, state, { userOrdersSummary: action.data })\n case types.LOAD_CATEGORIES:\n return Object.assign({}, state, { categories: action.data })\n case types.LOAD_CATEGORIES_TREE:\n const categoriesTree = action.data\n const firstLevelCategories = categoriesTree.map((node) => node.Category)\n return Object.assign({}, state, { categoriesTree: categoriesTree, categories: firstLevelCategories })\n case types.LOAD_SUB_CATEGORIES:\n return Object.assign({}, state, { subCategories: action.data })\n case types.LOAD_CULTURES:\n return Object.assign({}, state, { cultures: action.data })\n case types.LOAD_CURRENCIES:\n return Object.assign({}, state, { currencies: action.data })\n case types.LOAD_CART_ITEMS_COUNT:\n return Object.assign({}, state, { cartItemsCount: action.data })\n case types.SET_CURRENT_CULTURE:\n return Object.assign({}, state, { currentCulture: action.data })\n case types.SET_CURRENT_CULTURE_BY_LANGUAGE:\n const culture = action.data && state.cultures.length > 0 ? state.cultures.filter(c => c.LanguageCode === action.data)[0] : null\n return Object.assign({}, state, { currentCulture: culture })\n case types.SET_CURRENT_CURRENCY:\n const currency = action.data ? action.data : (state.currencies.length > 0 ? state.currencies.filter(c => c.ID === state.currentStore.PrimaryCurrencyID)[0] : null)\n return Object.assign({}, state, { currentCurrency: currency })\n case types.LOAD_CURRENT_CATEGORY:\n return Object.assign({}, state, { currentCategory: action.data, subCategories: null })\n case types.LOAD_PRODUCTS:\n return Object.assign({}, state, { products: action.data.products })\n case types.SET_CUSTOM_VAR:\n const mergedCustomState = Object.assign(state.customState, action.data)\n return Object.assign({}, state, { customState: mergedCustomState })\n case types.DELETE_CUSTOM_VAR:\n const customStateDup = Object.assign({}, state.customState)\n delete customStateDup[action.data.name]\n return Object.assign({}, state, { customState: customStateDup })\n case types.MERGE_CUSTOM_STATE:\n return Object.assign({}, state, { customState: merge(state.customState, action.data) })\n case types.CLEAR_STATE:\n return Object.assign({}, state, defaultState)\n case types.GET_ASSETS:\n return Object.assign({}, state, { assets: action.data })\n case types.GET_ASSET:\n return Object.assign({}, state, { selectedAsset: action.data })\n case types.DELETE_ASSET:\n return Object.assign({}, state, { assets: state.assets.filter(a => a.AssetID !== action.data) })\n case types.UPLOAD_ASSET:\n return Object.assign({}, state, { assets: [action.data, ...state.assets] })\n }\n\n return state\n}\n","import { initStore } from '../redux/store'\nimport { CLEAR_STATE, SET_CUSTOM_VAR, DELETE_CUSTOM_VAR, MERGE_CUSTOM_STATE } from '../redux/actionsTypes'\n\nclass ProviderState {\n constructor () {\n this.store = initStore()\n }\n\n get () {\n return this.store.getState()\n }\n\n set (state) {\n this.store.dispatch({ type: '@@INIT_STATE', data: state })\n }\n\n setInitState () {\n this.store.dispatch({ type: '@@INIT_STATE' })\n }\n\n get dispatch () {\n return this.store.dispatch\n }\n\n get subscribe () {\n return this.store.subscribe\n }\n\n setCustomState (name, value) {\n this.store.dispatch({ type: SET_CUSTOM_VAR, data: { [name]: value } })\n }\n\n setBulkCustomState (obj) {\n this.store.dispatch({ type: SET_CUSTOM_VAR, data: obj })\n }\n\n deleteCustomState (name) {\n this.store.dispatch({ type: DELETE_CUSTOM_VAR, data: { name } })\n }\n\n mergeCustomState (newState) {\n this.store.dispatch({ type: MERGE_CUSTOM_STATE, data: newState })\n }\n\n clear () {\n this.store.dispatch({ type: CLEAR_STATE, data: {} })\n }\n}\n\nexport default new ProviderState()\n","import { createStore, applyMiddleware } from 'redux'\nimport { composeWithDevTools } from '@redux-devtools/extension'\nimport thunkMiddleware from 'redux-thunk'\nimport defaultState from './defaultState'\nimport reducer from './reducer'\n\nexport const initStore = (initialState = defaultState) => {\n // the following lines are not duplicate\n // the build will select the correct line according to the type of the build\n // ==== DO NOT DELETE ====\n return createStore(reducer, initialState, composeWithDevTools(applyMiddleware(thunkMiddleware)))\n return createStore(reducer, initialState, applyMiddleware(thunkMiddleware))\n}\n","\nclass Config {\n set (obj) {\n this.config = obj\n this.configInit = true\n }\n\n getValue (key) {\n return this.config[key]\n }\n\n isInit () {\n return this.configInit\n }\n\n get () {\n return this.config\n }\n}\n\nexport default new Config()\n","import providerState from './providerState'\n\nclass Binding {\n constructor () {\n this.webComponents = {}\n this.componentId = 1\n this.state = providerState\n\n // subscribe to store changes and set model attribute on all\n // connected components\n this.state.store.subscribe(() => {\n setTimeout(() => {\n const model = JSON.stringify(this.state.get())\n Object.values(this.webComponents).forEach(c => c.setAttribute('model', model))\n }, 0)\n })\n }\n\n // register a new component set an binding id to allow removing the\n // component when unregistering\n // listening to the action event and dispatching it to redux store.\n register (component) {\n const model = JSON.stringify(this.state.get())\n component.ustoreBindingId = this.componentId\n component.addEventListener('action', ({ data }) => this.state.dispatch(data))\n this.webComponents[this.componentId] = component\n component.setAttribute('model', model)\n this.componentId++\n }\n\n unregister (ustoreBindingId) {\n delete this.webComponents[ustoreBindingId]\n }\n}\n\nexport default new Binding()\n","import contextService from '../services/context'\n\nconst httpUpload = async (url, uploadedValue) => {\n const token = contextService.getValue('securityToken')\n const contentLanguage = contextService.getValue('languageCode')\n\n const myHeaders = new Headers()\n const formData = new FormData()\n myHeaders.append('Authorization', `uStore ${token}`)\n myHeaders.append('Accept-Language', contentLanguage)\n\n uploadedValue.map((item) => formData.append(encodeURIComponent(item.name), item, item.name))\n\n const requestOptions = {\n method: 'POST',\n headers: myHeaders,\n body: formData,\n redirect: 'follow'\n }\n\n const promises = await fetch(url, requestOptions)\n .then(response => response.json())\n .catch(error => console.log('error uploading', error))\n return Promise.all([promises])\n}\n\nexport default httpUpload\n","import http from './http'\nimport httpUpload from './httpUpload'\nimport httpDeleteFiles from './httpDeleteFiles'\nimport config from '../services/config'\n\nexport const getUserOrdersSummary = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/summary`)\n}\n\nexport const addOrderItem = async (productID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/draft/items?productID=${productID}`)\n}\n\nexport const getOrderItem = async (orderItemID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}`)\n}\n\nexport const updateOrderItem = async (orderItemID, orderItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}`, orderItem)\n}\n\nexport const getPriceOrderItem = async (orderItemID, orderItem) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/price/calculate`, orderItem)\n}\n\nexport const reorder = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/submitted/items/${orderItemID}/reorder`)\n}\n\nexport const getLastOrder = async (productID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/submitted/items/last/status?productID=${productID}`)\n}\n\nexport const addToCart = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/addToCart`)\n}\n\nexport const saveForLater = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/saveForLater`)\n}\n\nexport const getDeliveryServices = async (orderItemID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/deliveryServices`)\n}\n\nexport const getProperties = async (orderItemID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/form`)\n}\n\nexport const updateProperties = async (orderItemID, data) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/form`, data)\n}\n\nexport const updatePropertiesState = async (orderItemID, data) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/form/state`, data)\n}\n\nexport const uploadFile = async (orderItemID, propertyID, data) => {\n return await httpUpload(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/${propertyID}/files`, data)\n}\n\nexport const deleteFiles = async (orderItemID, propertyID, names) => {\n return await httpDeleteFiles(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/${propertyID}/files?${names}`)\n}\n\nexport const getRepositoryDetails = async (guid) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/system/fileRepositories/${guid}`)\n}\n\nexport const getCartInfo = async (listId = null) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart?ListID=${listId}`)\n}\n\nexport const getWishListInfo = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList`)\n}\n\nexport const deleteCartItem = async (orderItemID) => {\n return await http.delete(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}`)\n}\n\nexport const clearCart = async (orderItemIds = null, listId = null) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/clear`, {\n OrderItemIDs: orderItemIds,\n ListID: listId,\n })\n}\n\nexport const clearWishlist = async (orderItemIds = null) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/clear`, {\n OrderItemIDs: orderItemIds\n })\n}\n\nexport const validateCart = async (isChecked = null, listId = null) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/validations?isChecked=${isChecked}&ListID=${listId}`)\n}\n\nexport const validateWishList = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/validations`)\n}\n\nexport const getCartPricingInfo = async (isChecked = null, listId = null) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/price?isChecked=${isChecked}&ListID=${listId}`)\n}\n\nexport const getWishListPricingInfo = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/price`)\n}\n\nexport const updateCartItem = async (orderItemID, orderItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/${orderItemID}`, orderItem)\n}\n\nexport const updateWishListItem = async (orderItemID, orderItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/${orderItemID}`, orderItem)\n}\n\nexport const updateCart = async (cartItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart`, cartItem)\n}\n\nexport const createCartList = async (name, externalId = null, externalUrl = null) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists`, {\n Name: name,\n ExternalID: externalId,\n ExternalUrl: externalUrl\n })\n}\n\nexport const getListId = async (externalId) => {\n return http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/id?externalID=${externalId}`)\n}\n\nexport const getListInfo = async (listId) => {\n return http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}/details`)\n}\n\nexport const getLists = async () => {\n return http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists`)\n}\n\nexport const deleteList = async (listId) => {\n return http.delete(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}`)\n}\n\nexport const exportList = async (listId) => {\n return http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}/export`)\n}\n\nexport const revertModifications = async () => {\n return http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/approval/revert`, {})\n}\n","import http from './http'\nimport config from '../services/config'\nimport { convertObjectToQueryString } from '../utils/utils'\n\nexport const getTopCategories = async (pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories${params.length ? `?${params}` : ''}`)\n}\n\nexport const getSubCategories = async (categoryID, pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/${categoryID}/categories${params.length ? `?${params}` : ''}`)\n}\n\nexport const getCategoryIDByFriendlyID = async (categoryFriendlyID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/id?friendlyID=${categoryFriendlyID}`)\n}\n\nexport const getCategory = async (categoryID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/${categoryID}`)\n}\n\nexport const getCategoryTree = async (depth) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/tree?depth=${depth}`)\n}\n","import http from './http'\nimport config from '../services/config'\n\nexport const getCurrentStore = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store`)\n}\n\nexport const getCurrentUser = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user`)\n}\n\nexport const getCultures = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/cultures`, null)\n // Use this for mock data from cultures.json\n // return await http.get(`${config.getValue('baseUrl')}/config/stores/store-a/cultures.json`)\n}\n\nexport const getCurrencies = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/currencies`)\n // Use this for mock data from currencies.json\n // return await http.get(`${config.getValue('baseUrl')}/config/stores/store-a/currencies.json`)\n}\n\nexport const getCartItemsCount = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/items/count`)\n}\n\nexport const renewToken = async () => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/renew`)\n}\n\nexport const loginBySSOToken = async (Token) => {\n return await http.post(`/uStoreRestApi/v1/store/sso/login`, { Token })\n}\n","import http from './http'\nimport config from '../services/config'\nimport httpUpload from './httpUpload'\n\nexport const getAssets = async (propertyID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/assets/?propertyID=${propertyID}`)\n}\n\nexport const getAsset = async (assetID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/assets/${assetID}`)\n}\n\nexport const deleteAsset = async (assetID) => {\n await http.delete(`${config.getValue('apiUrl')}/v1/store/login/user/assets/${assetID}`)\n return assetID\n}\n\nexport const uploadAsset = async (propertyID, data) => {\n const r = await httpUpload(`${config.getValue('apiUrl')}/v1/store/login/user/assets/?propertyID=${propertyID}`, [data])\n return r[0]\n}\n","import {\n getUserOrdersSummary,\n addOrderItem,\n getOrderItem,\n updateOrderItem,\n getPriceOrderItem,\n reorder,\n getLastOrder,\n addToCart,\n saveForLater,\n getDeliveryServices,\n getProperties,\n updateProperties,\n updatePropertiesState,\n getRepositoryDetails,\n uploadFile,\n deleteFiles,\n getCartInfo,\n getWishListInfo,\n deleteCartItem,\n clearCart,\n clearWishlist,\n validateCart,\n validateWishList,\n getCartPricingInfo,\n getWishListPricingInfo,\n updateCartItem,\n updateWishListItem,\n updateCart,\n createCartList,\n getListId,\n getListInfo,\n getLists,\n deleteList,\n exportList,\n revertModifications\n} from '../api/orders'\nimport { getTopCategories, getSubCategories, getCategoryIDByFriendlyID, getCategory, getCategoryTree } from '../api/categories'\nimport {\n getProductThumbnails,\n getProductIDByFriendlyID,\n getProducts,\n getProductByID,\n productType,\n getProductsByIDs,\n search,\n createProofPreview,\n downloadProofPreview,\n getProofPreview,\n createProof,\n downloadProof,\n} from '../api/products'\nimport { getCurrentStore, getCurrentUser, getCultures, getCurrencies, renewToken, getCartItemsCount, loginBySSOToken, } from '../api/store'\nimport { getAssets, getAsset, deleteAsset, uploadAsset } from '../api/assets'\n\nexport default {\n\n categories: {\n getTopCategories,\n getSubCategories,\n getCategoryIDByFriendlyID,\n getCategory,\n getCategoryTree\n },\n orders: {\n getUserOrdersSummary,\n addOrderItem,\n getOrderItem,\n updateOrderItem,\n getPriceOrderItem,\n reorder,\n getLastOrder,\n addToCart,\n saveForLater,\n getDeliveryServices,\n getProperties,\n updateProperties,\n updatePropertiesState,\n getRepositoryDetails,\n uploadFile,\n deleteFiles,\n getCartInfo,\n getWishListInfo,\n deleteCartItem,\n clearCart,\n clearWishlist,\n validateCart,\n validateWishList,\n getCartPricingInfo,\n getWishListPricingInfo,\n updateCartItem,\n updateWishListItem,\n updateCart,\n createCartList,\n getListId,\n getListInfo,\n getLists,\n deleteList,\n exportList,\n revertModifications,\n },\n products: {\n getProductIDByFriendlyID,\n getProducts,\n getProductByID,\n productType,\n getProductsByIDs,\n getProductThumbnails,\n search,\n createProofPreview,\n downloadProofPreview,\n getProofPreview,\n createProof,\n downloadProof,\n },\n store: {\n getCurrentStore,\n getCurrentUser,\n getCultures,\n getCurrencies,\n renewToken,\n getCartItemsCount,\n loginBySSOToken,\n },\n assets: {\n getAssets,\n getAsset,\n deleteAsset,\n uploadAsset\n }\n\n}\n","import contextService from '../services/context'\n\nconst httpDeleteFiles = async (url, name) => {\n const token = contextService.getValue('securityToken')\n\n const myHeaders = new Headers()\n myHeaders.append('Authorization', `uStore ${token}`)\n\n const requestOptions = {\n method: 'DELETE',\n headers: myHeaders,\n body: name,\n redirect: 'follow'\n }\n\n return fetch(url, requestOptions)\n .then(response => response.json())\n .catch(error => console.log('error', error))\n}\n\nexport default httpDeleteFiles\n","import http from './http'\nimport config from '../services/config'\nimport { convertObjectToQueryString } from '../utils/utils'\n\nexport const getProductIDByFriendlyID = async (friendlyID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/id?friendlyID=${friendlyID}`)\n}\n\nexport const getProducts = async (categoryID, pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/${categoryID}/products${params.length ? `?${params}` : ''}`)\n}\n\nexport const getProductsByIDs = async (IDs) => {\n const sIDs = IDs.map((val, ind) => `productIDs[${ind}]=${val}`).join('&')\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products?${sIDs}`)\n}\n\nexport const getProductByID = async (productID, retrieveTypeSpecificData) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/${productID}?retrieveTypeSpecificData=${retrieveTypeSpecificData}`)\n}\n\nexport const getProductThumbnails = async (productID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/${productID}/thumbnails`)\n}\n\nexport const createProofPreview = async (orderItemID, properties) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/preview`, {properties})\n}\n\nexport const getProofPreview = async (orderItemID, previewID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/preview/${previewID}`)\n}\n\nexport const downloadProofPreview = async (orderItemID, previewID, fileName) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/preview/${previewID}/download?fileName=${fileName}`, undefined, { download: true })\n}\n\nexport const createProof = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/proof`, {})\n}\n\nexport const downloadProof = async (orderItemID, fileName) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/proof/download?fileName=${fileName}`, undefined, { download: true })\n}\n\nexport const search = async (search, pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ search, pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/search${params.length ? `?${params}` : ''}`)\n}\n\nexport const productType = {\n Undefined: -1,\n Dynamic: 1,\n Static: 2,\n Email: 3,\n Uploaded: 4,\n Composite: 5,\n DynamicWithPurl: 6,\n EmailWithPurl: 7,\n CircleProject: 8,\n PrintTouchPoint: 9,\n EmailTouchPoint: 10,\n WebTouchPoint: 11,\n PdfOnDemandTouchPoint: 12,\n TriggeredEmailTouchPoint: 13,\n Kit: 14\n}\n","import providerState from './providerState'\nimport { LOAD_USER_ORDERS_SUMMARY, LOAD_CART_ITEMS_COUNT } from '../redux/actionsTypes'\nimport { getUserOrdersSummary } from '../api/orders'\nimport {getCartItemsCount} from '../api/store'\n\n/**\n * Represent the orders logic and API in the system\n */\nclass Orders {\n /**\n * Set **state.userOrdersSummary** with the summary of the orders of the currently logged in user.\n * @returns {UserOrdersSummaryModel} - if the store require order approval then the summary else null\n */\n async loadUserOrdersSummary () {\n const state = providerState.get()\n const requireOrderApproval = state.currentStore && state.currentStore.RequireOrderApproval\n if (requireOrderApproval) {\n const userOrdersSummary = await getUserOrdersSummary()\n providerState.dispatch({ type: LOAD_USER_ORDERS_SUMMARY, data: userOrdersSummary })\n return userOrdersSummary\n }\n return null\n }\n\n async loadCartItemsCount () {\n const cartItemsCount = await getCartItemsCount()\n providerState.dispatch({ type: LOAD_CART_ITEMS_COUNT, data: cartItemsCount })\n return cartItemsCount\n }\n}\n\nexport default new Orders()\n","import providerState from './providerState'\nimport { LOAD_CURRENT_STORE, LOAD_CURRENT_USER, LOAD_CULTURES, LOAD_CURRENCIES, LOAD_CART_ITEMS_COUNT } from '../redux/actionsTypes'\nimport { getCurrentStore, getCurrentUser, getCultures, getCurrencies, getCartItemsCount } from '../api/store'\nimport Orders from './orders';\n/**\n * Represent the store logic and API in the system\n */\nclass Store {\n /**\n * Set **state.currentStore** with the data of the store, that is associated with the security token and culture\n * in the request headers.\n * @returns {StoreModel} - the store data\n */\n async loadCurrentStore () {\n const currentStore = await getCurrentStore()\n providerState.dispatch({ type: LOAD_CURRENT_STORE, data: currentStore })\n return currentStore\n }\n\n /**\n * Set **state.currentUser** with the user, that is logged-in to the store\n * @returns {UserModel} - the user data\n */\n async loadCurrentUser () {\n const currentUser = await getCurrentUser()\n providerState.dispatch({ type: LOAD_CURRENT_USER, data: currentUser })\n return currentUser\n }\n\n /**\n * Set **state.cultures** with the list of the cultures, that are set for the store.\n * @returns {CultureModel[]} - list of the cultures\n */\n async loadStoreCultures () {\n const cultures = await getCultures()\n providerState.dispatch({ type: LOAD_CULTURES, data: cultures })\n return cultures\n }\n\n /**\n * Set **state.currencies** with the list of the currencies, that are set for the store.\n * @returns {CurrencyModel[]} - list of the currencies\n */\n async loadStoreCurrencies () {\n const currencies = await getCurrencies()\n providerState.dispatch({ type: LOAD_CURRENCIES, data: currencies })\n return currencies\n }\n\n async loadCartItemsCount () {\n const cartItemsCount = await Orders.loadCartItemsCount()\n return cartItemsCount\n }\n}\n\nexport default new Store()\n","import providerState from './providerState'\nimport { SET_CURRENT_CURRENCY, SET_CURRENT_CULTURE_BY_LANGUAGE } from '../redux/actionsTypes'\n\n/**\n * Represents the culture logic in the system\n */\nclass Culture {\n /**\n * Set **state.currentCurrency** with the requested currency model\n * @param {CurrencyModel} currentCurrency - the requested currency to set as the current currency\n */\n setCurrentCurrency (currentCurrency) {\n providerState.dispatch({ type: SET_CURRENT_CURRENCY, data: currentCurrency })\n }\n\n /**\n * Set **state.currentCurrency** according the the language code requested\n * @param {string} languageCode - the requested language code\n */\n setCurrentCultureByLanguage (languageCode) {\n providerState.dispatch({ type: SET_CURRENT_CULTURE_BY_LANGUAGE, data: languageCode })\n }\n\n /**\n * Get the converted price according to the current currency in the state\n * @param {ProductPriceModel} priceModel - the price model to be converted\n * @returns {json} - price, tax and priceIncludingTax that are converted by the current currency\n */\n getConvertedPrices (priceModel) {\n const { currentCurrency } = providerState.get()\n return {\n price: priceModel.Price * currentCurrency.ConversionRate,\n tax: priceModel.Tax * currentCurrency.ConversionRate,\n priceIncludingTax: (priceModel.Price + priceModel.Tax) * currentCurrency.ConversionRate\n }\n }\n}\n\nexport default new Culture()\n","import storeService from './store'\nimport cultureService from './culture'\nimport providerState from './providerState'\nimport contextService from './context'\n\nclass InitialState {\n async loadInitialState () {\n // get initialState from API and set it in redux if needed\n // if state already has data these actions will override it\n const currentStore = await storeService.loadCurrentStore()\n\n await storeService.loadStoreCultures()\n\n cultureService.setCurrentCultureByLanguage(contextService.getValue('languageCode'))\n\n await storeService.loadStoreCurrencies()\n\n if (currentStore?.Attributes?.find((attr) => attr.Name === 'ForceCartAspx' && attr.Value === 'False')) {\n await storeService.loadCartItemsCount()\n }\n\n const currencyFriendlyID = contextService.getValue('currencyFriendlyID')\n let currentCurrency = providerState.get().currencies.filter(c => c.FriendlyID === parseInt(currencyFriendlyID))[0]\n\n const currencyID = contextService.getValue('currencyID')\n\n if (currencyID) {\n currentCurrency = providerState.get().currencies.filter(c => c.ID === currencyID)[0]\n }\n cultureService.setCurrentCurrency(currentCurrency)\n\n await storeService.loadCurrentUser()\n\n // raise flag that initial state was loaded in order not to do it again\n providerState.setInitState()\n }\n}\n\nexport default new InitialState()\n","import providerState from './providerState'\nimport { LOAD_CATEGORIES_TREE, LOAD_SUB_CATEGORIES, LOAD_CURRENT_CATEGORY } from '../redux/actionsTypes'\nimport {\n getCategoryIDByFriendlyID,\n getCategoryTree,\n getSubCategories,\n getCategory\n} from '../api/categories'\n\n/**\n * Represent the categories logic and API in the system\n */\nclass Categories {\n /**\n * Set **state.categoriesTree** with the categories tree.\n * Set **state.categories** with the first level categories group.\n * @param {number} [depth] - Indicates the maximum depth of the tree to return. By default (1), returns root categories only.\n * @returns {CategoryTreeModel} - The tree of categories\n */\n async loadCategoriesTree (depth = 1) {\n const { Categories } = await getCategoryTree(depth)\n providerState.dispatch({ type: LOAD_CATEGORIES_TREE, data: Categories })\n return Categories\n }\n\n /**\n * Set **state.subCategories** with the sub-categories of the given category in the store, using paging.\n * Sub-categories without online product(s) on any level of their branch - are not included.\n * @param {string} categoryFriendlyID - the category friendly ID\n * @param {number} [pageNumber] - The 1-based number of the page.\n * @param {number} [pageSize] - The amount of the categories in one page.\n * @returns Array of sub categories in a specific page\n */\n async loadSubCategories (categoryFriendlyID, pageNumber = null, pageSize = null) {\n const categoryID = await getCategoryIDByFriendlyID(categoryFriendlyID)\n const { Categories } = await getSubCategories(categoryID, pageNumber, pageSize)\n providerState.dispatch({ type: LOAD_SUB_CATEGORIES, data: Categories })\n return Categories\n }\n\n /**\n * Set state.currentCategory with the requested category by friendlyID.\n * @param {string} categoryFriendlyID - the category friendly ID\n * @returns {CategoryModel} - A category model\n */\n async loadCurrentCategory (categoryFriendlyID) {\n const categoryID = await getCategoryIDByFriendlyID(categoryFriendlyID)\n const currentCategory = await getCategory(categoryID)\n providerState.dispatch({ type: LOAD_CURRENT_CATEGORY, data: currentCategory })\n return currentCategory\n }\n}\n\nexport default new Categories()\n","/**\n * Represent the products logic and API in the system\n */\nclass Products {\n\n}\n\nexport default new Products()\n","import culture from './culture'\nimport store from './store'\nimport categories from './categories'\nimport products from './products'\nimport providerState from './providerState'\nimport assets from './assets'\n\nexport default {\n assets,\n culture,\n store,\n categories,\n products,\n get: () => providerState.get(),\n set: (state) => providerState.set(state),\n dispatch: providerState.dispatch,\n subscribe: providerState.subscribe,\n customState: {\n set: (name, value) => providerState.setCustomState(name, value),\n setBulk: (obj) => providerState.setBulkCustomState(obj),\n get: (name) => name ? providerState.get().customState[name] : providerState.get().customState,\n delete: (name) => providerState.deleteCustomState(name),\n merge: (customState) => providerState.mergeCustomState(customState)\n }\n}\n","import providerState from './providerState'\nimport { GET_ASSETS, GET_ASSET, DELETE_ASSET, UPLOAD_ASSET } from '../redux/actionsTypes'\nimport { getAssets, getAsset, deleteAsset, uploadAsset } from '../api/assets'\n\n\nclass Assets {\n async getAssets (propertyID) {\n const assets = await getAssets(propertyID)\n providerState.dispatch({ type: GET_ASSETS, data: assets })\n return assets\n }\n\n async getAsset (assetID) {\n const asset = await getAsset(assetID)\n providerState.dispatch({ type: GET_ASSET, data: asset })\n return asset\n }\n\n async deleteAsset (assetID) {\n await deleteAsset(assetID)\n providerState.dispatch({ type: DELETE_ASSET, data: assetID })\n return assetID\n }\n\n async uploadAsset (propertyID, data) {\n const asset = await uploadAsset(propertyID, data)\n providerState.dispatch({ type: UPLOAD_ASSET, data: asset })\n return asset\n }\n}\n\nexport default new Assets()\n","import stateService from './services/providerState'\nimport configService from './services/config'\nimport bindingService from './services/binding'\nimport contexService from './services/context'\nimport api from './services/api'\nimport initialStateService from './services/initialState'\nimport newState from './services/newState'\n\n/**\n * UStoreProvider - This is the uStore provider - the entry point to all ustore API's\n */\nclass Provider {\n constructor () {\n this.stateService = stateService\n this.binding = bindingService\n this.initialState = initialStateService\n this.configService = configService\n this.contextService = contexService\n }\n\n async init (runtimeConfig, params) {\n if (runtimeConfig) {\n this.configService.set(runtimeConfig)\n }\n if (params) {\n this.contextService.set(params)\n\n if (this.stateService.get().initState) {\n await this.initialState.loadInitialState()\n }\n }\n }\n\n get api () {\n return api\n }\n\n get state () {\n return newState\n }\n}\n\n\nexport const UStoreProvider = new Provider()\n// expose UStoreProvider on window so standalone component will have access to it\n// which will allow them to register and let the provider add model binding and\n// action changing\nif (typeof window !== 'undefined') {\n window.UStoreProvider = UStoreProvider\n}\n","/* The following list is defined in React's core */\nvar IS_UNITLESS = {\n animationIterationCount: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n stopOpacity: true,\n strokeDashoffset: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\nmodule.exports = function(name, value) {\n if(typeof value === 'number' && !IS_UNITLESS[ name ]) {\n return value + 'px';\n } else {\n return value;\n }\n};","import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nclass Ajv extends AjvCore {\n _addVocabularies(): void {\n super._addVocabularies()\n draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n if (this.opts.discriminator) this.addKeyword(discriminator)\n }\n\n _addDefaultMetaSchema(): void {\n super._addDefaultMetaSchema()\n if (!this.opts.meta) return\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n }\n}\n\nmodule.exports = exports = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n SchemaValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n","export abstract class _CodeOrName {\n abstract readonly str: string\n abstract readonly names: UsedNames\n abstract toString(): string\n abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n readonly str: string\n constructor(s: string) {\n super()\n if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n this.str = s\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n return false\n }\n\n get names(): UsedNames {\n return {[this.str]: 1}\n }\n}\n\nexport class _Code extends _CodeOrName {\n readonly _items: readonly CodeItem[]\n private _str?: string\n private _names?: UsedNames\n\n constructor(code: string | readonly CodeItem[]) {\n super()\n this._items = typeof code === \"string\" ? [code] : code\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n if (this._items.length > 1) return false\n const item = this._items[0]\n return item === \"\" || item === '\"\"'\n }\n\n get str(): string {\n return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n }\n\n get names(): UsedNames {\n return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n return names\n }, {}))\n }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n const code: CodeItem[] = [strs[0]]\n let i = 0\n while (i < args.length) {\n addCodeArg(code, args[i])\n code.push(strs[++i])\n }\n return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n const expr: CodeItem[] = [safeStringify(strs[0])]\n let i = 0\n while (i < args.length) {\n expr.push(plus)\n addCodeArg(expr, args[i])\n expr.push(plus, safeStringify(strs[++i]))\n }\n optimize(expr)\n return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n if (arg instanceof _Code) code.push(...arg._items)\n else if (arg instanceof Name) code.push(arg)\n else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n let i = 1\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1])\n if (res !== undefined) {\n expr.splice(i - 1, 3, res)\n continue\n }\n expr[i++] = \"+\"\n }\n i++\n }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n if (b === '\"\"') return a\n if (a === '\"\"') return b\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"') return\n if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n return\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n return new _Code(`${key}`)\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n return new _Code(rx.toString())\n}\n","import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n GT: new _Code(\">\"),\n GTE: new _Code(\">=\"),\n LT: new _Code(\"<\"),\n LTE: new _Code(\"<=\"),\n EQ: new _Code(\"===\"),\n NEQ: new _Code(\"!==\"),\n NOT: new _Code(\"!\"),\n OR: new _Code(\"||\"),\n AND: new _Code(\"&&\"),\n ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n abstract readonly names: UsedNames\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n return this\n }\n\n optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n return this\n }\n\n // get count(): number {\n // return 1\n // }\n}\n\nclass Def extends Node {\n constructor(private readonly varKind: Name, private readonly name: Name, private rhs?: SafeExpr) {\n super()\n }\n\n render({es5, _n}: CGOptions): string {\n const varKind = es5 ? varKinds.var : this.varKind\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n return `${varKind} ${this.name}${rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!names[this.name.str]) return\n if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n }\n}\n\nclass Assign extends Node {\n constructor(readonly lhs: Code, public rhs: SafeExpr, private readonly sideEffects?: boolean) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} = ${this.rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n return addExprNames(names, this.rhs)\n }\n}\n\nclass AssignOp extends Assign {\n constructor(lhs: Code, private readonly op: Code, rhs: SafeExpr, sideEffects?: boolean) {\n super(lhs, rhs, sideEffects)\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n }\n}\n\nclass Label extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label: Name) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.label}:` + _n\n }\n}\n\nclass Break extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label?: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n const label = this.label ? ` ${this.label}` : \"\"\n return `break${label};` + _n\n }\n}\n\nclass Throw extends Node {\n constructor(readonly error: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `throw ${this.error};` + _n\n }\n\n get names(): UsedNames {\n return this.error.names\n }\n}\n\nclass AnyCode extends Node {\n constructor(private code: SafeExpr) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.code};` + _n\n }\n\n optimizeNodes(): this | undefined {\n return `${this.code}` ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n this.code = optimizeExpr(this.code, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.code instanceof _CodeOrName ? this.code.names : {}\n }\n}\n\nabstract class ParentNode extends Node {\n constructor(readonly nodes: ChildNode[] = []) {\n super()\n }\n\n render(opts: CGOptions): string {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n }\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n const n = nodes[i].optimizeNodes()\n if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n else if (n) nodes[i] = n\n else nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i]\n if (n.optimizeNames(names, constants)) continue\n subtractNames(names, n.names)\n nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n get names(): UsedNames {\n return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n }\n\n // get count(): number {\n // return this.nodes.reduce((c, n) => c + n.count, 1)\n // }\n}\n\nabstract class BlockNode extends ParentNode {\n render(opts: CGOptions): string {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n static readonly kind = \"if\"\n else?: If | Else\n constructor(private condition: Code | boolean, nodes?: ChildNode[]) {\n super(nodes)\n }\n\n render(opts: CGOptions): string {\n let code = `if(${this.condition})` + super.render(opts)\n if (this.else) code += \"else \" + this.else.render(opts)\n return code\n }\n\n optimizeNodes(): If | ChildNode[] | undefined {\n super.optimizeNodes()\n const cond = this.condition\n if (cond === true) return this.nodes // else is ignored here\n let e = this.else\n if (e) {\n const ns = e.optimizeNodes()\n e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n }\n if (e) {\n if (cond === false) return e instanceof If ? e : e.nodes\n if (this.nodes.length) return this\n return new If(not(cond), e instanceof If ? [e] : e.nodes)\n }\n if (cond === false || !this.nodes.length) return undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n this.else = this.else?.optimizeNames(names, constants)\n if (!(super.optimizeNames(names, constants) || this.else)) return\n this.condition = optimizeExpr(this.condition, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n addExprNames(names, this.condition)\n if (this.else) addNames(names, this.else.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.else?.count || 0)\n // }\n}\n\nabstract class For extends BlockNode {\n static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n constructor(private iteration: Code) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.iteration})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iteration = optimizeExpr(this.iteration, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iteration.names)\n }\n}\n\nclass ForRange extends For {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private readonly from: SafeExpr,\n private readonly to: SafeExpr\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const varKind = opts.es5 ? varKinds.var : this.varKind\n const {name, from, to} = this\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n }\n\n get names(): UsedNames {\n const names = addExprNames(super.names, this.from)\n return addExprNames(names, this.to)\n }\n}\n\nclass ForIter extends For {\n constructor(\n private readonly loop: \"of\" | \"in\",\n private readonly varKind: Name,\n private readonly name: Name,\n private iterable: Code\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iterable = optimizeExpr(this.iterable, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iterable.names)\n }\n}\n\nclass Func extends BlockNode {\n static readonly kind = \"func\"\n constructor(public name: Name, public args: Code, public async?: boolean) {\n super()\n }\n\n render(opts: CGOptions): string {\n const _async = this.async ? \"async \" : \"\"\n return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n }\n}\n\nclass Return extends ParentNode {\n static readonly kind = \"return\"\n\n render(opts: CGOptions): string {\n return \"return \" + super.render(opts)\n }\n}\n\nclass Try extends BlockNode {\n catch?: Catch\n finally?: Finally\n\n render(opts: CGOptions): string {\n let code = \"try\" + super.render(opts)\n if (this.catch) code += this.catch.render(opts)\n if (this.finally) code += this.finally.render(opts)\n return code\n }\n\n optimizeNodes(): this {\n super.optimizeNodes()\n this.catch?.optimizeNodes() as Catch | undefined\n this.finally?.optimizeNodes() as Finally | undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n super.optimizeNames(names, constants)\n this.catch?.optimizeNames(names, constants)\n this.finally?.optimizeNames(names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n if (this.catch) addNames(names, this.catch.names)\n if (this.finally) addNames(names, this.finally.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n // }\n}\n\nclass Catch extends BlockNode {\n static readonly kind = \"catch\"\n constructor(readonly error: Name) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `catch(${this.error})` + super.render(opts)\n }\n}\n\nclass Finally extends BlockNode {\n static readonly kind = \"finally\"\n render(opts: CGOptions): string {\n return \"finally\" + super.render(opts)\n }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n | typeof If\n | typeof Else\n | typeof For\n | typeof Func\n | typeof Return\n | typeof Catch\n | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n es5?: boolean\n lines?: boolean\n ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n readonly _scope: Scope\n readonly _extScope: ValueScope\n readonly _values: ScopeValueSets = {}\n private readonly _nodes: ParentNode[]\n private readonly _blockStarts: number[] = []\n private readonly _constants: Constants = {}\n private readonly opts: CGOptions\n\n constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n this._extScope = extScope\n this._scope = new Scope({parent: extScope})\n this._nodes = [new Root()]\n }\n\n toString(): string {\n return this._root.render(this.opts)\n }\n\n // returns unique name in the internal scope\n name(prefix: string): Name {\n return this._scope.name(prefix)\n }\n\n // reserves unique name in the external scope\n scopeName(prefix: string): ValueScopeName {\n return this._extScope.name(prefix)\n }\n\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n const name = this._extScope.value(prefixOrName, value)\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n vs.add(name)\n return name\n }\n\n getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n return this._extScope.getValue(prefix, keyOrRef)\n }\n\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName: Name): Code {\n return this._extScope.scopeRefs(scopeName, this._values)\n }\n\n scopeCode(): Code {\n return this._extScope.scopeCode(this._values)\n }\n\n private _def(\n varKind: Name,\n nameOrPrefix: Name | string,\n rhs?: SafeExpr,\n constant?: boolean\n ): Name {\n const name = this._scope.toName(nameOrPrefix)\n if (rhs !== undefined && constant) this._constants[name.str] = rhs\n this._leafNode(new Def(varKind, name, rhs))\n return name\n }\n\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n }\n\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n }\n\n // `var` declaration with optional assignment\n var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n }\n\n // assignment code\n assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n return this._leafNode(new Assign(lhs, rhs, sideEffects))\n }\n\n // `+=` code\n add(lhs: Code, rhs: SafeExpr): CodeGen {\n return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n }\n\n // appends passed SafeExpr to code or executes Block\n code(c: Block | SafeExpr): CodeGen {\n if (typeof c == \"function\") c()\n else if (c !== nil) this._leafNode(new AnyCode(c))\n return this\n }\n\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n const code: CodeItem[] = [\"{\"]\n for (const [key, value] of keyValues) {\n if (code.length > 1) code.push(\",\")\n code.push(key)\n if (key !== value || this.opts.es5) {\n code.push(\":\")\n addCodeArg(code, value)\n }\n }\n code.push(\"}\")\n return new _Code(code)\n }\n\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n this._blockNode(new If(condition))\n\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf()\n } else if (thenBody) {\n this.code(thenBody).endIf()\n } else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body')\n }\n return this\n }\n\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition: Code | boolean): CodeGen {\n return this._elseNode(new If(condition))\n }\n\n // `else` clause - only valid after `if` or `else if` clauses\n else(): CodeGen {\n return this._elseNode(new Else())\n }\n\n // end `if` statement (needed if gen.if was used only with condition)\n endIf(): CodeGen {\n return this._endBlockNode(If, Else)\n }\n\n private _for(node: For, forBody?: Block): CodeGen {\n this._blockNode(node)\n if (forBody) this.code(forBody).endFor()\n return this\n }\n\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration: Code, forBody?: Block): CodeGen {\n return this._for(new ForLoop(iteration), forBody)\n }\n\n // `for` statement for a range of values\n forRange(\n nameOrPrefix: Name | string,\n from: SafeExpr,\n to: SafeExpr,\n forBody: (index: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n }\n\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(\n nameOrPrefix: Name | string,\n iterable: Code,\n forBody: (item: Name) => void,\n varKind: Code = varKinds.const\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n if (this.opts.es5) {\n const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n this.var(name, _`${arr}[${i}]`)\n forBody(name)\n })\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n }\n\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(\n nameOrPrefix: Name | string,\n obj: Code,\n forBody: (item: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n ): CodeGen {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n }\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n }\n\n // end `for` loop\n endFor(): CodeGen {\n return this._endBlockNode(For)\n }\n\n // `label` statement\n label(label: Name): CodeGen {\n return this._leafNode(new Label(label))\n }\n\n // `break` statement\n break(label?: Code): CodeGen {\n return this._leafNode(new Break(label))\n }\n\n // `return` statement\n return(value: Block | SafeExpr): CodeGen {\n const node = new Return()\n this._blockNode(node)\n this.code(value)\n if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n return this._endBlockNode(Return)\n }\n\n // `try` statement\n try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n const node = new Try()\n this._blockNode(node)\n this.code(tryBody)\n if (catchCode) {\n const error = this.name(\"e\")\n this._currNode = node.catch = new Catch(error)\n catchCode(error)\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally()\n this.code(finallyCode)\n }\n return this._endBlockNode(Catch, Finally)\n }\n\n // `throw` statement\n throw(error: Code): CodeGen {\n return this._leafNode(new Throw(error))\n }\n\n // start self-balancing block\n block(body?: Block, nodeCount?: number): CodeGen {\n this._blockStarts.push(this._nodes.length)\n if (body) this.code(body).endBlock(nodeCount)\n return this\n }\n\n // end the current self-balancing block\n endBlock(nodeCount?: number): CodeGen {\n const len = this._blockStarts.pop()\n if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n const toClose = this._nodes.length - len\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n }\n this._nodes.length = len\n return this\n }\n\n // `function` heading (or definition if funcBody is passed)\n func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n this._blockNode(new Func(name, args, async))\n if (funcBody) this.code(funcBody).endFunc()\n return this\n }\n\n // end function definition\n endFunc(): CodeGen {\n return this._endBlockNode(Func)\n }\n\n optimize(n = 1): void {\n while (n-- > 0) {\n this._root.optimizeNodes()\n this._root.optimizeNames(this._root.names, this._constants)\n }\n }\n\n private _leafNode(node: LeafNode): CodeGen {\n this._currNode.nodes.push(node)\n return this\n }\n\n private _blockNode(node: StartBlockNode): void {\n this._currNode.nodes.push(node)\n this._nodes.push(node)\n }\n\n private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n const n = this._currNode\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop()\n return this\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n }\n\n private _elseNode(node: If | Else): CodeGen {\n const n = this._currNode\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"')\n }\n this._currNode = n.else = node\n return this\n }\n\n private get _root(): Root {\n return this._nodes[0] as Root\n }\n\n private get _currNode(): ParentNode {\n const ns = this._nodes\n return ns[ns.length - 1]\n }\n\n private set _currNode(node: ParentNode) {\n const ns = this._nodes\n ns[ns.length - 1] = node\n }\n\n // get nodeCount(): number {\n // return this._root.count\n // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n if (expr instanceof Name) return replaceName(expr)\n if (!canOptimize(expr)) return expr\n return new _Code(\n expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n if (c instanceof Name) c = replaceName(c)\n if (c instanceof _Code) items.push(...c._items)\n else items.push(c)\n return items\n }, [])\n )\n\n function replaceName(n: Name): SafeExpr {\n const c = constants[n.str]\n if (c === undefined || names[n.str] !== 1) return n\n delete names[n.str]\n return c\n }\n\n function canOptimize(e: SafeExpr): e is _Code {\n return (\n e instanceof _Code &&\n e._items.some(\n (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n )\n )\n }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n return x instanceof Name ? x : _`(${x})`\n}\n","import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n prefix: string\n index: number\n}\n\nexport interface NameValue {\n ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n readonly value?: NameValue\n constructor(name: ValueScopeName) {\n super(`CodeGen: \"code\" for ${name} not defined`)\n this.value = name.value\n }\n}\n\ninterface ScopeOptions {\n prefixes?: Set<string>\n parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n scope: ScopeStore\n es5?: boolean\n lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n Started,\n Completed,\n}\n\nexport type UsedScopeValues = {\n [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n const: new Name(\"const\"),\n let: new Name(\"let\"),\n var: new Name(\"var\"),\n}\n\nexport class Scope {\n protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n protected readonly _prefixes?: Set<string>\n protected readonly _parent?: Scope\n\n constructor({prefixes, parent}: ScopeOptions = {}) {\n this._prefixes = prefixes\n this._parent = parent\n }\n\n toName(nameOrPrefix: Name | string): Name {\n return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n }\n\n name(prefix: string): Name {\n return new Name(this._newName(prefix))\n }\n\n protected _newName(prefix: string): string {\n const ng = this._names[prefix] || this._nameGroup(prefix)\n return `${prefix}${ng.index++}`\n }\n\n private _nameGroup(prefix: string): NameGroup {\n if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n }\n return (this._names[prefix] = {prefix, index: 0})\n }\n}\n\ninterface ScopePath {\n property: string\n itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n readonly prefix: string\n value?: NameValue\n scopePath?: Code\n\n constructor(prefix: string, nameStr: string) {\n super(nameStr)\n this.prefix = prefix\n }\n\n setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n this.value = value\n this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n protected readonly _values: ScopeValues = {}\n protected readonly _scope: ScopeStore\n readonly opts: VSOptions\n\n constructor(opts: ValueScopeOptions) {\n super(opts)\n this._scope = opts.scope\n this.opts = {...opts, _n: opts.lines ? line : nil}\n }\n\n get(): ScopeStore {\n return this._scope\n }\n\n name(prefix: string): ValueScopeName {\n return new ValueScopeName(prefix, this._newName(prefix))\n }\n\n value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n const name = this.toName(nameOrPrefix) as ValueScopeName\n const {prefix} = name\n const valueKey = value.key ?? value.ref\n let vs = this._values[prefix]\n if (vs) {\n const _name = vs.get(valueKey)\n if (_name) return _name\n } else {\n vs = this._values[prefix] = new Map()\n }\n vs.set(valueKey, name)\n\n const s = this._scope[prefix] || (this._scope[prefix] = [])\n const itemIndex = s.length\n s[itemIndex] = value.ref\n name.setValue(value, {property: prefix, itemIndex})\n return name\n }\n\n getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n const vs = this._values[prefix]\n if (!vs) return\n return vs.get(keyOrRef)\n }\n\n scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n return this._reduceValues(values, (name: ValueScopeName) => {\n if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return _`${scopeName}${name.scopePath}`\n })\n }\n\n scopeCode(\n values: ScopeValues | ScopeValueSets = this._values,\n usedValues?: UsedScopeValues,\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n return this._reduceValues(\n values,\n (name: ValueScopeName) => {\n if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return name.value.code\n },\n usedValues,\n getCode\n )\n }\n\n private _reduceValues(\n values: ScopeValues | ScopeValueSets,\n valueCode: (n: ValueScopeName) => Code | undefined,\n usedValues: UsedScopeValues = {},\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n let code: Code = nil\n for (const prefix in values) {\n const vs = values[prefix]\n if (!vs) continue\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n vs.forEach((name: ValueScopeName) => {\n if (nameSet.has(name)) return\n nameSet.set(name, UsedValueState.Started)\n let c = valueCode(name)\n if (c) {\n const def = this.opts.es5 ? varKinds.var : varKinds.const\n code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n } else if ((c = getCode?.(name))) {\n code = _`${code}${c}${this.opts._n}`\n } else {\n throw new ValueError(name)\n }\n nameSet.set(name, UsedValueState.Completed)\n })\n }\n return code\n }\n}\n","import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n message: ({keyword, schemaType}) =>\n schemaType\n ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n instancePath?: Code\n schemaPath?: string\n parentSchema?: boolean\n}\n\nexport function reportError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths,\n overrideAllErrors?: boolean\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n if (overrideAllErrors ?? (compositeRule || allErrors)) {\n addError(gen, errObj)\n } else {\n returnErrors(it, _`[${errObj}]`)\n }\n}\n\nexport function reportExtraError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n addError(gen, errObj)\n if (!(compositeRule || allErrors)) {\n returnErrors(it, N.vErrors)\n }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n gen.assign(N.errors, errsCount)\n gen.if(_`${N.vErrors} !== null`, () =>\n gen.if(\n errsCount,\n () => gen.assign(_`${N.vErrors}.length`, errsCount),\n () => gen.assign(N.vErrors, null)\n )\n )\n}\n\nexport function extendErrors({\n gen,\n keyword,\n schemaValue,\n data,\n errsCount,\n it,\n}: KeywordErrorCxt): void {\n /* istanbul ignore if */\n if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n const err = gen.name(\"err\")\n gen.forRange(\"i\", errsCount, N.errors, (i) => {\n gen.const(err, _`${N.vErrors}[${i}]`)\n gen.if(_`${err}.instancePath === undefined`, () =>\n gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n )\n gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n if (it.opts.verbose) {\n gen.assign(_`${err}.schema`, schemaValue)\n gen.assign(_`${err}.data`, data)\n }\n })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n const err = gen.const(\"err\", errObj)\n gen.if(\n _`${N.vErrors} === null`,\n () => gen.assign(N.vErrors, _`[${err}]`),\n _`${N.vErrors}.push(${err})`\n )\n gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n const {gen, validateName, schemaEnv} = it\n if (schemaEnv.$async) {\n gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n } else {\n gen.assign(_`${validateName}.errors`, errs)\n gen.return(false)\n }\n}\n\nconst E = {\n keyword: new Name(\"keyword\"),\n schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n params: new Name(\"params\"),\n propertyName: new Name(\"propertyName\"),\n message: new Name(\"message\"),\n schema: new Name(\"schema\"),\n parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths?: ErrorPaths\n): Code {\n const {createErrors} = cxt.it\n if (createErrors === false) return _`{}`\n return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths: ErrorPaths = {}\n): Code {\n const {gen, it} = cxt\n const keyValues: [Name, SafeExpr | string][] = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ]\n extraErrorProps(cxt, error, keyValues)\n return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n const instPath = instancePath\n ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n : errorPath\n return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n if (schemaPath) {\n schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n }\n return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n cxt: KeywordErrorCxt,\n {params, message}: KeywordErrorDefinition,\n keyValues: [Name, SafeExpr | string][]\n): void {\n const {keyword, data, schemaValue, it} = cxt\n const {opts, propertyName, topSchemaRef, schemaPath} = it\n keyValues.push(\n [E.keyword, keyword],\n [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n )\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n }\n if (opts.verbose) {\n keyValues.push(\n [E.schema, schemaValue],\n [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n [N.data, data]\n )\n }\n if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n","import type {\n AnySchema,\n AnySchemaObject,\n AnyValidateFunction,\n AsyncValidateFunction,\n EvaluatedProperties,\n EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport * as URI from \"uri-js\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n readonly data: Name // Name with reference to the current part of data instance\n readonly parentData: Name // should be used in keywords modifying data\n readonly parentDataProperty: Code | number // should be used in keywords modifying data\n readonly dataNames: Name[]\n readonly dataPathArr: (Code | number)[]\n readonly dataLevel: number // the level of the currently validated data,\n // it can be used to access both the property names and the data on all levels from the top.\n dataTypes: JSONType[] // data types applied to the current part of data instance\n definedProperties: Set<string> // set of properties to keep track of for required checks\n readonly topSchemaRef: Code\n readonly validateName: Name\n evaluated?: Name\n readonly ValidationError?: Name\n readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n readonly schemaEnv: SchemaEnv\n readonly rootId: string\n baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n readonly errSchemaPath: string // this is actual string, should not be changed to Code\n readonly errorPath: Code\n readonly propertyName?: Name\n readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n readonly createErrors?: boolean\n readonly opts: InstanceOptions // Ajv instance option.\n readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root?: SchemaEnv\n readonly baseId?: string\n readonly schemaPath?: string\n readonly localRefs?: LocalRefs\n readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root: SchemaEnv\n baseId: string // TODO possibly, it should be readonly\n schemaPath?: string\n localRefs?: LocalRefs\n readonly meta?: boolean\n readonly $async?: boolean // true if the current schema is asynchronous.\n readonly refs: SchemaRefs = {}\n readonly dynamicAnchors: {[Ref in string]?: true} = {}\n validate?: AnyValidateFunction\n validateName?: ValueScopeName\n serialize?: (data: unknown) => string\n serializeName?: ValueScopeName\n parse?: (data: string) => unknown\n parseName?: ValueScopeName\n\n constructor(env: SchemaEnvArgs) {\n let schema: AnySchemaObject | undefined\n if (typeof env.schema == \"object\") schema = env.schema\n this.schema = env.schema\n this.schemaId = env.schemaId\n this.root = env.root || this\n this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n this.schemaPath = env.schemaPath\n this.localRefs = env.localRefs\n this.meta = env.meta\n this.$async = schema?.$async\n this.refs = {}\n }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch)\n if (_sch) return _sch\n const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n const {es5, lines} = this.opts.code\n const {ownProperties} = this.opts\n const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n let _ValidationError\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: ValidationError,\n code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n })\n }\n\n const validateName = gen.scopeName(\"validate\")\n sch.validateName = validateName\n\n const schemaCxt: SchemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: N.data,\n parentData: N.parentData,\n parentDataProperty: N.parentDataProperty,\n dataNames: [N.data],\n dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set<string>(),\n topSchemaRef: gen.scopeValue(\n \"schema\",\n this.opts.code.source === true\n ? {ref: sch.schema, code: stringify(sch.schema)}\n : {ref: sch.schema}\n ),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: _`\"\"`,\n opts: this.opts,\n self: this,\n }\n\n let sourceCode: string | undefined\n try {\n this._compilations.add(sch)\n validateFunctionCode(schemaCxt)\n gen.optimize(this.opts.code.optimize)\n // gen.optimize(1)\n const validateCode = gen.toString()\n sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n this.scope.value(validateName, {ref: validate})\n\n validate.errors = null\n validate.schema = sch.schema\n validate.schemaEnv = sch\n if (sch.$async) (validate as AsyncValidateFunction).$async = true\n if (this.opts.code.source === true) {\n validate.source = {validateName, validateCode, scopeValues: gen._values}\n }\n if (this.opts.unevaluated) {\n const {props, items} = schemaCxt\n validate.evaluated = {\n props: props instanceof Name ? undefined : props,\n items: items instanceof Name ? undefined : items,\n dynamicProps: props instanceof Name,\n dynamicItems: items instanceof Name,\n }\n if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n }\n sch.validate = validate\n return sch\n } catch (e) {\n delete sch.validate\n delete sch.validateName\n if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e\n } finally {\n this._compilations.delete(sch)\n }\n}\n\nexport function resolveRef(\n this: Ajv,\n root: SchemaEnv,\n baseId: string,\n ref: string\n): AnySchema | SchemaEnv | undefined {\n ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n const schOrFunc = root.refs[ref]\n if (schOrFunc) return schOrFunc\n\n let _sch = resolve.call(this, root, ref)\n if (_sch === undefined) {\n const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n const {schemaId} = this.opts\n if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n }\n\n if (_sch === undefined) return\n return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv)) return sch\n }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n this: Ajv,\n root: SchemaEnv, // information about the root schema for the current schema\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n let sch\n while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n this: Ajv,\n root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n const p = this.opts.uriResolver.parse(ref)\n const refPath = _getFullPath(this.opts.uriResolver, p)\n let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root)\n }\n\n const id = normalizeId(refPath)\n const schOrRef = this.refs[id] || this.schemas[id]\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef)\n if (typeof sch?.schema !== \"object\") return\n return getJsonPointer.call(this, p, sch)\n }\n\n if (typeof schOrRef?.schema !== \"object\") return\n if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n if (id === normalizeId(ref)) {\n const {schema} = schOrRef\n const {schemaId} = this.opts\n const schId = schema[schemaId]\n if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n return new SchemaEnv({schema, schemaId, root, baseId})\n }\n return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n])\n\nfunction getJsonPointer(\n this: Ajv,\n parsedRef: URI.URIComponents,\n {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n if (parsedRef.fragment?.[0] !== \"/\") return\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\") return\n const partSchema = schema[unescapeFragment(part)]\n if (partSchema === undefined) return\n schema = partSchema\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n }\n }\n let env: SchemaEnv | undefined\n if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n env = resolveSchema.call(this, root, $ref)\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const {schemaId} = this.opts\n env = env || new SchemaEnv({schema, schemaId, root, baseId})\n if (env.schema !== env.root.schema) return env\n return undefined\n}\n","import {Name} from \"./codegen\"\n\nconst names = {\n // validation function arguments\n data: new Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new Name(\"instancePath\"),\n parentData: new Name(\"parentData\"),\n parentDataProperty: new Name(\"parentDataProperty\"),\n rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new Name(\"vErrors\"), // null or array of validation errors\n errors: new Name(\"errors\"), // counter of validation errors\n this: new Name(\"this\"),\n // \"globals\"\n self: new Name(\"self\"),\n scope: new Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new Name(\"json\"),\n jsonPos: new Name(\"jsonPos\"),\n jsonLen: new Name(\"jsonLen\"),\n jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n","import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n readonly missingRef: string\n readonly missingSchema: string\n\n constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n this.missingRef = resolveUrl(resolver, baseId, ref)\n this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n }\n}\n","import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponents} from \"uri-js\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n \"type\",\n \"format\",\n \"pattern\",\n \"maxLength\",\n \"minLength\",\n \"maxProperties\",\n \"minProperties\",\n \"maxItems\",\n \"minItems\",\n \"maximum\",\n \"minimum\",\n \"uniqueItems\",\n \"multipleOf\",\n \"required\",\n \"enum\",\n \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n if (typeof schema == \"boolean\") return true\n if (limit === true) return !hasRef(schema)\n if (!limit) return false\n return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n \"$ref\",\n \"$recursiveRef\",\n \"$recursiveAnchor\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n for (const key in schema) {\n if (REF_KEYWORDS.has(key)) return true\n const sch = schema[key]\n if (Array.isArray(sch) && sch.some(hasRef)) return true\n if (typeof sch == \"object\" && hasRef(sch)) return true\n }\n return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n let count = 0\n for (const key in schema) {\n if (key === \"$ref\") return Infinity\n count++\n if (SIMPLE_INLINED.has(key)) continue\n if (typeof schema[key] == \"object\") {\n eachItem(schema[key], (sch) => (count += countKeys(sch)))\n }\n if (count === Infinity) return Infinity\n }\n return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n if (normalize !== false) id = normalizeId(id)\n const p = resolver.parse(id)\n return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponents): string {\n const serialized = resolver.serialize(p)\n return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n id = normalizeId(id)\n return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n if (typeof schema == \"boolean\") return {}\n const {schemaId, uriResolver} = this.opts\n const schId = normalizeId(schema[schemaId] || baseId)\n const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n const pathPrefix = getFullPath(uriResolver, schId, false)\n const localRefs: LocalRefs = {}\n const schemaRefs: Set<string> = new Set()\n\n traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined) return\n const fullPath = pathPrefix + jsonPtr\n let baseId = baseIds[parentJsonPtr]\n if (typeof sch[schemaId] == \"string\") baseId = addRef.call(this, sch[schemaId])\n addAnchor.call(this, sch.$anchor)\n addAnchor.call(this, sch.$dynamicAnchor)\n baseIds[jsonPtr] = baseId\n\n function addRef(this: Ajv, ref: string): string {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve\n ref = normalizeId(baseId ? _resolve(baseId, ref) : ref)\n if (schemaRefs.has(ref)) throw ambiguos(ref)\n schemaRefs.add(ref)\n let schOrRef = this.refs[ref]\n if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref)\n } else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref)\n localRefs[ref] = sch\n } else {\n this.refs[ref] = fullPath\n }\n }\n return ref\n }\n\n function addAnchor(this: Ajv, anchor: unknown): void {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n addRef.call(this, `#${anchor}`)\n }\n }\n })\n\n return localRefs\n\n function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n }\n\n function ambiguos(ref: string): Error {\n return new Error(`reference \"${ref}\" resolves to more than one schema`)\n }\n}\n","import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = typeof _jsonTypes[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n rules: RuleGroup[]\n post: RuleGroup\n all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n types: ValidationTypes\n}\n\nexport interface RuleGroup {\n type?: JSONType\n rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n keyword: string\n definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n number: {type: \"number\", rules: []},\n string: {type: \"string\", rules: []},\n array: {type: \"array\", rules: []},\n object: {type: \"object\", rules: []},\n }\n return {\n types: {...groups, integer: true, boolean: true, null: true},\n rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n post: {rules: []},\n all: {},\n keywords: {},\n }\n}\n","import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n const hash: {[K in T]?: true} = {}\n for (const item of arr) hash[item] = true\n return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n if (typeof schema == \"boolean\") return schema\n if (Object.keys(schema).length === 0) return true\n checkUnknownRules(it, schema)\n return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n const {opts, self} = it\n if (!opts.strictSchema) return\n if (typeof schema === \"boolean\") return\n const rules = self.RULES.keywords\n for (const key in schema) {\n if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n }\n}\n\nexport function schemaHasRules(\n schema: AnySchema,\n rules: {[Key in string]?: boolean | Rule}\n): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (rules[key]) return true\n return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n return false\n}\n\nexport function schemaRefOrVal(\n {topSchemaRef, schemaPath}: SchemaObjCxt,\n schema: unknown,\n keyword: string,\n $data?: string | false\n): Code | number | boolean {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n if (typeof schema == \"string\") return _`${schema}`\n }\n return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n if (typeof str == \"number\") return `${str}`\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n if (Array.isArray(xs)) {\n for (const x of xs) f(x)\n } else {\n f(xs)\n }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n gen: CodeGen,\n from: Name | T,\n to: Name | Exclude<T, true> | undefined,\n toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n mergeToName: (gen: CodeGen, from: T, to: Name) => void\n mergeValues: (from: T, to: Exclude<T, true>) => T\n resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n mergeNames,\n mergeToName,\n mergeValues,\n resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n return (gen, from, to, toName) => {\n const res =\n to === undefined\n ? from\n : to instanceof Name\n ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to)\n return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n }\n}\n\ninterface MergeEvaluated {\n props: MergeEvaluatedFunc<EvaluatedProperties>\n items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n gen.if(\n _`${from} === true`,\n () => gen.assign(to, true),\n () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n )\n }),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true)\n } else {\n gen.assign(to, _`${to} || {}`)\n setEvaluated(gen, to, from)\n }\n }),\n mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () =>\n gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n if (ps === true) return gen.var(\"props\", true)\n const props = gen.var(\"props\", _`{}`)\n if (ps !== undefined) setEvaluated(gen, props, ps)\n return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n })\n}\n\nexport enum Type {\n Num,\n Str,\n}\n\nexport function getErrorPath(\n dataProp: Name | string | number,\n dataPropType?: Type,\n jsPropertySyntax?: boolean\n): Code | string {\n // let path\n if (dataProp instanceof Name) {\n const isNumber = dataPropType === Type.Num\n return jsPropertySyntax\n ? isNumber\n ? _`\"[\" + ${dataProp} + \"]\"`\n : _`\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? _`\"/\" + ${dataProp}`\n : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n it: SchemaCxt,\n msg: string,\n mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n if (!mode) return\n msg = `strict mode: ${msg}`\n if (mode === true) throw new Error(msg)\n it.self.logger.warn(msg)\n}\n","import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n {schema, self}: SchemaObjCxt,\n type: JSONType\n): boolean | undefined {\n const group = self.RULES.types[type]\n return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n return (\n schema[rule.keyword] !== undefined ||\n rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n )\n}\n","import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n const {gen, schema, validateName} = it\n if (schema === false) {\n falseSchemaError(it, false)\n } else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(N.data)\n } else {\n gen.assign(_`${validateName}.errors`, null)\n gen.return(true)\n }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n const {gen, schema} = it\n if (schema === false) {\n gen.var(valid, false) // TODO var\n falseSchemaError(it)\n } else {\n gen.var(valid, true) // TODO var\n }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n const {gen, data} = it\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt: KeywordErrorCxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n }\n reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n","import type {\n KeywordErrorDefinition,\n KeywordErrorCxt,\n ErrorObject,\n AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n Correct,\n Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n const types = getJSONTypes(schema.type)\n const hasNull = types.includes(\"null\")\n if (hasNull) {\n if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n } else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"')\n }\n if (schema.nullable === true) types.push(\"null\")\n }\n return types\n}\n\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n if (types.every(isJSONType)) return types\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n const {gen, data, opts} = it\n const coerceTo = coerceToTypes(types, opts.coerceTypes)\n const checkTypes =\n types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n gen.if(wrongType, () => {\n if (coerceTo.length) coerceData(it, types, coerceTo)\n else reportTypeError(it)\n })\n }\n return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n const {gen, data, opts} = it\n const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n const coerced = gen.let(\"coerced\", _`undefined`)\n if (opts.coerceTypes === \"array\") {\n gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n gen\n .assign(data, _`${data}[0]`)\n .assign(dataType, _`typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n )\n }\n gen.if(_`${coerced} !== undefined`)\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t)\n }\n }\n gen.else()\n reportTypeError(it)\n gen.endIf()\n\n gen.if(_`${coerced} !== undefined`, () => {\n gen.assign(data, coerced)\n assignParentData(it, coerced)\n })\n\n function coerceSpecificType(t: string): void {\n switch (t) {\n case \"string\":\n gen\n .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, _`\"\" + ${data}`)\n .elseIf(_`${data} === null`)\n .assign(coerced, _`\"\"`)\n return\n case \"number\":\n gen\n .elseIf(\n _`${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"integer\":\n gen\n .elseIf(\n _`${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"boolean\":\n gen\n .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf(_`${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true)\n return\n case \"null\":\n gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n gen.assign(coerced, null)\n return\n\n case \"array\":\n gen\n .elseIf(\n _`${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`\n )\n .assign(coerced, _`[${data}]`)\n }\n }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n // TODO use gen.property\n gen.if(_`${parentData} !== undefined`, () =>\n gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n )\n}\n\nexport function checkDataType(\n dataType: JSONType,\n data: Name,\n strictNums?: boolean | \"log\",\n correct = DataType.Correct\n): Code {\n const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n let cond: Code\n switch (dataType) {\n case \"null\":\n return _`${data} ${EQ} null`\n case \"array\":\n cond = _`Array.isArray(${data})`\n break\n case \"object\":\n cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n break\n case \"integer\":\n cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n break\n case \"number\":\n cond = numCond()\n break\n default:\n return _`typeof ${data} ${EQ} ${dataType}`\n }\n return correct === DataType.Correct ? cond : not(cond)\n\n function numCond(_cond: Code = nil): Code {\n return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n }\n}\n\nexport function checkDataTypes(\n dataTypes: JSONType[],\n data: Name,\n strictNums?: boolean | \"log\",\n correct?: DataType\n): Code {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct)\n }\n let cond: Code\n const types = toHash(dataTypes)\n if (types.array && types.object) {\n const notObj = _`typeof ${data} != \"object\"`\n cond = types.null ? notObj : _`!${data} || ${notObj}`\n delete types.null\n delete types.array\n delete types.object\n } else {\n cond = nil\n }\n if (types.number) delete types.integer\n for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n message: ({schema}) => `must be ${schema}`,\n params: ({schema, schemaValue}) =>\n typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n const cxt = getTypeErrorContext(it)\n reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n const {gen, data, schema} = it\n const schemaCode = schemaRefOrVal(it, schema, \"type\")\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n }\n}\n","import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n const {properties, items} = it.schema\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default)\n }\n } else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n const {gen, compositeRule, data, opts} = it\n if (defaultValue === undefined) return\n const childData = _`${data}${getProperty(prop)}`\n if (compositeRule) {\n checkStrictMode(it, `default is ignored for: ${childData}`)\n return\n }\n\n let condition = _`${childData} === undefined`\n if (opts.useDefaults === \"empty\") {\n condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n","import type {\n AddedKeywordDefinition,\n AnySchema,\n AnySchemaObject,\n KeywordErrorCxt,\n KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n schemaRefOrVal,\n schemaHasRulesButRef,\n checkUnknownRules,\n checkStrictMode,\n unescapeJsonPointer,\n mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n ErrorPaths,\n reportError,\n reportExtraError,\n resetErrorsCount,\n keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it)\n return\n }\n }\n validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n body: Block\n): void {\n if (opts.code.es5) {\n gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n destructureValCxtES5(gen, opts)\n gen.code(body)\n })\n } else {\n gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n gen.code(funcSourceUrl(schema, opts)).code(body)\n )\n }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n N.data\n }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n gen.if(\n N.valCxt,\n () => {\n gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n },\n () => {\n gen.var(N.instancePath, _`\"\"`)\n gen.var(N.parentData, _`undefined`)\n gen.var(N.parentDataProperty, _`undefined`)\n gen.var(N.rootData, N.data)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n }\n )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n const {schema, opts, gen} = it\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment) commentKeyword(it)\n checkNoDefault(it)\n gen.let(N.vErrors, null)\n gen.let(N.errors, 0)\n if (opts.unevaluated) resetEvaluated(it)\n typeAndKeywords(it)\n returnResults(it)\n })\n return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const {gen, validateName} = it\n it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n const schId = typeof schema == \"object\" && schema[opts.schemaId]\n return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid)\n return\n }\n }\n boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (self.RULES.all[key]) return true\n return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n const {schema, gen, opts} = it\n if (opts.$comment && schema.$comment) commentKeyword(it)\n updateContext(it)\n checkAsyncSchema(it)\n const errsCount = gen.const(\"_errs\", N.errors)\n typeAndKeywords(it, errsCount)\n // TODO var\n gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n checkUnknownRules(it)\n checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n const types = getSchemaTypes(it.schema)\n const checkedTypes = coerceAndCheckDataType(it, types)\n schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n const {schema, errSchemaPath, opts, self} = it\n if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n const {schema, opts} = it\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n checkStrictMode(it, \"default is ignored in the schema root\")\n }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n const schId = it.schema[it.opts.schemaId]\n if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n const msg = schema.$comment\n if (opts.$comment === true) {\n gen.code(_`${N.self}.logger.log(${msg})`)\n } else if (typeof opts.$comment == \"function\") {\n const schemaPath = str`${errSchemaPath}/$comment`\n const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n const {gen, schemaEnv, validateName, ValidationError, opts} = it\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if(\n _`${N.errors} === 0`,\n () => gen.return(N.data),\n () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n )\n } else {\n gen.assign(_`${validateName}.errors`, N.vErrors)\n if (opts.unevaluated) assignEvaluated(it)\n gen.return(_`${N.errors} === 0`)\n }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n it: SchemaObjCxt,\n types: JSONType[],\n typeErrors: boolean,\n errsCount?: Name\n): void {\n const {gen, schema, data, allErrors, opts, self} = it\n const {RULES} = self\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n return\n }\n if (!opts.jtd) checkStrictTypes(it, types)\n gen.block(() => {\n for (const group of RULES.rules) groupKeywords(group)\n groupKeywords(RULES.post)\n })\n\n function groupKeywords(group: RuleGroup): void {\n if (!shouldUseGroup(schema, group)) return\n if (group.type) {\n gen.if(checkDataType(group.type, data, opts.strictNumbers))\n iterateKeywords(it, group)\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else()\n reportTypeError(it)\n }\n gen.endIf()\n } else {\n iterateKeywords(it, group)\n }\n // TODO make it \"ok\" call?\n if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n const {\n gen,\n schema,\n opts: {useDefaults},\n } = it\n if (useDefaults) assignDefaults(it, group.type)\n gen.block(() => {\n for (const rule of group.rules) {\n if (shouldUseRule(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type)\n }\n }\n })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (it.schemaEnv.meta || !it.opts.strictTypes) return\n checkContextTypes(it, types)\n if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (!types.length) return\n if (!it.dataTypes.length) {\n it.dataTypes = types\n return\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n }\n })\n narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n const rules = it.self.RULES.all\n for (const keyword in rules) {\n const rule = rules[keyword]\n if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n const {type} = rule.definition\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n }\n }\n }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n const ts: JSONType[] = []\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t)) ts.push(t)\n else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n }\n it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n msg += ` at \"${schemaPath}\" (strictTypes)`\n checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean\n readonly keyword: string\n readonly data: Name // Name referencing the current level of the data instance\n readonly $data?: string | false\n schema: any // keyword value in the schema\n readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n readonly parentSchema: AnySchemaObject\n readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n // requires option trackErrors in keyword definition\n params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n readonly def: AddedKeywordDefinition\n\n constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n validateKeywordUsage(it, def, keyword)\n this.gen = it.gen\n this.allErrors = it.allErrors\n this.keyword = keyword\n this.data = it.data\n this.schema = it.schema[keyword]\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n this.schemaType = def.schemaType\n this.parentSchema = it.schema\n this.params = {}\n this.it = it\n this.def = def\n\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n } else {\n this.schemaCode = this.schemaValue\n if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n }\n }\n\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", N.errors)\n }\n }\n\n result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.failResult(not(condition), successAction, failAction)\n }\n\n failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.gen.if(condition)\n if (failAction) failAction()\n else this.error()\n if (successAction) {\n this.gen.else()\n successAction()\n if (this.allErrors) this.gen.endIf()\n } else {\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n }\n\n pass(condition: Code, failAction?: () => void): void {\n this.failResult(not(condition), undefined, failAction)\n }\n\n fail(condition?: Code): void {\n if (condition === undefined) {\n this.error()\n if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n return\n }\n this.gen.if(condition)\n this.error()\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n\n fail$data(condition: Code): void {\n if (!this.$data) return this.fail(condition)\n const {schemaCode} = this\n this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n }\n\n error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n if (errorParams) {\n this.setParams(errorParams)\n this._error(append, errorPaths)\n this.setParams({})\n return\n }\n this._error(append, errorPaths)\n }\n\n private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n }\n\n $dataError(): void {\n reportError(this, this.def.$dataError || keyword$DataError)\n }\n\n reset(): void {\n if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n resetErrorsCount(this.gen, this.errsCount)\n }\n\n ok(cond: Code | boolean): void {\n if (!this.allErrors) this.gen.if(cond)\n }\n\n setParams(obj: KeywordCxtParams, assign?: true): void {\n if (assign) Object.assign(this.params, obj)\n else this.params = obj\n }\n\n block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n this.gen.block(() => {\n this.check$data(valid, $dataValid)\n codeBlock()\n })\n }\n\n check$data(valid: Name = nil, $dataValid: Code = nil): void {\n if (!this.$data) return\n const {gen, schemaCode, schemaType, def} = this\n gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n if (valid !== nil) gen.assign(valid, true)\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data())\n this.$dataError()\n if (valid !== nil) gen.assign(valid, false)\n }\n gen.else()\n }\n\n invalid$data(): Code {\n const {gen, schemaCode, schemaType, def, it} = this\n return or(wrong$DataType(), invalid$DataSchema())\n\n function wrong$DataType(): Code {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n }\n return nil\n }\n\n function invalid$DataSchema(): Code {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n return _`!${validateSchemaRef}(${schemaCode})`\n }\n return nil\n }\n }\n\n subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n const subschema = getSubschema(this.it, appl)\n extendSubschemaData(subschema, this.it, appl)\n extendSubschemaMode(subschema, appl)\n const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n subschemaCode(nextContext, valid)\n return nextContext\n }\n\n mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n const {it, gen} = this\n if (!it.opts.unevaluated) return\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n }\n }\n\n mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n const {it, gen} = this\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n return true\n }\n }\n}\n\nfunction keywordCode(\n it: SchemaObjCxt,\n keyword: string,\n def: AddedKeywordDefinition,\n ruleType?: JSONType\n): void {\n const cxt = new KeywordCxt(it, def, keyword)\n if (\"code\" in def) {\n def.code(cxt, ruleType)\n } else if (cxt.$data && def.validate) {\n funcKeywordCode(cxt, def)\n } else if (\"macro\" in def) {\n macroKeywordCode(cxt, def)\n } else if (def.compile || def.validate) {\n funcKeywordCode(cxt, def)\n }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n $data: string,\n {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n let jsonPointer\n let data: Code\n if ($data === \"\") return N.rootData\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n jsonPointer = $data\n data = N.rootData\n } else {\n const matches = RELATIVE_JSON_POINTER.exec($data)\n if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n const up: number = +matches[1]\n jsonPointer = matches[2]\n if (jsonPointer === \"#\") {\n if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n return dataPathArr[dataLevel - up]\n }\n if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n data = dataNames[dataLevel - up]\n if (!jsonPointer) return data\n }\n\n let expr = data\n const segments = jsonPointer.split(\"/\")\n for (const segment of segments) {\n if (segment) {\n data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n expr = _`${expr} && ${data}`\n }\n }\n return expr\n\n function errorMsg(pointerType: string, up: number): string {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n }\n}\n","import type {KeywordCxt} from \".\"\nimport type {\n AnySchema,\n SchemaValidateFunction,\n AnyValidateFunction,\n AddedKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, it} = cxt\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n const schemaRef = useKeyword(gen, keyword, macroSchema)\n if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n schema: macroSchema,\n schemaPath: nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n },\n valid\n )\n cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, $data, it} = cxt\n checkAsyncKeyword(it, def)\n const validate =\n !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n const validateRef = useKeyword(gen, keyword, validate)\n const valid = gen.let(\"valid\")\n cxt.block$data(valid, validateKeyword)\n cxt.ok(def.valid ?? valid)\n\n function validateKeyword(): void {\n if (def.errors === false) {\n assignValid()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => cxt.error())\n } else {\n const ruleErrs = def.async ? validateAsync() : validateSync()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => addErrs(cxt, ruleErrs))\n }\n }\n\n function validateAsync(): Name {\n const ruleErrs = gen.let(\"ruleErrs\", null)\n gen.try(\n () => assignValid(_`await `),\n (e) =>\n gen.assign(valid, false).if(\n _`${e} instanceof ${it.ValidationError as Name}`,\n () => gen.assign(ruleErrs, _`${e}.errors`),\n () => gen.throw(e)\n )\n )\n return ruleErrs\n }\n\n function validateSync(): Code {\n const validateErrs = _`${validateRef}.errors`\n gen.assign(validateErrs, null)\n assignValid(nil)\n return validateErrs\n }\n\n function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n const passCxt = it.opts.passContext ? N.this : N.self\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n gen.assign(\n valid,\n _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n def.modifying\n )\n }\n\n function reportErrs(errors: () => void): void {\n gen.if(not(def.valid ?? valid), errors)\n }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n const {gen, data, it} = cxt\n gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n const {gen} = cxt\n gen.if(\n _`Array.isArray(${errs})`,\n () => {\n gen\n .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n .assign(N.errors, _`${N.vErrors}.length`)\n extendErrors(cxt)\n },\n () => cxt.error()\n )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n return gen.scopeValue(\n \"keyword\",\n typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n )\n}\n\nexport function validSchemaType(\n schema: unknown,\n schemaType: JSONType[],\n allowUndefined = false\n): boolean {\n // TODO add tests\n return (\n !schemaType.length ||\n schemaType.some((st) =>\n st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n )\n )\n}\n\nexport function validateKeywordUsage(\n {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n def: AddedKeywordDefinition,\n keyword: string\n): void {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\")\n }\n\n const deps = def.dependencies\n if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n }\n\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword])\n if (!valid) {\n const msg =\n `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors)\n if (opts.validateSchema === \"log\") self.logger.error(msg)\n else throw new Error(msg)\n }\n }\n}\n","import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n // TODO use Optional? align with SchemCxt property types\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef?: Code\n errorPath?: Code\n dataLevel?: number\n dataTypes?: JSONType[]\n data?: Name\n parentData?: Name\n parentDataProperty?: Code | number\n dataNames?: Name[]\n dataPathArr?: (Code | number)[]\n propertyName?: Name\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n compositeRule?: true\n createErrors?: boolean\n allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n keyword: string\n schemaProp: string | number\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef: Code\n data: Name | Code\n dataProp: Code | string | number\n dataTypes: JSONType[]\n definedProperties: Set<string>\n propertyName: Name\n dataPropType: Type\n jtdDiscriminator: string\n jtdMetadata: boolean\n compositeRule: true\n createErrors: boolean\n allErrors: boolean\n}>\n\nexport function getSubschema(\n it: SchemaObjCxt,\n {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n }\n\n if (keyword !== undefined) {\n const sch = it.schema[keyword]\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n }\n }\n\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n }\n }\n\n throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n subschema: SubschemaContext,\n it: SchemaObjCxt,\n {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n }\n\n const {gen} = it\n\n if (dataProp !== undefined) {\n const {errorPath, dataPathArr, opts} = it\n const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n dataContextProps(nextData)\n subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n subschema.parentDataProperty = _`${dataProp}`\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n }\n\n if (data !== undefined) {\n const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n dataContextProps(nextData)\n if (propertyName !== undefined) subschema.propertyName = propertyName\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n\n if (dataTypes) subschema.dataTypes = dataTypes\n\n function dataContextProps(_nextData: Name): void {\n subschema.data = _nextData\n subschema.dataLevel = it.dataLevel + 1\n subschema.dataTypes = []\n it.definedProperties = new Set<string>()\n subschema.parentData = it.data\n subschema.dataNames = [...it.dataNames, _nextData]\n }\n}\n\nexport function extendSubschemaMode(\n subschema: SubschemaContext,\n {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n if (createErrors !== undefined) subschema.createErrors = createErrors\n if (allErrors !== undefined) subschema.allErrors = allErrors\n subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n subschema.jtdMetadata = jtdMetadata // not inherited\n}\n","export {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n AnyValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n (ajv: Ajv, options?: Opts): Ajv\n [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n Schema,\n AnySchema,\n AnySchemaObject,\n SchemaObject,\n AsyncSchema,\n Vocabulary,\n KeywordDefinition,\n AddedKeywordDefinition,\n AnyValidateFunction,\n ValidateFunction,\n AsyncValidateFunction,\n ErrorObject,\n Format,\n AddedFormat,\n RegExpEngine,\n UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n // strict mode options (NEW)\n strict?: boolean | \"log\"\n strictSchema?: boolean | \"log\"\n strictNumbers?: boolean | \"log\"\n strictTypes?: boolean | \"log\"\n strictTuples?: boolean | \"log\"\n strictRequired?: boolean | \"log\"\n allowMatchingProperties?: boolean // disables a strict mode restriction\n allowUnionTypes?: boolean\n validateFormats?: boolean\n // validation and reporting options:\n $data?: boolean\n allErrors?: boolean\n verbose?: boolean\n discriminator?: boolean\n unicodeRegExp?: boolean\n timestamp?: \"string\" | \"date\" // JTD only\n parseDate?: boolean // JTD only\n allowDate?: boolean // JTD only\n $comment?:\n | true\n | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n formats?: {[Name in string]?: Format}\n keywords?: Vocabulary\n schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n logger?: Logger | false\n loadSchema?: (uri: string) => Promise<AnySchemaObject>\n // options to modify validated data:\n removeAdditional?: boolean | \"all\" | \"failing\"\n useDefaults?: boolean | \"empty\"\n coerceTypes?: boolean | \"array\"\n // advanced options:\n next?: boolean // NEW\n unevaluated?: boolean // NEW\n dynamicRef?: boolean // NEW\n schemaId?: \"id\" | \"$id\"\n jtd?: boolean // NEW\n meta?: SchemaObject | boolean\n defaultMeta?: string | AnySchemaObject\n validateSchema?: boolean | \"log\"\n addUsedSchema?: boolean\n inlineRefs?: boolean | number\n passContext?: boolean\n loopRequired?: number\n loopEnum?: number // NEW\n ownProperties?: boolean\n multipleOfPrecision?: number\n int32range?: boolean // JTD only\n messages?: boolean\n code?: CodeOptions // NEW\n uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n es5?: boolean\n esm?: boolean\n lines?: boolean\n optimize?: boolean | number\n formats?: Code // code to require (or construct) map of available formats - for standalone code\n source?: boolean\n process?: (code: string, schema?: SchemaEnv) => string\n regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n regExp: RegExpEngine\n optimize: number\n}\n\ninterface DeprecatedOptions {\n /** @deprecated */\n ignoreKeywordsWithRef?: boolean\n /** @deprecated */\n jsPropertySyntax?: boolean // added instead of jsonPointers\n /** @deprecated */\n unicode?: boolean\n}\n\ninterface RemovedOptions {\n format?: boolean\n errorDataPath?: \"object\" | \"property\"\n nullable?: boolean // \"nullable\" keyword is supported by default\n jsonPointers?: boolean\n extendRefs?: true | \"ignore\" | \"fail\"\n missingRefs?: true | \"ignore\" | \"fail\"\n processCode?: (code: string, schema?: SchemaEnv) => string\n sourceCode?: boolean\n strictDefaults?: boolean\n strictKeywords?: boolean\n uniqueItems?: boolean\n unknownFormats?: true | string[] | \"ignore\"\n cache?: any\n serialize?: (schema: AnySchema) => unknown\n ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n [K in\n | \"strictSchema\"\n | \"strictNumbers\"\n | \"strictTypes\"\n | \"strictTuples\"\n | \"strictRequired\"\n | \"inlineRefs\"\n | \"loopRequired\"\n | \"loopEnum\"\n | \"meta\"\n | \"messages\"\n | \"schemaId\"\n | \"addUsedSchema\"\n | \"validateSchema\"\n | \"validateFormats\"\n | \"int32range\"\n | \"unicodeRegExp\"\n | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n const s = o.strict\n const _optz = o.code?.optimize\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n const regExp = o.code?.regExp ?? defaultRegExp\n const uriResolver = o.uriResolver ?? DefaultUriResolver\n return {\n strictSchema: o.strictSchema ?? s ?? true,\n strictNumbers: o.strictNumbers ?? s ?? true,\n strictTypes: o.strictTypes ?? s ?? \"log\",\n strictTuples: o.strictTuples ?? s ?? \"log\",\n strictRequired: o.strictRequired ?? s ?? false,\n code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n meta: o.meta ?? true,\n messages: o.messages ?? true,\n inlineRefs: o.inlineRefs ?? true,\n schemaId: o.schemaId ?? \"$id\",\n addUsedSchema: o.addUsedSchema ?? true,\n validateSchema: o.validateSchema ?? true,\n validateFormats: o.validateFormats ?? true,\n unicodeRegExp: o.unicodeRegExp ?? true,\n int32range: o.int32range ?? true,\n uriResolver: uriResolver,\n }\n}\n\nexport interface Logger {\n log(...args: unknown[]): unknown\n warn(...args: unknown[]): unknown\n error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n opts: InstanceOptions\n errors?: ErrorObject[] | null // errors from the last validation\n logger: Logger\n // shared external scope values for compiled functions\n readonly scope: ValueScope\n readonly schemas: {[Key in string]?: SchemaEnv} = {}\n readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n readonly formats: {[Name in string]?: AddedFormat} = {}\n readonly RULES: ValidationRules\n readonly _compilations: Set<SchemaEnv> = new Set()\n private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n private readonly _metaOpts: InstanceOptions\n\n static ValidationError = ValidationError\n static MissingRefError = MissingRefError\n\n constructor(opts: Options = {}) {\n opts = this.opts = {...opts, ...requiredOptions(opts)}\n const {es5, lines} = this.opts.code\n\n this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n this.logger = getLogger(opts.logger)\n const formatOpt = opts.validateFormats\n opts.validateFormats = false\n\n this.RULES = getRules()\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n this._metaOpts = getMetaSchemaOptions.call(this)\n\n if (opts.formats) addInitialFormats.call(this)\n this._addVocabularies()\n this._addDefaultMetaSchema()\n if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n addInitialSchemas.call(this)\n opts.validateFormats = formatOpt\n }\n\n _addVocabularies(): void {\n this.addKeyword(\"$async\")\n }\n\n _addDefaultMetaSchema(): void {\n const {$data, meta, schemaId} = this.opts\n let _dataRefSchema: SchemaObject = $dataRefSchema\n if (schemaId === \"id\") {\n _dataRefSchema = {...$dataRefSchema}\n _dataRefSchema.id = _dataRefSchema.$id\n delete _dataRefSchema.$id\n }\n if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n const {meta, schemaId} = this.opts\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n }\n\n // Validate data using schema\n // AnySchema will be compiled and cached using schema itself as a key for Map\n validate(schema: Schema | string, data: unknown): boolean\n validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n validate<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n data: unknown\n ): data is JTDDataType<T>\n validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n validate<T>(\n schemaKeyRef: AnySchema | string, // key, ref or schema object\n data: unknown | T // to be validated\n ): boolean | Promise<T> {\n let v: AnyValidateFunction | undefined\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema<T>(schemaKeyRef)\n if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n } else {\n v = this.compile<T>(schemaKeyRef)\n }\n\n const valid = v(data)\n if (!(\"$async\" in v)) this.errors = v.errors\n return valid\n }\n\n // Create validation function for passed schema\n // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n compile<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n _meta?: boolean\n ): ValidateFunction<JTDDataType<T>>\n compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n const sch = this._addSchema(schema, _meta)\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n }\n\n // Creates validating function for passed schema with asynchronous loading of missing schemas.\n // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n // TODO allow passing schema URI\n // meta - optional true to compile meta-schema\n compileAsync<T = unknown>(\n schema: SchemaObject | JSONSchemaType<T>,\n _meta?: boolean\n ): Promise<ValidateFunction<T>>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>>\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>> {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\")\n }\n const {loadSchema} = this.opts\n return runCompileAsync.call(this, schema, meta)\n\n async function runCompileAsync(\n this: Ajv,\n _schema: AnySchemaObject,\n _meta?: boolean\n ): Promise<AnyValidateFunction> {\n await loadMetaSchema.call(this, _schema.$schema)\n const sch = this._addSchema(_schema, _meta)\n return sch.validate || _compileAsync.call(this, sch)\n }\n\n async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, {$ref}, true)\n }\n }\n\n async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n try {\n return this._compileSchemaEnv(sch)\n } catch (e) {\n if (!(e instanceof MissingRefError)) throw e\n checkLoaded.call(this, e)\n await loadMissingSchema.call(this, e.missingSchema)\n return _compileAsync.call(this, sch)\n }\n }\n\n function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n }\n }\n\n async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n const _schema = await _loadSchema.call(this, ref)\n if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n }\n\n async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n const p = this._loading[ref]\n if (p) return p\n try {\n return await (this._loading[ref] = loadSchema(ref))\n } finally {\n delete this._loading[ref]\n }\n }\n }\n\n // Adds schema to the instance\n addSchema(\n schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ): Ajv {\n if (Array.isArray(schema)) {\n for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n return this\n }\n let id: string | undefined\n if (typeof schema === \"object\") {\n const {schemaId} = this.opts\n id = schema[schemaId]\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`)\n }\n }\n key = normalizeId(key || id)\n this._checkUnique(key)\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n return this\n }\n\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(\n schema: AnySchemaObject,\n key?: string, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ): Ajv {\n this.addSchema(schema, key, true, _validateSchema)\n return this\n }\n\n // Validate schema against its meta-schema\n validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n if (typeof schema == \"boolean\") return true\n let $schema: string | AnySchemaObject | undefined\n $schema = schema.$schema\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\")\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\")\n this.errors = null\n return true\n }\n const valid = this.validate($schema, schema)\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText()\n if (this.opts.validateSchema === \"log\") this.logger.error(message)\n else throw new Error(message)\n }\n return valid\n }\n\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n let sch\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n if (sch === undefined) {\n const {schemaId} = this.opts\n const root = new SchemaEnv({schema: {}, schemaId})\n sch = resolveSchema.call(this, root, keyRef)\n if (!sch) return\n this.refs[keyRef] = sch\n }\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n }\n\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef)\n this._removeAllSchemas(this.refs, schemaKeyRef)\n return this\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas)\n this._removeAllSchemas(this.refs)\n this._cache.clear()\n return this\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef)\n if (typeof sch == \"object\") this._cache.delete(sch.schema)\n delete this.schemas[schemaKeyRef]\n delete this.refs[schemaKeyRef]\n return this\n }\n case \"object\": {\n const cacheKey = schemaKeyRef\n this._cache.delete(cacheKey)\n let id = schemaKeyRef[this.opts.schemaId]\n if (id) {\n id = normalizeId(id)\n delete this.schemas[id]\n delete this.refs[id]\n }\n return this\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\")\n }\n }\n\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions: Vocabulary): Ajv {\n for (const def of definitions) this.addKeyword(def)\n return this\n }\n\n addKeyword(\n kwdOrDef: string | KeywordDefinition,\n def?: KeywordDefinition // deprecated\n ): Ajv {\n let keyword: string | string[]\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n def.keyword = keyword\n }\n } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef\n keyword = def.keyword\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n }\n } else {\n throw new Error(\"invalid addKeywords parameters\")\n }\n\n checkKeyword.call(this, keyword, def)\n if (!def) {\n eachItem(keyword, (kwd) => addRule.call(this, kwd))\n return this\n }\n keywordMetaschema.call(this, def)\n const definition: AddedKeywordDefinition = {\n ...def,\n type: getJSONTypes(def.type),\n schemaType: getJSONTypes(def.schemaType),\n }\n eachItem(\n keyword,\n definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n )\n return this\n }\n\n getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n const rule = this.RULES.all[keyword]\n return typeof rule == \"object\" ? rule.definition : !!rule\n }\n\n // Remove keyword\n removeKeyword(keyword: string): Ajv {\n // TODO return type should be Ajv\n const {RULES} = this\n delete RULES.keywords[keyword]\n delete RULES.all[keyword]\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n if (i >= 0) group.rules.splice(i, 1)\n }\n return this\n }\n\n // Add format\n addFormat(name: string, format: Format): Ajv {\n if (typeof format == \"string\") format = new RegExp(format)\n this.formats[name] = format\n return this\n }\n\n errorsText(\n errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n ): string {\n if (!errors || errors.length === 0) return \"No errors\"\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg)\n }\n\n $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n const rules = this.RULES.all\n metaSchema = JSON.parse(JSON.stringify(metaSchema))\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n let keywords = metaSchema\n for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n for (const key in rules) {\n const rule = rules[key]\n if (typeof rule != \"object\") continue\n const {$data} = rule.definition\n const schema = keywords[key] as AnySchemaObject | undefined\n if ($data && schema) keywords[key] = schemaOrData(schema)\n }\n }\n\n return metaSchema\n }\n\n private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef]\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef]\n } else if (sch && !sch.meta) {\n this._cache.delete(sch.schema)\n delete schemas[keyRef]\n }\n }\n }\n }\n\n _addSchema(\n schema: AnySchema,\n meta?: boolean,\n baseId?: string,\n validateSchema = this.opts.validateSchema,\n addSchema = this.opts.addUsedSchema\n ): SchemaEnv {\n let id: string | undefined\n const {schemaId} = this.opts\n if (typeof schema == \"object\") {\n id = schema[schemaId]\n } else {\n if (this.opts.jtd) throw new Error(\"schema must be object\")\n else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n }\n let sch = this._cache.get(schema)\n if (sch !== undefined) return sch\n\n baseId = normalizeId(id || baseId)\n const localRefs = getSchemaRefs.call(this, schema, baseId)\n sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n this._cache.set(sch.schema, sch)\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId) this._checkUnique(baseId)\n this.refs[baseId] = sch\n }\n if (validateSchema) this.validateSchema(schema, true)\n return sch\n }\n\n private _checkUnique(id: string): void {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`)\n }\n }\n\n private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n if (sch.meta) this._compileMetaSchema(sch)\n else compileSchema.call(this, sch)\n\n /* istanbul ignore if */\n if (!sch.validate) throw new Error(\"ajv implementation error\")\n return sch.validate\n }\n\n private _compileMetaSchema(sch: SchemaEnv): void {\n const currentOpts = this.opts\n this.opts = this._metaOpts\n try {\n compileSchema.call(this, sch)\n } finally {\n this.opts = currentOpts\n }\n }\n}\n\nexport interface ErrorsTextOptions {\n separator?: string\n dataVar?: string\n}\n\nfunction checkOptions(\n this: Ajv,\n checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n options: Options & RemovedOptions,\n msg: string,\n log: \"warn\" | \"error\" = \"error\"\n): void {\n for (const key in checkOpts) {\n const opt = key as keyof typeof checkOpts\n if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n keyRef = normalizeId(keyRef) // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n const optsSchemas = this.opts.schemas\n if (!optsSchemas) return\n if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name]\n if (format) this.addFormat(name, format)\n }\n}\n\nfunction addInitialKeywords(\n this: Ajv,\n defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs)\n return\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\")\n for (const keyword in defs) {\n const def = defs[keyword] as KeywordDefinition\n if (!def.keyword) def.keyword = keyword\n this.addKeyword(def)\n }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n const metaOpts = {...this.opts}\n for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n if (logger === false) return noLogs\n if (logger === undefined) return console\n if (logger.log && logger.warn && logger.error) return logger as Logger\n throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n const {RULES} = this\n eachItem(keyword, (kwd) => {\n if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n })\n if (!def) return\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function')\n }\n}\n\nfunction addRule(\n this: Ajv,\n keyword: string,\n definition?: AddedKeywordDefinition,\n dataType?: JSONType\n): void {\n const post = definition?.post\n if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n const {RULES} = this\n let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n if (!ruleGroup) {\n ruleGroup = {type: dataType, rules: []}\n RULES.rules.push(ruleGroup)\n }\n RULES.keywords[keyword] = true\n if (!definition) return\n\n const rule: Rule = {\n keyword,\n definition: {\n ...definition,\n type: getJSONTypes(definition.type),\n schemaType: getJSONTypes(definition.schemaType),\n },\n }\n if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n else ruleGroup.rules.push(rule)\n RULES.all[keyword] = rule\n definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule)\n } else {\n ruleGroup.rules.push(rule)\n this.logger.warn(`rule ${before} is not defined`)\n }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n let {metaSchema} = def\n if (metaSchema === undefined) return\n if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n return {anyOf: [schema, $dataRef]}\n}\n","// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n","// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n const len = str.length\n let length = 0\n let pos = 0\n let value: number\n while (pos < len) {\n length++\n value = str.charCodeAt(pos++)\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos)\n if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n }\n }\n return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n","import * as uri from \"uri-js\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n","import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n readonly errors: Partial<ErrorObject>[]\n readonly ajv: true\n readonly validation: true\n\n constructor(errors: Partial<ErrorObject>[]) {\n super(\"validation failed\")\n this.errors = errors\n this.ajv = this.validation = true\n }\n}\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"additionalItems\" as const,\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {parentSchema, it} = cxt\n const {items} = parentSchema\n if (!Array.isArray(items)) {\n checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n return\n }\n validateAdditionalItems(cxt, items)\n },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n const {gen, schema, data, keyword, it} = cxt\n it.items = true\n const len = gen.const(\"len\", _`${data}.length`)\n if (schema === false) {\n cxt.setParams({len: items.length})\n cxt.pass(_`${len} <= ${items.length}`)\n } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n gen.if(not(valid), () => validateItems(valid))\n cxt.ok(valid)\n }\n\n function validateItems(valid: Name): void {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n if (!it.allErrors) gen.if(not(valid), () => gen.break())\n })\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n AddedKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n \"additionalProperties\",\n {additionalProperty: string},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must NOT have additional properties\",\n params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const {gen, schema, parentSchema, data, errsCount, it} = cxt\n /* istanbul ignore if */\n if (!errsCount) throw new Error(\"ajv implementation error\")\n const {allErrors, opts} = it\n it.props = true\n if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n const props = allSchemaProperties(parentSchema.properties)\n const patProps = allSchemaProperties(parentSchema.patternProperties)\n checkAdditionalProperties()\n cxt.ok(_`${errsCount} === ${N.errors}`)\n\n function checkAdditionalProperties(): void {\n gen.forIn(\"key\", data, (key: Name) => {\n if (!props.length && !patProps.length) additionalPropertyCode(key)\n else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n })\n }\n\n function isAdditional(key: Name): Code {\n let definedProp: Code\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n definedProp = isOwnProperty(gen, propsSchema as Code, key)\n } else if (props.length) {\n definedProp = or(...props.map((p) => _`${key} === ${p}`))\n } else {\n definedProp = nil\n }\n if (patProps.length) {\n definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n }\n return not(definedProp)\n }\n\n function deleteAdditional(key: Name): void {\n gen.code(_`delete ${data}[${key}]`)\n }\n\n function additionalPropertyCode(key: Name): void {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key)\n return\n }\n\n if (schema === false) {\n cxt.setParams({additionalProperty: key})\n cxt.error()\n if (!allErrors) gen.break()\n return\n }\n\n if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.name(\"valid\")\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false)\n gen.if(not(valid), () => {\n cxt.reset()\n deleteAdditional(key)\n })\n } else {\n applyAdditionalSchema(key, valid)\n if (!allErrors) gen.if(not(valid), () => gen.break())\n }\n }\n }\n\n function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n const subschema: SubschemaArgs = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: Type.Str,\n }\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n })\n }\n cxt.subschema(subschema, valid)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const valid = gen.name(\"valid\")\n schema.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n cxt.ok(valid)\n cxt.mergeEvaluated(schCxt)\n })\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: validateUnion,\n error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n \"contains\",\n {minContains: number; maxContains?: number},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {min, max}}) =>\n max === undefined\n ? str`must contain at least ${min} valid item(s)`\n : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({params: {min, max}}) =>\n max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n let min: number\n let max: number | undefined\n const {minContains, maxContains} = parentSchema\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains\n max = maxContains\n } else {\n min = 1\n }\n const len = gen.const(\"len\", _`${data}.length`)\n cxt.setParams({min, max})\n if (max === undefined && min === 0) {\n checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n return\n }\n if (max !== undefined && min > max) {\n checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n cxt.fail()\n return\n }\n if (alwaysValidSchema(it, schema)) {\n let cond = _`${len} >= ${min}`\n if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n cxt.pass(cond)\n return\n }\n\n it.items = true\n const valid = gen.name(\"valid\")\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()))\n } else if (min === 0) {\n gen.let(valid, true)\n if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n } else {\n gen.let(valid, false)\n validateItemsWithCount()\n }\n cxt.result(valid, () => cxt.reset())\n\n function validateItemsWithCount(): void {\n const schValid = gen.name(\"_valid\")\n const count = gen.let(\"count\", 0)\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n }\n\n function validateItems(_valid: Name, block: () => void): void {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword: \"contains\",\n dataProp: i,\n dataPropType: Type.Num,\n compositeRule: true,\n },\n _valid\n )\n block()\n })\n }\n\n function checkLimits(count: Name): void {\n gen.code(_`${count}++`)\n if (max === undefined) {\n gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n } else {\n gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n if (min === 1) gen.assign(valid, true)\n else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n }\n }\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n SchemaMap,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n property: string\n missingProperty: string\n depsCount: number\n deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n \"dependencies\",\n DependenciesErrorParams,\n {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n message: ({params: {property, depsCount, deps}}) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n return str`must have ${property_ies} ${deps} when property ${property} is present`\n },\n params: ({params: {property, depsCount, deps, missingProperty}}) =>\n _`{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const [propDeps, schDeps] = splitDependencies(cxt)\n validatePropertyDeps(cxt, propDeps)\n validateSchemaDeps(cxt, schDeps)\n },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n const propertyDeps: PropertyDependencies = {}\n const schemaDeps: SchemaDependencies = {}\n for (const key in schema) {\n if (key === \"__proto__\") continue\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n deps[key] = schema[key]\n }\n return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n cxt: KeywordCxt,\n propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n const {gen, data, it} = cxt\n if (Object.keys(propertyDeps).length === 0) return\n const missing = gen.let(\"missing\")\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop] as string[]\n if (deps.length === 0) continue\n const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n })\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n checkReportMissingProp(cxt, depProp)\n }\n })\n } else {\n gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n for (const prop in schemaDeps) {\n if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n gen.if(\n propertyInData(gen, data, prop, it.opts.ownProperties),\n () => {\n const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n cxt.mergeValidEvaluated(schCxt, valid)\n },\n () => gen.var(valid, true) // TODO var\n )\n cxt.ok(valid)\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, parentSchema, it} = cxt\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n }\n const hasThen = hasSchema(it, \"then\")\n const hasElse = hasSchema(it, \"else\")\n if (!hasThen && !hasElse) return\n\n const valid = gen.let(\"valid\", true)\n const schValid = gen.name(\"_valid\")\n validateIf()\n cxt.reset()\n\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\")\n cxt.setParams({ifClause})\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n } else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"))\n } else {\n gen.if(not(schValid), validateClause(\"else\"))\n }\n\n cxt.pass(valid, () => cxt.error(true))\n\n function validateIf(): void {\n const schCxt = cxt.subschema(\n {\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n schValid\n )\n cxt.mergeEvaluated(schCxt)\n }\n\n function validateClause(keyword: string, ifClause?: Name): () => void {\n return () => {\n const schCxt = cxt.subschema({keyword}, schValid)\n gen.assign(valid, schValid)\n cxt.mergeValidEvaluated(schCxt, valid)\n if (ifClause) gen.assign(ifClause, _`${keyword}`)\n else cxt.setParams({ifClause: keyword})\n }\n }\n },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n const schema = it.schema[keyword]\n return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n","import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n const applicator = [\n // any\n notKeyword,\n anyOf,\n oneOf,\n allOf,\n ifKeyword,\n thenElse,\n // object\n propertyNames,\n additionalProperties,\n dependencies,\n properties,\n patternProperties,\n ]\n // array\n if (draft2020) applicator.push(prefixItems, items2020)\n else applicator.push(additionalItems, items)\n applicator.push(contains)\n return applicator\n}\n\nexport type ApplicatorKeywordError =\n | ErrorNoParams<\"false schema\">\n | AdditionalItemsError\n | ItemsError\n | ContainsError\n | AdditionalPropertiesError\n | DependenciesError\n | IfKeywordError\n | AnyOfError\n | OneOfError\n | NotKeywordError\n | PropertyNamesError\n","import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt: KeywordCxt) {\n const {schema, it} = cxt\n if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n cxt.ok(validateArray(cxt))\n },\n}\n\nexport function validateTuple(\n cxt: KeywordCxt,\n extraItems: string,\n schArr: AnySchema[] = cxt.schema\n): void {\n const {gen, parentSchema, data, keyword, it} = cxt\n checkStrictTuple(parentSchema)\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n }\n const valid = gen.name(\"valid\")\n const len = gen.const(\"len\", _`${data}.length`)\n schArr.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n gen.if(_`${len} > ${i}`, () =>\n cxt.subschema(\n {\n keyword,\n schemaProp: i,\n dataProp: i,\n },\n valid\n )\n )\n cxt.ok(valid)\n })\n\n function checkStrictTuple(sch: AnySchemaObject): void {\n const {opts, errSchemaPath} = it\n const l = schArr.length\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n checkStrictMode(it, msg, opts.strictTuples)\n }\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {schema, parentSchema, it} = cxt\n const {prefixItems} = parentSchema\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n else cxt.ok(validateArray(cxt))\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n if (alwaysValidSchema(it, schema)) {\n cxt.fail()\n return\n }\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n valid\n )\n\n cxt.failResult(\n valid,\n () => cxt.reset(),\n () => cxt.error()\n )\n },\n error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n \"oneOf\",\n {passingSchemas: [number, number] | null},\n AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must match exactly one schema in oneOf\",\n params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n if (it.opts.discriminator && parentSchema.discriminator) return\n const schArr: AnySchema[] = schema\n const valid = gen.let(\"valid\", false)\n const passing = gen.let(\"passing\", null)\n const schValid = gen.name(\"_valid\")\n cxt.setParams({passing})\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n gen.block(validateOneOf)\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n\n function validateOneOf(): void {\n schArr.forEach((sch: AnySchema, i: number) => {\n let schCxt: SchemaCxt | undefined\n if (alwaysValidSchema(it, sch)) {\n gen.var(schValid, true)\n } else {\n schCxt = cxt.subschema(\n {\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n }\n\n if (i > 0) {\n gen\n .if(_`${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, _`[${passing}, ${i}]`)\n .else()\n }\n\n gen.if(schValid, () => {\n gen.assign(valid, true)\n gen.assign(passing, i)\n if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, data, parentSchema, it} = cxt\n const {opts} = it\n const patterns = allSchemaProperties(schema)\n const alwaysValidPatterns = patterns.filter((p) =>\n alwaysValidSchema(it, schema[p] as AnySchema)\n )\n\n if (\n patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))\n ) {\n return\n }\n\n const checkProperties =\n opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n const valid = gen.name(\"valid\")\n if (it.props !== true && !(it.props instanceof Name)) {\n it.props = evaluatedPropsToName(gen, it.props)\n }\n const {props} = it\n validatePatternProperties()\n\n function validatePatternProperties(): void {\n for (const pat of patterns) {\n if (checkProperties) checkMatchingProperties(pat)\n if (it.allErrors) {\n validateProperties(pat)\n } else {\n gen.var(valid, true) // TODO var\n validateProperties(pat)\n gen.if(valid)\n }\n }\n }\n\n function checkMatchingProperties(pat: string): void {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n checkStrictMode(\n it,\n `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n )\n }\n }\n }\n\n function validateProperties(pat: string): void {\n gen.forIn(\"key\", data, (key) => {\n gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat)\n if (!alwaysValid) {\n cxt.subschema(\n {\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: Type.Str,\n },\n valid\n )\n }\n\n if (it.opts.unevaluated && props !== true) {\n gen.assign(_`${props}[${key}]`, true)\n } else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if(not(valid), () => gen.break())\n }\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n }\n const allProps = allSchemaProperties(schema)\n for (const prop of allProps) {\n it.definedProperties.add(prop)\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n }\n const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n if (properties.length === 0) return\n const valid = gen.name(\"valid\")\n\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop)\n } else {\n gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n applyPropertySchema(prop)\n if (!it.allErrors) gen.else().var(valid, true)\n gen.endIf()\n }\n cxt.it.definedProperties.add(prop)\n cxt.ok(valid)\n }\n\n function hasDefault(prop: string): boolean | undefined {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n }\n\n function applyPropertySchema(prop: string): void {\n cxt.subschema(\n {\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n },\n valid\n )\n }\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: \"property name must be valid\",\n params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, data, it} = cxt\n if (alwaysValidSchema(it, schema)) return\n const valid = gen.name(\"valid\")\n\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({propertyName: key})\n cxt.subschema(\n {\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n },\n valid\n )\n gen.if(not(valid), () => {\n cxt.error(true)\n if (!it.allErrors) gen.break()\n })\n })\n\n cxt.ok(valid)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({keyword, parentSchema, it}: KeywordCxt) {\n if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n },\n}\n\nexport default def\n","import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n const {gen, data, it} = cxt\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({missingProperty: _`${prop}`}, true)\n cxt.error()\n })\n}\n\nexport function checkMissingProp(\n {gen, data, it: {opts}}: KeywordCxt,\n properties: string[],\n missing: Name\n): Code {\n return or(\n ...properties.map((prop) =>\n and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n )\n )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n cxt.setParams({missingProperty: missing}, true)\n cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: _`Object.prototype.hasOwnProperty`,\n })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} !== undefined`\n return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} === undefined`\n return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n return allSchemaProperties(schemaMap).filter(\n (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n )\n}\n\nexport function callValidateCode(\n {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n func: Code,\n context: Code,\n passSchema?: boolean\n): Code {\n const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n const valCxt: [Name, Code | number][] = [\n [N.instancePath, strConcat(N.instancePath, errorPath)],\n [N.parentData, it.parentData],\n [N.parentDataProperty, it.parentDataProperty],\n [N.rootData, N.rootData],\n ]\n if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n const u = opts.unicodeRegExp ? \"u\" : \"\"\n const {regExp} = opts.code\n const rx = regExp(pattern, u)\n\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true)\n validateItems(() => gen.assign(validArr, false))\n return validArr\n }\n gen.var(valid, true)\n validateItems(() => gen.break())\n return valid\n\n function validateItems(notValid: () => void): void {\n const len = gen.const(\"len\", _`${data}.length`)\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword,\n dataProp: i,\n dataPropType: Type.Num,\n },\n valid\n )\n gen.if(not(valid), notValid)\n })\n }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n const {gen, schema, keyword, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n if (alwaysValid && !it.opts.unevaluated) return\n\n const valid = gen.let(\"valid\", false)\n const schValid = gen.name(\"_valid\")\n\n gen.block(() =>\n schema.forEach((_sch: AnySchema, i: number) => {\n const schCxt = cxt.subschema(\n {\n keyword,\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n gen.assign(valid, _`${valid} || ${schValid}`)\n const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged) gen.if(not(valid))\n })\n )\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n}\n","import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n },\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n {keyword: \"$comment\"},\n \"definitions\",\n idKeyword,\n refKeyword,\n]\n\nexport default core\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt: KeywordCxt): void {\n const {gen, schema: $ref, it} = cxt\n const {baseId, schemaEnv: env, validateName, opts, self} = it\n const {root} = env\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n return inlineRefSchema(schOrEnv)\n\n function callRootRef(): void {\n if (env === root) return callRef(cxt, validateName, env, env.$async)\n const rootName = gen.scopeValue(\"root\", {ref: root})\n return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n }\n\n function callValidate(sch: SchemaEnv): void {\n const v = getValidate(cxt, sch)\n callRef(cxt, v, sch, sch.$async)\n }\n\n function inlineRefSchema(sch: AnySchema): void {\n const schName = gen.scopeValue(\n \"schema\",\n opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n )\n const valid = gen.name(\"valid\")\n const schCxt = cxt.subschema(\n {\n schema: sch,\n dataTypes: [],\n schemaPath: nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n },\n valid\n )\n cxt.mergeEvaluated(schCxt)\n cxt.ok(valid)\n }\n },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n const {gen} = cxt\n return sch.validate\n ? gen.scopeValue(\"validate\", {ref: sch.validate})\n : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n const {gen, it} = cxt\n const {allErrors, schemaEnv: env, opts} = it\n const passCxt = opts.passContext ? N.this : nil\n if ($async) callAsyncRef()\n else callSyncRef()\n\n function callAsyncRef(): void {\n if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n const valid = gen.let(\"valid\")\n gen.try(\n () => {\n gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n if (!allErrors) gen.assign(valid, true)\n },\n (e) => {\n gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n addErrorsFrom(e)\n if (!allErrors) gen.assign(valid, false)\n }\n )\n cxt.ok(valid)\n }\n\n function callSyncRef(): void {\n cxt.result(\n callValidateCode(cxt, v, passCxt),\n () => addEvaluatedFrom(v),\n () => addErrorsFrom(v)\n )\n }\n\n function addErrorsFrom(source: Code): void {\n const errs = _`${source}.errors`\n gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n gen.assign(N.errors, _`${N.vErrors}.length`)\n }\n\n function addEvaluatedFrom(source: Code): void {\n if (!it.opts.unevaluated) return\n const schEvaluated = sch?.validate?.evaluated\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n }\n } else {\n const props = gen.var(\"props\", _`${source}.evaluated.props`)\n it.props = mergeEvaluated.props(gen, props, it.props, Name)\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n }\n } else {\n const items = gen.var(\"items\", _`${source}.evaluated.items`)\n it.items = mergeEvaluated.items(gen, items, it.items, Name)\n }\n }\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {discrError, tagName}}) =>\n discrError === DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({params: {discrError, tag, tagName}}) =>\n _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schema, parentSchema, it} = cxt\n const {oneOf} = parentSchema\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\")\n }\n const tagName = schema.propertyName\n if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n const valid = gen.let(\"valid\", false)\n const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n gen.if(\n _`typeof ${tag} == \"string\"`,\n () => validateMapping(),\n () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n )\n cxt.ok(valid)\n\n function validateMapping(): void {\n const mapping = getMapping()\n gen.if(false)\n for (const tagValue in mapping) {\n gen.elseIf(_`${tag} === ${tagValue}`)\n gen.assign(valid, applyTagSchema(mapping[tagValue]))\n }\n gen.else()\n cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n gen.endIf()\n }\n\n function applyTagSchema(schemaProp?: number): Name {\n const _valid = gen.name(\"valid\")\n const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n cxt.mergeEvaluated(schCxt, Name)\n return _valid\n }\n\n function getMapping(): {[T in string]?: number} {\n const oneOfMapping: {[T in string]?: number} = {}\n const topRequired = hasRequired(parentSchema)\n let tagRequired = true\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i]\n if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, sch?.$ref)\n if (sch instanceof SchemaEnv) sch = sch.schema\n }\n const propSch = sch?.properties?.[tagName]\n if (typeof propSch != \"object\") {\n throw new Error(\n `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n )\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch))\n addMappings(propSch, i)\n }\n if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n return oneOfMapping\n\n function hasRequired({required}: AnySchemaObject): boolean {\n return Array.isArray(required) && required.includes(tagName)\n }\n\n function addMappings(sch: AnySchemaObject, i: number): void {\n if (sch.const) {\n addMapping(sch.const, i)\n } else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i)\n }\n } else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n }\n }\n\n function addMapping(tagValue: unknown, i: number): void {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n }\n oneOfMapping[tagValue] = i\n }\n }\n },\n}\n\nexport default def\n","import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n Tag = \"tag\",\n Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n \"discriminator\",\n {error: E; tag: string; tagValue: unknown},\n string\n>\n","import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n coreVocabulary,\n validationVocabulary,\n getApplicatorVocabulary(),\n formatVocabulary,\n metadataVocabulary,\n contentVocabulary,\n]\n\nexport default draft7Vocabularies\n","import type {\n AddedFormat,\n FormatValidator,\n AsyncFormatValidator,\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n | FormatValidator<string>\n | FormatValidator<number>\n | AsyncFormatValidator<string>\n | AsyncFormatValidator<number>\n | RegExp\n | string\n | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt, ruleType?: string) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const {opts, errSchemaPath, schemaEnv, self} = it\n if (!opts.validateFormats) return\n\n if ($data) validate$DataFormat()\n else validateFormat()\n\n function validate$DataFormat(): void {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n })\n const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n const fType = gen.let(\"fType\")\n const format = gen.let(\"format\")\n // TODO simplify\n gen.if(\n _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n )\n cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n function unknownFmt(): Code {\n if (opts.strictSchema === false) return nil\n return _`${schemaCode} && !${format}`\n }\n\n function invalidFmt(): Code {\n const callFormat = schemaEnv.$async\n ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : _`${format}(${data})`\n const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n }\n }\n\n function validateFormat(): void {\n const formatDef: AddedFormat | undefined = self.formats[schema]\n if (!formatDef) {\n unknownFormat()\n return\n }\n if (formatDef === true) return\n const [fmtType, format, fmtRef] = getFormat(formatDef)\n if (fmtType === ruleType) cxt.pass(validCondition())\n\n function unknownFormat(): void {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg())\n return\n }\n throw new Error(unknownMsg())\n\n function unknownMsg(): string {\n return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n }\n }\n\n function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n const code =\n fmtDef instanceof RegExp\n ? regexpCode(fmtDef)\n : opts.code.formats\n ? _`${opts.code.formats}${getProperty(schema)}`\n : undefined\n const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n }\n\n return [\"string\", fmtDef, fmt]\n }\n\n function validCondition(): Code {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n return _`await ${fmtRef}(${data})`\n }\n return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n }\n }\n },\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n","import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n]\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to constant\",\n params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schemaCode, schema} = cxt\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n } else {\n cxt.fail(_`${schema} !== ${data}`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to one of the allowed values\",\n params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n const useLoop = schema.length >= it.opts.loopEnum\n let eql: Name | undefined\n const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n let valid: Code\n if (useLoop || $data) {\n valid = gen.let(\"valid\")\n cxt.block$data(valid, loopEnum)\n } else {\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const vSchema = gen.const(\"vSchema\", schemaCode)\n valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n }\n cxt.pass(valid)\n\n function loopEnum(): void {\n gen.assign(valid, false)\n gen.forOf(\"v\", schemaCode as Code, (v) =>\n gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n )\n }\n\n function equalCode(vSchema: Name, i: number): Code {\n const sch = schema[i]\n return typeof sch === \"object\" && sch !== null\n ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n : _`${data} === ${sch}`\n }\n },\n}\n\nexport default def\n","import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n // number\n limitNumber,\n multipleOf,\n // string\n limitLength,\n pattern,\n // object\n limitProperties,\n required,\n // array\n limitItems,\n uniqueItems,\n // any\n {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n {keyword: \"nullable\", schemaType: \"boolean\"},\n constKeyword,\n enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n {limit: number},\n number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n | LimitError\n | LimitNumberError\n | MultipleOfError\n | PatternError\n | RequiredError\n | UniqueItemsError\n | ConstError\n | EnumError\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} items`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} characters`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode, it} = cxt\n const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n const len =\n it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n Kwd,\n {limit: number; comparison: Comparison},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n params: ({keyword, schemaCode}) =>\n _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} properties`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n \"multipleOf\",\n {multipleOf: number},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schemaCode, it} = cxt\n // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision\n const res = gen.let(\"res\")\n const invalid = prec\n ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : _`${res} !== parseInt(${res})`\n cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {data, $data, schema, schemaCode, it} = cxt\n // TODO regexp should be wrapped in try/catchs\n const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n const regExp = $data ? _`(new RegExp(${schemaCode}, ${u}))` : usePattern(cxt, schema)\n cxt.fail$data(_`!${regExp}.test(${data})`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n checkReportMissingProp,\n checkMissingProp,\n reportMissingProp,\n propertyInData,\n noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n \"required\",\n {missingProperty: string},\n string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, schemaCode, data, $data, it} = cxt\n const {opts} = it\n if (!$data && schema.length === 0) return\n const useLoop = schema.length >= opts.loopRequired\n if (it.allErrors) allErrorsMode()\n else exitOnErrorMode()\n\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties\n const {definedProperties} = cxt.it\n for (const requiredKey of schema) {\n if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n checkStrictMode(it, msg, it.opts.strictRequired)\n }\n }\n }\n\n function allErrorsMode(): void {\n if (useLoop || $data) {\n cxt.block$data(nil, loopAllRequired)\n } else {\n for (const prop of schema) {\n checkReportMissingProp(cxt, prop)\n }\n }\n }\n\n function exitOnErrorMode(): void {\n const missing = gen.let(\"missing\")\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true)\n cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n cxt.ok(valid)\n } else {\n gen.if(checkMissingProp(cxt, schema, missing))\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n\n function loopAllRequired(): void {\n gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n cxt.setParams({missingProperty: prop})\n gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n })\n }\n\n function loopUntilMissing(missing: Name, valid: Name): void {\n cxt.setParams({missingProperty: missing})\n gen.forOf(\n missing,\n schemaCode as Code,\n () => {\n gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n gen.if(not(valid), () => {\n cxt.error()\n gen.break()\n })\n },\n nil\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n \"uniqueItems\",\n {i: number; j: number},\n boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {i, j}}) =>\n str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n if (!$data && !schema) return\n const valid = gen.let(\"valid\")\n const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n cxt.ok(valid)\n\n function validateUniqueItems(): void {\n const i = gen.let(\"i\", _`${data}.length`)\n const j = gen.let(\"j\")\n cxt.setParams({i, j})\n gen.assign(valid, true)\n gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n }\n\n function canOptimize(): boolean {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n }\n\n function loopN(i: Name, j: Name): void {\n const item = gen.name(\"item\")\n const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n const indices = gen.const(\"indices\", _`{}`)\n gen.for(_`;${i}--;`, () => {\n gen.let(item, _`${data}[${i}]`)\n gen.if(wrongType, _`continue`)\n if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n gen\n .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, _`${indices}[${item}]`)\n cxt.error()\n gen.assign(valid, false).break()\n })\n .code(_`${indices}[${item}] = ${i}`)\n })\n }\n\n function loopN2(i: Name, j: Name): void {\n const eql = useFunc(gen, equal)\n const outer = gen.name(\"outer\")\n gen.label(outer).for(_`;${i}--;`, () =>\n gen.for(_`${j} = ${i}; ${j}--;`, () =>\n gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error()\n gen.assign(valid, false).break(outer)\n })\n )\n )\n }\n },\n}\n\nexport default def\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.typeDetect = factory());\n}(this, (function () { 'use strict';\n\n/* !\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\nvar promiseExists = typeof Promise === 'function';\n\n/* eslint-disable no-undef */\nvar globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist\n\nvar symbolExists = typeof Symbol !== 'undefined';\nvar mapExists = typeof Map !== 'undefined';\nvar setExists = typeof Set !== 'undefined';\nvar weakMapExists = typeof WeakMap !== 'undefined';\nvar weakSetExists = typeof WeakSet !== 'undefined';\nvar dataViewExists = typeof DataView !== 'undefined';\nvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\nvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\nvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\nvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\nvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\nvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\nvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\nvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\nvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\nvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\nvar toStringLeftSliceLength = 8;\nvar toStringRightSliceLength = -1;\n/**\n * ### typeOf (obj)\n *\n * Uses `Object.prototype.toString` to determine the type of an object,\n * normalising behaviour across engine versions & well optimised.\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nfunction typeDetect(obj) {\n /* ! Speed optimisation\n * Pre:\n * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)\n * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)\n * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)\n * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)\n * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)\n * Post:\n * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)\n * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)\n * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)\n * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)\n * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)\n */\n var typeofObj = typeof obj;\n if (typeofObj !== 'object') {\n return typeofObj;\n }\n\n /* ! Speed optimisation\n * Pre:\n * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)\n * Post:\n * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)\n */\n if (obj === null) {\n return 'null';\n }\n\n /* ! Spec Conformance\n * Test: `Object.prototype.toString.call(window)``\n * - Node === \"[object global]\"\n * - Chrome === \"[object global]\"\n * - Firefox === \"[object Window]\"\n * - PhantomJS === \"[object Window]\"\n * - Safari === \"[object Window]\"\n * - IE 11 === \"[object Window]\"\n * - IE Edge === \"[object Window]\"\n * Test: `Object.prototype.toString.call(this)``\n * - Chrome Worker === \"[object global]\"\n * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n */\n if (obj === globalObject) {\n return 'global';\n }\n\n /* ! Speed optimisation\n * Pre:\n * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)\n * Post:\n * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)\n */\n if (\n Array.isArray(obj) &&\n (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n ) {\n return 'Array';\n }\n\n // Not caching existence of `window` and related properties due to potential\n // for `window` to be unset before tests in quasi-browser environments.\n if (typeof window === 'object' && window !== null) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n * WhatWG HTML$7.7.3 - The `Location` interface\n * Test: `Object.prototype.toString.call(window.location)``\n * - IE <=11 === \"[object Object]\"\n * - IE Edge <=13 === \"[object Object]\"\n */\n if (typeof window.location === 'object' && obj === window.location) {\n return 'Location';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#document)\n * WhatWG HTML$3.1.1 - The `Document` object\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * WhatWG HTML states:\n * > For historical reasons, Window objects must also have a\n * > writable, configurable, non-enumerable property named\n * > HTMLDocument whose value is the Document interface object.\n * Test: `Object.prototype.toString.call(document)``\n * - Chrome === \"[object HTMLDocument]\"\n * - Firefox === \"[object HTMLDocument]\"\n * - Safari === \"[object HTMLDocument]\"\n * - IE <=10 === \"[object Document]\"\n * - IE 11 === \"[object HTMLDocument]\"\n * - IE Edge <=13 === \"[object HTMLDocument]\"\n */\n if (typeof window.document === 'object' && obj === window.document) {\n return 'Document';\n }\n\n if (typeof window.navigator === 'object') {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n * - IE <=10 === \"[object MSMimeTypesCollection]\"\n */\n if (typeof window.navigator.mimeTypes === 'object' &&\n obj === window.navigator.mimeTypes) {\n return 'MimeTypeArray';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n * Test: `Object.prototype.toString.call(navigator.plugins)``\n * - IE <=10 === \"[object MSPluginsCollection]\"\n */\n if (typeof window.navigator.plugins === 'object' &&\n obj === window.navigator.plugins) {\n return 'PluginArray';\n }\n }\n\n if ((typeof window.HTMLElement === 'function' ||\n typeof window.HTMLElement === 'object') &&\n obj instanceof window.HTMLElement) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n * - IE <=10 === \"[object HTMLBlockElement]\"\n */\n if (obj.tagName === 'BLOCKQUOTE') {\n return 'HTMLQuoteElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('td'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TD') {\n return 'HTMLTableDataCellElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('th'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TH') {\n return 'HTMLTableHeaderCellElement';\n }\n }\n }\n\n /* ! Speed optimisation\n * Pre:\n * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)\n * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)\n * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)\n * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)\n * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)\n * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)\n * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)\n * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)\n * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)\n * Post:\n * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)\n * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)\n * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)\n * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)\n * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)\n * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)\n * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)\n * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)\n * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)\n */\n var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n if (typeof stringTag === 'string') {\n return stringTag;\n }\n\n var objPrototype = Object.getPrototypeOf(obj);\n /* ! Speed optimisation\n * Pre:\n * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)\n * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)\n * Post:\n * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)\n * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)\n */\n if (objPrototype === RegExp.prototype) {\n return 'RegExp';\n }\n\n /* ! Speed optimisation\n * Pre:\n * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)\n * Post:\n * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)\n */\n if (objPrototype === Date.prototype) {\n return 'Date';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n * Test: `Object.prototype.toString.call(Promise.resolve())``\n * - Chrome <=47 === \"[object Object]\"\n * - Edge <=20 === \"[object Object]\"\n * - Firefox 29-Latest === \"[object Promise]\"\n * - Safari 7.1-Latest === \"[object Promise]\"\n */\n if (promiseExists && objPrototype === Promise.prototype) {\n return 'Promise';\n }\n\n /* ! Speed optimisation\n * Pre:\n * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)\n * Post:\n * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)\n */\n if (setExists && objPrototype === Set.prototype) {\n return 'Set';\n }\n\n /* ! Speed optimisation\n * Pre:\n * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)\n * Post:\n * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)\n */\n if (mapExists && objPrototype === Map.prototype) {\n return 'Map';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)\n * Post:\n * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)\n */\n if (weakSetExists && objPrototype === WeakSet.prototype) {\n return 'WeakSet';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)\n * Post:\n * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)\n */\n if (weakMapExists && objPrototype === WeakMap.prototype) {\n return 'WeakMap';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n * - Edge <=13 === \"[object Object]\"\n */\n if (dataViewExists && objPrototype === DataView.prototype) {\n return 'DataView';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n * Test: `Object.prototype.toString.call(new Map().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (mapExists && objPrototype === mapIteratorPrototype) {\n return 'Map Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n * Test: `Object.prototype.toString.call(new Set().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (setExists && objPrototype === setIteratorPrototype) {\n return 'Set Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n return 'Array Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n return 'String Iterator';\n }\n\n /* ! Speed optimisation\n * Pre:\n * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)\n * Post:\n * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)\n */\n if (objPrototype === null) {\n return 'Object';\n }\n\n return Object\n .prototype\n .toString\n .call(obj)\n .slice(toStringLeftSliceLength, toStringRightSliceLength);\n}\n\nreturn typeDetect;\n\n})));\n","const isBufferExists = typeof Buffer !== 'undefined';\nconst isBufferFromExists = isBufferExists && typeof Buffer.from !== 'undefined';\n\nexport const isBuffer = isBufferExists\n ? /**\n * is value is Buffer?\n *\n * @param {*} value\n * @return {boolean}\n */\n function isBuffer(value) {\n return Buffer.isBuffer(value);\n }\n : /**\n * return false\n *\n * NOTE: for Buffer unsupported\n *\n * @return {boolean}\n */\n function isBuffer() {\n return false;\n };\n\nexport const copy = isBufferFromExists\n ? /**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return Buffer.from(value);\n }\n : isBufferExists\n ? /**\n * copy Buffer\n *\n * NOTE: for old node.js\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return new Buffer(value);\n }\n : /**\n * shallow copy\n *\n * NOTE: for Buffer unsupported\n *\n * @param {*}\n * @return {*}\n */\n function copy(value) {\n return value;\n };\n","import typeDetect from 'type-detect';\n\nimport { isBuffer } from './buffer.mjs';\n\n/**\n * detect type of value\n *\n * @param {*} value\n * @return {string}\n */\nexport function detectType(value) {\n // NOTE: isBuffer must execute before type-detect,\n // because type-detect returns 'Uint8Array'.\n if (isBuffer(value)) {\n return 'Buffer';\n }\n\n return typeDetect(value);\n}\n","import { detectType } from './detector.mjs';\n\n/**\n * collection types\n */\nconst collectionTypeSet = new Set([\n 'Arguments',\n 'Array',\n 'Map',\n 'Object',\n 'Set'\n]);\n\n/**\n * get value from collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {string} [type=null]\n * @return {*}\n */\nexport function get(collection, key, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n return collection[key];\n case 'Map':\n return collection.get(key);\n case 'Set':\n // NOTE: Set.prototype.keys is alias of Set.prototype.values\n // it means key is equals value\n return key;\n default:\n }\n}\n\n/**\n * check to type string is collection\n *\n * @param {string} type\n */\nexport function isCollection(type) {\n return collectionTypeSet.has(type);\n}\n\n/**\n * set value to collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {*} value\n * @param {string} [type=null]\n * @return {Array|Object|Map|Set}\n */\nexport function set(collection, key, value, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n collection[key] = value;\n break;\n case 'Map':\n collection.set(key, value);\n break;\n case 'Set':\n collection.add(value);\n break;\n default:\n }\n\n return collection;\n}\n","const freeGlobalThis =\n typeof globalThis !== 'undefined' &&\n globalThis !== null &&\n globalThis.Object === Object &&\n globalThis;\n\nconst freeGlobal =\n typeof global !== 'undefined' &&\n global !== null &&\n global.Object === Object &&\n global;\n\nconst freeSelf =\n typeof self !== 'undefined' &&\n self !== null &&\n self.Object === Object &&\n self;\n\nexport const globalObject =\n freeGlobalThis || freeGlobal || freeSelf || Function('return this')();\n","import { copy as cloneBuffer } from './buffer.mjs';\nimport { globalObject } from './global.mjs';\n\n/**\n * copy ArrayBuffer\n *\n * @param {ArrayBuffer} value\n * @return {ArrayBuffer}\n */\nfunction copyArrayBuffer(value) {\n return value.slice(0);\n}\n\n/**\n * copy Boolean\n *\n * @param {Boolean} value\n * @return {Boolean}\n */\nfunction copyBoolean(value) {\n return new Boolean(value.valueOf());\n}\n\n/**\n * copy DataView\n *\n * @param {DataView} value\n * @return {DataView}\n */\nfunction copyDataView(value) {\n // TODO: copy ArrayBuffer?\n return new DataView(value.buffer);\n}\n\n/**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\nfunction copyBuffer(value) {\n return cloneBuffer(value);\n}\n\n/**\n * copy Date\n *\n * @param {Date} value\n * @return {Date}\n */\nfunction copyDate(value) {\n return new Date(value.getTime());\n}\n\n/**\n * copy Number\n *\n * @param {Number} value\n * @return {Number}\n */\nfunction copyNumber(value) {\n return new Number(value);\n}\n\n/**\n * copy RegExp\n *\n * @param {RegExp} value\n * @return {RegExp}\n */\nfunction copyRegExp(value) {\n return new RegExp(value.source, value.flags);\n}\n\n/**\n * copy String\n *\n * @param {String} value\n * @return {String}\n */\nfunction copyString(value) {\n return new String(value);\n}\n\n/**\n * copy TypedArray\n *\n * @param {*} value\n * @return {*}\n */\nfunction copyTypedArray(value, type) {\n const typedArray = globalObject[type];\n\n if (typedArray.from) {\n return globalObject[type].from(value);\n }\n\n return new globalObject[type](value);\n}\n\n/**\n * shallow copy\n *\n * @param {*} value\n * @return {*}\n */\nfunction shallowCopy(value) {\n return value;\n}\n\n/**\n * get empty Array\n *\n * @return {Array}\n */\nfunction getEmptyArray() {\n return [];\n}\n\n/**\n * get empty Map\n *\n * @return {Map}\n */\nfunction getEmptyMap() {\n return new Map();\n}\n\n/**\n * get empty Object\n *\n * @return {Object}\n */\nfunction getEmptyObject() {\n return {};\n}\n\n/**\n * get empty Set\n *\n * @return {Set}\n */\nfunction getEmptySet() {\n return new Set();\n}\n\nexport default new Map([\n // deep copy\n ['ArrayBuffer', copyArrayBuffer],\n ['Boolean', copyBoolean],\n ['Buffer', copyBuffer],\n ['DataView', copyDataView],\n ['Date', copyDate],\n ['Number', copyNumber],\n ['RegExp', copyRegExp],\n ['String', copyString],\n\n // typed arrays\n // TODO: pass bound function\n ['Float32Array', copyTypedArray],\n ['Float64Array', copyTypedArray],\n ['Int16Array', copyTypedArray],\n ['Int32Array', copyTypedArray],\n ['Int8Array', copyTypedArray],\n ['Uint16Array', copyTypedArray],\n ['Uint32Array', copyTypedArray],\n ['Uint8Array', copyTypedArray],\n ['Uint8ClampedArray', copyTypedArray],\n\n // shallow copy\n ['Array Iterator', shallowCopy],\n ['Map Iterator', shallowCopy],\n ['Promise', shallowCopy],\n ['Set Iterator', shallowCopy],\n ['String Iterator', shallowCopy],\n ['function', shallowCopy],\n ['global', shallowCopy],\n // NOTE: WeakMap and WeakSet cannot get entries\n ['WeakMap', shallowCopy],\n ['WeakSet', shallowCopy],\n\n // primitives\n ['boolean', shallowCopy],\n ['null', shallowCopy],\n ['number', shallowCopy],\n ['string', shallowCopy],\n ['symbol', shallowCopy],\n ['undefined', shallowCopy],\n\n // collections\n // NOTE: return empty value, because recursively copy later.\n ['Arguments', getEmptyArray],\n ['Array', getEmptyArray],\n ['Map', getEmptyMap],\n ['Object', getEmptyObject],\n ['Set', getEmptySet]\n\n // NOTE: type-detect returns following types\n // 'Location'\n // 'Document'\n // 'MimeTypeArray'\n // 'PluginArray'\n // 'HTMLQuoteElement'\n // 'HTMLTableDataCellElement'\n // 'HTMLTableHeaderCellElement'\n\n // TODO: is type-detect never return 'object'?\n // 'object'\n]);\n","import copyMap from './copy_map.mjs';\nimport { detectType } from './detector.mjs';\n\n/**\n * no operation\n */\nfunction noop() {}\n\n/**\n * copy value\n *\n * @param {*} value\n * @param {string} [type=null]\n * @param {Function} [customizer=noop]\n * @return {*}\n */\nexport function copy(value, type = null, customizer = noop) {\n if (arguments.length === 2 && typeof type === 'function') {\n customizer = type;\n type = null;\n }\n\n const valueType = type || detectType(value);\n const copyFunction = copyMap.get(valueType);\n\n if (valueType === 'Object') {\n const result = customizer(value, valueType);\n\n if (result !== undefined) {\n return result;\n }\n }\n\n // NOTE: TypedArray needs pass type to argument\n return copyFunction ? copyFunction(value, valueType) : value;\n}\n","import { detectType } from './detector.mjs';\nimport { get, isCollection, set } from './collection.mjs';\nimport { copy } from './copier.mjs';\n\n/**\n * deepcopy function\n *\n * @param {*} value\n * @param {Object|Function} [options]\n * @return {*}\n */\nexport default function deepcopy(value, options = {}) {\n if (typeof options === 'function') {\n options = {\n customizer: options\n };\n }\n\n const {\n // TODO: before/after customizer\n customizer\n // TODO: max depth\n // depth = Infinity,\n } = options;\n\n const valueType = detectType(value);\n\n if (!isCollection(valueType)) {\n return recursiveCopy(value, null, null, null, customizer);\n }\n\n const copiedValue = copy(value, valueType, customizer);\n\n const references = new WeakMap([[value, copiedValue]]);\n const visited = new WeakSet([value]);\n\n return recursiveCopy(value, copiedValue, references, visited, customizer);\n}\n\n/**\n * recursively copy\n *\n * @param {*} value target value\n * @param {*} clone clone of value\n * @param {WeakMap} references visited references of clone\n * @param {WeakSet} visited visited references of value\n * @param {Function} customizer user customize function\n * @return {*}\n */\nfunction recursiveCopy(value, clone, references, visited, customizer) {\n const type = detectType(value);\n const copiedValue = copy(value, type);\n\n // return if not a collection value\n if (!isCollection(type)) {\n return copiedValue;\n }\n\n let keys;\n\n switch (type) {\n case 'Arguments':\n case 'Array':\n keys = Object.keys(value);\n break;\n case 'Object':\n keys = Object.keys(value);\n keys.push(...Object.getOwnPropertySymbols(value));\n break;\n case 'Map':\n case 'Set':\n keys = value.keys();\n break;\n default:\n }\n\n // walk within collection with iterator\n for (let collectionKey of keys) {\n const collectionValue = get(value, collectionKey, type);\n\n if (visited.has(collectionValue)) {\n // for [Circular]\n set(clone, collectionKey, references.get(collectionValue), type);\n } else {\n const collectionValueType = detectType(collectionValue);\n const copiedCollectionValue = copy(collectionValue, collectionValueType);\n\n // save reference if value is collection\n if (isCollection(collectionValueType)) {\n references.set(collectionValue, copiedCollectionValue);\n visited.add(collectionValue);\n }\n\n set(\n clone,\n collectionKey,\n recursiveCopy(\n collectionValue,\n copiedCollectionValue,\n references,\n visited,\n customizer\n ),\n type\n );\n }\n }\n\n // TODO: isSealed/isFrozen/isExtensible\n\n return clone;\n}\n","var prefix = require('prefix-style')\nvar toCamelCase = require('to-camel-case')\nvar cache = { 'float': 'cssFloat' }\nvar addPxToStyle = require('add-px-to-style')\n\nfunction style (element, property, value) {\n var camel = cache[property]\n if (typeof camel === 'undefined') {\n camel = detect(property)\n }\n\n // may be false if CSS prop is unsupported\n if (camel) {\n if (value === undefined) {\n return element.style[camel]\n }\n\n element.style[camel] = addPxToStyle(camel, value)\n }\n}\n\nfunction each (element, properties) {\n for (var k in properties) {\n if (properties.hasOwnProperty(k)) {\n style(element, k, properties[k])\n }\n }\n}\n\nfunction detect (cssProp) {\n var camel = toCamelCase(cssProp)\n var result = prefix(camel)\n cache[camel] = cache[cssProp] = cache[result] = result\n return result\n}\n\nfunction set () {\n if (arguments.length === 2) {\n if (typeof arguments[1] === 'string') {\n arguments[0].style.cssText = arguments[1]\n } else {\n each(arguments[0], arguments[1])\n }\n } else {\n style(arguments[0], arguments[1], arguments[2])\n }\n}\n\nmodule.exports = set\nmodule.exports.set = set\n\nmodule.exports.get = function (element, properties) {\n if (Array.isArray(properties)) {\n return properties.reduce(function (obj, prop) {\n obj[prop] = style(element, prop || '')\n return obj\n }, {})\n } else {\n return style(element, properties || '')\n }\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/\\s/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.slice(0, trimmedEndIndex(string) + 1);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.logdown=e():t.logdown=e()}(window,function(){return function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}return o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,\"a\",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p=\"\",o(o.s=0)}([function(t,e,r){var n,o=r(1)(),i=r(3),s=r(5),f=r(8)();o.prefixColors=[\"#F2777A\",\"#F99157\",\"#FFCC66\",\"#99CC99\",\"#66CCCC\",\"#6699CC\",\"#CC99CC\"],o._setPrefixRegExps=function(){try{f.localStorage&&\"string\"==typeof f.localStorage.getItem(\"debug\")&&(o._prefixRegExps=[],f.localStorage.getItem(\"debug\").split(\",\").forEach(function(t){var e=\"enable\";\"-\"===(t=t.trim())[0]&&(t=t.substr(1),e=\"disable\");var r=o._prepareRegExpForPrefixSearch(t);o._prefixRegExps.push({type:e,regExp:r})}))}catch(t){}},o._getNextPrefixColor=(n=0,function(){return n+=1,o.prefixColors[n%o.prefixColors.length]}),o.prototype._getDecoratedPrefix=function(){var t=[];return s()?(t.push(\"%c\"+this.opts.prefix+\"%c \"),t.push(\"color:\"+this.opts.prefixColor+\"; font-weight:bold;\",\"\")):t.push(\"[\"+this.opts.prefix+\"] \"),t},o.prototype._prepareOutput=function(t){var e,r=this._getDecoratedPrefix();return\"string\"==typeof t[0]?this.opts.markdown&&s()?(e=i.parse(t[0]),r[0]=r[0]+e.text,r=r.concat(e.styles)):r[0]=r[0]+t[0]:r.push(t[0]),1<t.length&&(r=r.concat(t.slice(1))),r},o._setPrefixRegExps(),t.exports=o},function(t,e,r){var f=r(2);t.exports=function(){function s(t,e){return this instanceof s?s._isPrefixAlreadyInUse(t)?s._getInstanceByPrefix(t):(this.opts=s._normalizeOpts(t,e),this.state=s._getInitialState(this.opts),s._decorateLoggerMethods(this),s._instances.push(this),this):new s(t,e)}return s.transports=[],s._instances=[],s._prefixRegExps=[],s._prepareRegExpForPrefixSearch=function(t){return new RegExp(\"^\"+t.replace(/\\*/g,\".*?\")+\"$\")},s._isPrefixAlreadyInUse=function(e){return s._instances.some(function(t){return t.opts.prefix===e})},s._getInstanceByPrefix=function(e){return s._instances.filter(function(t){return t.opts.prefix===e})[0]},s._normalizeOpts=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"prefix must be a string\");var r=void 0===(e=e||{}).markdown||Boolean(e.markdown),n=e.prefixColor||s._getNextPrefixColor();return{logger:e.logger||console,markdown:r,plaintext:Boolean(e.plaintext),prefix:t,prefixColor:n}},s._getInitialState=function(t){return{isEnabled:s._getEnableState(t)}},s._getEnableState=function(e){var r=!1;return s._prefixRegExps.forEach(function(t){\"enable\"===t.type&&t.regExp.test(e.prefix)?r=!0:\"disable\"===t.type&&t.regExp.test(e.prefix)&&(r=!1)}),r},s._decorateLoggerMethods=function(t){var i=t.opts.logger,e=Object.keys(i).filter(function(t){return\"function\"==typeof i[t]});0===e.length&&(e=[\"debug\",\"log\",\"warn\",\"error\",\"info\"]),e.forEach(function(o){t[o]=function(){var e=f(arguments),r=this.opts.prefix;if(s.transports.length){var n=\"[\"+r+\"] \"+e.filter(function(t){return\"object\"!=typeof t}).join(\" \");s.transports.forEach(function(t){t({state:this.state,instance:r,level:o,args:e,msg:n})}.bind(this))}if(this.state.isEnabled){var t=this._prepareOutput(e,o);i[o].apply(i,t)}}})},s}},function(t,e){t.exports=function(t){return Array.prototype.slice.call(t,0)}},function(t,e,r){var n=[];function o(e){return function(t){return n.push(e),n.push(\"\"),\"%c\"+t+\"%c\"}}var i=new(r(4))({renderer:{\"*\":o(\"font-weight:bold;\"),_:o(\"font-style:italic;\"),\"`\":o(\"background-color:rgba(255,204,102, 0.1);color:#FFCC66;padding:2px 5px;border-radius:2px;\")}});t.exports={parse:function(t){var e={text:i.parse(t),styles:[].concat(n)};return n.length=0,e}}},function(t,e){var x=/([_*`\\\\]|[^_*`\\\\]+)/g,r=/[_*`]/;function n(t){this.renderer=t.renderer}function d(t){return r.test(t)}n.prototype.parse=function(t){if(\"\"===t)return\"\";var r,e,n,o=t.match(x),i=this.renderer,s=\"\",f=[],u={},a=0;function p(t){for(var e=\"\";r&&r.tag!==t;)e=r.tag+r.text+e,u[r.tag]=!1,r=f.pop();return e}for(;n=o[a];){if(e=\"\",a++,d(n))if(u[n])e=p(n),e=i[r.tag](r.text+e),u[n]=!1,r=f.pop();else{var c=\"\";if(\"`\"===n){var l=o.indexOf(n,a);-1!==l&&(s+=p(),c=o.slice(a,l).join(\"\"),a=l)}r&&f.push(r),u[n]=!0,r={tag:n,text:c}}else if(\"\\\\\"===(e=n)){var g=o[a];(d(g)||\"\\\\\"===g)&&(e=g,a++)}e&&(r?r.text+=e:s+=e,e=\"\")}return s+p()},t.exports=n},function(t,e,r){var n=r(6),o=r(7);t.exports=function(){return n()||o()}},function(t,e){t.exports=function(){try{return\"WebkitAppearance\"in document.documentElement.style&&!/Edge/.test(navigator.userAgent)}catch(t){return!1}}},function(t,e){t.exports=function(){try{return/firefox\\/(\\d+)/i.test(navigator.userAgent)}catch(t){return!1}}},function(r,t,e){(function(t){function e(t,e){return\"object\"==typeof t&&t.self===t&&t||\"object\"==typeof e&&e.global===e&&e||this}r.exports=e.bind(this,self,t),r.exports.getGlobal=e}).call(this,e(9))},function(ob,pb){var qb;qb=function(){return this}();try{qb=qb||Function(\"return this\")()||eval(\"this\")}catch(ob){\"object\"==typeof window&&(qb=window)}ob.exports=qb}])});\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","if performance? and performance.now\n module.exports = -> performance.now()\nelse if process? and process.hrtime\n module.exports = -> (getNanoSeconds() - nodeLoadTime) / 1e6\n hrtime = process.hrtime\n getNanoSeconds = ->\n hr = hrtime()\n hr[0] * 1e9 + hr[1]\n moduleLoadTime = getNanoSeconds()\n upTime = process.uptime() * 1e9\n nodeLoadTime = moduleLoadTime - upTime\nelse if Date.now\n module.exports = -> Date.now() - loadTime\n loadTime = Date.now()\nelse\n module.exports = -> new Date().getTime() - loadTime\n loadTime = new Date().getTime()\n","var div = null\nvar prefixes = [ 'Webkit', 'Moz', 'O', 'ms' ]\n\nmodule.exports = function prefixStyle (prop) {\n // re-use a dummy div\n if (!div) {\n div = document.createElement('div')\n }\n\n var style = div.style\n\n // prop exists without prefix\n if (prop in style) {\n return prop\n }\n\n // borderRadius -> BorderRadius\n var titleCase = prop.charAt(0).toUpperCase() + prop.slice(1)\n\n // find the vendor-prefixed prop\n for (var i = prefixes.length; i >= 0; i--) {\n var name = prefixes[i] + titleCase\n // e.g. WebkitBorderRadius or webkitBorderRadius\n if (name in style) {\n return name\n }\n }\n\n return false\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.renderViewDefault = renderViewDefault;\nexports.renderTrackHorizontalDefault = renderTrackHorizontalDefault;\nexports.renderTrackVerticalDefault = renderTrackVerticalDefault;\nexports.renderThumbHorizontalDefault = renderThumbHorizontalDefault;\nexports.renderThumbVerticalDefault = renderThumbVerticalDefault;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n/* eslint-disable react/prop-types */\n\nfunction renderViewDefault(props) {\n return _react2[\"default\"].createElement('div', props);\n}\n\nfunction renderTrackHorizontalDefault(_ref) {\n var style = _ref.style,\n props = _objectWithoutProperties(_ref, ['style']);\n\n var finalStyle = _extends({}, style, {\n right: 2,\n bottom: 2,\n left: 2,\n borderRadius: 3\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderTrackVerticalDefault(_ref2) {\n var style = _ref2.style,\n props = _objectWithoutProperties(_ref2, ['style']);\n\n var finalStyle = _extends({}, style, {\n right: 2,\n bottom: 2,\n top: 2,\n borderRadius: 3\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderThumbHorizontalDefault(_ref3) {\n var style = _ref3.style,\n props = _objectWithoutProperties(_ref3, ['style']);\n\n var finalStyle = _extends({}, style, {\n cursor: 'pointer',\n borderRadius: 'inherit',\n backgroundColor: 'rgba(0,0,0,.2)'\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderThumbVerticalDefault(_ref4) {\n var style = _ref4.style,\n props = _objectWithoutProperties(_ref4, ['style']);\n\n var finalStyle = _extends({}, style, {\n cursor: 'pointer',\n borderRadius: 'inherit',\n backgroundColor: 'rgba(0,0,0,.2)'\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _raf2 = require('raf');\n\nvar _raf3 = _interopRequireDefault(_raf2);\n\nvar _domCss = require('dom-css');\n\nvar _domCss2 = _interopRequireDefault(_domCss);\n\nvar _react = require('react');\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _isString = require('../utils/isString');\n\nvar _isString2 = _interopRequireDefault(_isString);\n\nvar _getScrollbarWidth = require('../utils/getScrollbarWidth');\n\nvar _getScrollbarWidth2 = _interopRequireDefault(_getScrollbarWidth);\n\nvar _returnFalse = require('../utils/returnFalse');\n\nvar _returnFalse2 = _interopRequireDefault(_returnFalse);\n\nvar _getInnerWidth = require('../utils/getInnerWidth');\n\nvar _getInnerWidth2 = _interopRequireDefault(_getInnerWidth);\n\nvar _getInnerHeight = require('../utils/getInnerHeight');\n\nvar _getInnerHeight2 = _interopRequireDefault(_getInnerHeight);\n\nvar _styles = require('./styles');\n\nvar _defaultRenderElements = require('./defaultRenderElements');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Scrollbars = function (_Component) {\n _inherits(Scrollbars, _Component);\n\n function Scrollbars(props) {\n var _ref;\n\n _classCallCheck(this, Scrollbars);\n\n for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = Scrollbars.__proto__ || Object.getPrototypeOf(Scrollbars)).call.apply(_ref, [this, props].concat(rest)));\n\n _this.getScrollLeft = _this.getScrollLeft.bind(_this);\n _this.getScrollTop = _this.getScrollTop.bind(_this);\n _this.getScrollWidth = _this.getScrollWidth.bind(_this);\n _this.getScrollHeight = _this.getScrollHeight.bind(_this);\n _this.getClientWidth = _this.getClientWidth.bind(_this);\n _this.getClientHeight = _this.getClientHeight.bind(_this);\n _this.getValues = _this.getValues.bind(_this);\n _this.getThumbHorizontalWidth = _this.getThumbHorizontalWidth.bind(_this);\n _this.getThumbVerticalHeight = _this.getThumbVerticalHeight.bind(_this);\n _this.getScrollLeftForOffset = _this.getScrollLeftForOffset.bind(_this);\n _this.getScrollTopForOffset = _this.getScrollTopForOffset.bind(_this);\n\n _this.scrollLeft = _this.scrollLeft.bind(_this);\n _this.scrollTop = _this.scrollTop.bind(_this);\n _this.scrollToLeft = _this.scrollToLeft.bind(_this);\n _this.scrollToTop = _this.scrollToTop.bind(_this);\n _this.scrollToRight = _this.scrollToRight.bind(_this);\n _this.scrollToBottom = _this.scrollToBottom.bind(_this);\n\n _this.handleTrackMouseEnter = _this.handleTrackMouseEnter.bind(_this);\n _this.handleTrackMouseLeave = _this.handleTrackMouseLeave.bind(_this);\n _this.handleHorizontalTrackMouseDown = _this.handleHorizontalTrackMouseDown.bind(_this);\n _this.handleVerticalTrackMouseDown = _this.handleVerticalTrackMouseDown.bind(_this);\n _this.handleHorizontalThumbMouseDown = _this.handleHorizontalThumbMouseDown.bind(_this);\n _this.handleVerticalThumbMouseDown = _this.handleVerticalThumbMouseDown.bind(_this);\n _this.handleWindowResize = _this.handleWindowResize.bind(_this);\n _this.handleScroll = _this.handleScroll.bind(_this);\n _this.handleDrag = _this.handleDrag.bind(_this);\n _this.handleDragEnd = _this.handleDragEnd.bind(_this);\n\n _this.state = {\n didMountUniversal: false\n };\n return _this;\n }\n\n _createClass(Scrollbars, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.addListeners();\n this.update();\n this.componentDidMountUniversal();\n }\n }, {\n key: 'componentDidMountUniversal',\n value: function componentDidMountUniversal() {\n // eslint-disable-line react/sort-comp\n var universal = this.props.universal;\n\n if (!universal) return;\n this.setState({ didMountUniversal: true });\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n this.update();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.removeListeners();\n (0, _raf2.cancel)(this.requestFrame);\n clearTimeout(this.hideTracksTimeout);\n clearInterval(this.detectScrollingInterval);\n }\n }, {\n key: 'getScrollLeft',\n value: function getScrollLeft() {\n if (!this.view) return 0;\n return this.view.scrollLeft;\n }\n }, {\n key: 'getScrollTop',\n value: function getScrollTop() {\n if (!this.view) return 0;\n return this.view.scrollTop;\n }\n }, {\n key: 'getScrollWidth',\n value: function getScrollWidth() {\n if (!this.view) return 0;\n return this.view.scrollWidth;\n }\n }, {\n key: 'getScrollHeight',\n value: function getScrollHeight() {\n if (!this.view) return 0;\n return this.view.scrollHeight;\n }\n }, {\n key: 'getClientWidth',\n value: function getClientWidth() {\n if (!this.view) return 0;\n return this.view.clientWidth;\n }\n }, {\n key: 'getClientHeight',\n value: function getClientHeight() {\n if (!this.view) return 0;\n return this.view.clientHeight;\n }\n }, {\n key: 'getValues',\n value: function getValues() {\n var _ref2 = this.view || {},\n _ref2$scrollLeft = _ref2.scrollLeft,\n scrollLeft = _ref2$scrollLeft === undefined ? 0 : _ref2$scrollLeft,\n _ref2$scrollTop = _ref2.scrollTop,\n scrollTop = _ref2$scrollTop === undefined ? 0 : _ref2$scrollTop,\n _ref2$scrollWidth = _ref2.scrollWidth,\n scrollWidth = _ref2$scrollWidth === undefined ? 0 : _ref2$scrollWidth,\n _ref2$scrollHeight = _ref2.scrollHeight,\n scrollHeight = _ref2$scrollHeight === undefined ? 0 : _ref2$scrollHeight,\n _ref2$clientWidth = _ref2.clientWidth,\n clientWidth = _ref2$clientWidth === undefined ? 0 : _ref2$clientWidth,\n _ref2$clientHeight = _ref2.clientHeight,\n clientHeight = _ref2$clientHeight === undefined ? 0 : _ref2$clientHeight;\n\n return {\n left: scrollLeft / (scrollWidth - clientWidth) || 0,\n top: scrollTop / (scrollHeight - clientHeight) || 0,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: scrollWidth,\n scrollHeight: scrollHeight,\n clientWidth: clientWidth,\n clientHeight: clientHeight\n };\n }\n }, {\n key: 'getThumbHorizontalWidth',\n value: function getThumbHorizontalWidth() {\n var _props = this.props,\n thumbSize = _props.thumbSize,\n thumbMinSize = _props.thumbMinSize;\n var _view = this.view,\n scrollWidth = _view.scrollWidth,\n clientWidth = _view.clientWidth;\n\n var trackWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var width = Math.ceil(clientWidth / scrollWidth * trackWidth);\n if (trackWidth <= width) return 0;\n if (thumbSize) return thumbSize;\n return Math.max(width, thumbMinSize);\n }\n }, {\n key: 'getThumbVerticalHeight',\n value: function getThumbVerticalHeight() {\n var _props2 = this.props,\n thumbSize = _props2.thumbSize,\n thumbMinSize = _props2.thumbMinSize;\n var _view2 = this.view,\n scrollHeight = _view2.scrollHeight,\n clientHeight = _view2.clientHeight;\n\n var trackHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var height = Math.ceil(clientHeight / scrollHeight * trackHeight);\n if (trackHeight <= height) return 0;\n if (thumbSize) return thumbSize;\n return Math.max(height, thumbMinSize);\n }\n }, {\n key: 'getScrollLeftForOffset',\n value: function getScrollLeftForOffset(offset) {\n var _view3 = this.view,\n scrollWidth = _view3.scrollWidth,\n clientWidth = _view3.clientWidth;\n\n var trackWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var thumbWidth = this.getThumbHorizontalWidth();\n return offset / (trackWidth - thumbWidth) * (scrollWidth - clientWidth);\n }\n }, {\n key: 'getScrollTopForOffset',\n value: function getScrollTopForOffset(offset) {\n var _view4 = this.view,\n scrollHeight = _view4.scrollHeight,\n clientHeight = _view4.clientHeight;\n\n var trackHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var thumbHeight = this.getThumbVerticalHeight();\n return offset / (trackHeight - thumbHeight) * (scrollHeight - clientHeight);\n }\n }, {\n key: 'scrollLeft',\n value: function scrollLeft() {\n var left = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (!this.view) return;\n this.view.scrollLeft = left;\n }\n }, {\n key: 'scrollTop',\n value: function scrollTop() {\n var top = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (!this.view) return;\n this.view.scrollTop = top;\n }\n }, {\n key: 'scrollToLeft',\n value: function scrollToLeft() {\n if (!this.view) return;\n this.view.scrollLeft = 0;\n }\n }, {\n key: 'scrollToTop',\n value: function scrollToTop() {\n if (!this.view) return;\n this.view.scrollTop = 0;\n }\n }, {\n key: 'scrollToRight',\n value: function scrollToRight() {\n if (!this.view) return;\n this.view.scrollLeft = this.view.scrollWidth;\n }\n }, {\n key: 'scrollToBottom',\n value: function scrollToBottom() {\n if (!this.view) return;\n this.view.scrollTop = this.view.scrollHeight;\n }\n }, {\n key: 'addListeners',\n value: function addListeners() {\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !this.view) return;\n var view = this.view,\n trackHorizontal = this.trackHorizontal,\n trackVertical = this.trackVertical,\n thumbHorizontal = this.thumbHorizontal,\n thumbVertical = this.thumbVertical;\n\n view.addEventListener('scroll', this.handleScroll);\n if (!(0, _getScrollbarWidth2[\"default\"])()) return;\n trackHorizontal.addEventListener('mouseenter', this.handleTrackMouseEnter);\n trackHorizontal.addEventListener('mouseleave', this.handleTrackMouseLeave);\n trackHorizontal.addEventListener('mousedown', this.handleHorizontalTrackMouseDown);\n trackVertical.addEventListener('mouseenter', this.handleTrackMouseEnter);\n trackVertical.addEventListener('mouseleave', this.handleTrackMouseLeave);\n trackVertical.addEventListener('mousedown', this.handleVerticalTrackMouseDown);\n thumbHorizontal.addEventListener('mousedown', this.handleHorizontalThumbMouseDown);\n thumbVertical.addEventListener('mousedown', this.handleVerticalThumbMouseDown);\n window.addEventListener('resize', this.handleWindowResize);\n }\n }, {\n key: 'removeListeners',\n value: function removeListeners() {\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !this.view) return;\n var view = this.view,\n trackHorizontal = this.trackHorizontal,\n trackVertical = this.trackVertical,\n thumbHorizontal = this.thumbHorizontal,\n thumbVertical = this.thumbVertical;\n\n view.removeEventListener('scroll', this.handleScroll);\n if (!(0, _getScrollbarWidth2[\"default\"])()) return;\n trackHorizontal.removeEventListener('mouseenter', this.handleTrackMouseEnter);\n trackHorizontal.removeEventListener('mouseleave', this.handleTrackMouseLeave);\n trackHorizontal.removeEventListener('mousedown', this.handleHorizontalTrackMouseDown);\n trackVertical.removeEventListener('mouseenter', this.handleTrackMouseEnter);\n trackVertical.removeEventListener('mouseleave', this.handleTrackMouseLeave);\n trackVertical.removeEventListener('mousedown', this.handleVerticalTrackMouseDown);\n thumbHorizontal.removeEventListener('mousedown', this.handleHorizontalThumbMouseDown);\n thumbVertical.removeEventListener('mousedown', this.handleVerticalThumbMouseDown);\n window.removeEventListener('resize', this.handleWindowResize);\n // Possibly setup by `handleDragStart`\n this.teardownDragging();\n }\n }, {\n key: 'handleScroll',\n value: function handleScroll(event) {\n var _this2 = this;\n\n var _props3 = this.props,\n onScroll = _props3.onScroll,\n onScrollFrame = _props3.onScrollFrame;\n\n if (onScroll) onScroll(event);\n this.update(function (values) {\n var scrollLeft = values.scrollLeft,\n scrollTop = values.scrollTop;\n\n _this2.viewScrollLeft = scrollLeft;\n _this2.viewScrollTop = scrollTop;\n if (onScrollFrame) onScrollFrame(values);\n });\n this.detectScrolling();\n }\n }, {\n key: 'handleScrollStart',\n value: function handleScrollStart() {\n var onScrollStart = this.props.onScrollStart;\n\n if (onScrollStart) onScrollStart();\n this.handleScrollStartAutoHide();\n }\n }, {\n key: 'handleScrollStartAutoHide',\n value: function handleScrollStartAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.showTracks();\n }\n }, {\n key: 'handleScrollStop',\n value: function handleScrollStop() {\n var onScrollStop = this.props.onScrollStop;\n\n if (onScrollStop) onScrollStop();\n this.handleScrollStopAutoHide();\n }\n }, {\n key: 'handleScrollStopAutoHide',\n value: function handleScrollStopAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'handleWindowResize',\n value: function handleWindowResize() {\n (0, _getScrollbarWidth2[\"default\"])(false);\n this.forceUpdate();\n }\n }, {\n key: 'handleHorizontalTrackMouseDown',\n value: function handleHorizontalTrackMouseDown(event) {\n event.preventDefault();\n var target = event.target,\n clientX = event.clientX;\n\n var _target$getBoundingCl = target.getBoundingClientRect(),\n targetLeft = _target$getBoundingCl.left;\n\n var thumbWidth = this.getThumbHorizontalWidth();\n var offset = Math.abs(targetLeft - clientX) - thumbWidth / 2;\n this.view.scrollLeft = this.getScrollLeftForOffset(offset);\n }\n }, {\n key: 'handleVerticalTrackMouseDown',\n value: function handleVerticalTrackMouseDown(event) {\n event.preventDefault();\n var target = event.target,\n clientY = event.clientY;\n\n var _target$getBoundingCl2 = target.getBoundingClientRect(),\n targetTop = _target$getBoundingCl2.top;\n\n var thumbHeight = this.getThumbVerticalHeight();\n var offset = Math.abs(targetTop - clientY) - thumbHeight / 2;\n this.view.scrollTop = this.getScrollTopForOffset(offset);\n }\n }, {\n key: 'handleHorizontalThumbMouseDown',\n value: function handleHorizontalThumbMouseDown(event) {\n event.preventDefault();\n this.handleDragStart(event);\n var target = event.target,\n clientX = event.clientX;\n var offsetWidth = target.offsetWidth;\n\n var _target$getBoundingCl3 = target.getBoundingClientRect(),\n left = _target$getBoundingCl3.left;\n\n this.prevPageX = offsetWidth - (clientX - left);\n }\n }, {\n key: 'handleVerticalThumbMouseDown',\n value: function handleVerticalThumbMouseDown(event) {\n event.preventDefault();\n this.handleDragStart(event);\n var target = event.target,\n clientY = event.clientY;\n var offsetHeight = target.offsetHeight;\n\n var _target$getBoundingCl4 = target.getBoundingClientRect(),\n top = _target$getBoundingCl4.top;\n\n this.prevPageY = offsetHeight - (clientY - top);\n }\n }, {\n key: 'setupDragging',\n value: function setupDragging() {\n (0, _domCss2[\"default\"])(document.body, _styles.disableSelectStyle);\n document.addEventListener('mousemove', this.handleDrag);\n document.addEventListener('mouseup', this.handleDragEnd);\n document.onselectstart = _returnFalse2[\"default\"];\n }\n }, {\n key: 'teardownDragging',\n value: function teardownDragging() {\n (0, _domCss2[\"default\"])(document.body, _styles.disableSelectStyleReset);\n document.removeEventListener('mousemove', this.handleDrag);\n document.removeEventListener('mouseup', this.handleDragEnd);\n document.onselectstart = undefined;\n }\n }, {\n key: 'handleDragStart',\n value: function handleDragStart(event) {\n this.dragging = true;\n event.stopImmediatePropagation();\n this.setupDragging();\n }\n }, {\n key: 'handleDrag',\n value: function handleDrag(event) {\n if (this.prevPageX) {\n var clientX = event.clientX;\n\n var _trackHorizontal$getB = this.trackHorizontal.getBoundingClientRect(),\n trackLeft = _trackHorizontal$getB.left;\n\n var thumbWidth = this.getThumbHorizontalWidth();\n var clickPosition = thumbWidth - this.prevPageX;\n var offset = -trackLeft + clientX - clickPosition;\n this.view.scrollLeft = this.getScrollLeftForOffset(offset);\n }\n if (this.prevPageY) {\n var clientY = event.clientY;\n\n var _trackVertical$getBou = this.trackVertical.getBoundingClientRect(),\n trackTop = _trackVertical$getBou.top;\n\n var thumbHeight = this.getThumbVerticalHeight();\n var _clickPosition = thumbHeight - this.prevPageY;\n var _offset = -trackTop + clientY - _clickPosition;\n this.view.scrollTop = this.getScrollTopForOffset(_offset);\n }\n return false;\n }\n }, {\n key: 'handleDragEnd',\n value: function handleDragEnd() {\n this.dragging = false;\n this.prevPageX = this.prevPageY = 0;\n this.teardownDragging();\n this.handleDragEndAutoHide();\n }\n }, {\n key: 'handleDragEndAutoHide',\n value: function handleDragEndAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'handleTrackMouseEnter',\n value: function handleTrackMouseEnter() {\n this.trackMouseOver = true;\n this.handleTrackMouseEnterAutoHide();\n }\n }, {\n key: 'handleTrackMouseEnterAutoHide',\n value: function handleTrackMouseEnterAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.showTracks();\n }\n }, {\n key: 'handleTrackMouseLeave',\n value: function handleTrackMouseLeave() {\n this.trackMouseOver = false;\n this.handleTrackMouseLeaveAutoHide();\n }\n }, {\n key: 'handleTrackMouseLeaveAutoHide',\n value: function handleTrackMouseLeaveAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'showTracks',\n value: function showTracks() {\n clearTimeout(this.hideTracksTimeout);\n (0, _domCss2[\"default\"])(this.trackHorizontal, { opacity: 1 });\n (0, _domCss2[\"default\"])(this.trackVertical, { opacity: 1 });\n }\n }, {\n key: 'hideTracks',\n value: function hideTracks() {\n var _this3 = this;\n\n if (this.dragging) return;\n if (this.scrolling) return;\n if (this.trackMouseOver) return;\n var autoHideTimeout = this.props.autoHideTimeout;\n\n clearTimeout(this.hideTracksTimeout);\n this.hideTracksTimeout = setTimeout(function () {\n (0, _domCss2[\"default\"])(_this3.trackHorizontal, { opacity: 0 });\n (0, _domCss2[\"default\"])(_this3.trackVertical, { opacity: 0 });\n }, autoHideTimeout);\n }\n }, {\n key: 'detectScrolling',\n value: function detectScrolling() {\n var _this4 = this;\n\n if (this.scrolling) return;\n this.scrolling = true;\n this.handleScrollStart();\n this.detectScrollingInterval = setInterval(function () {\n if (_this4.lastViewScrollLeft === _this4.viewScrollLeft && _this4.lastViewScrollTop === _this4.viewScrollTop) {\n clearInterval(_this4.detectScrollingInterval);\n _this4.scrolling = false;\n _this4.handleScrollStop();\n }\n _this4.lastViewScrollLeft = _this4.viewScrollLeft;\n _this4.lastViewScrollTop = _this4.viewScrollTop;\n }, 100);\n }\n }, {\n key: 'raf',\n value: function raf(callback) {\n var _this5 = this;\n\n if (this.requestFrame) _raf3[\"default\"].cancel(this.requestFrame);\n this.requestFrame = (0, _raf3[\"default\"])(function () {\n _this5.requestFrame = undefined;\n callback();\n });\n }\n }, {\n key: 'update',\n value: function update(callback) {\n var _this6 = this;\n\n this.raf(function () {\n return _this6._update(callback);\n });\n }\n }, {\n key: '_update',\n value: function _update(callback) {\n var _props4 = this.props,\n onUpdate = _props4.onUpdate,\n hideTracksWhenNotNeeded = _props4.hideTracksWhenNotNeeded;\n\n var values = this.getValues();\n if ((0, _getScrollbarWidth2[\"default\"])()) {\n var scrollLeft = values.scrollLeft,\n clientWidth = values.clientWidth,\n scrollWidth = values.scrollWidth;\n\n var trackHorizontalWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var thumbHorizontalWidth = this.getThumbHorizontalWidth();\n var thumbHorizontalX = scrollLeft / (scrollWidth - clientWidth) * (trackHorizontalWidth - thumbHorizontalWidth);\n var thumbHorizontalStyle = {\n width: thumbHorizontalWidth,\n transform: 'translateX(' + thumbHorizontalX + 'px)'\n };\n var scrollTop = values.scrollTop,\n clientHeight = values.clientHeight,\n scrollHeight = values.scrollHeight;\n\n var trackVerticalHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var thumbVerticalHeight = this.getThumbVerticalHeight();\n var thumbVerticalY = scrollTop / (scrollHeight - clientHeight) * (trackVerticalHeight - thumbVerticalHeight);\n var thumbVerticalStyle = {\n height: thumbVerticalHeight,\n transform: 'translateY(' + thumbVerticalY + 'px)'\n };\n if (hideTracksWhenNotNeeded) {\n var trackHorizontalStyle = {\n visibility: scrollWidth > clientWidth ? 'visible' : 'hidden'\n };\n var trackVerticalStyle = {\n visibility: scrollHeight > clientHeight ? 'visible' : 'hidden'\n };\n (0, _domCss2[\"default\"])(this.trackHorizontal, trackHorizontalStyle);\n (0, _domCss2[\"default\"])(this.trackVertical, trackVerticalStyle);\n }\n (0, _domCss2[\"default\"])(this.thumbHorizontal, thumbHorizontalStyle);\n (0, _domCss2[\"default\"])(this.thumbVertical, thumbVerticalStyle);\n }\n if (onUpdate) onUpdate(values);\n if (typeof callback !== 'function') return;\n callback(values);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this7 = this;\n\n var scrollbarWidth = (0, _getScrollbarWidth2[\"default\"])();\n /* eslint-disable no-unused-vars */\n\n var _props5 = this.props,\n onScroll = _props5.onScroll,\n onScrollFrame = _props5.onScrollFrame,\n onScrollStart = _props5.onScrollStart,\n onScrollStop = _props5.onScrollStop,\n onUpdate = _props5.onUpdate,\n renderView = _props5.renderView,\n renderTrackHorizontal = _props5.renderTrackHorizontal,\n renderTrackVertical = _props5.renderTrackVertical,\n renderThumbHorizontal = _props5.renderThumbHorizontal,\n renderThumbVertical = _props5.renderThumbVertical,\n tagName = _props5.tagName,\n hideTracksWhenNotNeeded = _props5.hideTracksWhenNotNeeded,\n autoHide = _props5.autoHide,\n autoHideTimeout = _props5.autoHideTimeout,\n autoHideDuration = _props5.autoHideDuration,\n thumbSize = _props5.thumbSize,\n thumbMinSize = _props5.thumbMinSize,\n universal = _props5.universal,\n autoHeight = _props5.autoHeight,\n autoHeightMin = _props5.autoHeightMin,\n autoHeightMax = _props5.autoHeightMax,\n style = _props5.style,\n children = _props5.children,\n props = _objectWithoutProperties(_props5, ['onScroll', 'onScrollFrame', 'onScrollStart', 'onScrollStop', 'onUpdate', 'renderView', 'renderTrackHorizontal', 'renderTrackVertical', 'renderThumbHorizontal', 'renderThumbVertical', 'tagName', 'hideTracksWhenNotNeeded', 'autoHide', 'autoHideTimeout', 'autoHideDuration', 'thumbSize', 'thumbMinSize', 'universal', 'autoHeight', 'autoHeightMin', 'autoHeightMax', 'style', 'children']);\n /* eslint-enable no-unused-vars */\n\n var didMountUniversal = this.state.didMountUniversal;\n\n\n var containerStyle = _extends({}, _styles.containerStyleDefault, autoHeight && _extends({}, _styles.containerStyleAutoHeight, {\n minHeight: autoHeightMin,\n maxHeight: autoHeightMax\n }), style);\n\n var viewStyle = _extends({}, _styles.viewStyleDefault, {\n // Hide scrollbars by setting a negative margin\n marginRight: scrollbarWidth ? -scrollbarWidth : 0,\n marginBottom: scrollbarWidth ? -scrollbarWidth : 0\n }, autoHeight && _extends({}, _styles.viewStyleAutoHeight, {\n // Add scrollbarWidth to autoHeight in order to compensate negative margins\n minHeight: (0, _isString2[\"default\"])(autoHeightMin) ? 'calc(' + autoHeightMin + ' + ' + scrollbarWidth + 'px)' : autoHeightMin + scrollbarWidth,\n maxHeight: (0, _isString2[\"default\"])(autoHeightMax) ? 'calc(' + autoHeightMax + ' + ' + scrollbarWidth + 'px)' : autoHeightMax + scrollbarWidth\n }), autoHeight && universal && !didMountUniversal && {\n minHeight: autoHeightMin,\n maxHeight: autoHeightMax\n }, universal && !didMountUniversal && _styles.viewStyleUniversalInitial);\n\n var trackAutoHeightStyle = {\n transition: 'opacity ' + autoHideDuration + 'ms',\n opacity: 0\n };\n\n var trackHorizontalStyle = _extends({}, _styles.trackHorizontalStyleDefault, autoHide && trackAutoHeightStyle, (!scrollbarWidth || universal && !didMountUniversal) && {\n display: 'none'\n });\n\n var trackVerticalStyle = _extends({}, _styles.trackVerticalStyleDefault, autoHide && trackAutoHeightStyle, (!scrollbarWidth || universal && !didMountUniversal) && {\n display: 'none'\n });\n\n return (0, _react.createElement)(tagName, _extends({}, props, { style: containerStyle, ref: function ref(_ref3) {\n _this7.container = _ref3;\n } }), [(0, _react.cloneElement)(renderView({ style: viewStyle }), { key: 'view', ref: function ref(_ref4) {\n _this7.view = _ref4;\n } }, children), (0, _react.cloneElement)(renderTrackHorizontal({ style: trackHorizontalStyle }), { key: 'trackHorizontal', ref: function ref(_ref5) {\n _this7.trackHorizontal = _ref5;\n } }, (0, _react.cloneElement)(renderThumbHorizontal({ style: _styles.thumbHorizontalStyleDefault }), { ref: function ref(_ref6) {\n _this7.thumbHorizontal = _ref6;\n } })), (0, _react.cloneElement)(renderTrackVertical({ style: trackVerticalStyle }), { key: 'trackVertical', ref: function ref(_ref7) {\n _this7.trackVertical = _ref7;\n } }, (0, _react.cloneElement)(renderThumbVertical({ style: _styles.thumbVerticalStyleDefault }), { ref: function ref(_ref8) {\n _this7.thumbVertical = _ref8;\n } }))]);\n }\n }]);\n\n return Scrollbars;\n}(_react.Component);\n\nexports[\"default\"] = Scrollbars;\n\n\nScrollbars.propTypes = {\n onScroll: _propTypes2[\"default\"].func,\n onScrollFrame: _propTypes2[\"default\"].func,\n onScrollStart: _propTypes2[\"default\"].func,\n onScrollStop: _propTypes2[\"default\"].func,\n onUpdate: _propTypes2[\"default\"].func,\n renderView: _propTypes2[\"default\"].func,\n renderTrackHorizontal: _propTypes2[\"default\"].func,\n renderTrackVertical: _propTypes2[\"default\"].func,\n renderThumbHorizontal: _propTypes2[\"default\"].func,\n renderThumbVertical: _propTypes2[\"default\"].func,\n tagName: _propTypes2[\"default\"].string,\n thumbSize: _propTypes2[\"default\"].number,\n thumbMinSize: _propTypes2[\"default\"].number,\n hideTracksWhenNotNeeded: _propTypes2[\"default\"].bool,\n autoHide: _propTypes2[\"default\"].bool,\n autoHideTimeout: _propTypes2[\"default\"].number,\n autoHideDuration: _propTypes2[\"default\"].number,\n autoHeight: _propTypes2[\"default\"].bool,\n autoHeightMin: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].string]),\n autoHeightMax: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].string]),\n universal: _propTypes2[\"default\"].bool,\n style: _propTypes2[\"default\"].object,\n children: _propTypes2[\"default\"].node\n};\n\nScrollbars.defaultProps = {\n renderView: _defaultRenderElements.renderViewDefault,\n renderTrackHorizontal: _defaultRenderElements.renderTrackHorizontalDefault,\n renderTrackVertical: _defaultRenderElements.renderTrackVerticalDefault,\n renderThumbHorizontal: _defaultRenderElements.renderThumbHorizontalDefault,\n renderThumbVertical: _defaultRenderElements.renderThumbVerticalDefault,\n tagName: 'div',\n thumbMinSize: 30,\n hideTracksWhenNotNeeded: false,\n autoHide: false,\n autoHideTimeout: 1000,\n autoHideDuration: 200,\n autoHeight: false,\n autoHeightMin: 0,\n autoHeightMax: 200,\n universal: false\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar containerStyleDefault = exports.containerStyleDefault = {\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n height: '100%'\n};\n\n// Overrides containerStyleDefault properties\nvar containerStyleAutoHeight = exports.containerStyleAutoHeight = {\n height: 'auto'\n};\n\nvar viewStyleDefault = exports.viewStyleDefault = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'scroll',\n WebkitOverflowScrolling: 'touch'\n};\n\n// Overrides viewStyleDefault properties\nvar viewStyleAutoHeight = exports.viewStyleAutoHeight = {\n position: 'relative',\n top: undefined,\n left: undefined,\n right: undefined,\n bottom: undefined\n};\n\nvar viewStyleUniversalInitial = exports.viewStyleUniversalInitial = {\n overflow: 'hidden',\n marginRight: 0,\n marginBottom: 0\n};\n\nvar trackHorizontalStyleDefault = exports.trackHorizontalStyleDefault = {\n position: 'absolute',\n height: 6\n};\n\nvar trackVerticalStyleDefault = exports.trackVerticalStyleDefault = {\n position: 'absolute',\n width: 6\n};\n\nvar thumbHorizontalStyleDefault = exports.thumbHorizontalStyleDefault = {\n position: 'relative',\n display: 'block',\n height: '100%'\n};\n\nvar thumbVerticalStyleDefault = exports.thumbVerticalStyleDefault = {\n position: 'relative',\n display: 'block',\n width: '100%'\n};\n\nvar disableSelectStyle = exports.disableSelectStyle = {\n userSelect: 'none'\n};\n\nvar disableSelectStyleReset = exports.disableSelectStyleReset = {\n userSelect: ''\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scrollbars = undefined;\n\nvar _Scrollbars = require('./Scrollbars');\n\nvar _Scrollbars2 = _interopRequireDefault(_Scrollbars);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nexports[\"default\"] = _Scrollbars2[\"default\"];\nexports.Scrollbars = _Scrollbars2[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getInnerHeight;\nfunction getInnerHeight(el) {\n var clientHeight = el.clientHeight;\n\n var _getComputedStyle = getComputedStyle(el),\n paddingTop = _getComputedStyle.paddingTop,\n paddingBottom = _getComputedStyle.paddingBottom;\n\n return clientHeight - parseFloat(paddingTop) - parseFloat(paddingBottom);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getInnerWidth;\nfunction getInnerWidth(el) {\n var clientWidth = el.clientWidth;\n\n var _getComputedStyle = getComputedStyle(el),\n paddingLeft = _getComputedStyle.paddingLeft,\n paddingRight = _getComputedStyle.paddingRight;\n\n return clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getScrollbarWidth;\n\nvar _domCss = require('dom-css');\n\nvar _domCss2 = _interopRequireDefault(_domCss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar scrollbarWidth = false;\n\nfunction getScrollbarWidth() {\n var cacheEnabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n if (cacheEnabled && scrollbarWidth !== false) return scrollbarWidth;\n /* istanbul ignore else */\n if (typeof document !== 'undefined') {\n var div = document.createElement('div');\n (0, _domCss2[\"default\"])(div, {\n width: 100,\n height: 100,\n position: 'absolute',\n top: -9999,\n overflow: 'scroll',\n MsOverflowStyle: 'scrollbar'\n });\n document.body.appendChild(div);\n scrollbarWidth = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n } else {\n scrollbarWidth = 0;\n }\n return scrollbarWidth || 0;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isString;\nfunction isString(maybe) {\n return typeof maybe === 'string';\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = returnFalse;\nfunction returnFalse() {\n return false;\n}","import { useCallback, useEffect, useMemo, useRef } from 'react';\n\ninterface Props {\n onTriggered: (e: Event) => void;\n disableClick?: boolean;\n disableTouch?: boolean;\n disableKeys?: boolean;\n allowAnyKey?: boolean;\n triggerKeys?: string[];\n}\n\ntype EventConfigItem = [boolean | undefined, string, (e: Event) => void];\n\n/**\n * Hook used to detect clicks outside a component (or an escape key press). onTriggered function is triggered on `click`, `touch` or escape `keyup` event.\n *\n */\nexport function useDetectClickOutside({\n onTriggered,\n disableClick,\n disableTouch,\n disableKeys,\n allowAnyKey,\n triggerKeys,\n}: Props) {\n const ref = useRef(null);\n\n const keyListener = useCallback(\n (e: KeyboardEvent) => {\n if (allowAnyKey) {\n onTriggered(e);\n } else if (triggerKeys) {\n if (triggerKeys.includes(e.key)) {\n onTriggered(e);\n }\n } else {\n if (e.key === 'Escape') {\n onTriggered(e);\n }\n }\n },\n [allowAnyKey, triggerKeys, onTriggered]\n );\n\n const clickOrTouchListener = useCallback(\n (e: MouseEvent | TouchEvent) => {\n if (ref && ref.current) {\n if (!(ref.current! as any).contains(e.target)) {\n onTriggered?.(e);\n }\n }\n },\n [ref.current, onTriggered]\n );\n\n const eventsConfig: EventConfigItem[] = useMemo(\n () => [\n [disableClick, 'click', clickOrTouchListener],\n [disableTouch, 'touchstart', clickOrTouchListener],\n [disableKeys, 'keyup', keyListener],\n ],\n [disableClick, disableTouch, disableKeys, clickOrTouchListener, keyListener]\n );\n\n useEffect(() => {\n eventsConfig.map((eventConfigItem) => {\n const [isDisabled, eventName, listener] = eventConfigItem;\n\n if (!isDisabled) {\n document.addEventListener(eventName, listener);\n }\n });\n\n return () => {\n eventsConfig.map((eventConfigItem) => {\n const [isDisabled, eventName, listener] = eventConfigItem;\n\n if (!isDisabled) {\n document.removeEventListener(eventName, listener);\n }\n });\n };\n }, [eventsConfig]);\n\n return ref;\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar InfiniteScroll = function (_Component) {\n _inherits(InfiniteScroll, _Component);\n\n function InfiniteScroll(props) {\n _classCallCheck(this, InfiniteScroll);\n\n var _this = _possibleConstructorReturn(this, (InfiniteScroll.__proto__ || Object.getPrototypeOf(InfiniteScroll)).call(this, props));\n\n _this.scrollListener = _this.scrollListener.bind(_this);\n _this.eventListenerOptions = _this.eventListenerOptions.bind(_this);\n _this.mousewheelListener = _this.mousewheelListener.bind(_this);\n return _this;\n }\n\n _createClass(InfiniteScroll, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.pageLoaded = this.props.pageStart;\n this.options = this.eventListenerOptions();\n this.attachScrollListener();\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n if (this.props.isReverse && this.loadMore) {\n var parentElement = this.getParentElement(this.scrollComponent);\n parentElement.scrollTop = parentElement.scrollHeight - this.beforeScrollHeight + this.beforeScrollTop;\n this.loadMore = false;\n }\n this.attachScrollListener();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.detachScrollListener();\n this.detachMousewheelListener();\n }\n }, {\n key: 'isPassiveSupported',\n value: function isPassiveSupported() {\n var passive = false;\n\n var testOptions = {\n get passive() {\n passive = true;\n }\n };\n\n try {\n document.addEventListener('test', null, testOptions);\n document.removeEventListener('test', null, testOptions);\n } catch (e) {\n // ignore\n }\n return passive;\n }\n }, {\n key: 'eventListenerOptions',\n value: function eventListenerOptions() {\n var options = this.props.useCapture;\n\n if (this.isPassiveSupported()) {\n options = {\n useCapture: this.props.useCapture,\n passive: true\n };\n } else {\n options = {\n passive: false\n };\n }\n return options;\n }\n\n // Set a defaut loader for all your `InfiniteScroll` components\n\n }, {\n key: 'setDefaultLoader',\n value: function setDefaultLoader(loader) {\n this.defaultLoader = loader;\n }\n }, {\n key: 'detachMousewheelListener',\n value: function detachMousewheelListener() {\n var scrollEl = window;\n if (this.props.useWindow === false) {\n scrollEl = this.scrollComponent.parentNode;\n }\n\n scrollEl.removeEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);\n }\n }, {\n key: 'detachScrollListener',\n value: function detachScrollListener() {\n var scrollEl = window;\n if (this.props.useWindow === false) {\n scrollEl = this.getParentElement(this.scrollComponent);\n }\n\n scrollEl.removeEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);\n scrollEl.removeEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);\n }\n }, {\n key: 'getParentElement',\n value: function getParentElement(el) {\n var scrollParent = this.props.getScrollParent && this.props.getScrollParent();\n if (scrollParent != null) {\n return scrollParent;\n }\n return el && el.parentNode;\n }\n }, {\n key: 'filterProps',\n value: function filterProps(props) {\n return props;\n }\n }, {\n key: 'attachScrollListener',\n value: function attachScrollListener() {\n var parentElement = this.getParentElement(this.scrollComponent);\n\n if (!this.props.hasMore || !parentElement) {\n return;\n }\n\n var scrollEl = window;\n if (this.props.useWindow === false) {\n scrollEl = parentElement;\n }\n\n scrollEl.addEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);\n scrollEl.addEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);\n scrollEl.addEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);\n\n if (this.props.initialLoad) {\n this.scrollListener();\n }\n }\n }, {\n key: 'mousewheelListener',\n value: function mousewheelListener(e) {\n // Prevents Chrome hangups\n // See: https://stackoverflow.com/questions/47524205/random-high-content-download-time-in-chrome/47684257#47684257\n if (e.deltaY === 1 && !this.isPassiveSupported()) {\n e.preventDefault();\n }\n }\n }, {\n key: 'scrollListener',\n value: function scrollListener() {\n var el = this.scrollComponent;\n var scrollEl = window;\n var parentNode = this.getParentElement(el);\n\n var offset = void 0;\n if (this.props.useWindow) {\n var doc = document.documentElement || document.body.parentNode || document.body;\n var scrollTop = scrollEl.pageYOffset !== undefined ? scrollEl.pageYOffset : doc.scrollTop;\n if (this.props.isReverse) {\n offset = scrollTop;\n } else {\n offset = this.calculateOffset(el, scrollTop);\n }\n } else if (this.props.isReverse) {\n offset = parentNode.scrollTop;\n } else {\n offset = el.scrollHeight - parentNode.scrollTop - parentNode.clientHeight;\n }\n\n // Here we make sure the element is visible as well as checking the offset\n if (offset < Number(this.props.threshold) && el && el.offsetParent !== null) {\n this.detachScrollListener();\n this.beforeScrollHeight = parentNode.scrollHeight;\n this.beforeScrollTop = parentNode.scrollTop;\n // Call loadMore after detachScrollListener to allow for non-async loadMore functions\n if (typeof this.props.loadMore === 'function') {\n this.props.loadMore(this.pageLoaded += 1);\n this.loadMore = true;\n }\n }\n }\n }, {\n key: 'calculateOffset',\n value: function calculateOffset(el, scrollTop) {\n if (!el) {\n return 0;\n }\n\n return this.calculateTopPosition(el) + (el.offsetHeight - scrollTop - window.innerHeight);\n }\n }, {\n key: 'calculateTopPosition',\n value: function calculateTopPosition(el) {\n if (!el) {\n return 0;\n }\n return el.offsetTop + this.calculateTopPosition(el.offsetParent);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var renderProps = this.filterProps(this.props);\n\n var children = renderProps.children,\n element = renderProps.element,\n hasMore = renderProps.hasMore,\n initialLoad = renderProps.initialLoad,\n isReverse = renderProps.isReverse,\n loader = renderProps.loader,\n loadMore = renderProps.loadMore,\n pageStart = renderProps.pageStart,\n ref = renderProps.ref,\n threshold = renderProps.threshold,\n useCapture = renderProps.useCapture,\n useWindow = renderProps.useWindow,\n getScrollParent = renderProps.getScrollParent,\n props = _objectWithoutProperties(renderProps, ['children', 'element', 'hasMore', 'initialLoad', 'isReverse', 'loader', 'loadMore', 'pageStart', 'ref', 'threshold', 'useCapture', 'useWindow', 'getScrollParent']);\n\n props.ref = function (node) {\n _this2.scrollComponent = node;\n if (ref) {\n ref(node);\n }\n };\n\n var childrenArray = [children];\n if (hasMore) {\n if (loader) {\n isReverse ? childrenArray.unshift(loader) : childrenArray.push(loader);\n } else if (this.defaultLoader) {\n isReverse ? childrenArray.unshift(this.defaultLoader) : childrenArray.push(this.defaultLoader);\n }\n }\n return _react2.default.createElement(element, props, childrenArray);\n }\n }]);\n\n return InfiniteScroll;\n}(_react.Component);\n\nInfiniteScroll.propTypes = {\n children: _propTypes2.default.node.isRequired,\n element: _propTypes2.default.node,\n hasMore: _propTypes2.default.bool,\n initialLoad: _propTypes2.default.bool,\n isReverse: _propTypes2.default.bool,\n loader: _propTypes2.default.node,\n loadMore: _propTypes2.default.func.isRequired,\n pageStart: _propTypes2.default.number,\n ref: _propTypes2.default.func,\n getScrollParent: _propTypes2.default.func,\n threshold: _propTypes2.default.number,\n useCapture: _propTypes2.default.bool,\n useWindow: _propTypes2.default.bool\n};\nInfiniteScroll.defaultProps = {\n element: 'div',\n hasMore: false,\n initialLoad: true,\n pageStart: 0,\n ref: null,\n threshold: 250,\n useWindow: true,\n isReverse: false,\n useCapture: false,\n loader: null,\n getScrollParent: null\n};\nexports.default = InfiniteScroll;\nmodule.exports = exports['default'];\n","module.exports = require('./dist/InfiniteScroll')\n","var React = require('react');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar React__default = /*#__PURE__*/_interopDefaultLegacy(React);\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nvar canvasStyle = {\n position: 'absolute',\n bottom: 0,\n left: 0,\n height: 0,\n overflow: 'hidden',\n 'padding-top': 0,\n 'padding-bottom': 0,\n border: 'none'\n};\nvar mirrorProps = ['box-sizing', 'width', 'font-size', 'font-weight', 'font-family', 'font-style', 'letter-spacing', 'text-indent', 'white-space', 'word-break', 'overflow-wrap', 'padding-left', 'padding-right'];\n\nfunction omit(obj, omittedKeys) {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n var ret = {};\n Object.keys(obj).forEach(function (key) {\n if (omittedKeys.indexOf(key) > -1) {\n return;\n }\n\n ret[key] = obj[key];\n });\n return ret;\n}\n\nvar _excluded = [\"component\", \"className\", \"unsafeHTML\"];\n\nfunction hookNode(node, basedOn) {\n /* eslint-env browser */\n if (basedOn !== 'letters' && basedOn !== 'words') {\n throw new Error(\"Unsupported options basedOn: \" + basedOn);\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n var frag = document.createDocumentFragment();\n var units;\n\n switch (basedOn) {\n case 'words':\n units = node.textContent.split(/\\b|(?=\\W)/);\n break;\n\n case 'letters':\n units = Array.from(node.textContent);\n break;\n }\n\n units.forEach(function (unit) {\n frag.appendChild(dummySpan(unit));\n });\n node.parentNode.replaceChild(frag, node);\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n var nodes = [].slice.call(node.childNodes);\n var len = nodes.length;\n\n for (var i = 0; i < len; i++) {\n hookNode(nodes[i], basedOn);\n }\n }\n}\n\nfunction dummySpan(text) {\n var span = document.createElement('span');\n span.className = 'LinesEllipsis-unit';\n span.textContent = text;\n return span;\n}\n\nfunction unwrapTextNode(node) {\n node.parentNode.replaceChild(document.createTextNode(node.textContent), node);\n}\n\nfunction removeFollowingElementLeaves(node, root) {\n if (!root.contains(node) || node === root) return;\n\n while (node.nextElementSibling) {\n node.parentNode.removeChild(node.nextElementSibling);\n }\n\n removeFollowingElementLeaves(node.parentNode, root);\n}\n\nfunction findBlockAncestor(node) {\n var ndAncestor = node;\n\n while (ndAncestor = ndAncestor.parentNode) {\n if (/p|div|main|section|h\\d|ul|ol|li/.test(ndAncestor.tagName.toLowerCase())) {\n return ndAncestor;\n }\n }\n}\n\nfunction affectLayout(ndUnit) {\n return !!(ndUnit.offsetHeight && (ndUnit.offsetWidth || /\\S/.test(ndUnit.textContent)));\n}\n\nvar defaultProps = {\n component: 'div',\n unsafeHTML: '',\n maxLine: 1,\n ellipsis: '…',\n // …\n ellipsisHTML: undefined,\n className: '',\n basedOn: undefined,\n onReflow: function onReflow() {},\n winWidth: undefined // for the HOC\n\n};\nvar usedProps = Object.keys(defaultProps);\n/**\n * props.unsafeHTML {String} the rich content you want to clamp\n * props.maxLine {Number|String} max lines allowed\n * props.ellipsis {String} the ellipsis indicator\n * props.basedOn {String} letters|words\n * props.className {String}\n */\n\nvar HTMLEllipsis = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(HTMLEllipsis, _React$Component);\n\n function HTMLEllipsis(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.state = {\n html: props.unsafeHTML,\n clamped: false\n };\n _this.canvas = null;\n _this.maxLine = 0;\n _this.nlUnits = [];\n return _this;\n }\n\n var _proto = HTMLEllipsis.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.initCanvas();\n this.reflow(this.props);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.winWidth !== this.props.winWidth) {\n this.copyStyleToCanvas();\n }\n\n if (this.props !== prevProps) {\n this.reflow(this.props);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.canvas.parentNode.removeChild(this.canvas);\n this.canvas = null;\n };\n\n _proto.setState = function setState(state, callback) {\n if (typeof state.clamped !== 'undefined') {\n this.clamped = state.clamped;\n }\n\n return _React$Component.prototype.setState.call(this, state, callback);\n };\n\n _proto.initCanvas = function initCanvas() {\n if (this.canvas) return;\n var canvas = this.canvas = document.createElement('div');\n canvas.className = \"LinesEllipsis-canvas \" + this.props.className;\n canvas.setAttribute('aria-hidden', 'true');\n this.copyStyleToCanvas();\n Object.keys(canvasStyle).forEach(function (key) {\n canvas.style[key] = canvasStyle[key];\n });\n document.body.appendChild(canvas);\n };\n\n _proto.copyStyleToCanvas = function copyStyleToCanvas() {\n var _this2 = this;\n\n var targetStyle = window.getComputedStyle(this.target);\n mirrorProps.forEach(function (key) {\n _this2.canvas.style[key] = targetStyle[key];\n });\n };\n\n _proto.reflow = function reflow(props) {\n /* eslint-disable no-control-regex */\n this.maxLine = +props.maxLine || 1;\n this.canvas.innerHTML = props.unsafeHTML;\n var basedOn = props.basedOn || (/^[\\x00-\\x7F]+$/.test(props.unsafeHTML) ? 'words' : 'letters');\n hookNode(this.canvas, basedOn);\n var clamped = this.putEllipsis(this.calcIndexes());\n var newState = {\n clamped: clamped,\n html: this.canvas.innerHTML\n };\n this.setState(newState, props.onReflow.bind(this, newState));\n };\n\n _proto.calcIndexes = function calcIndexes() {\n var indexes = [0];\n var nlUnits = this.nlUnits = Array.from(this.canvas.querySelectorAll('.LinesEllipsis-unit'));\n var len = nlUnits.length;\n if (!nlUnits.length) return indexes;\n var nd1stLayoutUnit = nlUnits.find(affectLayout);\n if (!nd1stLayoutUnit) return indexes;\n var line = 1;\n var offsetTop = nd1stLayoutUnit.offsetTop;\n\n for (var i = 1; i < len; i++) {\n if (affectLayout(nlUnits[i]) && nlUnits[i].offsetTop - offsetTop > 1) {\n line++;\n indexes.push(i);\n offsetTop = nlUnits[i].offsetTop;\n\n if (line > this.maxLine) {\n break;\n }\n }\n }\n\n return indexes;\n };\n\n _proto.putEllipsis = function putEllipsis(indexes) {\n if (indexes.length <= this.maxLine) return false;\n this.nlUnits = this.nlUnits.slice(0, indexes[this.maxLine]);\n var ndPrevUnit = this.nlUnits.pop();\n var ndEllipsis = this.makeEllipsisSpan();\n\n do {\n removeFollowingElementLeaves(ndPrevUnit, this.canvas);\n findBlockAncestor(ndPrevUnit).appendChild(ndEllipsis);\n ndPrevUnit = this.nlUnits.pop();\n } while (ndPrevUnit && (!affectLayout(ndPrevUnit) || ndEllipsis.offsetHeight > ndPrevUnit.offsetHeight || ndEllipsis.offsetTop > ndPrevUnit.offsetTop));\n\n if (ndPrevUnit) {\n unwrapTextNode(ndPrevUnit);\n }\n\n this.nlUnits.forEach(unwrapTextNode);\n return true;\n };\n\n _proto.makeEllipsisSpan = function makeEllipsisSpan() {\n var _this$props = this.props,\n ellipsisHTML = _this$props.ellipsisHTML,\n ellipsis = _this$props.ellipsis;\n var frag = document.createElement('span');\n frag.appendChild(document.createElement('wbr'));\n var ndEllipsis = document.createElement('span');\n ndEllipsis.className = 'LinesEllipsis-ellipsis';\n\n if (ellipsisHTML) {\n ndEllipsis.innerHTML = ellipsisHTML;\n } else {\n ndEllipsis.textContent = ellipsis;\n }\n\n frag.appendChild(ndEllipsis);\n return frag;\n } // expose\n ;\n\n _proto.isClamped = function isClamped() {\n return this.clamped; // do not use state.clamped. #27\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$state = this.state,\n html = _this$state.html,\n clamped = _this$state.clamped;\n\n var _this$props2 = this.props,\n Component = _this$props2.component,\n className = _this$props2.className,\n unsafeHTML = _this$props2.unsafeHTML,\n rest = _objectWithoutPropertiesLoose(_this$props2, _excluded);\n\n return /*#__PURE__*/React__default[\"default\"].createElement(Component, _extends({\n className: \"LinesEllipsis \" + (clamped ? 'LinesEllipsis--clamped' : '') + \" \" + className,\n ref: function ref(node) {\n return _this3.target = node;\n }\n }, omit(rest, usedProps)), /*#__PURE__*/React__default[\"default\"].createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: clamped ? html : unsafeHTML\n }\n }));\n };\n\n return HTMLEllipsis;\n}(React__default[\"default\"].Component);\n\nHTMLEllipsis.defaultProps = defaultProps;\n\nmodule.exports = HTMLEllipsis;\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// Generated by CoffeeScript 1.6.2\n(function() {\n 'use strict';\n var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], function() {\n return root.i18n = factory();\n });\n } else if (typeof module === 'object' && module.exports) {\n return module.exports = factory();\n } else {\n return root.i18n = factory();\n }\n })((typeof self !== \"undefined\" && self !== null ? self : this), function() {\n var Translator, i18n, translator;\n\n Translator = (function() {\n function Translator() {\n this.translate = __bind(this.translate, this); this.data = {\n values: {},\n contexts: []\n };\n this.globalContext = {};\n }\n\n Translator.prototype.translate = function(text, defaultNumOrFormatting, numOrFormattingOrContext, formattingOrContext, context) {\n var defaultText, formatting, isObject, num;\n\n if (context == null) {\n context = this.globalContext;\n }\n isObject = function(obj) {\n var type;\n\n type = typeof obj;\n return type === \"function\" || type === \"object\" && !!obj;\n };\n if (isObject(defaultNumOrFormatting)) {\n defaultText = null;\n num = null;\n formatting = defaultNumOrFormatting;\n context = numOrFormattingOrContext || this.globalContext;\n } else {\n if (typeof defaultNumOrFormatting === \"number\") {\n defaultText = null;\n num = defaultNumOrFormatting;\n formatting = numOrFormattingOrContext;\n context = formattingOrContext || this.globalContext;\n } else {\n defaultText = defaultNumOrFormatting;\n if (typeof numOrFormattingOrContext === \"number\") {\n num = numOrFormattingOrContext;\n formatting = formattingOrContext;\n context = context;\n } else {\n num = null;\n formatting = numOrFormattingOrContext;\n context = formattingOrContext || this.globalContext;\n }\n }\n }\n if (isObject(text)) {\n if (isObject(text['i18n'])) {\n text = text['i18n'];\n }\n return this.translateHash(text, context);\n } else {\n return this.translateText(text, num, formatting, context, defaultText);\n }\n };\n\n Translator.prototype.add = function(d) {\n var c, k, v, _i, _len, _ref, _ref1, _results;\n\n if ((d.values != null)) {\n _ref = d.values;\n for (k in _ref) {\n v = _ref[k];\n this.data.values[k] = v;\n }\n }\n if ((d.contexts != null)) {\n _ref1 = d.contexts;\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n c = _ref1[_i];\n _results.push(this.data.contexts.push(c));\n }\n return _results;\n }\n };\n\n Translator.prototype.setContext = function(key, value) {\n return this.globalContext[key] = value;\n };\n\n Translator.prototype.extend = function(ext) {\n return this.extension = ext;\n };\n\n Translator.prototype.clearContext = function(key) {\n return this.globalContext[key] = null;\n };\n\n Translator.prototype.reset = function() {\n this.resetData();\n return this.resetContext();\n };\n\n Translator.prototype.resetData = function() {\n return this.data = {\n values: {},\n contexts: []\n };\n };\n\n Translator.prototype.resetContext = function() {\n return this.globalContext = {};\n };\n\n Translator.prototype.translateHash = function(hash, context) {\n var k, v;\n\n for (k in hash) {\n v = hash[k];\n if (typeof v === \"string\") {\n hash[k] = this.translateText(v, null, null, context);\n }\n }\n return hash;\n };\n\n Translator.prototype.translateText = function(text, num, formatting, context, defaultText) {\n var contextData, result;\n\n if (context == null) {\n context = this.globalContext;\n }\n if (this.data == null) {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n contextData = this.getContextData(this.data, context);\n if (contextData != null) {\n result = this.findTranslation(text, num, formatting, contextData.values, defaultText);\n }\n if (result == null) {\n result = this.findTranslation(text, num, formatting, this.data.values, defaultText);\n }\n if (result == null) {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n return result;\n };\n\n Translator.prototype.findTranslation = function(text, num, formatting, data, defaultText) {\n var a, b, c, d, e, result, triple, value, _i, _len;\n\n value = data[text];\n if (value == null) {\n return null;\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n if (this.extension && typeof this.extension === \"function\") {\n value = this.extension(text, num, formatting, value);\n value = this.applyNumbers(value, num);\n return this.applyFormatting(value, num, formatting);\n } else {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n }\n if ((num == null) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return this.applyFormatting(value, num, formatting);\n }\n } else {\n if (value instanceof Array || value.length) {\n a = num === null;\n for (_i = 0, _len = value.length; _i < _len; _i++) {\n triple = value[_i];\n b = triple[0] === null;\n c = triple[1] === null;\n d = num >= triple[0];\n e = num <= triple[1];\n if (a && b && c || !a && (!b && d && (c || e) || b && !c && e)) {\n result = this.applyFormatting(triple[2].replace(\"-%n\", String(-num)), num, formatting);\n return this.applyFormatting(result.replace(\"%n\", String(num)), num, formatting);\n }\n }\n }\n }\n return null;\n };\n\n Translator.prototype.applyNumbers = function(str, num) {\n str = str.replace(\"-%n\", String(-num));\n str = str.replace(\"%n\", String(num));\n return str;\n };\n\n Translator.prototype.getContextData = function(data, context) {\n var c, equal, key, value, _i, _len, _ref, _ref1;\n\n if (data.contexts == null) {\n return null;\n }\n _ref = data.contexts;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n c = _ref[_i];\n equal = true;\n _ref1 = c.matches;\n for (key in _ref1) {\n value = _ref1[key];\n equal = equal && value === context[key];\n }\n if (equal) {\n return c;\n }\n }\n return null;\n };\n\n Translator.prototype.useOriginalText = function(text, num, formatting) {\n if (num == null) {\n return this.applyFormatting(text, num, formatting);\n }\n return this.applyFormatting(text.replace(\"%n\", String(num)), num, formatting);\n };\n\n Translator.prototype.applyFormatting = function(text, num, formatting) {\n var ind, regex;\n\n for (ind in formatting) {\n regex = new RegExp(\"%{\" + ind + \"}\", \"g\");\n text = text.replace(regex, formatting[ind]);\n }\n return text;\n };\n\n return Translator;\n\n })();\n translator = new Translator();\n i18n = translator.translate;\n i18n.translator = translator;\n i18n.create = function(data) {\n var trans;\n\n trans = new Translator();\n if (data != null) {\n trans.add(data);\n }\n trans.translate.create = i18n.create;\n trans.translate.translator = trans;\n return trans.translate;\n };\n return i18n;\n });\n\n}).call(this);\n","\nvar space = require('to-space-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toCamelCase\n\n/**\n * Convert a `string` to camel case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toCamelCase(string) {\n return space(string).replace(/\\s(\\w)/g, function (matches, letter) {\n return letter.toUpperCase()\n })\n}\n","\n/**\n * Export.\n */\n\nmodule.exports = toNoCase\n\n/**\n * Test whether a string is camel-case.\n */\n\nvar hasSpace = /\\s/\nvar hasSeparator = /(_|-|\\.|:)/\nvar hasCamel = /([a-z][A-Z]|[A-Z][a-z])/\n\n/**\n * Remove any starting case from a `string`, like camel or snake, but keep\n * spaces and punctuation that may be important otherwise.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toNoCase(string) {\n if (hasSpace.test(string)) return string.toLowerCase()\n if (hasSeparator.test(string)) return (unseparate(string) || string).toLowerCase()\n if (hasCamel.test(string)) return uncamelize(string).toLowerCase()\n return string.toLowerCase()\n}\n\n/**\n * Separator splitter.\n */\n\nvar separatorSplitter = /[\\W_]+(.|$)/g\n\n/**\n * Un-separate a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction unseparate(string) {\n return string.replace(separatorSplitter, function (m, next) {\n return next ? ' ' + next : ''\n })\n}\n\n/**\n * Camelcase splitter.\n */\n\nvar camelSplitter = /(.)([A-Z]+)/g\n\n/**\n * Un-camelcase a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction uncamelize(string) {\n return string.replace(camelSplitter, function (m, previous, uppers) {\n return previous + ' ' + uppers.toLowerCase().split('').join(' ')\n })\n}\n","\nvar clean = require('to-no-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toSpaceCase\n\n/**\n * Convert a `string` to space case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toSpaceCase(string) {\n return clean(string).replace(/[\\W_]+(.|$)/g, function (matches, match) {\n return match ? ' ' + match : ''\n }).trim()\n}\n","export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array<string>(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler<MailtoComponents> = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler<URNComponents,URNOptions> = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler<UUIDComponents, URIOptions, URNComponents> = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","var map = {\n\t\"./add_to_cart.svg\": [\n\t\t7732,\n\t\t9,\n\t\t732\n\t],\n\t\"./arrow.svg\": [\n\t\t3268,\n\t\t9,\n\t\t268\n\t],\n\t\"./arrowDown.svg\": [\n\t\t5711,\n\t\t9,\n\t\t711\n\t],\n\t\"./back.svg\": [\n\t\t9794,\n\t\t9,\n\t\t794\n\t],\n\t\"./calendar.svg\": [\n\t\t2563,\n\t\t9,\n\t\t563\n\t],\n\t\"./cart.svg\": [\n\t\t4003,\n\t\t9,\n\t\t3\n\t],\n\t\"./cart_view_less.svg\": [\n\t\t3169,\n\t\t9,\n\t\t169\n\t],\n\t\"./cart_view_more.svg\": [\n\t\t1181,\n\t\t9,\n\t\t181\n\t],\n\t\"./check.svg\": [\n\t\t9182,\n\t\t9,\n\t\t182\n\t],\n\t\"./checkmark.svg\": [\n\t\t8313,\n\t\t9,\n\t\t313\n\t],\n\t\"./checkmark_green.svg\": [\n\t\t2979,\n\t\t9,\n\t\t979\n\t],\n\t\"./clock.svg\": [\n\t\t6221,\n\t\t9,\n\t\t221\n\t],\n\t\"./closeBig.svg\": [\n\t\t890,\n\t\t9,\n\t\t890\n\t],\n\t\"./close_black.svg\": [\n\t\t2277,\n\t\t9,\n\t\t277\n\t],\n\t\"./close_white.svg\": [\n\t\t6037,\n\t\t9,\n\t\t37\n\t],\n\t\"./dark_left_arrow.svg\": [\n\t\t7943,\n\t\t9\n\t],\n\t\"./dark_right_arrow.svg\": [\n\t\t8382,\n\t\t9\n\t],\n\t\"./delete.svg\": [\n\t\t3894,\n\t\t9,\n\t\t894\n\t],\n\t\"./doc.svg\": [\n\t\t4577,\n\t\t9,\n\t\t577\n\t],\n\t\"./docx.svg\": [\n\t\t5578,\n\t\t9,\n\t\t578\n\t],\n\t\"./download.svg\": [\n\t\t8525,\n\t\t9,\n\t\t525\n\t],\n\t\"./duplicate_cart.svg\": [\n\t\t7667,\n\t\t9,\n\t\t667\n\t],\n\t\"./edit.svg\": [\n\t\t1957,\n\t\t9,\n\t\t957\n\t],\n\t\"./error.svg\": [\n\t\t9985,\n\t\t9\n\t],\n\t\"./exported_list.svg\": [\n\t\t40,\n\t\t9,\n\t\t40\n\t],\n\t\"./file.svg\": [\n\t\t9562,\n\t\t9,\n\t\t562\n\t],\n\t\"./folder.svg\": [\n\t\t9038,\n\t\t9,\n\t\t38\n\t],\n\t\"./go_to_wish_list.svg\": [\n\t\t7865,\n\t\t9,\n\t\t865\n\t],\n\t\"./info.svg\": [\n\t\t9950,\n\t\t9,\n\t\t950\n\t],\n\t\"./info2.svg\": [\n\t\t6368,\n\t\t9,\n\t\t368\n\t],\n\t\"./left_arrow.svg\": [\n\t\t1302,\n\t\t9\n\t],\n\t\"./link.svg\": [\n\t\t8997,\n\t\t9,\n\t\t997\n\t],\n\t\"./menu.svg\": [\n\t\t113,\n\t\t9,\n\t\t113\n\t],\n\t\"./menu_2.svg\": [\n\t\t8734,\n\t\t9,\n\t\t734\n\t],\n\t\"./move.png\": [\n\t\t5786,\n\t\t1,\n\t\t786\n\t],\n\t\"./move.svg\": [\n\t\t1889,\n\t\t9,\n\t\t889\n\t],\n\t\"./move_to_cart.svg\": [\n\t\t3642,\n\t\t9,\n\t\t642\n\t],\n\t\"./move_to_wish_list.svg\": [\n\t\t8541,\n\t\t9,\n\t\t541\n\t],\n\t\"./nickname.svg\": [\n\t\t9160,\n\t\t9,\n\t\t160\n\t],\n\t\"./pdf.svg\": [\n\t\t3071,\n\t\t9,\n\t\t71\n\t],\n\t\"./pencil.svg\": [\n\t\t7431,\n\t\t9,\n\t\t431\n\t],\n\t\"./pencil_section.svg\": [\n\t\t4545,\n\t\t9\n\t],\n\t\"./ppt.svg\": [\n\t\t9058,\n\t\t9,\n\t\t58\n\t],\n\t\"./pptx.svg\": [\n\t\t9852,\n\t\t9,\n\t\t852\n\t],\n\t\"./process.svg\": [\n\t\t3928,\n\t\t9,\n\t\t928\n\t],\n\t\"./profile-notification.svg\": [\n\t\t419,\n\t\t9,\n\t\t419\n\t],\n\t\"./proof.svg\": [\n\t\t5391,\n\t\t9\n\t],\n\t\"./proof_approval.svg\": [\n\t\t1581,\n\t\t9,\n\t\t581\n\t],\n\t\"./right_arrow.svg\": [\n\t\t7167,\n\t\t9\n\t],\n\t\"./search.svg\": [\n\t\t5054,\n\t\t9,\n\t\t54\n\t],\n\t\"./tick.svg\": [\n\t\t3550,\n\t\t9\n\t],\n\t\"./uncheck.svg\": [\n\t\t2527,\n\t\t9,\n\t\t527\n\t],\n\t\"./upload.svg\": [\n\t\t8075,\n\t\t9,\n\t\t75\n\t],\n\t\"./user.svg\": [\n\t\t9362,\n\t\t9,\n\t\t362\n\t],\n\t\"./warning.svg\": [\n\t\t5183,\n\t\t9,\n\t\t183\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(2).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__.t(id, ids[1] | 16)\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 2042;\nmodule.exports = webpackAsyncContext;","module.exports = React;","function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}\nmodule.exports = _taggedTemplateLiteral, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"3\":\"9f93bbaf\",\"37\":\"a00a523e\",\"38\":\"99865957\",\"40\":\"6c348e6b\",\"54\":\"6b3e1c97\",\"58\":\"7f179ad3\",\"71\":\"e4d835f7\",\"75\":\"ff5fa3c9\",\"113\":\"3b760086\",\"160\":\"b5b2b3b8\",\"169\":\"3eb1b13f\",\"181\":\"4e82ee42\",\"182\":\"c7772173\",\"183\":\"129d4df0\",\"221\":\"859f263f\",\"268\":\"ec1c9a03\",\"277\":\"40e705d1\",\"313\":\"3b19f1fb\",\"362\":\"48e08026\",\"368\":\"7edeb271\",\"419\":\"1885a2b6\",\"431\":\"f38f2c65\",\"525\":\"d41ef628\",\"527\":\"977f5b12\",\"541\":\"5fb36fd0\",\"562\":\"6829a0fd\",\"563\":\"40e65c1d\",\"577\":\"fa0ca7ca\",\"578\":\"c68591b3\",\"581\":\"f44dc149\",\"642\":\"48cb0805\",\"667\":\"9471ece6\",\"711\":\"2f62d342\",\"732\":\"d663e224\",\"734\":\"55a090e4\",\"786\":\"53c15ffb\",\"787\":\"f0f22bc4\",\"794\":\"5833b7f8\",\"852\":\"2b40c017\",\"865\":\"4eaf8d98\",\"889\":\"e59f88d9\",\"890\":\"e7d0c989\",\"894\":\"ce3b4fb9\",\"928\":\"de2f4ef4\",\"950\":\"351ebbcc\",\"957\":\"5fe8783d\",\"979\":\"613631f5\",\"997\":\"96ca33d6\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"IEEEPubsstore:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/ustorethemes/IEEEPubsstore/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkIEEEPubsstore\"] = self[\"webpackChunkIEEEPubsstore\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","const __WEBPACK_NAMESPACE_OBJECT__ = ReactDOM;","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location<State = any> extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial<Path>;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an <a href> attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial<Location>;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route (<Route path=\"*\">) since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly<Location> {\n let location: Readonly<Location> = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial<Path>) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial<Path> {\n let parsedPath: Partial<Path> = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n status: number;\n location: string;\n revalidate: boolean;\n reloadDocument?: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase<LowerCaseFormMethod>;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `<Form>`,\n * useSubmit(), `<fetcher.Form>`, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude<FormMethod, \"get\">;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude<V7_FormMethod, \"GET\">;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs<Context> {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs<Context = any>\n extends DataFunctionArgs<Context> {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs<Context = any>\n extends DataFunctionArgs<Context> {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable<unknown> | null;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction<Context = any> = {\n (args: LoaderFunctionArgs<Context>):\n | Promise<DataFunctionValue>\n | DataFunctionValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction<Context = any> {\n (args: ActionFunctionArgs<Context>):\n | Promise<DataFunctionValue>\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record<string, any>;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set<ImmutableRouteKey>([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne<T, Key = keyof T> = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit<T, K> & Required<Pick<T, K>> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction<R extends AgnosticRouteObject> {\n (): Promise<RequireOne<Omit<R, ImmutableRouteKey>>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction<AgnosticBaseRouteObject>;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record<string, AgnosticDataRouteObject | undefined>;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam<Path extends string> =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam<L> | _PathParam<R>\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam<Path extends string> =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam<Rest>\n : // look for params in the absence of wildcards\n _PathParam<Path>;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey<Segment extends string> =\n // if you could not find path params, fallback to `string`\n [PathParam<Segment>] extends [never] ? string : PathParam<Segment>;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params<Key extends string = string> = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial<Location> | string,\n basename = \"/\"\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch<string, RouteObjectType>(\n branches[i],\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n safelyDecodeURI(pathname)\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch<Data = unknown, Handle = unknown> {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta<RouteObjectType>[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch<RouteObjectType>[] = [],\n parentsMeta: RouteMeta<RouteObjectType>[] = [],\n parentPath = \"\"\n): RouteBranch<RouteObjectType>[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta<RouteObjectType> = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch<RouteObjectType>,\n pathname: string\n): AgnosticRouteMatch<ParamKey, RouteObjectType>[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch<ParamKey, RouteObjectType>[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params<ParamKey>,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath<Path extends string>(\n originalPath: Path,\n params: {\n [key in PathParam<Path>]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam<Path>;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam<Path>];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern<Path extends string = string> {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch<ParamKey extends string = string> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(\n pattern: PathPattern<Path> | Path,\n pathname: string\n): PathMatch<ParamKey> | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce<Mutable<Params>>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:(\\w+)(\\?)?/g, (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nfunction safelyDecodeURI(value: string) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\nfunction safelyDecodeURIComponent(value: string, paramName: string) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(\n false,\n `The value for the URL param \"${paramName}\" will not be decoded because` +\n ` the string \"${value}\" is a malformed URL segment. This is probably` +\n ` due to a bad percent encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial<Path>\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in <Link to=\"...\"> and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\" element={<Link to=\"..\"}>\n * </Route>\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\">\n * <Route element={<AccountsLayout />}> // <-- Does not contribute\n * <Route index element={<Link to=\"..\"} /> // <-- Does not contribute\n * </Route\n * </Route>\n * </Route>\n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === matches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial<Path>;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `<Link to>` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments =\n routePathnames.length === 0\n ? []\n : routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how <a href> works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = <Data>(\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise<any> {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set<string> = new Set<string>();\n private controller: AbortController;\n private abortPromise: Promise<void>;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record<string, unknown>;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record<string, unknown>, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise<unknown> | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record<string, unknown>,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record<string, number>,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise<void>;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise<void>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher<TData = any>(key: string): Fetcher<TData>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map<string, AbortController>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map<string, DeferredData>;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map<string, Fetcher>;\n\n /**\n * Map of current blockers\n */\n blockers: Map<string, Blocker>;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick<RouterState, \"loaderData\" | \"actionData\" | \"errors\">\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial<FutureConfig>;\n hydrationData?: HydrationState;\n window?: Window;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record<string, Headers>;\n actionHeaders: Record<string, Headers>;\n activeDeferreds: Record<string, DeferredData> | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: { requestContext?: unknown }\n ): Promise<StaticHandlerContext | Response>;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise<any>;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates<TData = any> = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher<TData = any> =\n FetcherStates<TData>[keyof FetcherStates<TData>];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set<MutationFormMethod>(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set<FormMethod>(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set<RouterSubscriber>();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record<string, number> | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from <ScrollRestoration /> until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized: boolean;\n let hasLazyRoutes = initialMatches.some((m) => m.route.lazy);\n let hasLoaders = initialMatches.some((m) => m.route.loader);\n if (hasLazyRoutes) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!hasLoaders) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n initialized = initialMatches.every(\n (m) =>\n m.route.loader &&\n m.route.loader.hydrate !== true &&\n ((loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined))\n );\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map<string, Set<string>> = new Map<\n string,\n Set<string>\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map<string, AbortController>();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map<string, number>();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set<string>();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map<string, FetchLoadMatch>();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map<string, number>();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set<string>();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map<string, DeferredData>();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map<string, BlockerFunction>();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial<RouterState>,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial<Omit<RouterState, \"action\" | \"location\" | \"navigation\">>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set<string>([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise<void> {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise<void> {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a <Form method=\"post\">\n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingError = {\n [findNearestBoundary(matches).route.id]: opts.pendingError,\n };\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise<HandleActionResult> {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise<HandleLoadersResult> {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since iot's not a \"navigation\"\n if (\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration)\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\n }\n }),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher<TData = any>(key: string): Fetcher<TData> {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the <ScrollRestoration> component\n function enableScrollRestoration(\n positions: Record<string, number>,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial<StaticHandlerFutureConfig>;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\n ): Promise<StaticHandlerContext | Response> {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise<any> {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n match\n );\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch\n ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error) {\n throw e.response;\n }\n return e.response;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n isRouteRequest: boolean\n ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.status,\n headers: {\n Location: result.location,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map<string, DeferredData>();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set<string>(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n deletedFetchers: Set<string>,\n fetchLoadMatches: Map<string, FetchLoadMatch>,\n fetchRedirectIds: Set<string>,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n if (isInitialLoad) {\n // On initial hydration we don't do any shouldRevalidate stuff - we just\n // call the unhydrated loaders\n return isUnhydratedRoute(state, match.route);\n }\n\n if (match.route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (match.route.loader == null) {\n return false;\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\n// Is this route unhydrated (when v7_partialHydration=true) such that we need\n// to call it's loader on the initial router creation\nfunction isUnhydratedRoute(state: RouterState, route: AgnosticDataRouteObject) {\n if (!route.loader) {\n return false;\n }\n if (route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n (!state.errors ||\n // Loader ran but errored - don't re-run\n state.errors[route.id] === undefined)\n );\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record<string, any> = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n v7_relativeSplatPath: boolean,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise<DataResult> {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\n }\n\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n data = await result.json();\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponseImpl(status, result.statusText, data),\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map<string, DeferredData>\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record<string, Headers>;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record<string, Headers> = {};\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n } else {\n loaderData[id] = result.data;\n }\n\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map<string, DeferredData>\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise<SuccessResult | ErrorResult | undefined> {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map<string, Set<string>>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map<string, Set<string>>\n) {\n if (transitions.size > 0) {\n let json: Record<string, string[]> = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit<NavigationContextObject, \"future\"> {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath<ParamKey, Path>(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters<typeof React.useLayoutEffect>[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an <Outlet /> with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n <LocationContext.Provider\n value={{\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n ...location,\n },\n navigationType: NavigationType.Pop,\n }}\n >\n {renderedMatches}\n </LocationContext.Provider>\n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n <p>💿 Hey developer 👋</p>\n <p>\n You can provide a way better UX than this when your app throws errors\n by providing your own <code style={codeStyles}>ErrorBoundary</code> or{\" \"}\n <code style={codeStyles}>errorElement</code> prop on your route.\n </p>\n </>\n );\n }\n\n return (\n <>\n <h2>Unexpected Application Error!</h2>\n <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n {stack ? <pre style={preStyles}>{stack}</pre> : null}\n {devInfo}\n </>\n );\n}\n\nconst defaultErrorElement = <DefaultErrorComponent />;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n <RouteContext.Provider value={this.props.routeContext}>\n <RouteErrorContext.Provider\n value={this.state.error}\n children={this.props.component}\n />\n </RouteContext.Provider>\n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch<string, RouteObject>;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n <RouteContext.Provider value={routeContext}>\n {children}\n </RouteContext.Provider>\n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n if (\n match.route.loader &&\n match.route.id &&\n dataRouterState.loaderData[match.route.id] === undefined &&\n (!dataRouterState.errors ||\n dataRouterState.errors[match.route.id] === undefined)\n ) {\n // We found the first route without data/errors which means it's loader\n // still needs to run. Flag that we need to render a fallback and\n // render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `<Route Component={...}>` in `<Routes>` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = <match.route.Component />;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n <RenderedRoute\n match={match}\n routeContext={{\n outlet,\n matches,\n isDataRoute: dataRouterState != null,\n }}\n children={children}\n />\n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n <RenderErrorBoundary\n location={dataRouterState.location}\n revalidation={dataRouterState.revalidation}\n component={errorElement}\n error={error}\n children={getChildren()}\n routeContext={{ outlet: null, matches, isDataRoute: true }}\n />\n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback<BlockerFunction>(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial<Pick<FutureConfig, \"v7_startTransition\">>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback<RouterSubscriber>(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return (\n <>\n <DataRouterContext.Provider value={dataRouterContext}>\n <DataRouterStateContext.Provider value={state}>\n <Router\n basename={basename}\n location={state.location}\n navigationType={state.historyAction}\n navigator={navigator}\n future={{\n v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n }}\n >\n {state.initialized || router.future.v7_partialHydration ? (\n <DataRoutes\n routes={router.routes}\n future={router.future}\n state={state}\n />\n ) : (\n fallbackElement\n )}\n </Router>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n {null}\n </>\n );\n}\n\nfunction DataRoutes({\n routes,\n future,\n state,\n}: {\n routes: DataRouteObject[];\n future: RemixRouter[\"future\"];\n state: RouterState;\n}): React.ReactElement | null {\n return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n future?: Partial<FutureConfig>;\n}\n\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex,\n future,\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef<MemoryHistory>();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true,\n });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\n relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nexport function Navigate({\n to,\n replace,\n state,\n relative,\n}: NavigateProps): null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n\n let { future, static: isStatic } = React.useContext(NavigationContext);\n\n warning(\n !isStatic,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n `This is a no-op, but you should modify your code so the <Navigate> is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let navigate = useNavigate();\n\n // Resolve the path outside of the effect so that when effects run twice in\n // StrictMode they navigate to the same place\n let path = resolveTo(\n to,\n getResolveToMatches(matches, future.v7_relativeSplatPath),\n locationPathname,\n relative === \"path\"\n );\n let jsonPath = JSON.stringify(path);\n\n React.useEffect(\n () => navigate(JSON.parse(jsonPath), { replace, state, relative }),\n [navigate, jsonPath, relative, replace, state]\n );\n\n return null;\n}\n\nexport interface OutletProps {\n context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n path?: NonIndexRouteObject[\"path\"];\n id?: NonIndexRouteObject[\"id\"];\n lazy?: LazyRouteFunction<NonIndexRouteObject>;\n loader?: NonIndexRouteObject[\"loader\"];\n action?: NonIndexRouteObject[\"action\"];\n hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n handle?: NonIndexRouteObject[\"handle\"];\n index?: false;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n path?: IndexRouteObject[\"path\"];\n id?: IndexRouteObject[\"id\"];\n lazy?: LazyRouteFunction<IndexRouteObject>;\n loader?: IndexRouteObject[\"loader\"];\n action?: IndexRouteObject[\"action\"];\n hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n handle?: IndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, ` +\n `never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial<Location> | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n future?: Partial<Pick<FutureConfig, \"v7_relativeSplatPath\">>;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nexport function Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = NavigationType.Pop,\n navigator,\n static: staticProp = false,\n future,\n}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>.` +\n ` You should never have more than one in your app.`\n );\n\n // Preserve trailing slashes on basename, so we can let the user control\n // the enforcement of trailing slashes throughout the app\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React.useMemo(\n () => ({\n basename,\n navigator,\n static: staticProp,\n future: {\n v7_relativeSplatPath: false,\n ...future,\n },\n }),\n [basename, future, navigator, staticProp]\n );\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\",\n } = locationProp;\n\n let locationContext = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key,\n },\n navigationType,\n };\n }, [basename, pathname, search, hash, state, key, navigationType]);\n\n warning(\n locationContext != null,\n `<Router basename=\"${basename}\"> is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the <Router> won't render anything.`\n );\n\n if (locationContext == null) {\n return null;\n }\n\n return (\n <NavigationContext.Provider value={navigationContext}>\n <LocationContext.Provider children={children} value={locationContext} />\n </NavigationContext.Provider>\n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nexport function Routes({\n children,\n location,\n}: RoutesProps): React.ReactElement | null {\n return useRoutes(createRoutesFromChildren(children), location);\n}\n\nexport interface AwaitResolveRenderFunction {\n (data: Awaited<any>): React.ReactNode;\n}\n\nexport interface AwaitProps {\n children: React.ReactNode | AwaitResolveRenderFunction;\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n return (\n <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n <ResolveAwait>{children}</ResolveAwait>\n </AwaitErrorBoundary>\n );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n error: any;\n};\n\nenum AwaitRenderStatus {\n pending,\n success,\n error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n AwaitErrorBoundaryProps,\n AwaitErrorBoundaryState\n> {\n constructor(props: AwaitErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n let { children, errorElement, resolve } = this.props;\n\n let promise: TrackedPromise | null = null;\n let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n if (!(resolve instanceof Promise)) {\n // Didn't get a promise - provide as a resolved promise\n status = AwaitRenderStatus.success;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n // Caught a render error, provide it as a rejected promise\n status = AwaitRenderStatus.error;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if ((resolve as TrackedPromise)._tracked) {\n // Already tracked promise - check contents\n promise = resolve;\n status =\n promise._error !== undefined\n ? AwaitRenderStatus.error\n : promise._data !== undefined\n ? AwaitRenderStatus.success\n : AwaitRenderStatus.pending;\n } else {\n // Raw (untracked) promise - track it\n status = AwaitRenderStatus.pending;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data: any) =>\n Object.defineProperty(resolve, \"_data\", { get: () => data }),\n (error: any) =>\n Object.defineProperty(resolve, \"_error\", { get: () => error })\n );\n }\n\n if (\n status === AwaitRenderStatus.error &&\n promise._error instanceof AbortedDeferredError\n ) {\n // Freeze the UI by throwing a never resolved promise\n throw neverSettledPromise;\n }\n\n if (status === AwaitRenderStatus.error && !errorElement) {\n // No errorElement, throw to the nearest route-level error boundary\n throw promise._error;\n }\n\n if (status === AwaitRenderStatus.error) {\n // Render via our errorElement\n return <AwaitContext.Provider value={promise} children={errorElement} />;\n }\n\n if (status === AwaitRenderStatus.success) {\n // Render children with resolved value\n return <AwaitContext.Provider value={promise} children={children} />;\n }\n\n // Throw to the suspense boundary\n throw promise;\n }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait({\n children,\n}: {\n children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n let data = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data) : children;\n return <>{toRender}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode,\n parentPath: number[] = []\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, (element, index) => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n let treePath = [...parentPath, index];\n\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, treePath)\n );\n return;\n }\n\n invariant(\n element.type === Route,\n `[${\n typeof element.type === \"string\" ? element.type : element.type.name\n }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n\n let route: RouteObject = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary:\n element.props.ErrorBoundary != null ||\n element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy,\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n\n routes.push(route);\n });\n\n return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n matches: RouteMatch[] | null\n): React.ReactElement | null {\n return _renderMatches(matches);\n}\n","import type {\n FormEncType,\n HTMLFormMethod,\n RelativeRoutingType,\n} from \"@remix-run/router\";\nimport { stripBasename, UNSAFE_warning as warning } from \"@remix-run/router\";\n\nexport const defaultMethod: HTMLFormMethod = \"get\";\nconst defaultEncType: FormEncType = \"application/x-www-form-urlencoded\";\n\nexport function isHtmlElement(object: any): object is HTMLElement {\n return object != null && typeof object.tagName === \"string\";\n}\n\nexport function isButtonElement(object: any): object is HTMLButtonElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\n\nexport function isFormElement(object: any): object is HTMLFormElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\n\nexport function isInputElement(object: any): object is HTMLInputElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\n\ntype LimitedMouseEvent = Pick<\n MouseEvent,\n \"button\" | \"metaKey\" | \"altKey\" | \"ctrlKey\" | \"shiftKey\"\n>;\n\nfunction isModifiedEvent(event: LimitedMouseEvent) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport function shouldProcessLinkClick(\n event: LimitedMouseEvent,\n target?: string\n) {\n return (\n event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n );\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n | string\n | ParamKeyValuePair[]\n | Record<string, string | string[]>\n | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nexport function createSearchParams(\n init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n return new URLSearchParams(\n typeof init === \"string\" ||\n Array.isArray(init) ||\n init instanceof URLSearchParams\n ? init\n : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(\n Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n );\n }, [] as ParamKeyValuePair[])\n );\n}\n\nexport function getSearchParamsForLocation(\n locationSearch: string,\n defaultSearchParams: URLSearchParams | null\n) {\n let searchParams = createSearchParams(locationSearch);\n\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n });\n }\n\n return searchParams;\n}\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport type SubmitTarget =\n | HTMLFormElement\n | HTMLButtonElement\n | HTMLInputElement\n | FormData\n | URLSearchParams\n | JsonValue\n | null;\n\n// One-time check for submitter support\nlet _formDataSupportsSubmitter: boolean | null = null;\n\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(\n document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0\n );\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\n\nexport interface SubmitOptions {\n /**\n * The HTTP method used to submit the form. Overrides `<form method>`.\n * Defaults to \"GET\".\n */\n method?: HTMLFormMethod;\n\n /**\n * The action URL path used to submit the form. Overrides `<form action>`.\n * Defaults to the path of the current route.\n */\n action?: string;\n\n /**\n * The encoding used to submit the form. Overrides `<form encType>`.\n * Defaults to \"application/x-www-form-urlencoded\".\n */\n encType?: FormEncType;\n\n /**\n * Indicate a specific fetcherKey to use when using navigate=false\n */\n fetcherKey?: string;\n\n /**\n * navigate=false will use a fetcher instead of a navigation\n */\n navigate?: boolean;\n\n /**\n * Set `true` to replace the current entry in the browser's history stack\n * instead of creating a new one (i.e. stay on \"the same page\"). Defaults\n * to `false`.\n */\n replace?: boolean;\n\n /**\n * State object to add to the history stack entry for this navigation\n */\n state?: any;\n\n /**\n * Determines whether the form action is relative to the route hierarchy or\n * the pathname. Use this if you want to opt out of navigating the route\n * hierarchy and want to instead route based on /-delimited URL segments\n */\n relative?: RelativeRoutingType;\n\n /**\n * In browser-based environments, prevent resetting scroll after this\n * navigation when using the <ScrollRestoration> component\n */\n preventScrollReset?: boolean;\n\n /**\n * Enable flushSync for this navigation's state updates\n */\n unstable_flushSync?: boolean;\n\n /**\n * Enable view transitions on this submission navigation\n */\n unstable_viewTransition?: boolean;\n}\n\nconst supportedFormEncTypes: Set<FormEncType> = new Set([\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\",\n \"text/plain\",\n]);\n\nfunction getFormEncType(encType: string | null) {\n if (encType != null && !supportedFormEncTypes.has(encType as FormEncType)) {\n warning(\n false,\n `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` ` +\n `and will default to \"${defaultEncType}\"`\n );\n\n return null;\n }\n return encType;\n}\n\nexport function getFormSubmissionInfo(\n target: SubmitTarget,\n basename: string\n): {\n action: string | null;\n method: string;\n encType: string;\n formData: FormData | undefined;\n body: any;\n} {\n let method: string;\n let action: string | null;\n let encType: string;\n let formData: FormData | undefined;\n let body: any;\n\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n\n formData = new FormData(target);\n } else if (\n isButtonElement(target) ||\n (isInputElement(target) &&\n (target.type === \"submit\" || target.type === \"image\"))\n ) {\n let form = target.form;\n\n if (form == null) {\n throw new Error(\n `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n );\n }\n\n // <button>/<input type=\"submit\"> may override attributes of <form>\n\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n\n method =\n target.getAttribute(\"formmethod\") ||\n form.getAttribute(\"method\") ||\n defaultMethod;\n encType =\n getFormEncType(target.getAttribute(\"formenctype\")) ||\n getFormEncType(form.getAttribute(\"enctype\")) ||\n defaultEncType;\n\n // Build a FormData object populated from a form and submitter\n formData = new FormData(form, target);\n\n // If this browser doesn't support the `FormData(el, submitter)` format,\n // then tack on the submitter value at the end. This is a lightweight\n // solution that is not 100% spec compliant. For complete support in older\n // browsers, consider using the `formdata-submitter-polyfill` package\n if (!isFormDataSubmitterSupported()) {\n let { name, type, value } = target;\n if (type === \"image\") {\n let prefix = name ? `${name}.` : \"\";\n formData.append(`${prefix}x`, \"0\");\n formData.append(`${prefix}y`, \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\n `Cannot submit element that is not <form>, <button>, or ` +\n `<input type=\"submit|image\">`\n );\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n\n // Send body for <Form encType=\"text/plain\" so we encode it into text\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = undefined;\n }\n\n return { action, method: method.toLowerCase(), encType, formData, body };\n}\n","/**\n * NOTE: If you refactor this to split up the modules into separate files,\n * you'll need to update the rollup config for react-router-dom-v5-compat.\n */\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n DataRouteObject,\n FutureConfig,\n Location,\n NavigateOptions,\n NavigationType,\n Navigator,\n RelativeRoutingType,\n RouteObject,\n RouterProviderProps,\n To,\n} from \"react-router\";\nimport {\n Router,\n createPath,\n useHref,\n useLocation,\n useMatches,\n useNavigate,\n useNavigation,\n useResolvedPath,\n useBlocker,\n UNSAFE_DataRouterContext as DataRouterContext,\n UNSAFE_DataRouterStateContext as DataRouterStateContext,\n UNSAFE_NavigationContext as NavigationContext,\n UNSAFE_RouteContext as RouteContext,\n UNSAFE_mapRouteProperties as mapRouteProperties,\n UNSAFE_useRouteId as useRouteId,\n UNSAFE_useRoutesImpl as useRoutesImpl,\n} from \"react-router\";\nimport type {\n BrowserHistory,\n Fetcher,\n FormEncType,\n FormMethod,\n FutureConfig as RouterFutureConfig,\n GetScrollRestorationKeyFunction,\n HashHistory,\n History,\n HTMLFormMethod,\n HydrationState,\n Router as RemixRouter,\n V7_FormMethod,\n RouterState,\n RouterSubscriber,\n BlockerFunction,\n} from \"@remix-run/router\";\nimport {\n createRouter,\n createBrowserHistory,\n createHashHistory,\n joinPaths,\n stripBasename,\n UNSAFE_ErrorResponseImpl as ErrorResponseImpl,\n UNSAFE_invariant as invariant,\n UNSAFE_warning as warning,\n matchPath,\n IDLE_FETCHER,\n} from \"@remix-run/router\";\n\nimport type {\n SubmitOptions,\n ParamKeyValuePair,\n URLSearchParamsInit,\n SubmitTarget,\n} from \"./dom\";\nimport {\n createSearchParams,\n defaultMethod,\n getFormSubmissionInfo,\n getSearchParamsForLocation,\n shouldProcessLinkClick,\n} from \"./dom\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Re-exports\n////////////////////////////////////////////////////////////////////////////////\n\nexport type {\n FormEncType,\n FormMethod,\n GetScrollRestorationKeyFunction,\n ParamKeyValuePair,\n SubmitOptions,\n URLSearchParamsInit,\n V7_FormMethod,\n};\nexport { createSearchParams };\n\n// Note: Keep in sync with react-router exports!\nexport type {\n ActionFunction,\n ActionFunctionArgs,\n AwaitProps,\n unstable_Blocker,\n unstable_BlockerFunction,\n DataRouteMatch,\n DataRouteObject,\n ErrorResponse,\n Fetcher,\n FutureConfig,\n Hash,\n IndexRouteObject,\n IndexRouteProps,\n JsonFunction,\n LazyRouteFunction,\n LayoutRouteProps,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigation,\n Navigator,\n NonIndexRouteObject,\n OutletProps,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n Pathname,\n PathParam,\n PathPattern,\n PathRouteProps,\n RedirectFunction,\n RelativeRoutingType,\n RouteMatch,\n RouteObject,\n RouteProps,\n RouterProps,\n RouterProviderProps,\n RoutesProps,\n Search,\n ShouldRevalidateFunction,\n ShouldRevalidateFunctionArgs,\n To,\n UIMatch,\n} from \"react-router\";\nexport {\n AbortedDeferredError,\n Await,\n MemoryRouter,\n Navigate,\n NavigationType,\n Outlet,\n Route,\n Router,\n Routes,\n createMemoryRouter,\n createPath,\n createRoutesFromChildren,\n createRoutesFromElements,\n defer,\n isRouteErrorResponse,\n generatePath,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n redirectDocument,\n renderMatches,\n resolvePath,\n useActionData,\n useAsyncError,\n useAsyncValue,\n useBlocker,\n useHref,\n useInRouterContext,\n useLoaderData,\n useLocation,\n useMatch,\n useMatches,\n useNavigate,\n useNavigation,\n useNavigationType,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n useRoutes,\n} from \"react-router\";\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n UNSAFE_DataRouterContext,\n UNSAFE_DataRouterStateContext,\n UNSAFE_NavigationContext,\n UNSAFE_LocationContext,\n UNSAFE_RouteContext,\n UNSAFE_useRouteId,\n} from \"react-router\";\n//#endregion\n\ndeclare global {\n var __staticRouterHydrationData: HydrationState | undefined;\n interface Document {\n startViewTransition(cb: () => Promise<void> | void): ViewTransition;\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Routers\n////////////////////////////////////////////////////////////////////////////////\n\ninterface DOMRouterOpts {\n basename?: string;\n future?: Partial<Omit<RouterFutureConfig, \"v7_prependBasename\">>;\n hydrationData?: HydrationState;\n window?: Window;\n}\n\nexport function createBrowserRouter(\n routes: RouteObject[],\n opts?: DOMRouterOpts\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n future: {\n ...opts?.future,\n v7_prependBasename: true,\n },\n history: createBrowserHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n window: opts?.window,\n }).initialize();\n}\n\nexport function createHashRouter(\n routes: RouteObject[],\n opts?: DOMRouterOpts\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n future: {\n ...opts?.future,\n v7_prependBasename: true,\n },\n history: createHashHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n window: opts?.window,\n }).initialize();\n}\n\nfunction parseHydrationData(): HydrationState | undefined {\n let state = window?.__staticRouterHydrationData;\n if (state && state.errors) {\n state = {\n ...state,\n errors: deserializeErrors(state.errors),\n };\n }\n return state;\n}\n\nfunction deserializeErrors(\n errors: RemixRouter[\"state\"][\"errors\"]\n): RemixRouter[\"state\"][\"errors\"] {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized: RemixRouter[\"state\"][\"errors\"] = {};\n for (let [key, val] of entries) {\n // Hey you! If you change this, please change the corresponding logic in\n // serializeErrors in react-router-dom/server.tsx :)\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n // @ts-expect-error\n let error = new ErrorConstructor(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n // no-op - fall through and create a normal Error\n }\n }\n }\n\n if (serialized[key] == null) {\n let error = new Error(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Contexts\n////////////////////////////////////////////////////////////////////////////////\n\ntype ViewTransitionContextObject =\n | {\n isTransitioning: false;\n }\n | {\n isTransitioning: true;\n flushSync: boolean;\n currentLocation: Location;\n nextLocation: Location;\n };\n\nconst ViewTransitionContext = React.createContext<ViewTransitionContextObject>({\n isTransitioning: false,\n});\nif (__DEV__) {\n ViewTransitionContext.displayName = \"ViewTransition\";\n}\n\nexport { ViewTransitionContext as UNSAFE_ViewTransitionContext };\n\n// TODO: (v7) Change the useFetcher data from `any` to `unknown`\ntype FetchersContextObject = Map<string, any>;\n\nconst FetchersContext = React.createContext<FetchersContextObject>(new Map());\nif (__DEV__) {\n FetchersContext.displayName = \"Fetchers\";\n}\n\nexport { FetchersContext as UNSAFE_FetchersContext };\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\n\nfunction startTransitionSafe(cb: () => void) {\n if (startTransitionImpl) {\n startTransitionImpl(cb);\n } else {\n cb();\n }\n}\n\nfunction flushSyncSafe(cb: () => void) {\n if (flushSyncImpl) {\n flushSyncImpl(cb);\n } else {\n cb();\n }\n}\n\ninterface ViewTransition {\n finished: Promise<void>;\n ready: Promise<void>;\n updateCallbackDone: Promise<void>;\n skipTransition(): void;\n}\n\nclass Deferred<T> {\n status: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n promise: Promise<T>;\n // @ts-expect-error - no initializer\n resolve: (value: T) => void;\n // @ts-expect-error - no initializer\n reject: (reason?: unknown) => void;\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = (value) => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = (reason) => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let [pendingState, setPendingState] = React.useState<RouterState>();\n let [vtContext, setVtContext] = React.useState<ViewTransitionContextObject>({\n isTransitioning: false,\n });\n let [renderDfd, setRenderDfd] = React.useState<Deferred<void>>();\n let [transition, setTransition] = React.useState<ViewTransition>();\n let [interruption, setInterruption] = React.useState<{\n state: RouterState;\n currentLocation: Location;\n nextLocation: Location;\n }>();\n let fetcherData = React.useRef<Map<string, any>>(new Map());\n let { v7_startTransition } = future || {};\n\n let optInStartTransition = React.useCallback(\n (cb: () => void) => {\n if (v7_startTransition) {\n startTransitionSafe(cb);\n } else {\n cb();\n }\n },\n [v7_startTransition]\n );\n\n let setState = React.useCallback<RouterSubscriber>(\n (\n newState: RouterState,\n {\n deletedFetchers,\n unstable_flushSync: flushSync,\n unstable_viewTransitionOpts: viewTransitionOpts,\n }\n ) => {\n deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== undefined) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n\n let isViewTransitionUnavailable =\n router.window == null ||\n typeof router.window.document.startViewTransition !== \"function\";\n\n // If this isn't a view transition or it's not available in this browser,\n // just update and be done with it\n if (!viewTransitionOpts || isViewTransitionUnavailable) {\n if (flushSync) {\n flushSyncSafe(() => setStateImpl(newState));\n } else {\n optInStartTransition(() => setStateImpl(newState));\n }\n return;\n }\n\n // flushSync + startViewTransition\n if (flushSync) {\n // Flush through the context to mark DOM elements as transition=ing\n flushSyncSafe(() => {\n // Cancel any pending transitions\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n });\n\n // Update the DOM\n let t = router.window!.document.startViewTransition(() => {\n flushSyncSafe(() => setStateImpl(newState));\n });\n\n // Clean up after the animation completes\n t.finished.finally(() => {\n flushSyncSafe(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({ isTransitioning: false });\n });\n });\n\n flushSyncSafe(() => setTransition(t));\n return;\n }\n\n // startTransition + startViewTransition\n if (transition) {\n // Interrupting an in-progress transition, cancel and let everything flush\n // out, and then kick off a new transition from the interruption state\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n } else {\n // Completed navigation update with opted-in view transitions, let 'er rip\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n }\n },\n [router.window, transition, renderDfd, fetcherData, optInStartTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n // When we start a view transition, create a Deferred we can use for the\n // eventual \"completed\" render\n React.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred<void>());\n }\n }, [vtContext]);\n\n // Once the deferred is created, kick off startViewTransition() to update the\n // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n // happened)\n React.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition = router.window.document.startViewTransition(async () => {\n optInStartTransition(() => setStateImpl(newState));\n await renderPromise;\n });\n transition.finished.finally(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({ isTransitioning: false });\n });\n setTransition(transition);\n }\n }, [optInStartTransition, pendingState, renderDfd, router.window]);\n\n // When the new location finally renders and is committed to the DOM, this\n // effect will run to resolve the transition\n React.useEffect(() => {\n if (\n renderDfd &&\n pendingState &&\n state.location.key === pendingState.location.key\n ) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n\n // If we get interrupted with a new navigation during a transition, we skip\n // the active transition, let it cleanup, then kick it off again here\n React.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation,\n });\n setInterruption(undefined);\n }\n }, [vtContext.isTransitioning, interruption]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`<RouterProvider fallbackElement>` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return (\n <>\n <DataRouterContext.Provider value={dataRouterContext}>\n <DataRouterStateContext.Provider value={state}>\n <FetchersContext.Provider value={fetcherData.current}>\n <ViewTransitionContext.Provider value={vtContext}>\n <Router\n basename={basename}\n location={state.location}\n navigationType={state.historyAction}\n navigator={navigator}\n future={{\n v7_relativeSplatPath: router.future.v7_relativeSplatPath,\n }}\n >\n {state.initialized || router.future.v7_partialHydration ? (\n <DataRoutes\n routes={router.routes}\n future={router.future}\n state={state}\n />\n ) : (\n fallbackElement\n )}\n </Router>\n </ViewTransitionContext.Provider>\n </FetchersContext.Provider>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n {null}\n </>\n );\n}\n\nfunction DataRoutes({\n routes,\n future,\n state,\n}: {\n routes: DataRouteObject[];\n future: RemixRouter[\"future\"];\n state: RouterState;\n}): React.ReactElement | null {\n return useRoutesImpl(routes, undefined, state, future);\n}\n\nexport interface BrowserRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: Partial<FutureConfig>;\n window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n basename,\n children,\n future,\n window,\n}: BrowserRouterProps) {\n let historyRef = React.useRef<BrowserHistory>();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window, v5Compat: true });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nexport interface HashRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: Partial<FutureConfig>;\n window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nexport function HashRouter({\n basename,\n children,\n future,\n window,\n}: HashRouterProps) {\n let historyRef = React.useRef<HashHistory>();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window, v5Compat: true });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nexport interface HistoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: FutureConfig;\n history: History;\n}\n\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter({\n basename,\n children,\n future,\n history,\n}: HistoryRouterProps) {\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n future={future}\n />\n );\n}\n\nif (__DEV__) {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nexport interface LinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n reloadDocument?: boolean;\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n to: To;\n unstable_viewTransition?: boolean;\n}\n\nconst isBrowser =\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\";\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function LinkWithRef(\n {\n onClick,\n relative,\n reloadDocument,\n replace,\n state,\n target,\n to,\n preventScrollReset,\n unstable_viewTransition,\n ...rest\n },\n ref\n ) {\n let { basename } = React.useContext(NavigationContext);\n\n // Rendered into <a href> for absolute URLs\n let absoluteHref;\n let isExternal = false;\n\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n // Render the absolute href server- and client-side\n absoluteHref = to;\n\n // Only check for external origins client-side\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\")\n ? new URL(currentUrl.protocol + to)\n : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n\n if (targetUrl.origin === currentUrl.origin && path != null) {\n // Strip the protocol/origin/basename for same-origin absolute URLs\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n // We can't do external URL detection without a valid URL\n warning(\n false,\n `<Link to=\"${to}\"> contains an invalid URL which will probably break ` +\n `when clicked - please update to a valid URL path.`\n );\n }\n }\n }\n\n // Rendered into <a href> for relative URLs\n let href = useHref(to, { relative });\n\n let internalOnClick = useLinkClickHandler(to, {\n replace,\n state,\n target,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n });\n function handleClick(\n event: React.MouseEvent<HTMLAnchorElement, MouseEvent>\n ) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n <a\n {...rest}\n href={absoluteHref || href}\n onClick={isExternal || reloadDocument ? onClick : handleClick}\n ref={ref}\n target={target}\n />\n );\n }\n);\n\nif (__DEV__) {\n Link.displayName = \"Link\";\n}\n\ntype NavLinkRenderProps = {\n isActive: boolean;\n isPending: boolean;\n isTransitioning: boolean;\n};\n\nexport interface NavLinkProps\n extends Omit<LinkProps, \"className\" | \"style\" | \"children\"> {\n children?: React.ReactNode | ((props: NavLinkRenderProps) => React.ReactNode);\n caseSensitive?: boolean;\n className?: string | ((props: NavLinkRenderProps) => string | undefined);\n end?: boolean;\n style?:\n | React.CSSProperties\n | ((props: NavLinkRenderProps) => React.CSSProperties | undefined);\n}\n\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n function NavLinkWithRef(\n {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n unstable_viewTransition,\n children,\n ...rest\n },\n ref\n ) {\n let path = useResolvedPath(to, { relative: rest.relative });\n let location = useLocation();\n let routerState = React.useContext(DataRouterStateContext);\n let { navigator } = React.useContext(NavigationContext);\n let isTransitioning =\n routerState != null &&\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) &&\n unstable_viewTransition === true;\n\n let toPathname = navigator.encodeLocation\n ? navigator.encodeLocation(path).pathname\n : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname =\n routerState && routerState.navigation && routerState.navigation.location\n ? routerState.navigation.location.pathname\n : null;\n\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname\n ? nextLocationPathname.toLowerCase()\n : null;\n toPathname = toPathname.toLowerCase();\n }\n\n // If the `to` has a trailing slash, look at that exact spot. Otherwise,\n // we're looking for a slash _after_ what's in `to`. For example:\n //\n // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n // both want to look for a / at index 6 to match URL `/users/matt`\n const endSlashPosition =\n toPathname !== \"/\" && toPathname.endsWith(\"/\")\n ? toPathname.length - 1\n : toPathname.length;\n let isActive =\n locationPathname === toPathname ||\n (!end &&\n locationPathname.startsWith(toPathname) &&\n locationPathname.charAt(endSlashPosition) === \"/\");\n\n let isPending =\n nextLocationPathname != null &&\n (nextLocationPathname === toPathname ||\n (!end &&\n nextLocationPathname.startsWith(toPathname) &&\n nextLocationPathname.charAt(toPathname.length) === \"/\"));\n\n let renderProps = {\n isActive,\n isPending,\n isTransitioning,\n };\n\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n let className: string | undefined;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for <NavLink />s that are active. In v5 `active` was the default\n // value for `activeClassName`, but we are removing that API and can still\n // use the old default behavior for a cleaner upgrade path and keep the\n // simple styling rules working as they currently do.\n className = [\n classNameProp,\n isActive ? \"active\" : null,\n isPending ? \"pending\" : null,\n isTransitioning ? \"transitioning\" : null,\n ]\n .filter(Boolean)\n .join(\" \");\n }\n\n let style =\n typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n\n return (\n <Link\n {...rest}\n aria-current={ariaCurrent}\n className={className}\n ref={ref}\n style={style}\n to={to}\n unstable_viewTransition={unstable_viewTransition}\n >\n {typeof children === \"function\" ? children(renderProps) : children}\n </Link>\n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n}\n\nexport interface FetcherFormProps\n extends React.FormHTMLAttributes<HTMLFormElement> {\n /**\n * The HTTP verb to use when the form is submit. Supports \"get\", \"post\",\n * \"put\", \"delete\", \"patch\".\n */\n method?: HTMLFormMethod;\n\n /**\n * `<form encType>` - enhancing beyond the normal string type and limiting\n * to the built-in browser supported values\n */\n encType?:\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"text/plain\";\n\n /**\n * Normal `<form action>` but supports React Router's relative paths.\n */\n action?: string;\n\n /**\n * Determines whether the form action is relative to the route hierarchy or\n * the pathname. Use this if you want to opt out of navigating the route\n * hierarchy and want to instead route based on /-delimited URL segments\n */\n relative?: RelativeRoutingType;\n\n /**\n * Prevent the scroll position from resetting to the top of the viewport on\n * completion of the navigation when using the <ScrollRestoration> component\n */\n preventScrollReset?: boolean;\n\n /**\n * A function to call when the form is submitted. If you call\n * `event.preventDefault()` then this form will not do anything.\n */\n onSubmit?: React.FormEventHandler<HTMLFormElement>;\n}\n\nexport interface FormProps extends FetcherFormProps {\n /**\n * Indicate a specific fetcherKey to use when using navigate=false\n */\n fetcherKey?: string;\n\n /**\n * navigate=false will use a fetcher instead of a navigation\n */\n navigate?: boolean;\n\n /**\n * Forces a full document navigation instead of a fetch.\n */\n reloadDocument?: boolean;\n\n /**\n * Replaces the current entry in the browser history stack when the form\n * navigates. Use this if you don't want the user to be able to click \"back\"\n * to the page with the form on it.\n */\n replace?: boolean;\n\n /**\n * State object to add to the history stack entry for this navigation\n */\n state?: any;\n\n /**\n * Enable view transitions on this Form navigation\n */\n unstable_viewTransition?: boolean;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n SubmitEvent,\n Event,\n HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n (\n {\n fetcherKey,\n navigate,\n reloadDocument,\n replace,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n unstable_viewTransition,\n ...props\n },\n forwardedRef\n ) => {\n let submit = useSubmit();\n let formAction = useFormAction(action, { relative });\n let formMethod: HTMLFormMethod =\n method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\n let submitHandler: React.FormEventHandler<HTMLFormElement> = (event) => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n\n let submitter = (event as unknown as HTMLSubmitEvent).nativeEvent\n .submitter as HTMLFormSubmitter | null;\n\n let submitMethod =\n (submitter?.getAttribute(\"formmethod\") as HTMLFormMethod | undefined) ||\n method;\n\n submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace,\n state,\n relative,\n preventScrollReset,\n unstable_viewTransition,\n });\n };\n\n return (\n <form\n ref={forwardedRef}\n method={formMethod}\n action={formAction}\n onSubmit={reloadDocument ? onSubmit : submitHandler}\n {...props}\n />\n );\n }\n);\n\nif (__DEV__) {\n Form.displayName = \"Form\";\n}\n\nexport interface ScrollRestorationProps {\n getKey?: GetScrollRestorationKeyFunction;\n storageKey?: string;\n}\n\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nexport function ScrollRestoration({\n getKey,\n storageKey,\n}: ScrollRestorationProps) {\n useScrollRestoration({ getKey, storageKey });\n return null;\n}\n\nif (__DEV__) {\n ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\n\nenum DataRouterHook {\n UseScrollRestoration = \"useScrollRestoration\",\n UseSubmit = \"useSubmit\",\n UseSubmitFetcher = \"useSubmitFetcher\",\n UseFetcher = \"useFetcher\",\n useViewTransitionState = \"useViewTransitionState\",\n}\n\nenum DataRouterStateHook {\n UseFetcher = \"useFetcher\",\n UseFetchers = \"useFetchers\",\n UseScrollRestoration = \"useScrollRestoration\",\n}\n\n// Internal hooks\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\n// External hooks\n\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nexport function useLinkClickHandler<E extends Element = HTMLAnchorElement>(\n to: To,\n {\n target,\n replace: replaceProp,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n }: {\n target?: React.HTMLAttributeAnchorTarget;\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_viewTransition?: boolean;\n } = {}\n): (event: React.MouseEvent<E, MouseEvent>) => void {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, { relative });\n\n return React.useCallback(\n (event: React.MouseEvent<E, MouseEvent>) => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n\n // If the URL hasn't changed, a regular <a> will do a replace instead of\n // a push, so do the same here unless the replace prop is explicitly set\n let replace =\n replaceProp !== undefined\n ? replaceProp\n : createPath(location) === createPath(path);\n\n navigate(to, {\n replace,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n });\n }\n },\n [\n location,\n navigate,\n path,\n replaceProp,\n state,\n target,\n to,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n ]\n );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(\n defaultInit?: URLSearchParamsInit\n): [URLSearchParams, SetURLSearchParams] {\n warning(\n typeof URLSearchParams !== \"undefined\",\n `You cannot use the \\`useSearchParams\\` hook in a browser that does not ` +\n `support the URLSearchParams API. If you need to support Internet ` +\n `Explorer 11, we recommend you load a polyfill such as ` +\n `https://github.com/ungap/url-search-params\\n\\n` +\n `If you're unsure how to load polyfills, we recommend you check out ` +\n `https://polyfill.io/v3/ which provides some recommendations about how ` +\n `to load polyfills only for users that need them, instead of for every ` +\n `user.`\n );\n\n let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React.useRef(false);\n\n let location = useLocation();\n let searchParams = React.useMemo(\n () =>\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(\n location.search,\n hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n ),\n [location.search]\n );\n\n let navigate = useNavigate();\n let setSearchParams = React.useCallback<SetURLSearchParams>(\n (nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(\n typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n );\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n },\n [navigate, searchParams]\n );\n\n return [searchParams, setSearchParams];\n}\n\nexport type SetURLSearchParams = (\n nextInit?:\n | URLSearchParamsInit\n | ((prev: URLSearchParams) => URLSearchParamsInit),\n navigateOpts?: NavigateOptions\n) => void;\n\n/**\n * Submits a HTML `<form>` to the server without reloading the page.\n */\nexport interface SubmitFunction {\n (\n /**\n * Specifies the `<form>` to be submitted to the server, a specific\n * `<button>` or `<input type=\"submit\">` to use to submit the form, or some\n * arbitrary data to submit.\n *\n * Note: When using a `<button>` its `name` and `value` will also be\n * included in the form data that is submitted.\n */\n target: SubmitTarget,\n\n /**\n * Options that override the `<form>`'s own attributes. Required when\n * submitting arbitrary data without a backing `<form>`.\n */\n options?: SubmitOptions\n ): void;\n}\n\n/**\n * Submits a fetcher `<form>` to the server without reloading the page.\n */\nexport interface FetcherSubmitFunction {\n (\n target: SubmitTarget,\n // Fetchers cannot replace or set state because they are not navigation events\n options?: Omit<SubmitOptions, \"replace\" | \"state\">\n ): void;\n}\n\nfunction validateClientSideSubmission() {\n if (typeof document === \"undefined\") {\n throw new Error(\n \"You are calling submit during the server render. \" +\n \"Try calling submit within a `useEffect` or callback instead.\"\n );\n }\n}\n\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\n\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nexport function useSubmit(): SubmitFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseSubmit);\n let { basename } = React.useContext(NavigationContext);\n let currentRouteId = useRouteId();\n\n return React.useCallback<SubmitFunction>(\n (target, options = {}) => {\n validateClientSideSubmission();\n\n let { action, method, encType, formData, body } = getFormSubmissionInfo(\n target,\n basename\n );\n\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n router.fetch(key, currentRouteId, options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || (method as HTMLFormMethod),\n formEncType: options.encType || (encType as FormEncType),\n unstable_flushSync: options.unstable_flushSync,\n });\n } else {\n router.navigate(options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || (method as HTMLFormMethod),\n formEncType: options.encType || (encType as FormEncType),\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n unstable_flushSync: options.unstable_flushSync,\n unstable_viewTransition: options.unstable_viewTransition,\n });\n }\n },\n [router, basename, currentRouteId]\n );\n}\n\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nexport function useFormAction(\n action?: string,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n let { basename } = React.useContext(NavigationContext);\n let routeContext = React.useContext(RouteContext);\n invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n\n let [match] = routeContext.matches.slice(-1);\n // Shallow clone path so we can modify it below, otherwise we modify the\n // object referenced by useMemo inside useResolvedPath\n let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n\n // If no action was specified, browsers will persist current search params\n // when determining the path, so match that behavior\n // https://github.com/remix-run/remix/issues/927\n let location = useLocation();\n if (action == null) {\n // Safe to write to this directly here since if action was undefined, we\n // would have called useResolvedPath(\".\") which will never include a search\n path.search = location.search;\n\n // When grabbing search params from the URL, remove any included ?index param\n // since it might not apply to our contextual route. We add it back based\n // on match.route.index below\n let params = new URLSearchParams(path.search);\n if (params.has(\"index\") && params.get(\"index\") === \"\") {\n params.delete(\"index\");\n path.search = params.toString() ? `?${params.toString()}` : \"\";\n }\n }\n\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the form action. If this is a root navigation, then just use\n // the raw basename which allows the basename to have full control over the\n // presence of a trailing slash on root actions\n if (basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\nexport type FetcherWithComponents<TData> = Fetcher<TData> & {\n Form: React.ForwardRefExoticComponent<\n FetcherFormProps & React.RefAttributes<HTMLFormElement>\n >;\n submit: FetcherSubmitFunction;\n load: (href: string, opts?: { unstable_flushSync?: boolean }) => void;\n};\n\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nexport function useFetcher<TData = any>({\n key,\n}: { key?: string } = {}): FetcherWithComponents<TData> {\n let { router } = useDataRouterContext(DataRouterHook.UseFetcher);\n let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n let fetcherData = React.useContext(FetchersContext);\n let route = React.useContext(RouteContext);\n let routeId = route.matches[route.matches.length - 1]?.route.id;\n\n invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n invariant(route, `useFetcher must be used inside a RouteContext`);\n invariant(\n routeId != null,\n `useFetcher can only be used on routes that contain a unique \"id\"`\n );\n\n // Fetcher key handling\n let [fetcherKey, setFetcherKey] = React.useState<string>(key || \"\");\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n } else if (!fetcherKey) {\n setFetcherKey(getUniqueFetcherId());\n }\n\n // Registration/cleanup\n React.useEffect(() => {\n router.getFetcher(fetcherKey);\n return () => {\n // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n // will not delete immediately but instead queue up a delete after the\n // fetcher returns to an `idle` state\n router.deleteFetcher(fetcherKey);\n };\n }, [router, fetcherKey]);\n\n // Fetcher additions\n let load = React.useCallback(\n (href: string, opts?: { unstable_flushSync?: boolean }) => {\n invariant(routeId, \"No routeId available for fetcher.load()\");\n router.fetch(fetcherKey, routeId, href, opts);\n },\n [fetcherKey, routeId, router]\n );\n\n let submitImpl = useSubmit();\n let submit = React.useCallback<FetcherSubmitFunction>(\n (target, opts) => {\n submitImpl(target, {\n ...opts,\n navigate: false,\n fetcherKey,\n });\n },\n [fetcherKey, submitImpl]\n );\n\n let FetcherForm = React.useMemo(() => {\n let FetcherForm = React.forwardRef<HTMLFormElement, FetcherFormProps>(\n (props, ref) => {\n return (\n <Form {...props} navigate={false} fetcherKey={fetcherKey} ref={ref} />\n );\n }\n );\n if (__DEV__) {\n FetcherForm.displayName = \"fetcher.Form\";\n }\n return FetcherForm;\n }, [fetcherKey]);\n\n // Exposed FetcherWithComponents\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React.useMemo(\n () => ({\n Form: FetcherForm,\n submit,\n load,\n ...fetcher,\n data,\n }),\n [FetcherForm, submit, load, fetcher, data]\n );\n\n return fetcherWithComponents;\n}\n\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nexport function useFetchers(): (Fetcher & { key: string })[] {\n let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n ...fetcher,\n key,\n }));\n}\n\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions: Record<string, number> = {};\n\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration({\n getKey,\n storageKey,\n}: {\n getKey?: GetScrollRestorationKeyFunction;\n storageKey?: string;\n} = {}) {\n let { router } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n let { restoreScrollPosition, preventScrollReset } = useDataRouterState(\n DataRouterStateHook.UseScrollRestoration\n );\n let { basename } = React.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n\n // Trigger manual scroll restoration while we're active\n React.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n\n // Save positions on pagehide\n usePageHide(\n React.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = (getKey ? getKey(location, matches) : null) || location.key;\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n JSON.stringify(savedScrollPositions)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n );\n }\n window.history.scrollRestoration = \"auto\";\n }, [storageKey, getKey, navigation.state, location, matches])\n );\n\n // Read in any saved scroll locations\n if (typeof document !== \"undefined\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n );\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n // no-op, use default empty object\n }\n }, [storageKey]);\n\n // Enable scroll restoration in the router\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n let getKeyWithoutBasename: GetScrollRestorationKeyFunction | undefined =\n getKey && basename !== \"/\"\n ? (location, matches) =>\n getKey(\n // Strip the basename to match useLocation()\n {\n ...location,\n pathname:\n stripBasename(location.pathname, basename) ||\n location.pathname,\n },\n matches\n )\n : getKey;\n let disableScrollRestoration = router?.enableScrollRestoration(\n savedScrollPositions,\n () => window.scrollY,\n getKeyWithoutBasename\n );\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n\n // Restore scrolling when state.restoreScrollPosition changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n // Explicit false means don't do anything (used for submissions)\n if (restoreScrollPosition === false) {\n return;\n }\n\n // been here before, scroll to it\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n\n // try to scroll to the hash\n if (location.hash) {\n let el = document.getElementById(\n decodeURIComponent(location.hash.slice(1))\n );\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n\n // Don't reset if this navigation opted out\n if (preventScrollReset === true) {\n return;\n }\n\n // otherwise go to the top on new locations\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\n\nexport { useScrollRestoration as UNSAFE_useScrollRestoration };\n\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nexport function useBeforeUnload(\n callback: (event: BeforeUnloadEvent) => any,\n options?: { capture?: boolean }\n): void {\n let { capture } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? { capture } : undefined;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\n\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes. This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(\n callback: (event: PageTransitionEvent) => any,\n options?: { capture?: boolean }\n): void {\n let { capture } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? { capture } : undefined;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\n\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open. Use at your own risk.\n */\nfunction usePrompt({\n when,\n message,\n}: {\n when: boolean | BlockerFunction;\n message: string;\n}) {\n let blocker = useBlocker(when);\n\n React.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n // This timeout is needed to avoid a weird \"race\" on POP navigations\n // between the `window.history` revert navigation and the result of\n // `window.confirm`\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n\n React.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\n\nexport { usePrompt as unstable_usePrompt };\n\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href. You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(\n to: To,\n opts: { relative?: RelativeRoutingType } = {}\n) {\n let vtContext = React.useContext(ViewTransitionContext);\n\n invariant(\n vtContext != null,\n \"`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. \" +\n \"Did you accidentally import `RouterProvider` from `react-router`?\"\n );\n\n let { basename } = useDataRouterContext(\n DataRouterHook.useViewTransitionState\n );\n let path = useResolvedPath(to, { relative: opts.relative });\n if (!vtContext.isTransitioning) {\n return false;\n }\n\n let currentPath =\n stripBasename(vtContext.currentLocation.pathname, basename) ||\n vtContext.currentLocation.pathname;\n let nextPath =\n stripBasename(vtContext.nextLocation.pathname, basename) ||\n vtContext.nextLocation.pathname;\n\n // Transition is active if we're going to or coming from the indicated\n // destination. This ensures that other PUSH navigations that reverse\n // an indicated transition apply. I.e., on the list view you have:\n //\n // <NavLink to=\"/details/1\" unstable_viewTransition>\n //\n // If you click the breadcrumb back to the list view:\n //\n // <NavLink to=\"/list\" unstable_viewTransition>\n //\n // We should apply the transition because it's indicated as active going\n // from /list -> /details/1 and therefore should be active on the reverse\n // (even though this isn't strictly a POP reverse)\n return (\n matchPath(path.pathname, nextPath) != null ||\n matchPath(path.pathname, currentPath) != null\n );\n}\n\nexport { useViewTransitionState as unstable_useViewTransitionState };\n\n//#endregion\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher)\n * are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through,\n * as-is, to `callback` when the throttled-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds\n * while the throttled-function is being called. If noTrailing is false or unspecified, callback will be executed\n * one final time after the last throttled-function call. (After the throttled-function has not been called for\n * `delay` milliseconds, the internal counter is reset).\n * @param {boolean} [options.noLeading] - Optional, defaults to false. If noLeading is false, the first throttled-function call will execute callback\n * immediately. If noLeading is true, the first the callback execution will be skipped. It should be noted that\n * callback will never executed if both noLeading = true and noTrailing = true.\n * @param {boolean} [options.debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is\n * false (at end), schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nexport default function (delay, callback, options) {\n\tconst {\n\t\tnoTrailing = false,\n\t\tnoLeading = false,\n\t\tdebounceMode = undefined\n\t} = options || {};\n\t/*\n\t * After wrapper has stopped being called, this timeout ensures that\n\t * `callback` is executed at the proper times in `throttle` and `end`\n\t * debounce modes.\n\t */\n\tlet timeoutID;\n\tlet cancelled = false;\n\n\t// Keep track of the last time `callback` was executed.\n\tlet lastExec = 0;\n\n\t// Function to clear existing timeout\n\tfunction clearExistingTimeout() {\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\t}\n\n\t// Function to cancel next exec\n\tfunction cancel(options) {\n\t\tconst { upcomingOnly = false } = options || {};\n\t\tclearExistingTimeout();\n\t\tcancelled = !upcomingOnly;\n\t}\n\n\t/*\n\t * The `wrapper` function encapsulates all of the throttling / debouncing\n\t * functionality and when executed will limit the rate at which `callback`\n\t * is executed.\n\t */\n\tfunction wrapper(...arguments_) {\n\t\tlet self = this;\n\t\tlet elapsed = Date.now() - lastExec;\n\n\t\tif (cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Date.now();\n\t\t\tcallback.apply(self, arguments_);\n\t\t}\n\n\t\t/*\n\t\t * If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t * to allow future `callback` executions.\n\t\t */\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (!noLeading && debounceMode && !timeoutID) {\n\t\t\t/*\n\t\t\t * Since `wrapper` is being called for the first time and\n\t\t\t * `debounceMode` is true (at begin), execute `callback`\n\t\t\t * and noLeading != true.\n\t\t\t */\n\t\t\texec();\n\t\t}\n\n\t\tclearExistingTimeout();\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\tif (noLeading) {\n\t\t\t\t/*\n\t\t\t\t * In throttle mode with noLeading, if `delay` time has\n\t\t\t\t * been exceeded, update `lastExec` and schedule `callback`\n\t\t\t\t * to execute after `delay` ms.\n\t\t\t\t */\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tif (!noTrailing) {\n\t\t\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, delay);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/*\n\t\t\t\t * In throttle mode without noLeading, if `delay` time has been exceeded, execute\n\t\t\t\t * `callback`.\n\t\t\t\t */\n\t\t\t\texec();\n\t\t\t}\n\t\t} else if (noTrailing !== true) {\n\t\t\t/*\n\t\t\t * In trailing throttle mode, since `delay` time has not been\n\t\t\t * exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t * recent execution.\n\t\t\t *\n\t\t\t * If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t * after `delay` ms.\n\t\t\t *\n\t\t\t * If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t * execute after `delay` ms.\n\t\t\t */\n\t\t\ttimeoutID = setTimeout(\n\t\t\t\tdebounceMode ? clear : exec,\n\t\t\t\tdebounceMode === undefined ? delay - elapsed : delay\n\t\t\t);\n\t\t}\n\t}\n\n\twrapper.cancel = cancel;\n\n\t// Return the wrapper function.\n\treturn wrapper;\n}\n","/* eslint-disable no-undefined */\n\nimport throttle from './throttle.js';\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n *\n * @returns {Function} A new, debounced function.\n */\nexport default function (delay, callback, options) {\n\tconst { atBegin = false } = options || {};\n\treturn throttle(delay, callback, { debounceMode: atBegin !== false });\n}\n","export const getConfig = () => ({\n publicRuntimeConfig: {\n assetPrefix: '/ustorethemes/IEEEPubsstore',\n apiUrl: '/uStoreRestAPI',\n classicUrl: '/ustore',\n themeCustomizationUrl: '/uStoreThemeCustomizations',\n serverDomain: 'http://localhost:5000'\n }\n})\n","const USTORE_THEME_PREFIX = 'ustorethemes'\n\nconst { location } = window\n\nlet assetPrefix = ''\nlet exec = null\nif (location.pathname.toLowerCase().includes(USTORE_THEME_PREFIX)) {\n exec = (/(.*?\\/ustorethemes\\/.*?)\\//i).exec(location.pathname)\n assetPrefix = exec?.[1] ?? ''\n} else {\n exec = (/(^.*)\\/[a-z]{2}-[a-z]{2}(\\/)(.*)$/i).exec(location.pathname)\n assetPrefix = exec?.[1] ?? ''\n if (!exec) {\n exec = (/(^.*)\\/[a-z]{2}-[a-z]{2}$/i).exec(location.pathname)\n if (exec?.[1] === '') {\n assetPrefix = ''\n }\n } else {\n assetPrefix = exec?.[1] ?? ''\n }\n}\n\nexport default assetPrefix.toLowerCase().includes(USTORE_THEME_PREFIX) ?\n [\n '',\n '/',\n `${assetPrefix}/:storeFriendlyID/:languageCode`,\n `${assetPrefix}/:storeFriendlyID/:languageCode/:page`,\n `${assetPrefix}/:storeFriendlyID/:languageCode/:page/:id`,\n `${assetPrefix}/:storeFriendlyID/:languageCode/:page/:id/:name`,\n ]\n :\n [\n '',\n '/',\n `${assetPrefix}/:languageCode`,\n `${assetPrefix}/:languageCode/:page`,\n `${assetPrefix}/:languageCode/:page/:id`,\n `${assetPrefix}/:languageCode/:page/:id/:name`,\n ]\n","\nclass Logger {\n\n get logger() {\n if(!this._logger){\n this._logger = require('logdown')('ustore')\n this._logger.isEnabled = process.env.NODE_ENV !== \"production\"\n }\n return this._logger;\n }\n\n log(...args){\n this.logger.log(...args);\n }\n\n warn(...args){\n this.logger.warn(...args);\n }\n\n info(...args){\n this.logger.info(...args);\n }\n\n error(...args){\n this.logger.error(...args);\n }\n}\n\nconst logger = new Logger()\nexport default logger\n","/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile<P extends object = object>(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions\n) {\n return tokensToFunction<P>(parse(str, options), options);\n}\n\nexport type PathFunction<P extends object = object> = (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction<P extends object = object>(\n tokens: Token[],\n options: TokensToFunctionOptions = {}\n): PathFunction<P> {\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map((token) => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record<string, any> | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult<P extends object = object> {\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match<P extends object = object> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends object = object> = (\n path: string\n) => Match<P>;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match<P extends object = object>(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction<P>(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction<P extends object = object>(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {}\n): MatchFunction<P> {\n const { decode = (x: string) => x } = options;\n\n return function (pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map((value) => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array<string | RegExp>,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n const parts = paths.map((path) => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {}\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x,\n delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(delimiter)}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array<string | RegExp>;\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n","import {getConfig} from '../../ui.config'\nimport routes from '$routes'\nimport logger from './logger'\nimport { pathToRegexp } from 'path-to-regexp'\n\nexport const extractPage = (asPath) => asPath.substring(1).split('/')[0]\n\nexport const dashToCamel = (str) => str.replace(/\\W+(.)/g, (x, chr) => chr.toUpperCase())\n\nexport const camelToPascal = (str) => str.replace(/^([a-z])/, (x, chr) => chr.toUpperCase())\n\nexport const decodeStringForURL = (string) => string ? string.replace(new RegExp(' ', 'g'), '-') : ''\n\nexport const queryOrCookieStrToObj = (str, splitter) => {\n const res = {}\n\n if (str && str !== '') {\n const splitBy = splitter ? splitter : /[&;]\\s?/g\n\n str\n .replace(/^(.*)\\?/, '')\n .split(splitBy)\n .forEach(pair => {\n const [key, value] = pair.split(/=(.+)/)\n res[key] = value\n })\n }\n\n return res\n}\n\nexport const getHeader = (req, key) => !!req && req.headers ? queryOrCookieStrToObj(req.headers.cookie, /[;]\\s?/g)[key] : null\n\nexport const extractPathParams = (routesArray, asPath) => {\n const query = {}\n routesArray.forEach(r => {\n const pathParams = []\n const pathParamsRegex = pathToRegexp(r, pathParams)\n const params = pathParamsRegex.exec(asPath)\n\n if (pathParams && pathParams.length && params && params.length) {\n pathParams.forEach((p, i) => {\n query[p.name] = params[i + 1]\n })\n }\n })\n\n return query\n}\n\nexport const createContext = () => {\n const asPath = window.location.href.replace(window.location.origin, '')\n const query = extractPathParams(routes, asPath)\n\n return {\n query: Object.assign(queryOrCookieStrToObj(window.location.search), query),\n asPath: asPath\n }\n}\n\nexport const formatNumByLocale = (amount, locale) => {\n try {\n return amount && locale ? new Intl.NumberFormat(locale).format(amount) : amount\n } catch (error) {\n logger.error('Error on formatting number, defaulting to \"en-US\". Error: ' + error)\n return amount && locale ? new Intl.NumberFormat('en-US').format(amount) : amount\n }\n}\n\nexport const formatDateByLocale = (date, locale) => {\n if (!date) {\n return date\n }\n const utcDate = new Date(date)\n const options = { month: 'long', day: '2-digit', year: 'numeric' }\n try {\n return date ? new Intl.DateTimeFormat(locale, options).format(utcDate) : date\n }\n catch (error) {\n logger.error('Error on formatting date, defaulting to \"en-US\". Error: ' + error)\n return new Intl.DateTimeFormat('en-US', options).format(utcDate)\n }\n}\n\nexport const cleanPath = (p, assetPrefix) => p.replace(assetPrefix, '').substring(0, p.indexOf('?') > 0 ? p.indexOf('?') : p.length).replace(/#|\\?.*$/, '')\n\nexport const getCurrentCulture = (context = {}) => context.CultureCode\n\nexport const getNextConfig = () => {\n const { publicRuntimeConfig } = getConfig() || {\n publicRuntimeConfig: {\n serverDomain: 'http',\n apiUrl: 'http',\n themeCustomizationUrl: 'http'\n }\n }\n const settingToFix = ['apiUrl', 'themeCustomizationUrl']\n let domain = publicRuntimeConfig.serverDomain\n domain = window.location.protocol + '//' + window.location.hostname + (window.location.port !== '' ? ':' + window.location.port : '')\n const baseUrl = /(.*)(\\/[a-z]{2}-[A-Za-z]{2})/.exec(window.location.pathname)\n publicRuntimeConfig.baseUrl = baseUrl && baseUrl.length > 1 ? baseUrl[1] : ''\n\n settingToFix.forEach(k => {\n if (!publicRuntimeConfig[k].startsWith('http')) {\n publicRuntimeConfig[k] = `${domain}${publicRuntimeConfig[k]}`\n }\n })\n\n return publicRuntimeConfig\n}\n\nexport const getBaseUrlComponents = (url) => {\n const reg = url.toLowerCase().includes('ustorethemes')\n ? /(.*?\\/ustorethemes\\/.*?\\/\\d+)(\\/[a-z]{2}-[a-z]+[?/]|$)/i\n : /(.*?)(\\/[a-z]{2}-[a-z]+[?/]|$)/i\n\n const res = reg.exec(url)\n\n if (!res) {\n return null\n }\n\n const storeBaseURL = res[1]\n const assetsPrefix = storeBaseURL.replace(/(http|https):\\/\\/.*?([?/]|$)/i,'/')\n\n return {\n assetsPrefix: assetsPrefix.length === 1 ? '' : assetsPrefix,\n storeBaseURL,\n cultureCode: res[2].replace(/\\//g, '')\n }\n}\n\nexport const replaceCultureCodeInURL = (url, newCultureCode) => {\n const { storeBaseURL, cultureCode } = getBaseUrlComponents(url)\n console.log(url,'==>',newCultureCode,'=>',url.replace(`${storeBaseURL}${cultureCode}`, `${storeBaseURL}/${newCultureCode}/`))\n return url.replace(`${storeBaseURL}/${cultureCode}/`, `${storeBaseURL}/${newCultureCode}/`)\n}\n","import { queryOrCookieStrToObj } from \"./utils\"\n\nexport const storefrontCookies = {\n storeBaseURL: '_storeBaseURL',\n token: '_token',\n storeID: '_storeID',\n userID: '_userID',\n cartUrl: '_cartUrl',\n logoutUrl: '_logoutUrl',\n language: '_language',\n currencyID: '_currencyID',\n currencyGUID: '_currencyGUID',\n cookieRibbonNotShownYet: '_cookieRibbonNotShownYet',\n showThemeAsDraft: '_showThemeAsDraft'\n}\n\nexport class CookiesManager {\n static _cookieType = {\n StrictlyNecessary: \"T001\",\n Preferences: \"T002\",\n }\n\n static _cookiePermission = {\n [this._cookieType.StrictlyNecessary]: true,\n [this._cookieType.Preferences]: true\n }\n\n static _strictlyNecessaryStorefrontCookies = [\n storefrontCookies.token,\n storefrontCookies.storeBaseURL,\n storefrontCookies.logoutUrl,\n storefrontCookies.cartUrl,\n storefrontCookies.storeID,\n storefrontCookies.userID,\n storefrontCookies.cookieRibbonNotShownYet,\n storefrontCookies.showThemeAsDraft\n ]\n\n static _preferencesStorefrontCookies = [\n storefrontCookies.language,\n storefrontCookies.currencyID,\n storefrontCookies.currencyGUID\n ]\n\n static isCookieAllowed = (key) => {\n const isStrictlyNecessary = (key) => this._strictlyNecessaryStorefrontCookies.findIndex(v => key === v) !== -1\n if (isStrictlyNecessary(key) && this._cookiePermission[this._cookieType.StrictlyNecessary]) {\n return true\n }\n\n const isPreferences = (key) => this._preferencesStorefrontCookies.findIndex(v => key === v) !== -1\n return !!(isPreferences(key) && this._cookiePermission[this._cookieType.Preferences]);\n\n\n }\n\n // Private method for the internal usage\n static _setCookie = (key, value, days, path) => {\n let expires = \"\";\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = `; expires=${date.toUTCString()}`;\n }\n\n let sameSite = \"\";\n if (window.location.protocol === \"https:\" && window.location !== window.parent.location) {\n sameSite = \"; SameSite=None; Secure\";\n }\n\n document.cookie = `${key}=${value || \"\"}${expires}; path=${path || \"/\"}${sameSite}`;\n }\n\n static setCookie = (cookieData) => {\n const { key, value, days, path } = cookieData\n if (this.isCookieAllowed(key)) {\n this._setCookie(key, value, days, path);\n }\n }\n\n static getCookie = (key) => {\n return queryOrCookieStrToObj(document.cookie, /[;]\\s?/g)[key]\n }\n\n static deleteCookie = (key) => {\n const cookieIndex = Object.values(storefrontCookies).findIndex(cookieName => cookieName === key);\n if (cookieIndex === -1) {\n console.log('Warning! Be sure that you use `cookies` object to manage cookies')\n }\n\n document.cookie = `${key}=;expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/`;\n }\n}\n\nexport const reactCookiesForRibbon = [\n {\n name: storefrontCookies.token,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_auth'\n },\n {\n name: storefrontCookies.language,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_language'\n },\n {\n name: storefrontCookies.storeID,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_storeID'\n },\n {\n name: storefrontCookies.currencyID,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_currency'\n },\n {\n name: storefrontCookies.currencyGUID,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_currency'\n },\n {\n name: storefrontCookies.userID,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_userID'\n },\n {\n name: storefrontCookies.cartUrl,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_navigation'\n },\n {\n name: storefrontCookies.logoutUrl,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_navigation'\n },\n {\n name: storefrontCookies.storeBaseURL,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_storeBaseURL'\n },\n {\n name: storefrontCookies.cookieRibbonNotShownYet,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_cookieRibbonNotShownYet'\n },\n {\n name: storefrontCookies.showThemeAsDraft,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_showThemeAsDraft'\n }\n]\n\nexport const legacyCookiesForRibbon = [\n { name: 'LogoutURL', expiration: { units: 'GdprRibbon.SessionCookieType' }, description: 'CookieDescription_navigation' },\n {\n name: 'XXX_S_CustomerID',\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_CustomerID'\n },\n {\n name: 'cultureID',\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_language'\n },\n {\n name: 'CurrencyID',\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_currency'\n },\n {\n name: 'sID',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_storeID'\n },\n {\n name: 'encryptedOrderProductId',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_encryptedOrderProductId'\n },\n {\n name: 'uStoreCustomerApp',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_uStoreCustomerApp'\n },\n {\n name: 'ASP.NET_SessionID',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_SessionID'\n },\n {\n name: '__AntiXsrfToken',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_AntiXsrfToken'\n },\n {\n name: 'XXX_S_RegisteredCustomerID',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_CustomerID'\n },\n {\n name: 'uStoreCustomerApp_SameSite',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_SameSite'\n },\n]\n\nexport const getCookiesForRibbon = (cookiesData = {\n initial: legacyCookiesForRibbon,\n additional: reactCookiesForRibbon\n}) => {\n const { initial, additional } = cookiesData\n return initial\n ? additional\n ? [...initial, ...additional]\n : [...initial]\n : []\n}\n","import {http, UStoreProvider} from '@ustore/core'\nimport {USER_ID_EXPIRATION_DAYS} from './initialLoad'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport {CookiesManager, storefrontCookies} from '$ustoreinternal/services/cookies'\nimport {getNextConfig, getBaseUrlComponents} from '$ustoreinternal/services/utils'\n\nexport const redirectToStoreErrorPage = () => {\n redirectToLegacy('ShowMessage.aspx?ErrorCode=0')\n}\n\nexport const redirectToGenericErrorPage = () => {\n redirectToLegacy(`errorPage.aspx`)\n}\n\nexport const loginByUrlCall = async (publicRuntimeConfig, url) => {\n ['securityToken', 'storeBaseURL', 'storeID', 'FriendlyID'].forEach(key => themeContext.deleteKey(key))\n\n const currentUser = themeContext.get('userID') || CookiesManager.getCookie(storefrontCookies.userID)\n\n const loginResponse = await http.post(`${publicRuntimeConfig.apiUrl}/v1/store/loginByUrl`, {\n FullURL: url,\n UserID: currentUser\n }, {auth: false})\n\n if (!loginResponse.URL) {\n redirectToFullURL(loginResponse.URL)\n }\n\n if ((!loginResponse.Token || !loginResponse.Token.Token) && !loginResponse.URL) {\n // in case no new token returned, or API failed, redirect to logout.\n redirectToGenericErrorPage()\n return null\n }\n\n return loginResponse\n}\n\nexport const returnToUrl = (loginResponse) => {\n let returnURL = loginResponse.URL\n\n if (returnURL) {\n returnURL += returnURL.includes('?') ? '&ShowRibbon=true' : '?ShowRibbon=true'\n // check if return URL is logout page, and if so, append the ShowRibbon=true\n if (returnURL.toLowerCase().includes('logout.aspx')) {\n returnURL += '&forceLogin=true'\n }\n\n redirectToFullURL(returnURL)\n return false\n }\n return true\n}\n\nexport const setCookies = (storeBaseFromURL, shouldCookieRibbonBeShown, loginResponse) => {\n CookiesManager.setCookie({key: storefrontCookies.token, value: themeContext.get('securityToken')})\n CookiesManager.setCookie({key: storefrontCookies.storeID, value: themeContext.get('storeID')})\n CookiesManager.setCookie({key: storefrontCookies.storeBaseURL, value: storeBaseFromURL})\n CookiesManager.setCookie({key: storefrontCookies.cookieRibbonNotShownYet, value: shouldCookieRibbonBeShown})\n // need to save the user ID to the cookie, so that if he closes the browser and reopens he wont lose his data.\n CookiesManager.setCookie({\n key: storefrontCookies.userID,\n value: loginResponse.UserID,\n days: USER_ID_EXPIRATION_DAYS\n })\n}\n\nexport const saveInfoFromApi = (loginResponse) => {\n // save info from API to context and cookie\n themeContext.set('storeBaseURL', undefined)\n themeContext.set('securityToken', loginResponse.Token.Token)\n themeContext.set('storeID', loginResponse.StoreID)\n themeContext.set('userID', loginResponse.UserID)\n}\n\nexport const redirectToLegacy = (legacyURL) => {\n const {classicUrl} = themeContext.get()\n window.location.href = `${classicUrl}/${legacyURL}`\n\n return {}\n}\n\nexport const redirectToFullURL = (newURL) => {\n window.location.href = newURL\n\n}\n\nexport const loginByUrl = async (storeBaseFromURL, shouldCookieRibbonBeShown) => {\n const url = window ? window.location.href : ''\n const publicRuntimeConfig = getNextConfig()\n const loginResponse = await loginByUrlCall(publicRuntimeConfig, url)\n if (loginResponse) {\n saveInfoFromApi(loginResponse)\n setCookies(storeBaseFromURL, shouldCookieRibbonBeShown, loginResponse)\n\n // raise the showRibbon flag, so if not redirecting to logout, NG will show the cookie ribbon.\n UStoreProvider.state.customState.set('showCookieRibbon', JSON.parse(shouldCookieRibbonBeShown))\n\n if (returnToUrl(loginResponse)) {\n window.location.reload()\n }\n }\n}\n\nexport const redirectToLogout = async () => {\n const {securityToken, storeFriendlyID, storeID, languageCode, logoutUrl} = themeContext.get()\n const storeType = UStoreProvider && UStoreProvider.state.get().currentStore && UStoreProvider.state.get().currentStore.StoreType\n CookiesManager.deleteCookie(storefrontCookies.token)\n\n if (storeType === 3 && logoutUrl) {\n redirectToFullURL(decodeURIComponent(logoutUrl))\n } else if (!storeType || storeType === 2) {\n const res = getBaseUrlComponents(window.location.href)\n if (!res) return\n\n const {storeBaseURL: storeBaseFromURL} = res\n let shouldCookieRibbonBeShown = CookiesManager.getCookie(storefrontCookies.cookieRibbonNotShownYet) || ' true'\n\n await loginByUrl(storeBaseFromURL, shouldCookieRibbonBeShown)\n } else {\n redirectToLegacy(`logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}ShowRibbon=false&forceLogin=true&NgLanguageCode=${languageCode}`)\n }\n}\n","import {\n dashToCamel,\n createContext,\n getNextConfig, queryOrCookieStrToObj, getBaseUrlComponents, replaceCultureCodeInURL\n} from '$ustoreinternal/services/utils'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { UStoreProvider, http } from '@ustore/core'\nimport pages from '$themepages/index'\nimport { initiateThemeState } from '$themeservices/initThemeState'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport {\n redirectToFullURL,\n redirectToStoreErrorPage,\n redirectToGenericErrorPage,\n redirectToLogout,\n} from './redirect'\n\nexport const USER_ID_EXPIRATION_DAYS = 30\n\nconst getUserInitialProps = async (initialPropsFunctionName, ctx) => {\n const routedPage = Object.keys(pages).filter(p => p.toLowerCase() === initialPropsFunctionName.toLowerCase())\n\n if (routedPage.length > 0 && pages[routedPage].getInitialProps) {\n return await pages[routedPage].getInitialProps({query: ctx})\n }\n\n return pages.Home.getInitialProps ? await pages.Home.getInitialProps({query: ctx}) : {}\n}\n\nexport const initAndLogin = async (ctx, url) => {\n const publicRuntimeConfig = getNextConfig()\n const res = getBaseUrlComponents(url)\n\n if (!res) return\n\n if (url.indexOf('connect-logged-out') > -1) {\n return\n }\n\n let securityTokenFromUrl = ''\n const { storeBaseURL: storeBaseFromURL, cultureCode: cultureCodeFromURL } = res\n const storedCultureCode = CookiesManager.getCookie(storefrontCookies.language)\n if (storedCultureCode && storedCultureCode !== cultureCodeFromURL) {\n redirectToFullURL(replaceCultureCodeInURL(url, storedCultureCode))\n return false\n }\n\n if (themeContext.get('ssoToken')) {\n const newSecurityToken = await UStoreProvider.api.store.loginBySSOToken(themeContext.get('ssoToken'))\n themeContext.set('securityToken', newSecurityToken.Token)\n securityTokenFromUrl = newSecurityToken.Token\n const currentUrl = new URL(window.location.href)\n currentUrl.searchParams.delete('SsoToken')\n window.history.replaceState(window.history.state, '', currentUrl.href)\n }\n\n const storeBaseFromMem = themeContext.get('storeBaseURL') || CookiesManager.getCookie(storefrontCookies.storeBaseURL)\n let shouldCookieRibbonBeShown = CookiesManager.getCookie(storefrontCookies.cookieRibbonNotShownYet) || ' true'\n\n const searchStr = window.location.search.substring(1)\n\n if (searchStr) {\n const q = queryOrCookieStrToObj(searchStr)\n\n if (q.SecurityToken) {\n securityTokenFromUrl = q.SecurityToken\n }\n if (q.ShowRibbon) {\n shouldCookieRibbonBeShown = q.ShowRibbon.toLowerCase()\n }\n }\n\n const shouldCallLoginByUrl = !!url && !securityTokenFromUrl &&\n (themeContext.get('securityToken') === undefined || !themeContext.get('securityToken') ||\n (storeBaseFromMem && storeBaseFromURL !== storeBaseFromMem))\n const date = new Date();\n date.setTime(date.getTime() + (USER_ID_EXPIRATION_DAYS * 24 * 60 * 60 * 1000));\n\n if (shouldCallLoginByUrl) {\n ['securityToken', 'storeBaseURL', 'storeID', 'FriendlyID'].forEach(key => themeContext.deleteKey(key))\n\n const currentUser = themeContext.get('userID') || CookiesManager.getCookie(storefrontCookies.userID)\n\n let loginResponse = await http.post(`${publicRuntimeConfig.apiUrl}/v1/store/loginByUrl`, { FullURL: url, UserID: currentUser }, { auth: false })\n\n if ((!loginResponse.Token || !loginResponse.Token.Token) && !loginResponse.URL) {\n // in case no new token returned, or API failed, redirect to logout.\n redirectToGenericErrorPage(ctx)\n return false\n }\n\n // save info from API to context and cookie\n themeContext.set('storeBaseURL', undefined)\n themeContext.set('securityToken', loginResponse.Token.Token)\n themeContext.set('storeID', loginResponse.StoreID)\n themeContext.set('userID', loginResponse.UserID)\n\n CookiesManager.setCookie({ key: storefrontCookies.token, value: themeContext.get('securityToken') })\n CookiesManager.setCookie({ key: storefrontCookies.storeID, value: themeContext.get('storeID') })\n CookiesManager.setCookie({ key: storefrontCookies.storeBaseURL, value: storeBaseFromURL })\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: shouldCookieRibbonBeShown })\n // need to save the user ID to the cookie, so that if he closes the browser and reopens he wont lose his data.\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: loginResponse.UserID, days: USER_ID_EXPIRATION_DAYS })\n\n // raise the showRibbon flag, so if not redirecting to logout, NG will show the cookie ribbon.\n UStoreProvider.state.customState.set('showCookieRibbon', JSON.parse(shouldCookieRibbonBeShown))\n\n let returnURL = loginResponse.URL\n\n if (returnURL) {\n returnURL += returnURL.includes('?') ? '&ShowRibbon=true' : '?ShowRibbon=true'\n // check if return URL is logout page, and if so, append the ShowRibbon=true\n if (returnURL.toLowerCase().includes('logout.aspx')) {\n UStoreProvider.contextService.clear()\n returnURL += '&forceLogin=true'\n }\n\n redirectToFullURL(returnURL)\n return false\n }\n }\n else {\n CookiesManager.setCookie({ key: storefrontCookies.token, value: themeContext.get('securityToken') })\n CookiesManager.setCookie({ key: storefrontCookies.storeID, value: themeContext.get('storeID') })\n CookiesManager.setCookie({ key: storefrontCookies.storeBaseURL, value: storeBaseFromURL })\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: shouldCookieRibbonBeShown })\n // need to save the user ID to the cookie, so that if he closes the browser and reopens he wont lose his data.\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: themeContext.get('userID'), days: USER_ID_EXPIRATION_DAYS })\n\n UStoreProvider.state.customState.set('showCookieRibbon', JSON.parse(shouldCookieRibbonBeShown))\n }\n\n themeContext.set('storeBaseURL', storeBaseFromURL)\n\n await UStoreProvider.init(publicRuntimeConfig, {\n ...themeContext.get(),\n onAccessDenied: () => redirectToLogout(),\n onStoreNotAvailable: () => redirectToStoreErrorPage(),\n onGeneralError: () => redirectToGenericErrorPage(),\n }).then(() => {\n initiateThemeState()\n })\n\n return true\n}\n\nexport const initialLoad = async (ctxParam) => {\n const ctx = ctxParam || createContext()\n\n themeContext.updateRouteParams(ctx)\n\n const fullUrl = window.location.href\n let shouldContinue = await initAndLogin(ctx, fullUrl)\n\n // if should not continue, do not load further data.\n if (!shouldContinue) return {}\n // }\n\n const { page } = themeContext.get()\n const initialPropsFunctionName = dashToCamel(page)\n\n //sets the user initial props to custom state.\n const userInitialProps = await getUserInitialProps(initialPropsFunctionName, ctx)\n if (userInitialProps) {\n UStoreProvider.state.customState.setBulk(userInitialProps)\n }\n\n const userCustomState = { customState: { ...UStoreProvider.state.get().customState, ...userInitialProps } }\n\n // returns the state from the component to be rendered.\n return { state: { ...UStoreProvider.state.get(), ...userCustomState }, context: ctx.query }\n}\n","import { UStoreProvider } from '@ustore/core'\n\nexport const initiateThemeState = async () => {\n const { Categories: categoriesTree } = await UStoreProvider.api.categories.getCategoryTree(3)\n const firstLevelCategories = categoriesTree.map((node) => node.Category)\n UStoreProvider.state.customState.set('categories', firstLevelCategories)\n UStoreProvider.state.customState.set('categoriesTree', categoriesTree)\n\n if (UStoreProvider.state.get().currentStore) {\n const { RequireOrderApproval: requireOrderApproval } = UStoreProvider.state.get().currentStore\n\n if (requireOrderApproval) {\n const userOrdersSummary = await UStoreProvider.api.orders.getUserOrdersSummary()\n UStoreProvider.state.customState.set('userOrdersSummary', userOrdersSummary)\n }\n }\n}\n","import {\n queryOrCookieStrToObj, extractPathParams\n} from '$ustoreinternal/services/utils'\nimport routes from '$routes'\nimport { USER_ID_EXPIRATION_DAYS } from '$ustoreinternal/services/initialLoad'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { UStoreProvider } from '@ustore/core'\nimport { getConfig } from '../../ui.config'\n\nconst { publicRuntimeConfig } = getConfig()\n\nclass ThemeContext {\n constructor() {\n this.context = { ...publicRuntimeConfig, ...{ page: 'home' } }\n }\n\n get(key) {\n return key ? this.context[key] : this.context\n }\n\n set(key, value) {\n this.context[key] = value\n }\n\n deleteKey(key) {\n delete this.context[key]\n }\n\n escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') // $& means the whole matched string\n }\n\n updateRouteParams() {\n const asPath = window.location.pathname\n\n this.set('page', 'home')\n this.deleteKey('id')\n\n this.context = { ...this.context, ...extractPathParams(routes, asPath) }\n }\n\n // init the application context in the follow uses cases:\n // 1. in the client only from the query string\n // 2. in the client only from the cookies (cookies are using also inserted to the request header)\n init(params) {\n if (params) {\n if (params.languageCode) {\n this.context.languageCode = params.languageCode\n }\n }\n\n const searchStr = window.location.search.substring(1)\n\n if (searchStr) {\n const q = queryOrCookieStrToObj(searchStr)\n\n if (q.SecurityToken) {\n this.context.securityToken = q.SecurityToken\n CookiesManager.setCookie({ key: storefrontCookies.token, value: this.context.securityToken })\n }\n\n if (q.CultureCode) {\n this.context.languageCode = q.CultureCode\n }\n\n if (q.StoreGuid) {\n this.context.storeID = q.StoreGuid\n CookiesManager.setCookie({ key: storefrontCookies.storeID, value: this.context.storeID })\n }\n\n if (q.currencyFriendlyID) {\n this.context.currencyFriendlyID = q.currencyFriendlyID\n }\n\n if (q.UserID) {\n this.context.userID = q.UserID\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: this.context.userID, days: USER_ID_EXPIRATION_DAYS })\n }\n\n if (q.ShowRibbon) {\n UStoreProvider.state.customState.set('showCookieRibbon', (q.ShowRibbon.toLowerCase() === 'true'))\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: q.ShowRibbon.toLowerCase() })\n }\n\n if (q.CurrencyID) {\n UStoreProvider.state.customState.set('currencyID', (q.CurrencyID))\n this.context.currencyID = q.CurrencyID\n }\n\n if (q.cartUrl) {\n UStoreProvider.state.customState.set('cartUrl', (q.cartUrl))\n this.context.cartUrl = q.cartUrl\n CookiesManager.setCookie({ key: storefrontCookies.cartUrl, value: q.cartUrl })\n }\n\n if (q.logoutUrl) {\n UStoreProvider.state.customState.set('logoutUrl', (q.logoutUrl))\n this.context.logoutUrl = q.logoutUrl\n CookiesManager.setCookie({ key: storefrontCookies.logoutUrl, value: q.logoutUrl })\n }\n if (q.SsoToken) {\n UStoreProvider.state.customState.set('ssoToken', q.SsoToken)\n this.context.ssoToken = q.SsoToken\n }\n }\n\n this.context.languageCode = CookiesManager.getCookie(storefrontCookies.language) || this.context.languageCode\n this.context.showThemeAsDraft = CookiesManager.getCookie(storefrontCookies.showThemeAsDraft) || this.context.showThemeAsDraft\n this.context.securityToken = CookiesManager.getCookie(storefrontCookies.token) || this.context.securityToken\n this.context.storeID = CookiesManager.getCookie(storefrontCookies.storeID) || this.context.storeID\n this.context.currencyFriendlyID = CookiesManager.getCookie(storefrontCookies.currencyID) || this.context.currencyFriendlyID\n this.context.userID = CookiesManager.getCookie(storefrontCookies.userID) || this.context.userID\n\n this.context.CurrencyID = CookiesManager.getCookie(storefrontCookies.currencyGUID) || this.context.CurrencyID\n this.context.cartUrl = CookiesManager.getCookie(storefrontCookies.cartUrl) || this.context.cartUrl\n this.context.logoutUrl = CookiesManager.getCookie(storefrontCookies.logoutUrl) || this.context.logoutUrl\n\n if (UStoreProvider.state.get() && UStoreProvider.state.get().currentUser) {\n this.context.userID = UStoreProvider.state.get().currentUser.ID\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: this.context.userID, days: USER_ID_EXPIRATION_DAYS })\n }\n\n const asPath = window.location.pathname\n\n // analise the routes and extract the route variables (i.e ':page')\n this.context = {...this.context, ...extractPathParams(routes, asPath)}\n }\n}\n\nconst themeContext = new ThemeContext()\nexport default themeContext\n","import themeContext from '$ustoreinternal/services/themeContext'\nimport enUs from './en-US'\nimport frFr from './fr-FR'\nimport deDE from './de-DE'\nimport jaJP from './ja-JP'\nimport enGB from './en-GB'\nimport esES from './es-ES'\nimport nlNL from './nl-NL'\nimport ptBR from './pt-BR'\nconst i18n = require('roddeh-i18n')\n\nconst fixTranslation = (v) => {\n const reFormat = /{\\s*(.*?)\\s*}/igm\n return v.replace(reFormat, '%{$1}')\n}\nconst fixTranslationValues = (t) => {\n if (!t) {\n return ''\n }\n\n return Object\n .entries(t)\n .map(([k, v]) => ({ key: k, value: fixTranslation(v) }))\n .reduce((r, i) => ({ ...r, ...{ [i.key]: i.value } }), {})\n}\n\nconst localizations = {\n 'en-US': i18n.create({ values: fixTranslationValues(enUs) }),\n 'fr-FR': i18n.create({ values: fixTranslationValues(frFr) }),\n 'de-DE': i18n.create({ values: fixTranslationValues(deDE) }),\n 'ja-JP': i18n.create({ values: fixTranslationValues(jaJP) }),\n 'en-GB': i18n.create({ values: fixTranslationValues(enGB) }),\n 'es-ES': i18n.create({ values: fixTranslationValues(esES) }),\n 'nl-NL': i18n.create({ values: fixTranslationValues(nlNL) }),\n 'pt-BR': i18n.create({ values: fixTranslationValues(ptBR) })\n}\n\nconst NO_LOCALIZATION = '[no localization]'\nexport const t = function () {\n const languageCode = themeContext.get('languageCode')\n\n if (!languageCode) {\n return ''\n }\n\n const globalLocalization = window.uStoreLocalization || {}\n\n if (typeof globalLocalization[languageCode] !== 'function') {\n globalLocalization[languageCode] = i18n.create({ values: fixTranslationValues(globalLocalization[languageCode]) })\n }\n\n const args = [...arguments]\n if (args.length > 1 && typeof args[1] === 'string') {\n args[1] = fixTranslation(args[1])\n }\n const globalTranslation = globalLocalization[languageCode] ? globalLocalization[languageCode](...args) : NO_LOCALIZATION\n const bundledTranslation = localizations[languageCode] ? localizations[languageCode](...args) : NO_LOCALIZATION\n\n if (bundledTranslation !== arguments[0] && bundledTranslation !== NO_LOCALIZATION) {\n return bundledTranslation\n }\n\n return globalTranslation === arguments[0] ? NO_LOCALIZATION : globalTranslation\n}\n\nexport default localizations\n","import themeContext from '$ustoreinternal/services/themeContext'\n\nconst HIDDEN = 1\nconst SUFFIX = 2\nconst PREFIX = 3\n\nconst PRODUCT = 'product'\nconst PRODUCTS = 'products'\nconst CATEGORY = 'category'\nconst HOME = 'home'\n\nconst getSEO = (data, defaults) => {\n const { title, description } = defaults\n\n if (!data) {\n return { title, description }\n }\n\n return { title: data.Title, description: data.Description }\n}\n\n/**\n @param {string} string - capitalize first letter\n */\nconst capitalize = (string) => {\n return string ? string.charAt(0).toUpperCase() + string.slice(1) : ''\n}\n\n/**\n *\n * @param {string} pageTitle\n * @param {string} storeTitle\n * @param {number} type\n */\nconst concatenate = (pageTitle, storeTitle, type = SUFFIX) => {\n if (!pageTitle || !storeTitle) {\n return\n }\n\n switch (type) {\n case HIDDEN:\n return pageTitle\n case PREFIX:\n return `${storeTitle} ${pageTitle}`\n case SUFFIX:\n return `${pageTitle} ${storeTitle}`\n default:\n return ''\n }\n}\n\nconst HeadSEO = ({ currentStore, customState }) => {\n if (!currentStore || !customState) {\n return null\n }\n\n const { Name: storeTitle, Description: storeDescription, SeoConfiguration } = currentStore\n const { page } = themeContext.get()\n\n let titleAdditionFormat = SUFFIX\n let titleAdditionText = storeTitle\n if (SeoConfiguration) {\n titleAdditionFormat = SeoConfiguration.TitleTagType\n titleAdditionText = SeoConfiguration.TitleTag\n }\n\n let title = storeTitle\n let description = ''\n let data\n\n switch (page) {\n case HOME:\n data = getSEO(\n SeoConfiguration,\n { title: storeTitle, description: storeDescription }\n )\n\n title = data.title\n description = data.description\n break\n case CATEGORY:\n const { currentCategory } = customState\n\n if (currentCategory) {\n data = getSEO(\n currentCategory.SeoConfiguration,\n { title: currentCategory.Name, description: currentCategory.Description }\n )\n\n title = concatenate(data.title, titleAdditionText, titleAdditionFormat)\n description = data.description\n }\n\n break\n\n case PRODUCTS:\n case PRODUCT:\n const { currentProduct } = customState\n\n if (currentProduct) {\n data = getSEO(\n currentProduct.SeoConfiguration,\n { title: currentProduct.Name, description: currentProduct.Description }\n )\n\n title = concatenate(data.title, titleAdditionText, titleAdditionFormat)\n description = data.description\n }\n\n break\n default:\n title = concatenate(capitalize(page), titleAdditionText, titleAdditionFormat)\n }\n\n document.title = title.replace(/<[^>]*>?/gm, '') || ''\n if (description) {\n const metaTag = document.head.querySelector(`[name='description']`)\n if (metaTag) metaTag.setAttribute('content', description)\n }\n return null\n}\n\nexport default HeadSEO\n","import themeContext from './themeContext';\nimport routes from '$routes';\n\nclass UrlGenerator {\n\n constructor() {\n this.routes = routes.filter(r => (\n r.indexOf(':languageCode') > -1 &&\n r.indexOf(':page') > -1)\n )\n }\n\n get(params) {\n const { languageCode, storeID, storeFriendlyID } = themeContext.get();\n params.languageCode = languageCode;\n params.storeID = storeID;\n params.storeFriendlyID = storeFriendlyID\n const entries = Object.entries(params);\n\n const r = this.routes.map(r => {\n let result = r;\n entries.forEach(([key, value]) => {\n const encodedValue = typeof value === 'string' && params.page !== 'search'\n ? value\n .replace(/<[^>]*>?/gm, '')\n .replace(/[+}{!@#$%^&*()/|:;<>?’~_\\-\"\"',.\\\\\\s]/g, '-')\n .replace(/-+/g, '-')\n : value\n\n result = result.replace(`:${key}`, encodedValue)\n });\n return result;\n }).filter(r => r.indexOf(':') === -1)\n .reduce((res, r) => res.length < r.length ? r : res, '');\n\n return r;\n }\n}\n\nconst urlGenerator = new UrlGenerator();\nexport default urlGenerator\n","import React, {useEffect} from 'react'\n\nexport const Icon = ({ name, width, height, wrapperClassName, className, title, ...args }) => {\n const [importedIcon, setImportedIcon] = React.useState(null)\n\n useEffect(() => {\n const setCssClass = () => {\n // adding className to all <g> and <path> nodes under svg to allow stroke coloring\n if (document.querySelectorAll(`svg.${className}`).length) {\n document.querySelectorAll(`svg.${className}`).forEach((svg) => {\n svg.querySelectorAll('g').forEach((element) =>\n element.classList.add(className)\n )\n svg.querySelectorAll('path').forEach((element) =>\n element.classList.add(className)\n )\n })\n }\n }\n\n const importIcon = async () => {\n const { ReactComponent } = await import(`$assets/icons/${name}`)\n setImportedIcon(<ReactComponent width={width} height={height} className={className} title={title} {...args} />)\n }\n importIcon()\n setCssClass()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [name, width, height, className, title])\n\n if (!name || !height || !width) {\n return null\n }\n\n return (\n <div\n className={`icon icon-holder${wrapperClassName ? ` ${wrapperClassName}` : ''}`}\n style={{ width: `${width}`, height: `${height}`, 'backgroundSize': `${width} ${height}` }}\n >\n {importedIcon ? importedIcon : null}\n </div>\n )\n}\n\nexport default Icon\n","import moment from 'moment'\nimport features from '$features'\n\nexport const productTypes =\n{\n DYNAMIC: 1,\n STATIC: 2,\n COMPOSITE: 5,\n KIT: 14\n}\n\nexport const getIsNGProduct = (product) => {\n const { Type, Attributes } = product\n\n switch (Type) {\n case productTypes.KIT:\n return true\n case productTypes.STATIC:\n case productTypes.DYNAMIC:\n const NGCompatible = Attributes.find(attribute => attribute.Name === 'NGCompatible')\n return NGCompatible && NGCompatible.Value.toLowerCase() === 'true'\n default:\n return false\n }\n}\n\nexport const CART_MODE = {\n Aspx: 'Aspx',\n WishList: 'WishList',\n Lists: 'Lists',\n SingleList: 'SingleList',\n}\n\nexport const getCartMode = (store) => {\n const { Attributes, StoreType } = store\n const NGCart = Attributes.find(attribute => attribute.Name === 'ForceCartAspx')\n const CartMode = Attributes.find(attribute => attribute.Name === 'CartMode')\n\n if (NGCart?.Value.toLowerCase() === 'true') {\n return CART_MODE.Aspx\n } else {\n if (StoreType === 4 && CartMode?.Value === CART_MODE.Lists) {\n return CART_MODE.Lists\n } else if (StoreType === 4 && CartMode?.Value === CART_MODE.SingleList) {\n return CART_MODE.SingleList\n } else if (CartMode?.Value === CART_MODE.WishList) {\n return CART_MODE.WishList\n }\n }\n}\n\nexport const isDate = function (date) {\n if (typeof date === 'string') {\n const isTime = /\\d{1,2}:\\d{1,2}(:\\d{1,2})?\\s?([AP]M)?/.exec(date) !== null\n const parsedDate = moment(isTime ? `1/1/1970 ${date}` : date).toDate()\n return parsedDate !== 'Invalid Date'\n }\n\n return false\n}\n\nconst convertDatesForState = (value, modes) => {\n const { showDateTime, showTime } = modes\n const date = moment(new Date()).format('YYYY-MM-DD')\n\n const dateFromProps =\n showDateTime && showTime\n ? value\n : showTime\n ? `${date}T${value}`\n : `${value}T00:00:00`\n\n return moment(dateFromProps).toDate()\n}\n\nexport const convertDate = (str) => {\n if (features && features.newTimezoneModel) {\n // v14_1\n const showTime = str.includes(':')\n const showDate = str.includes('/') || str.includes('-')\n const dateAndTime = showTime && showDate\n\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone\n\n const re = /[+-]\\d{1,2}:?\\d{1,2}$/\n const date = re.test(str) ? moment(str).format('DD/MM/YYYY HH:mm') : str\n\n const mDate = moment(date, 'DD/MM/YYYY')\n const mTime = moment(date, ['HH:mm', 'HH:mm:ss'], true)\n const mDateTime = moment(date, ['DD/MM/YYYY HH:mm', 'DD/MM/YYYYTHH:mm:ssZ'], true)\n\n const isDate = !showTime && mDate.isValid()\n const isTime = showTime && mTime.isValid()\n const isAndTime = dateAndTime && mDateTime.isValid()\n\n return {\n date: isDate || isAndTime ? mDate.format('YYYY-MM-DD') : '',\n time: isTime ? mTime.format('HH:mm:ss') : isAndTime ? mDateTime.format('HH:mm:ss') : '',\n timeZone\n }\n } else {\n // v14_0\n const showTime = str.includes(':')\n const showDateTime = str.includes('/') || str.includes('-')\n\n const nodes = { showTime, showDateTime }\n const strConverted = convertDatesForState(str, nodes)\n\n const date = moment(strConverted).format('YYYY-MM-DD')\n const time = moment(strConverted).format('HH:mm')\n\n const clientNow = moment().format('YYYY-MM-DDTHH:mm:ss')\n\n return { date, time, clientNow }\n }\n}\n\nexport const convertProductPropertiesFormIntoArray = (currentProductProperties, excelPricingEnabled) => {\n const { formData = {}, JSONSchema: { definitions }, UISchema } = currentProductProperties\n\n return Object.keys(formData).map(propName => {\n const propertyDefinition = definitions[propName]\n const widget = UISchema[propName]['ui:widget']\n const toAPIValue = window.uStoreDucs.find(duc => duc.name === widget).component['toAPIValue']\n return {\n id: propertyDefinition.custom.id,\n value: toAPIValue ? toAPIValue(formData[propName]) : (formData[propName] || '')\n }\n })\n}\n\nfunction isObject (item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n}\nexport const mergeDeep = (target, ...sources) => {\n if (!sources.length) return target\n const source = sources.shift()\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} })\n mergeDeep(target[key], source[key])\n } else {\n Object.assign(target, { [key]: source[key] })\n }\n }\n }\n\n return mergeDeep(target, ...sources)\n}\n\nexport const PriceNotUpdatedReason = {\n hiddenError: 'hidden error',\n visibleError: 'visible error',\n noUpdates: 'nothing was updated',\n notAffectPriceProperty: 'updated property does not affect price'\n}\nexport const shouldPriceBeUpdatedDespiteErrors = (hiddenErrors = [], visibleErrors = [], excelPricingEnabled = false) => {\n if (visibleErrors && visibleErrors.length > 0 && !!visibleErrors.find((e) => e.affectPrice)) {\n return { result: false, error: PriceNotUpdatedReason.visibleError }\n }\n\n if (excelPricingEnabled) {\n return { result: true }\n }\n\n let hiddenErrorsAffectPrice = false\n if (hiddenErrors && hiddenErrors.length > 0) {\n hiddenErrorsAffectPrice = !!hiddenErrors.find((e) => e.affectPrice)\n }\n\n return !hiddenErrorsAffectPrice ? { result: true } : { result: false, error: PriceNotUpdatedReason.hiddenError }\n}\n\nlet prevDefs = {}\nexport const shouldPriceBeUpdatedByUpdates = (newProps, prevProps, schema) => {\n const updatedProperties = Object.keys(newProps)\n .filter((propertyName) => newProps[propertyName] !== prevProps[propertyName])\n\n if (updatedProperties.length === 0) {\n return { result: false, error: PriceNotUpdatedReason.noUpdates }\n }\n const { definitions } = schema\n\n let shouldUpdatePrice = false\n const filteredDefs = Object.keys(schema.properties)\n .reduce((acc, next) => ({ ...acc, [next]: schema.definitions[next] }), {})\n\n if (Object.keys(prevDefs).length !== Object.keys(filteredDefs).length) {\n shouldUpdatePrice = true\n }\n prevDefs = filteredDefs\n for (const propertyName of updatedProperties) {\n if (definitions[propertyName].custom.affectPrice) {\n shouldUpdatePrice = true\n break\n }\n }\n\n if (!shouldUpdatePrice) {\n return { result: false, error: PriceNotUpdatedReason.notAffectPriceProperty }\n }\n\n return { result: true }\n}\n\nexport const shouldPriceBeUpdated = (newProps, prevProps, schema, hiddenErrors = [], visibleErrors = [], excelPricingEnabled = false) => {\n const shouldPriceBeUpdatedByUpdatesResult = shouldPriceBeUpdatedByUpdates(newProps, prevProps, schema)\n const shouldPriceBeUpdatedDespiteErrorsResult = shouldPriceBeUpdatedDespiteErrors(hiddenErrors, visibleErrors, excelPricingEnabled)\n\n if (!shouldPriceBeUpdatedByUpdatesResult.result) {\n return shouldPriceBeUpdatedByUpdatesResult\n }\n\n return shouldPriceBeUpdatedDespiteErrorsResult\n}\n\nexport const preparingFormDataToSendToServer = (newData, propertiesSchema) => {\n return Object.keys(newData).reduce((updatedProperties, key) => {\n const definition = propertiesSchema.JSONSchema.definitions[key]\n\n const widget = propertiesSchema.UISchema[key]['ui:widget']\n const toAPIValue = window.uStoreDucs.find(duc => duc.name === widget).component['toAPIValue']\n\n const isJsonString = (newData[key] ? newData[key].toString() : '').startsWith('___JSON___:')\n\n let newValue = !!newData[key] || newData[key] === 0\n ? isJsonString\n ? JSON.parse(newData[key].replace('___JSON___:', ''))\n : toAPIValue ? toAPIValue(newData[key]) : newData[key]\n : ''\n\n updatedProperties.push({\n id: definition.custom.id,\n value: newValue\n })\n\n return updatedProperties\n }, [])\n}\n\nexport const convertTimeByTimeZone = (properties) => {\n return Object.keys(properties.formData).reduce((acc, next) => {\n const isDatePicker = properties.formData[next] && properties.UISchema[next]['ui:widget'] === 'dateTimePicker'\n\n if (isDatePicker) {\n const isTime = moment(properties.formData[next], 'HH:mm:ss', true).isValid()\n const dateTime = isTime ? properties.formData[next] : moment(properties.formData[next]).format()\n return { ...acc, [next]: dateTime }\n }\n return { ...acc, [next]: properties.formData[next] }\n }, {})\n}\n\nexport const cleanServerErrors = (serverErrors, uiSchema) => {\n let errorMessage = ''\n const errorsObject = serverErrors ? Object.keys(serverErrors).reduce((acc, next) => {\n if (!Object.keys(uiSchema[next]).includes('ui:errorMessages')) {\n errorMessage = serverErrors[next][0]\n return { ...acc, [next]: serverErrors[next] }\n }\n return acc\n }, {}) : {}\n return { errorsObject, errorMessage }\n}\n\nexport const convertCustomFormat = (string, price = '', tax = '', priceIncludingTax = '') => {\n let convertedString = string;\n\n if (string.includes('{Price}')) {\n convertedString = convertedString.replace(/{Price}/g, price);\n };\n\n if (string.includes('{Tax}')) {\n convertedString = convertedString.replace(/{Tax}/g, tax)\n };\n\n if (string.includes('{PriceIncludingTax}')) {\n convertedString = convertedString.replace(/{PriceIncludingTax}/g, priceIncludingTax);\n }\n\n return convertedString;\n};","import { useEffect, useState } from 'react'\nimport { UStoreProvider } from '@ustore/core'\nimport './Cart.scss'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { Link } from 'react-router-dom'\nimport Icon from '$core-components/Icon'\nimport {getCartMode, CART_MODE} from '../../../services/utils'\n\n/**\n * This component represents the cart icon.\n * When clicking on it - the store redirects to the 'Cart' page\n */\nconst Cart = ({ connectCartUrl = '' }) => {\n const storeItemsCount = UStoreProvider.state.get().cartItemsCount?.ItemsCount\n const [cartItemsCount, setCartItemsCount] = useState(storeItemsCount)\n const isCartLists = getCartMode(UStoreProvider.state.get().currentStore) === CART_MODE.Lists\n\n useEffect(() => {\n setCartItemsCount(UStoreProvider.state.get().cartItemsCount?.ItemsCount)\n }, [storeItemsCount])\n\n const getBadge = () => {\n if (isCartLists && cartItemsCount) {\n return <div className=\"cart-badge\"/>\n }\n if (cartItemsCount) {\n return <div className=\"cart-badge\">{cartItemsCount >= 100 ? '∞' : cartItemsCount}</div>\n }\n return null\n }\n\n const cartComponent = () => {\n return <div className=\"cart-icon-container\">\n <Icon name=\"cart.svg\" width=\"23px\" height=\"21px\" className=\"cart-icon\" />\n {getBadge()}\n </div>\n }\n\n return (\n <div className=\"cart\">\n {\n connectCartUrl\n ? <a href={decodeURIComponent(connectCartUrl)}>{cartComponent()}</a>\n : <Link to={urlGenerator.get({ page: 'cart' })}>\n <span>\n {cartComponent()}\n </span>\n </Link>\n }\n </div>\n )\n}\n\nexport default Cart\n","import * as React from 'react';\nexport var ManagerReferenceNodeContext = React.createContext();\nexport var ManagerReferenceNodeSetterContext = React.createContext();\nexport function Manager(_ref) {\n var children = _ref.children;\n\n var _React$useState = React.useState(null),\n referenceNode = _React$useState[0],\n setReferenceNode = _React$useState[1];\n\n var hasUnmounted = React.useRef(false);\n React.useEffect(function () {\n return function () {\n hasUnmounted.current = true;\n };\n }, []);\n var handleSetReferenceNode = React.useCallback(function (node) {\n if (!hasUnmounted.current) {\n setReferenceNode(node);\n }\n }, []);\n return /*#__PURE__*/React.createElement(ManagerReferenceNodeContext.Provider, {\n value: referenceNode\n }, /*#__PURE__*/React.createElement(ManagerReferenceNodeSetterContext.Provider, {\n value: handleSetReferenceNode\n }, children));\n}","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === 'function') {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n return entries.reduce(function (acc, _ref) {\n var key = _ref[0],\n value = _ref[1];\n acc[key] = value;\n return acc;\n }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport PropTypes from 'prop-types';\n\n// https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/js/src/modal.js#L436-L443\nexport function getScrollbarWidth() {\n var scrollDiv = document.createElement('div');\n // .modal-scrollbar-measure styles // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/scss/_modal.scss#L106-L113\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n}\nexport function setScrollbarWidth(padding) {\n document.body.style.paddingRight = padding > 0 ? \"\".concat(padding, \"px\") : null;\n}\nexport function isBodyOverflowing() {\n return document.body.clientWidth < window.innerWidth;\n}\nexport function getOriginalBodyPadding() {\n var style = window.getComputedStyle(document.body, null);\n return parseInt(style && style.getPropertyValue('padding-right') || 0, 10);\n}\nexport function conditionallyUpdateScrollbar() {\n var scrollbarWidth = getScrollbarWidth();\n // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.6/js/src/modal.js#L433\n var fixedContent = document.querySelectorAll('.fixed-top, .fixed-bottom, .is-fixed, .sticky-top')[0];\n var bodyPadding = fixedContent ? parseInt(fixedContent.style.paddingRight || 0, 10) : 0;\n if (isBodyOverflowing()) {\n setScrollbarWidth(bodyPadding + scrollbarWidth);\n }\n}\nvar globalCssModule;\nexport function setGlobalCssModule(cssModule) {\n globalCssModule = cssModule;\n}\nexport function mapToCssModules() {\n var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var cssModule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalCssModule;\n if (!cssModule) return className;\n return className.split(' ').map(function (c) {\n return cssModule[c] || c;\n }).join(' ');\n}\n\n/**\n * Returns a new object with the key/value pairs from `obj` that are not in the array `omitKeys`.\n */\nexport function omit(obj, omitKeys) {\n var result = {};\n Object.keys(obj).forEach(function (key) {\n if (omitKeys.indexOf(key) === -1) {\n result[key] = obj[key];\n }\n });\n return result;\n}\n\n/**\n * Returns a filtered copy of an object with only the specified keys.\n */\nexport function pick(obj, keys) {\n var pickKeys = Array.isArray(keys) ? keys : [keys];\n var length = pickKeys.length;\n var key;\n var result = {};\n while (length > 0) {\n length -= 1;\n key = pickKeys[length];\n result[key] = obj[key];\n }\n return result;\n}\nvar warned = {};\nexport function warnOnce(message) {\n if (!warned[message]) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined') {\n console.error(message); // eslint-disable-line no-console\n }\n\n warned[message] = true;\n }\n}\nexport function deprecated(propType, explanation) {\n return function validate(props, propName, componentName) {\n if (props[propName] !== null && typeof props[propName] !== 'undefined') {\n warnOnce(\"\\\"\".concat(propName, \"\\\" property of \\\"\").concat(componentName, \"\\\" has been deprecated.\\n\").concat(explanation));\n }\n for (var _len = arguments.length, rest = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n rest[_key - 3] = arguments[_key];\n }\n return propType.apply(void 0, [props, propName, componentName].concat(rest));\n };\n}\n\n// Shim Element if needed (e.g. in Node environment)\nvar Element = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' && window.Element || function () {};\nexport function DOMElement(props, propName, componentName) {\n if (!(props[propName] instanceof Element)) {\n return new Error('Invalid prop `' + propName + '` supplied to `' + componentName + '`. Expected prop to be an instance of Element. Validation failed.');\n }\n}\nexport var targetPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, DOMElement, PropTypes.shape({\n current: PropTypes.any\n})]);\nexport var tagPropType = PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n}), PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n})]))]);\n\n// These are all setup to match what is in the bootstrap _variables.scss\n// https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss\nexport var TransitionTimeouts = {\n Fade: 150,\n // $transition-fade\n Collapse: 350,\n // $transition-collapse\n Modal: 300,\n // $modal-transition\n Carousel: 600,\n // $carousel-transition\n Offcanvas: 300 // $offcanvas-transition\n};\n\n// Duplicated Transition.propType keys to ensure that Reactstrap builds\n// for distribution properly exclude these keys for nested child HTML attributes\n// since `react-transition-group` removes propTypes in production builds.\nexport var TransitionPropTypeKeys = ['in', 'mountOnEnter', 'unmountOnExit', 'appear', 'enter', 'exit', 'timeout', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited'];\nexport var TransitionStatuses = {\n ENTERING: 'entering',\n ENTERED: 'entered',\n EXITING: 'exiting',\n EXITED: 'exited'\n};\nexport var keyCodes = {\n esc: 27,\n space: 32,\n enter: 13,\n tab: 9,\n up: 38,\n down: 40,\n home: 36,\n end: 35,\n n: 78,\n p: 80\n};\nexport var PopperPlacements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\nexport var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport function isReactRefObj(target) {\n if (target && _typeof(target) === 'object') {\n return 'current' in target;\n }\n return false;\n}\nfunction getTag(value) {\n if (value == null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n return Object.prototype.toString.call(value);\n}\nexport function isObject(value) {\n var type = _typeof(value);\n return value != null && (type === 'object' || type === 'function');\n}\nexport function toNumber(value) {\n var type = _typeof(value);\n var NAN = 0 / 0;\n if (type === 'number') {\n return value;\n }\n if (type === 'symbol' || type === 'object' && getTag(value) === '[object Symbol]') {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf === 'function' ? value.valueOf() : value;\n value = isObject(other) ? \"\".concat(other) : other;\n }\n if (type !== 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(/^\\s+|\\s+$/g, '');\n var isBinary = /^0b[01]+$/i.test(value);\n return isBinary || /^0o[0-7]+$/i.test(value) ? parseInt(value.slice(2), isBinary ? 2 : 8) : /^[-+]0x[0-9a-f]+$/i.test(value) ? NAN : +value;\n}\nexport function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n var tag = getTag(value);\n return tag === '[object Function]' || tag === '[object AsyncFunction]' || tag === '[object GeneratorFunction]' || tag === '[object Proxy]';\n}\nexport function findDOMElements(target) {\n if (isReactRefObj(target)) {\n return target.current;\n }\n if (isFunction(target)) {\n return target();\n }\n if (typeof target === 'string' && canUseDOM) {\n var selection = document.querySelectorAll(target);\n if (!selection.length) {\n selection = document.querySelectorAll(\"#\".concat(target));\n }\n if (!selection.length) {\n throw new Error(\"The target '\".concat(target, \"' could not be identified in the dom, tip: check spelling\"));\n }\n return selection;\n }\n return target;\n}\nexport function isArrayOrNodeList(els) {\n if (els === null) {\n return false;\n }\n return Array.isArray(els) || canUseDOM && typeof els.length === 'number';\n}\nexport function getTarget(target, allElements) {\n var els = findDOMElements(target);\n if (allElements) {\n if (isArrayOrNodeList(els)) {\n return els;\n }\n if (els === null) {\n return [];\n }\n return [els];\n }\n if (isArrayOrNodeList(els)) {\n return els[0];\n }\n return els;\n}\nexport var defaultToggleEvents = ['touchstart', 'click'];\nexport function addMultipleEventListeners(_els, handler, _events, useCapture) {\n var els = _els;\n if (!isArrayOrNodeList(els)) {\n els = [els];\n }\n var events = _events;\n if (typeof events === 'string') {\n events = events.split(/\\s+/);\n }\n if (!isArrayOrNodeList(els) || typeof handler !== 'function' || !Array.isArray(events)) {\n throw new Error(\"\\n The first argument of this function must be DOM node or an array on DOM nodes or NodeList.\\n The second must be a function.\\n The third is a string or an array of strings that represents DOM events\\n \");\n }\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.addEventListener(event, handler, useCapture);\n });\n });\n return function removeEvents() {\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.removeEventListener(event, handler, useCapture);\n });\n });\n };\n}\nexport var focusableElements = ['a[href]', 'area[href]', 'input:not([disabled]):not([type=hidden])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'object', 'embed', '[tabindex]:not(.modal):not(.offcanvas)', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'];","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var prevOptions = React.useRef(null);\n var optionsWithDefaults = {\n onFirstUpdate: options.onFirstUpdate,\n placement: options.placement || 'bottom',\n strategy: options.strategy || 'absolute',\n modifiers: options.modifiers || EMPTY_MODIFIERS\n };\n\n var _React$useState = React.useState({\n styles: {\n popper: {\n position: optionsWithDefaults.strategy,\n left: '0',\n top: '0'\n },\n arrow: {\n position: 'absolute'\n }\n },\n attributes: {}\n }),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var updateStateModifier = React.useMemo(function () {\n return {\n name: 'updateState',\n enabled: true,\n phase: 'write',\n fn: function fn(_ref) {\n var state = _ref.state;\n var elements = Object.keys(state.elements);\n ReactDOM.flushSync(function () {\n setState({\n styles: fromEntries(elements.map(function (element) {\n return [element, state.styles[element] || {}];\n })),\n attributes: fromEntries(elements.map(function (element) {\n return [element, state.attributes[element]];\n }))\n });\n });\n },\n requires: ['computeStyles']\n };\n }, []);\n var popperOptions = React.useMemo(function () {\n var newOptions = {\n onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n placement: optionsWithDefaults.placement,\n strategy: optionsWithDefaults.strategy,\n modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n name: 'applyStyles',\n enabled: false\n }])\n };\n\n if (isEqual(prevOptions.current, newOptions)) {\n return prevOptions.current || newOptions;\n } else {\n prevOptions.current = newOptions;\n return newOptions;\n }\n }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n var popperInstanceRef = React.useRef();\n useIsomorphicLayoutEffect(function () {\n if (popperInstanceRef.current) {\n popperInstanceRef.current.setOptions(popperOptions);\n }\n }, [popperOptions]);\n useIsomorphicLayoutEffect(function () {\n if (referenceElement == null || popperElement == null) {\n return;\n }\n\n var createPopper = options.createPopper || defaultCreatePopper;\n var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n popperInstanceRef.current = popperInstance;\n return function () {\n popperInstance.destroy();\n popperInstanceRef.current = null;\n };\n }, [referenceElement, popperElement, options.createPopper]);\n return {\n state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n styles: state.styles,\n attributes: state.attributes,\n update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n };\n};","import * as React from 'react';\nimport { ManagerReferenceNodeContext } from './Manager';\nimport { unwrapArray, setRef } from './utils';\nimport { usePopper } from './usePopper';\n\nvar NOOP = function NOOP() {\n return void 0;\n};\n\nvar NOOP_PROMISE = function NOOP_PROMISE() {\n return Promise.resolve(null);\n};\n\nvar EMPTY_MODIFIERS = [];\nexport function Popper(_ref) {\n var _ref$placement = _ref.placement,\n placement = _ref$placement === void 0 ? 'bottom' : _ref$placement,\n _ref$strategy = _ref.strategy,\n strategy = _ref$strategy === void 0 ? 'absolute' : _ref$strategy,\n _ref$modifiers = _ref.modifiers,\n modifiers = _ref$modifiers === void 0 ? EMPTY_MODIFIERS : _ref$modifiers,\n referenceElement = _ref.referenceElement,\n onFirstUpdate = _ref.onFirstUpdate,\n innerRef = _ref.innerRef,\n children = _ref.children;\n var referenceNode = React.useContext(ManagerReferenceNodeContext);\n\n var _React$useState = React.useState(null),\n popperElement = _React$useState[0],\n setPopperElement = _React$useState[1];\n\n var _React$useState2 = React.useState(null),\n arrowElement = _React$useState2[0],\n setArrowElement = _React$useState2[1];\n\n React.useEffect(function () {\n setRef(innerRef, popperElement);\n }, [innerRef, popperElement]);\n var options = React.useMemo(function () {\n return {\n placement: placement,\n strategy: strategy,\n onFirstUpdate: onFirstUpdate,\n modifiers: [].concat(modifiers, [{\n name: 'arrow',\n enabled: arrowElement != null,\n options: {\n element: arrowElement\n }\n }])\n };\n }, [placement, strategy, onFirstUpdate, modifiers, arrowElement]);\n\n var _usePopper = usePopper(referenceElement || referenceNode, popperElement, options),\n state = _usePopper.state,\n styles = _usePopper.styles,\n forceUpdate = _usePopper.forceUpdate,\n update = _usePopper.update;\n\n var childrenProps = React.useMemo(function () {\n return {\n ref: setPopperElement,\n style: styles.popper,\n placement: state ? state.placement : placement,\n hasPopperEscaped: state && state.modifiersData.hide ? state.modifiersData.hide.hasPopperEscaped : null,\n isReferenceHidden: state && state.modifiersData.hide ? state.modifiersData.hide.isReferenceHidden : null,\n arrowProps: {\n style: styles.arrow,\n ref: setArrowElement\n },\n forceUpdate: forceUpdate || NOOP,\n update: update || NOOP_PROMISE\n };\n }, [setPopperElement, setArrowElement, placement, state, styles, update, forceUpdate]);\n return unwrapArray(children)(childrenProps);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","export default {\n disabled: false\n};","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","var _excluded = [\"tag\", \"baseClass\", \"baseClassActive\", \"className\", \"cssModule\", \"children\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Transition } from 'react-transition-group';\nimport { mapToCssModules, omit, pick, TransitionPropTypeKeys, TransitionTimeouts, tagPropType } from './utils';\nvar propTypes = _objectSpread(_objectSpread({}, Transition.propTypes), {}, {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n tag: tagPropType,\n baseClass: PropTypes.string,\n baseClassActive: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n});\nvar defaultProps = _objectSpread(_objectSpread({}, Transition.defaultProps), {}, {\n timeout: TransitionTimeouts.Fade,\n appear: true,\n enter: true,\n exit: true,\n \"in\": true\n});\nfunction Fade(props) {\n var ref = useRef(null);\n var _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$baseClass = props.baseClass,\n baseClass = _props$baseClass === void 0 ? 'fade' : _props$baseClass,\n _props$baseClassActiv = props.baseClassActive,\n baseClassActive = _props$baseClassActiv === void 0 ? 'show' : _props$baseClassActiv,\n className = props.className,\n cssModule = props.cssModule,\n children = props.children,\n _props$innerRef = props.innerRef,\n innerRef = _props$innerRef === void 0 ? ref : _props$innerRef,\n otherProps = _objectWithoutProperties(props, _excluded);\n var transitionProps = pick(_objectSpread({\n defaultProps: defaultProps\n }, otherProps), TransitionPropTypeKeys);\n var childProps = omit(otherProps, TransitionPropTypeKeys);\n return /*#__PURE__*/React.createElement(Transition, _extends({\n nodeRef: innerRef\n }, transitionProps), function (status) {\n var isActive = status === 'entered';\n var classes = mapToCssModules(classNames(className, baseClass, isActive && baseClassActive), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n className: classes\n }, childProps, {\n ref: innerRef\n }), children);\n });\n}\nFade.propTypes = propTypes;\nFade.defaultProps = defaultProps;\nexport default Fade;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"cssModule\", \"children\", \"isOpen\", \"flip\", \"target\", \"offset\", \"fallbackPlacements\", \"placementPrefix\", \"arrowClassName\", \"hideArrow\", \"popperClassName\", \"tag\", \"container\", \"modifiers\", \"strategy\", \"boundariesElement\", \"onClosed\", \"fade\", \"transition\", \"placement\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { Popper as ReactPopper } from 'react-popper';\nimport { getTarget, targetPropType, mapToCssModules, DOMElement, tagPropType } from './utils';\nimport Fade from './Fade';\nfunction noop() {}\nvar propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n popperClassName: PropTypes.string,\n placement: PropTypes.string,\n placementPrefix: PropTypes.string,\n arrowClassName: PropTypes.string,\n hideArrow: PropTypes.bool,\n tag: tagPropType,\n isOpen: PropTypes.bool,\n cssModule: PropTypes.object,\n offset: PropTypes.arrayOf(PropTypes.number),\n fallbackPlacements: PropTypes.array,\n flip: PropTypes.bool,\n container: targetPropType,\n target: targetPropType.isRequired,\n modifiers: PropTypes.array,\n strategy: PropTypes.string,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n onClosed: PropTypes.func,\n fade: PropTypes.bool,\n transition: PropTypes.shape(Fade.propTypes)\n};\nvar defaultProps = {\n boundariesElement: 'scrollParent',\n placement: 'auto',\n hideArrow: false,\n isOpen: false,\n offset: [0, 0],\n flip: true,\n container: 'body',\n modifiers: [],\n onClosed: noop,\n fade: true,\n transition: _objectSpread({}, Fade.defaultProps)\n};\nvar PopperContent = /*#__PURE__*/function (_React$Component) {\n _inherits(PopperContent, _React$Component);\n var _super = _createSuper(PopperContent);\n function PopperContent(props) {\n var _this;\n _classCallCheck(this, PopperContent);\n _this = _super.call(this, props);\n _this.setTargetNode = _this.setTargetNode.bind(_assertThisInitialized(_this));\n _this.getTargetNode = _this.getTargetNode.bind(_assertThisInitialized(_this));\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.onClosed = _this.onClosed.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: props.isOpen\n };\n return _this;\n }\n _createClass(PopperContent, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (this._element && this._element.childNodes && this._element.childNodes[0] && this._element.childNodes[0].focus) {\n this._element.childNodes[0].focus();\n }\n }\n }, {\n key: \"onClosed\",\n value: function onClosed() {\n this.props.onClosed();\n this.setState({\n isOpen: false\n });\n }\n }, {\n key: \"getTargetNode\",\n value: function getTargetNode() {\n return this.targetNode;\n }\n }, {\n key: \"getContainerNode\",\n value: function getContainerNode() {\n return getTarget(this.props.container);\n }\n }, {\n key: \"getRef\",\n value: function getRef(ref) {\n this._element = ref;\n }\n }, {\n key: \"setTargetNode\",\n value: function setTargetNode(node) {\n this.targetNode = typeof node === 'string' ? getTarget(node) : node;\n }\n }, {\n key: \"renderChildren\",\n value: function renderChildren() {\n var _this$props = this.props,\n cssModule = _this$props.cssModule,\n children = _this$props.children,\n isOpen = _this$props.isOpen,\n flip = _this$props.flip,\n target = _this$props.target,\n offset = _this$props.offset,\n fallbackPlacements = _this$props.fallbackPlacements,\n placementPrefix = _this$props.placementPrefix,\n _arrowClassName = _this$props.arrowClassName,\n hideArrow = _this$props.hideArrow,\n _popperClassName = _this$props.popperClassName,\n tag = _this$props.tag,\n container = _this$props.container,\n modifiers = _this$props.modifiers,\n strategy = _this$props.strategy,\n boundariesElement = _this$props.boundariesElement,\n onClosed = _this$props.onClosed,\n fade = _this$props.fade,\n transition = _this$props.transition,\n placement = _this$props.placement,\n attrs = _objectWithoutProperties(_this$props, _excluded);\n var arrowClassName = mapToCssModules(classNames('arrow', _arrowClassName), cssModule);\n var popperClassName = mapToCssModules(classNames(_popperClassName, placementPrefix ? \"\".concat(placementPrefix, \"-auto\") : ''), this.props.cssModule);\n var modifierNames = modifiers.map(function (m) {\n return m.name;\n });\n var baseModifiers = [{\n name: 'offset',\n options: {\n offset: offset\n }\n }, {\n name: 'flip',\n enabled: flip,\n options: {\n fallbackPlacements: fallbackPlacements\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: boundariesElement\n }\n }].filter(function (m) {\n return !modifierNames.includes(m.name);\n });\n var extendedModifiers = [].concat(_toConsumableArray(baseModifiers), _toConsumableArray(modifiers));\n var popperTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), transition), {}, {\n baseClass: fade ? transition.baseClass : '',\n timeout: fade ? transition.timeout : 0\n });\n return /*#__PURE__*/React.createElement(Fade, _extends({}, popperTransition, attrs, {\n \"in\": isOpen,\n onExited: this.onClosed,\n tag: tag\n }), /*#__PURE__*/React.createElement(ReactPopper, {\n referenceElement: this.targetNode,\n modifiers: extendedModifiers,\n placement: placement,\n strategy: strategy\n }, function (_ref) {\n var ref = _ref.ref,\n style = _ref.style,\n popperPlacement = _ref.placement,\n isReferenceHidden = _ref.isReferenceHidden,\n arrowProps = _ref.arrowProps,\n update = _ref.update;\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n style: style,\n className: popperClassName,\n \"data-popper-placement\": popperPlacement,\n \"data-popper-reference-hidden\": isReferenceHidden ? 'true' : undefined\n }, typeof children === 'function' ? children({\n update: update\n }) : children, !hideArrow && /*#__PURE__*/React.createElement(\"span\", {\n ref: arrowProps.ref,\n className: arrowClassName,\n style: arrowProps.style\n }));\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n this.setTargetNode(this.props.target);\n if (this.state.isOpen) {\n return this.props.container === 'inline' ? this.renderChildren() : /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement(\"div\", {\n ref: this.getRef\n }, this.renderChildren()), this.getContainerNode());\n }\n return null;\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n if (props.isOpen && !state.isOpen) {\n return {\n isOpen: props.isOpen\n };\n }\n return null;\n }\n }]);\n return PopperContent;\n}(React.Component);\nPopperContent.propTypes = propTypes;\nPopperContent.defaultProps = defaultProps;\nexport default PopperContent;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport PopperContent from './PopperContent';\nimport { getTarget, targetPropType, omit, PopperPlacements, mapToCssModules, DOMElement } from './utils';\nexport var propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n placement: PropTypes.oneOf(PopperPlacements),\n target: targetPropType.isRequired,\n container: targetPropType,\n isOpen: PropTypes.bool,\n disabled: PropTypes.bool,\n hideArrow: PropTypes.bool,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n className: PropTypes.string,\n innerClassName: PropTypes.string,\n arrowClassName: PropTypes.string,\n popperClassName: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.func,\n autohide: PropTypes.bool,\n placementPrefix: PropTypes.string,\n delay: PropTypes.oneOfType([PropTypes.shape({\n show: PropTypes.number,\n hide: PropTypes.number\n }), PropTypes.number]),\n modifiers: PropTypes.array,\n strategy: PropTypes.string,\n offset: PropTypes.arrayOf(PropTypes.number),\n innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.object]),\n trigger: PropTypes.string,\n fade: PropTypes.bool,\n flip: PropTypes.bool\n};\nvar DEFAULT_DELAYS = {\n show: 0,\n hide: 50\n};\nvar defaultProps = {\n isOpen: false,\n hideArrow: false,\n autohide: false,\n delay: DEFAULT_DELAYS,\n toggle: function toggle() {},\n trigger: 'click',\n fade: true\n};\nfunction isInDOMSubtree(element, subtreeRoot) {\n return subtreeRoot && (element === subtreeRoot || subtreeRoot.contains(element));\n}\nfunction isInDOMSubtrees(element) {\n var subtreeRoots = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return subtreeRoots && subtreeRoots.length && subtreeRoots.filter(function (subTreeRoot) {\n return isInDOMSubtree(element, subTreeRoot);\n })[0];\n}\nvar TooltipPopoverWrapper = /*#__PURE__*/function (_React$Component) {\n _inherits(TooltipPopoverWrapper, _React$Component);\n var _super = _createSuper(TooltipPopoverWrapper);\n function TooltipPopoverWrapper(props) {\n var _this;\n _classCallCheck(this, TooltipPopoverWrapper);\n _this = _super.call(this, props);\n _this._targets = [];\n _this.currentTargetElement = null;\n _this.addTargetEvents = _this.addTargetEvents.bind(_assertThisInitialized(_this));\n _this.handleDocumentClick = _this.handleDocumentClick.bind(_assertThisInitialized(_this));\n _this.removeTargetEvents = _this.removeTargetEvents.bind(_assertThisInitialized(_this));\n _this.toggle = _this.toggle.bind(_assertThisInitialized(_this));\n _this.showWithDelay = _this.showWithDelay.bind(_assertThisInitialized(_this));\n _this.hideWithDelay = _this.hideWithDelay.bind(_assertThisInitialized(_this));\n _this.onMouseOverTooltipContent = _this.onMouseOverTooltipContent.bind(_assertThisInitialized(_this));\n _this.onMouseLeaveTooltipContent = _this.onMouseLeaveTooltipContent.bind(_assertThisInitialized(_this));\n _this.show = _this.show.bind(_assertThisInitialized(_this));\n _this.hide = _this.hide.bind(_assertThisInitialized(_this));\n _this.onEscKeyDown = _this.onEscKeyDown.bind(_assertThisInitialized(_this));\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: props.isOpen\n };\n _this._isMounted = false;\n return _this;\n }\n _createClass(TooltipPopoverWrapper, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._isMounted = true;\n this.updateTarget();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this._isMounted = false;\n this.removeTargetEvents();\n this._targets = null;\n this.clearShowTimeout();\n this.clearHideTimeout();\n }\n }, {\n key: \"handleDocumentClick\",\n value: function handleDocumentClick(e) {\n var triggers = this.props.trigger.split(' ');\n if (triggers.indexOf('legacy') > -1 && (this.props.isOpen || isInDOMSubtrees(e.target, this._targets))) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (this.props.isOpen && !isInDOMSubtree(e.target, this._popover)) {\n this.hideWithDelay(e);\n } else if (!this.props.isOpen) {\n this.showWithDelay(e);\n }\n } else if (triggers.indexOf('click') > -1 && isInDOMSubtrees(e.target, this._targets)) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (!this.props.isOpen) {\n this.showWithDelay(e);\n } else {\n this.hideWithDelay(e);\n }\n }\n }\n }, {\n key: \"onMouseOverTooltipContent\",\n value: function onMouseOverTooltipContent() {\n if (this.props.trigger.indexOf('hover') > -1 && !this.props.autohide) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (this.state.isOpen && !this.props.isOpen) {\n this.toggle();\n }\n }\n }\n }, {\n key: \"onMouseLeaveTooltipContent\",\n value: function onMouseLeaveTooltipContent(e) {\n if (this.props.trigger.indexOf('hover') > -1 && !this.props.autohide) {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n e.persist();\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }\n }, {\n key: \"onEscKeyDown\",\n value: function onEscKeyDown(e) {\n if (e.key === 'Escape') {\n this.hide(e);\n }\n }\n }, {\n key: \"getRef\",\n value: function getRef(ref) {\n var innerRef = this.props.innerRef;\n if (innerRef) {\n if (typeof innerRef === 'function') {\n innerRef(ref);\n } else if (_typeof(innerRef) === 'object') {\n innerRef.current = ref;\n }\n }\n this._popover = ref;\n }\n }, {\n key: \"getDelay\",\n value: function getDelay(key) {\n var delay = this.props.delay;\n if (_typeof(delay) === 'object') {\n return isNaN(delay[key]) ? DEFAULT_DELAYS[key] : delay[key];\n }\n return delay;\n }\n }, {\n key: \"getCurrentTarget\",\n value: function getCurrentTarget(target) {\n if (!target) return null;\n var index = this._targets.indexOf(target);\n if (index >= 0) return this._targets[index];\n return this.getCurrentTarget(target.parentElement);\n }\n }, {\n key: \"show\",\n value: function show(e) {\n if (!this.props.isOpen) {\n this.clearShowTimeout();\n this.currentTargetElement = e ? e.currentTarget || this.getCurrentTarget(e.target) : null;\n if (e && e.composedPath && typeof e.composedPath === 'function') {\n var path = e.composedPath();\n this.currentTargetElement = path && path[0] || this.currentTargetElement;\n }\n this.toggle(e);\n }\n }\n }, {\n key: \"showWithDelay\",\n value: function showWithDelay(e) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n this._showTimeout = setTimeout(this.show.bind(this, e), this.getDelay('show'));\n }\n }, {\n key: \"hide\",\n value: function hide(e) {\n if (this.props.isOpen) {\n this.clearHideTimeout();\n this.currentTargetElement = null;\n this.toggle(e);\n }\n }\n }, {\n key: \"hideWithDelay\",\n value: function hideWithDelay(e) {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }, {\n key: \"clearShowTimeout\",\n value: function clearShowTimeout() {\n clearTimeout(this._showTimeout);\n this._showTimeout = undefined;\n }\n }, {\n key: \"clearHideTimeout\",\n value: function clearHideTimeout() {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = undefined;\n }\n }, {\n key: \"addEventOnTargets\",\n value: function addEventOnTargets(type, handler, isBubble) {\n this._targets.forEach(function (target) {\n target.addEventListener(type, handler, isBubble);\n });\n }\n }, {\n key: \"removeEventOnTargets\",\n value: function removeEventOnTargets(type, handler, isBubble) {\n this._targets.forEach(function (target) {\n target.removeEventListener(type, handler, isBubble);\n });\n }\n }, {\n key: \"addTargetEvents\",\n value: function addTargetEvents() {\n if (this.props.trigger) {\n var triggers = this.props.trigger.split(' ');\n if (triggers.indexOf('manual') === -1) {\n if (triggers.indexOf('click') > -1 || triggers.indexOf('legacy') > -1) {\n document.addEventListener('click', this.handleDocumentClick, true);\n }\n if (this._targets && this._targets.length) {\n if (triggers.indexOf('hover') > -1) {\n this.addEventOnTargets('mouseover', this.showWithDelay, true);\n this.addEventOnTargets('mouseout', this.hideWithDelay, true);\n }\n if (triggers.indexOf('focus') > -1) {\n this.addEventOnTargets('focusin', this.show, true);\n this.addEventOnTargets('focusout', this.hide, true);\n }\n this.addEventOnTargets('keydown', this.onEscKeyDown, true);\n }\n }\n }\n }\n }, {\n key: \"removeTargetEvents\",\n value: function removeTargetEvents() {\n if (this._targets) {\n this.removeEventOnTargets('mouseover', this.showWithDelay, true);\n this.removeEventOnTargets('mouseout', this.hideWithDelay, true);\n this.removeEventOnTargets('keydown', this.onEscKeyDown, true);\n this.removeEventOnTargets('focusin', this.show, true);\n this.removeEventOnTargets('focusout', this.hide, true);\n }\n document.removeEventListener('click', this.handleDocumentClick, true);\n }\n }, {\n key: \"updateTarget\",\n value: function updateTarget() {\n var newTarget = getTarget(this.props.target, true);\n if (newTarget !== this._targets) {\n this.removeTargetEvents();\n this._targets = newTarget ? Array.from(newTarget) : [];\n this.currentTargetElement = this.currentTargetElement || this._targets[0];\n this.addTargetEvents();\n }\n }\n }, {\n key: \"toggle\",\n value: function toggle(e) {\n if (this.props.disabled || !this._isMounted) {\n return e && e.preventDefault();\n }\n return this.props.toggle(e);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n if (this.props.isOpen) {\n this.updateTarget();\n }\n var target = this.currentTargetElement || this._targets[0];\n if (!target) {\n return null;\n }\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n innerClassName = _this$props.innerClassName,\n isOpen = _this$props.isOpen,\n hideArrow = _this$props.hideArrow,\n boundariesElement = _this$props.boundariesElement,\n placement = _this$props.placement,\n placementPrefix = _this$props.placementPrefix,\n arrowClassName = _this$props.arrowClassName,\n popperClassName = _this$props.popperClassName,\n container = _this$props.container,\n modifiers = _this$props.modifiers,\n strategy = _this$props.strategy,\n offset = _this$props.offset,\n fade = _this$props.fade,\n flip = _this$props.flip,\n children = _this$props.children;\n var attributes = omit(this.props, Object.keys(propTypes));\n var popperClasses = mapToCssModules(popperClassName, cssModule);\n var classes = mapToCssModules(innerClassName, cssModule);\n return /*#__PURE__*/React.createElement(PopperContent, {\n className: className,\n target: target,\n isOpen: isOpen,\n hideArrow: hideArrow,\n boundariesElement: boundariesElement,\n placement: placement,\n placementPrefix: placementPrefix,\n arrowClassName: arrowClassName,\n popperClassName: popperClasses,\n container: container,\n modifiers: modifiers,\n strategy: strategy,\n offset: offset,\n cssModule: cssModule,\n fade: fade,\n flip: flip\n }, function (_ref) {\n var update = _ref.update;\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n ref: _this2.getRef,\n className: classes,\n role: \"tooltip\",\n onMouseOver: _this2.onMouseOverTooltipContent,\n onMouseLeave: _this2.onMouseLeaveTooltipContent,\n onKeyDown: _this2.onEscKeyDown\n }), typeof children === 'function' ? children({\n update: update\n }) : children);\n });\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n if (props.isOpen && !state.isOpen) {\n return {\n isOpen: props.isOpen\n };\n }\n return null;\n }\n }]);\n return TooltipPopoverWrapper;\n}(React.Component);\nTooltipPopoverWrapper.propTypes = propTypes;\nTooltipPopoverWrapper.defaultProps = defaultProps;\nexport default TooltipPopoverWrapper;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport classNames from 'classnames';\nimport TooltipPopoverWrapper, { propTypes } from './TooltipPopoverWrapper';\nvar defaultProps = {\n placement: 'right',\n placementPrefix: 'bs-popover',\n trigger: 'click',\n offset: [0, 8]\n};\nfunction Popover(props) {\n var arrowClasses = classNames('popover-arrow', props.arrowClassName);\n var popperClasses = classNames('popover', 'show', props.popperClassName);\n var classes = classNames('popover-inner', props.innerClassName);\n return /*#__PURE__*/React.createElement(TooltipPopoverWrapper, _extends({}, props, {\n arrowClassName: arrowClasses,\n popperClassName: popperClasses,\n innerClassName: classes\n }));\n}\nPopover.propTypes = propTypes;\nPopover.defaultProps = defaultProps;\nexport default Popover;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction PopoverBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'popover-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nPopoverBody.propTypes = propTypes;\nexport default PopoverBody;","/**\n * A menu popover allowing navigation of categories in the system according to the given categories tree\n *\n * @param {object} categoriesTree - a list of CategoryTreeNodeModel, each element denotes a tree node in the categories tree structure.\n * @param {object} [selectedCategory] - the selected category to show in right panel (in all categories view this will be null and first category will show)\n * @param {boolean} [viewShowAll] - true if the menu should show the all categories view, false if the single category view\n */\n\nimport React, { Component } from 'react'\nimport './NavigationMenu.scss'\nimport { Link } from 'react-router-dom'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { t } from '$themelocalization'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\n\nconst DIV_VIEW_COLUMNS_HEIGHT = 270\nconst DIV_CATEGORY_ROW_HEIGHT = 27\nconst NUMBER_OF_COLUMNS = 3\n\nclass NavigationMenu extends Component {\n constructor (props) {\n super(props)\n\n const { categoriesTree, selectedCategory } = props\n\n if (categoriesTree && categoriesTree.length) {\n const selected = selectedCategory && categoriesTree.find(node => node.Category.ID === selectedCategory.ID) ? selectedCategory : categoriesTree[0].Category\n this.state = {\n selectedCategory: selected\n }\n }\n }\n\n getSubCategoriesMapped (categoryTreeNode, countInColumn) {\n const { Category: category, SubCategories: subCategories } = categoryTreeNode\n let subCategoriesMapped = []\n\n if (category.HasSubCategories && subCategories) {\n let count = 0\n let countAll = 0\n\n subCategoriesMapped = subCategories.map((categoryTreeNodeL2) => {\n const { Category: categoryL2, SubCategories: subCategoriesL2 } = categoryTreeNodeL2\n\n // save the size of the entire group - category L2 and all its L3 categories plus featured products link if exist\n const groupSize = subCategoriesL2.length + ((categoryL2.HasProducts && categoryL2.HasSubCategories) ? 2 : 1)\n let countBlankSpaces = 0\n if (categoryL2.HasSubCategories && subCategoriesL2) {\n const indexInColumn = count\n count += groupSize\n if (count > countInColumn) {\n countBlankSpaces = groupSize - (count - countInColumn) // count the blank spaces to fill in this column\n count = groupSize % countInColumn // set count as the number of items from this group in the next column\n\n // handle the a case when a large group is the first group in the column - its already starting a new column no need to move\n if (indexInColumn === 0) {\n countBlankSpaces = 0 // no need for blank spaces\n count = (groupSize % countInColumn) // set count as the number of items from this group in the next column\n }\n }\n } else {\n count++\n if (count > countInColumn) {\n count = 1 // set count as the number of items from this group in the next column (which is 1)\n }\n }\n\n countAll += groupSize + countBlankSpaces\n\n return {\n ...categoryL2,\n showFeaturedProducts: categoryL2.HasProducts && categoryL2.HasSubCategories,\n subCategories: subCategoriesL2.map(categoryL3Node => categoryL3Node.Category),\n countBlankSpaces,\n countAll\n }\n })\n }\n\n return subCategoriesMapped\n }\n\n render () {\n const { categoriesTree, viewShowAll } = this.props\n\n if (!(categoriesTree && categoriesTree.length)) {\n return null\n }\n\n const selectedCategory = this.state.selectedCategory\n const viewShowOnlyAllPanel = !selectedCategory.HasSubCategories\n const subCategoriesTreeNode = categoriesTree.filter(node => node.Category.ID === selectedCategory.ID)[0]\n\n const countInColumn = Math.floor(DIV_VIEW_COLUMNS_HEIGHT / DIV_CATEGORY_ROW_HEIGHT)\n\n const subCategoriesMapped = !viewShowOnlyAllPanel && this.getSubCategoriesMapped(subCategoriesTreeNode, countInColumn)\n const countAll = subCategoriesMapped && subCategoriesMapped.length && subCategoriesMapped[subCategoriesMapped.length - 1].countAll\n\n return (\n <div className={`navigation-menu ${(viewShowAll ? 'view-show-all' : '')} ${(viewShowOnlyAllPanel ? 'hide-category-panel' : '')}`}>\n {\n viewShowAll &&\n <div className=\"show-all-panel\">\n {\n <Scrollbars className=\"scrollbar\" universal hideTracksWhenNotNeeded autoHeight\n renderThumbVertical={props => <div {...props} className=\"thumb-vertical\" />}>\n <div className=\"content\">\n {\n categoriesTree.map(({ Category }, i) => {\n const { ID, FriendlyID, Name } = Category\n return <div key={i} className={`category-l1-menu ${(selectedCategory.ID === ID ? 'selected' : '')}`}\n onMouseOver={() => this.setState({ selectedCategory: Category })}>\n <Link className=\"category-name truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n })\n }\n </div>\n </Scrollbars>\n }\n </div>\n }\n <div className=\"category-panel\">\n <div className=\"category-l1-title\">\n <span className=\"category-l1\">\n <Link dangerouslySetInnerHTML={{ __html: selectedCategory.Name }} to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })} />\n </span>\n {\n selectedCategory.HasProducts &&\n <span className=\"featured-products\">\n <Link className=\"featured-products-link\" to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })}>\n {t('NavigationMenu.See_featured_products')}\n </Link>\n </span>\n }\n </div>\n <div className=\"view-columns\">\n {\n subCategoriesMapped && subCategoriesMapped.map((categoryL2, i) => {\n const { FriendlyID, Name, showFeaturedProducts, subCategories, countBlankSpaces } = categoryL2\n return <React.Fragment key={i}>\n {\n // if this categoryL2 and its sub rows will span more than the place in this column it should move to next column - fill with blank rows\n countBlankSpaces > 0 &&\n [...Array(countBlankSpaces)].map((x, i) => <div key={i} className=\"column category\"></div>)\n }\n <div key={i} className=\"column category\">\n <Link className=\"category-l2 truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n {\n showFeaturedProducts &&\n <div key=\"featured-products\" className=\"column category featured-products-category-item\">\n <Link className=\"category-l3 truncate\" key=\"key-featured-products\" to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })}>\n {t('General.FeaturedProducts')}\n </Link>\n </div>\n }\n {\n subCategories && subCategories.map((categoryL3, i) => {\n const { FriendlyID, Name } = categoryL3\n\n return <div key={i} className=\"column category\">\n <Link className=\"category-l3 truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n })\n }\n </React.Fragment>\n })\n }\n {\n // if there are categories only in first column, fill up another column of blank rows for pushing the category image to the right\n (countAll <= countInColumn)\n ? [...Array(countInColumn)].map((x, i) => <div key={i} className=\"column category\" />) : ''\n }\n {\n selectedCategory.ImageUrl &&\n <div className=\"column category-image-column\">\n <div className=\"category-image-wrapper\"><img src={selectedCategory.ImageUrl} className=\"category-image\" alt={`${selectedCategory.Name} Category`} /></div>\n </div>\n }\n </div>\n {\n // if the total count of the rows (categories, subcategories, etc) are more than the span of the designated columns - show a link to see more\n (countAll > countInColumn * NUMBER_OF_COLUMNS)\n ? <div className=\"see-more\">\n <Link className=\"see-more-link\" to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })}>{t('NavigationMenu.See_More')}</Link>\n </div> : null\n }\n </div>\n </div>\n )\n }\n}\n\nexport default NavigationMenu\n","/**\n * A menu strip showing all L1 categories in the system in desktop view\n *\n * @param {object} categoriesTree - a list of CategoryTreeNodeModel, each element denotes a tree node in the categories tree structure.\n */\n\nimport { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Popover, PopoverBody } from \"reactstrap\";\nimport NavigationMenu from \"./NavigationMenu\";\nimport urlGenerator from \"$ustoreinternal/services/urlGenerator\";\nimport { decodeStringForURL } from \"$ustoreinternal/services/utils\";\nimport { t } from \"$themelocalization\";\nimport \"./CategoriesNavbar.scss\";\n\nclass CategoriesNavbar extends Component {\n constructor(props) {\n super(props);\n\n this.mouseOverElement = false;\n this.categoryChanged = false;\n\n this.state = {\n selectedCategory: null,\n isOverlayOpen: false,\n popoverTarget: \"id-0\",\n keepNavigationOpen: false,\n };\n }\n\n handleMouseOut() {\n if (!this.state.keepNavigationOpen) {\n this.mouseOverElement = false;\n\n // close popover with delay to handle a case where mouse is already over another element\n setTimeout(() => {\n if (!this.mouseOverElement) {\n this.setState({ selectedCategory: null, isOverlayOpen: false });\n } else {\n // if mouse is already over another element check if the category has changed - if so close the popover and open again (for refresh), else do nothing\n if (this.categoryChanged) {\n this.setState({ isOverlayOpen: false });\n if (this.state.selectedCategory.HasSubCategories) {\n // handeling the case when popover shouldn't open because there are no sub categories\n this.setState({ isOverlayOpen: true });\n }\n }\n }\n }, 5);\n }\n }\n\n handleMouseOver(category) {\n this.mouseOverElement = true;\n\n // if !category its the popover - dont do anything\n if (!category) {\n return;\n }\n\n this.categoryChanged =\n !this.state.selectedCategory ||\n this.state.selectedCategory.FriendlyID !== category.FriendlyID;\n\n this.setState({ selectedCategory: category });\n\n // if category doesn't have sub categories or its the popover - return\n if (category && !category.HasSubCategories && category.FriendlyID !== 0) {\n return;\n }\n\n this.setState({\n popoverTarget: `id-${category.FriendlyID}`,\n isOverlayOpen: true,\n });\n }\n\n render() {\n const { categoriesTree } = this.props;\n if (!(categoriesTree && categoriesTree.length > 0)) {\n return null;\n }\n\n const selected = this.state.selectedCategory;\n const viewShowAll = selected && selected.FriendlyID === 0;\n\n return (\n <div className=\"categories-navbar\">\n <div\n className=\"category-title-wrapper\"\n onMouseOver={() => this.handleMouseOver({ FriendlyID: 0 })}\n onMouseOut={() => this.handleMouseOut()}\n >\n <span\n className={`category-title ${\n selected && selected.FriendlyID === 0 ? \"highlight\" : \"\"\n }`}\n id=\"id-0\"\n >\n {t(\"Header.All_Categories\")}\n </span>\n </div>\n\n {categoriesTree.map(({ Category }, i) => {\n const { FriendlyID, Name } = Category;\n return (\n <Link\n className=\"category-title-wrapper\"\n onMouseOver={() => this.handleMouseOver(Category)}\n onMouseOut={() => this.handleMouseOut()}\n key={i}\n to={urlGenerator.get({\n page: \"category\",\n id: FriendlyID,\n name: decodeStringForURL(Name),\n })}\n >\n <span\n className={`category-title ${\n selected && selected.FriendlyID === FriendlyID\n ? \"highlight\"\n : \"\"\n }`}\n key={i}\n id={`id-${FriendlyID}`}\n >\n <span\n className=\"link\"\n key={i}\n dangerouslySetInnerHTML={{ __html: Name }}\n />\n </span>\n </Link>\n );\n })}\n\n <Link\n className=\"category-title-wrapper\"\n to={urlGenerator.get({ page: \"FAQ\" })}\n >\n <span className={\"category-title\"}>\n <span className=\"link\">FAQ</span>\n </span>\n </Link>\n\n <Link\n className=\"category-title-wrapper\"\n to={urlGenerator.get({ page: \"ContactUs\" })}\n >\n <span className={\"category-title\"}>\n <span className=\"link\">Contact Us</span>\n </span>\n </Link>\n\n <div id=\"popover-wrapper\" className=\"popover-wrapper\" />\n\n {selected && (\n <div\n onMouseOver={() => this.handleMouseOver()}\n onMouseLeave={() => this.handleMouseOut()}\n keep-navigation-open={`${this.state.keepNavigationOpen}`}\n >\n <Popover\n className={viewShowAll ? \"view-show-all\" : \"\"}\n container={\"popover-wrapper\"}\n fade={false}\n isOpen={this.state.isOverlayOpen}\n placement=\"bottom-start\"\n target={this.state.popoverTarget}\n >\n <PopoverBody>\n <NavigationMenu\n categoriesTree={categoriesTree}\n viewShowAll={viewShowAll}\n selectedCategory={selected}\n />\n </PopoverBody>\n </Popover>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CategoriesNavbar;\n","/**\n * A menu with drill in showing all categories in the system in tablet/mobile view according to the given categories tree\n *\n * @param {object} categoriesTree - a list of CategoryTreeNodeModel, each element denotes a tree node in the categories tree structure.\n * @param {func} onRedirect - the function to be called when the user clicks on a category that doesn't drill in the menu\n */\n\nimport { Component } from 'react'\nimport Icon from '$core-components/Icon'\nimport { t } from '$themelocalization'\nimport './CategoriesSidebar.scss'\n\nclass CategoriesSidebar extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n subCategoriesTree: [],\n currentCategory: null\n }\n }\n\n drillIn (currentCategoryNode) {\n if (currentCategoryNode.Category &&\n currentCategoryNode.SubCategories &&\n currentCategoryNode.SubCategories.length > 0) {\n const currentCategory = {\n ...currentCategoryNode.Category,\n parentNode: {\n Category: this.state.currentCategory,\n SubCategories: this.state.subCategoriesTree\n }\n }\n\n this.setState({ subCategoriesTree: currentCategoryNode.SubCategories })\n this.setState({ currentCategory: currentCategory })\n }\n }\n\n drillOut () {\n if (this.state.currentCategory && this.state.subCategoriesTree) {\n const { Category: category, SubCategories: categoriesTree } = this.state.currentCategory.parentNode\n this.setState({ subCategoriesTree: categoriesTree })\n this.setState({ currentCategory: category })\n }\n }\n\n static getDerivedStateFromProps (props, state) {\n if (props.categoriesTree && props.categoriesTree.length && !state.subCategoriesTree.length) {\n return { subCategoriesTree: props.categoriesTree }\n }\n return null\n }\n\n render () {\n const { categoriesTree, onRedirect } = this.props\n\n if (!(categoriesTree && categoriesTree.length > 0)) {\n return null\n }\n\n const currentCategory = this.state.currentCategory ? this.state.currentCategory : null\n return (\n <div className={`categories-sidebar ${currentCategory ? 'top' : ''}`}>\n {\n currentCategory &&\n <div className=\"back-block\">\n <div className=\"back-icon-container\" onClick={() => this.drillOut()}>\n <Icon name=\"back.svg\" width=\"9px\" height=\"19px\" className=\"back-icon\" />\n </div>\n <div className=\"main-title\">\n <div className=\"label-title truncate\" dangerouslySetInnerHTML={{ __html: currentCategory.Name }}/>\n </div>\n </div>\n }\n <div className='categories-list'>\n {\n currentCategory && currentCategory.HasProducts &&\n <div key=\"featured-products\" className='category-title' onClick={() => onRedirect({ page: 'category', id: currentCategory.FriendlyID })}>\n <span key=\"featured-products\" className=\"category-name truncate\">{t('General.FeaturedProducts')}</span>\n </div>\n }\n {\n this.state.subCategoriesTree && this.state.subCategoriesTree.map((node, i) => {\n const { FriendlyID, Name } = node.Category\n const subCategories = node.SubCategories\n return (\n subCategories && subCategories.length > 0\n ? <div key={i} className=\"category-title\" onClick={() => this.drillIn(node)}>\n <span key={i} className=\"category-name truncate\" dangerouslySetInnerHTML={{ __html: Name }}/>\n </div>\n : <div key={i} className=\"category-title\" onClick={() => onRedirect({ page: 'category', id: FriendlyID })}>\n <span key={i} className=\"category-name truncate\" dangerouslySetInnerHTML={{ __html: Name }}/>\n </div>\n )\n })\n }\n </div>\n </div>\n )\n }\n}\n\nexport default CategoriesSidebar\n","import React from 'react';\n\n/**\n * DropdownContext\n * {\n * toggle: PropTypes.func.isRequired,\n * isOpen: PropTypes.bool.isRequired,\n * direction: PropTypes.oneOf(['up', 'down', 'start', 'end']).isRequired,\n * inNavbar: PropTypes.bool.isRequired,\n * disabled: PropTypes.bool\n * }\n */\nexport var DropdownContext = /*#__PURE__*/React.createContext({});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"divider\", \"tag\", \"header\", \"active\", \"text\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, omit, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n divider: PropTypes.bool,\n tag: tagPropType,\n header: PropTypes.bool,\n onClick: PropTypes.func,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.bool,\n text: PropTypes.bool\n};\nvar DropdownItem = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownItem, _React$Component);\n var _super = _createSuper(DropdownItem);\n function DropdownItem(props) {\n var _this;\n _classCallCheck(this, DropdownItem);\n _this = _super.call(this, props);\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n _this.getTabIndex = _this.getTabIndex.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(DropdownItem, [{\n key: \"onClick\",\n value: function onClick(e) {\n var _this$props$toggle;\n var _this$props = this.props,\n disabled = _this$props.disabled,\n header = _this$props.header,\n divider = _this$props.divider,\n text = _this$props.text;\n if (disabled || header || divider || text) {\n e.preventDefault();\n return;\n }\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n if ((_this$props$toggle = this.props.toggle) !== null && _this$props$toggle !== void 0 ? _this$props$toggle : true) {\n this.context.toggle(e);\n }\n }\n }, {\n key: \"getRole\",\n value: function getRole() {\n if (this.context.menuRole === 'listbox') {\n return 'option';\n }\n return 'menuitem';\n }\n }, {\n key: \"getTabIndex\",\n value: function getTabIndex() {\n var _this$props2 = this.props,\n disabled = _this$props2.disabled,\n header = _this$props2.header,\n divider = _this$props2.divider,\n text = _this$props2.text;\n if (disabled || header || divider || text) {\n return '-1';\n }\n return '0';\n }\n }, {\n key: \"render\",\n value: function render() {\n var tabIndex = this.getTabIndex();\n var role = tabIndex > -1 ? this.getRole() : undefined;\n var _omit = omit(this.props, ['toggle']),\n className = _omit.className,\n cssModule = _omit.cssModule,\n divider = _omit.divider,\n _omit$tag = _omit.tag,\n Tag = _omit$tag === void 0 ? 'button' : _omit$tag,\n header = _omit.header,\n active = _omit.active,\n text = _omit.text,\n props = _objectWithoutProperties(_omit, _excluded);\n var classes = mapToCssModules(classNames(className, {\n disabled: props.disabled,\n 'dropdown-item': !divider && !header && !text,\n active: active,\n 'dropdown-header': header,\n 'dropdown-divider': divider,\n 'dropdown-item-text': text\n }), cssModule);\n if (Tag === 'button') {\n if (header) {\n Tag = 'h6';\n } else if (divider) {\n Tag = 'div';\n } else if (props.href) {\n Tag = 'a';\n } else if (text) {\n Tag = 'span';\n }\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && (props.onClick || this.props.toggle) ? 'button' : undefined\n }, props, {\n tabIndex: tabIndex,\n role: role,\n className: classes,\n onClick: this.onClick\n }));\n }\n }]);\n return DropdownItem;\n}(React.Component);\nDropdownItem.propTypes = propTypes;\nDropdownItem.contextType = DropdownContext;\nexport default DropdownItem;","import React from 'react';\nexport var InputGroupContext = /*#__PURE__*/React.createContext({});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"direction\", \"isOpen\", \"group\", \"size\", \"nav\", \"setActiveFromChild\", \"active\", \"tag\", \"menuRole\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint react/no-find-dom-node: 0 */\n// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Manager } from 'react-popper';\nimport classNames from 'classnames';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, omit, keyCodes, tagPropType } from './utils';\nimport { InputGroupContext } from './InputGroupContext';\nvar propTypes = {\n a11y: PropTypes.bool,\n disabled: PropTypes.bool,\n direction: PropTypes.oneOf(['up', 'down', 'start', 'end', 'left', 'right']),\n group: PropTypes.bool,\n isOpen: PropTypes.bool,\n nav: PropTypes.bool,\n active: PropTypes.bool,\n size: PropTypes.string,\n tag: tagPropType,\n toggle: PropTypes.func,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n dropup: PropTypes.bool,\n inNavbar: PropTypes.bool,\n setActiveFromChild: PropTypes.bool,\n menuRole: PropTypes.oneOf(['listbox', 'menu'])\n};\nvar defaultProps = {\n a11y: true,\n isOpen: false,\n direction: 'down',\n nav: false,\n active: false,\n inNavbar: false,\n setActiveFromChild: false\n};\nvar preventDefaultKeys = [keyCodes.space, keyCodes.enter, keyCodes.up, keyCodes.down, keyCodes.end, keyCodes.home];\nvar Dropdown = /*#__PURE__*/function (_React$Component) {\n _inherits(Dropdown, _React$Component);\n var _super = _createSuper(Dropdown);\n function Dropdown(props) {\n var _this;\n _classCallCheck(this, Dropdown);\n _this = _super.call(this, props);\n _this.addEvents = _this.addEvents.bind(_assertThisInitialized(_this));\n _this.handleDocumentClick = _this.handleDocumentClick.bind(_assertThisInitialized(_this));\n _this.handleKeyDown = _this.handleKeyDown.bind(_assertThisInitialized(_this));\n _this.removeEvents = _this.removeEvents.bind(_assertThisInitialized(_this));\n _this.toggle = _this.toggle.bind(_assertThisInitialized(_this));\n _this.handleMenuRef = _this.handleMenuRef.bind(_assertThisInitialized(_this));\n _this.handleToggleRef = _this.handleToggleRef.bind(_assertThisInitialized(_this));\n _this.containerRef = /*#__PURE__*/React.createRef();\n _this.menuRef = /*#__PURE__*/React.createRef();\n _this.toggleRef = /*#__PURE__*/React.createRef();\n // ref for DropdownToggle\n return _this;\n }\n _createClass(Dropdown, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.handleProps();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.isOpen !== prevProps.isOpen) {\n this.handleProps();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.removeEvents();\n }\n }, {\n key: \"handleMenuRef\",\n value: function handleMenuRef(menuRef) {\n this.menuRef.current = menuRef;\n }\n }, {\n key: \"handleToggleRef\",\n value: function handleToggleRef(toggleRef) {\n this.toggleRef.current = toggleRef;\n }\n }, {\n key: \"handleDocumentClick\",\n value: function handleDocumentClick(e) {\n if (e && (e.which === 3 || e.type === 'keyup' && e.which !== keyCodes.tab)) return;\n var container = this.getContainer();\n var menu = this.getMenu();\n var toggle = this.getToggle();\n var targetIsToggle = toggle.contains(e.target);\n var clickIsInMenu = menu && menu.contains(e.target) && menu !== e.target;\n var clickIsInInput = false;\n if (container) {\n // this is only for InputGroup with type dropdown\n clickIsInInput = container.classList.contains('input-group') && container.classList.contains('dropdown') && e.target.tagName === 'INPUT';\n }\n if ((targetIsToggle && !clickIsInInput || clickIsInMenu) && (e.type !== 'keyup' || e.which === keyCodes.tab)) {\n return;\n }\n this.toggle(e);\n }\n }, {\n key: \"handleKeyDown\",\n value: function handleKeyDown(e) {\n var _this2 = this;\n var isTargetMenuItem = e.target.getAttribute('role') === 'menuitem' || e.target.getAttribute('role') === 'option';\n var isTargetMenuCtrl = this.getMenuCtrl() === e.target;\n var isTab = keyCodes.tab === e.which;\n if (/input|textarea/i.test(e.target.tagName) || isTab && !this.props.a11y || isTab && !(isTargetMenuItem || isTargetMenuCtrl)) {\n return;\n }\n if (preventDefaultKeys.indexOf(e.which) !== -1 || e.which >= 48 && e.which <= 90) {\n e.preventDefault();\n }\n if (this.props.disabled) return;\n if (isTargetMenuCtrl) {\n if ([keyCodes.space, keyCodes.enter, keyCodes.up, keyCodes.down].indexOf(e.which) > -1) {\n // Open the menu (if not open) and focus the first menu item\n if (!this.props.isOpen) {\n this.toggle(e);\n }\n setTimeout(function () {\n var _this2$getMenuItems$;\n return (_this2$getMenuItems$ = _this2.getMenuItems()[0]) === null || _this2$getMenuItems$ === void 0 ? void 0 : _this2$getMenuItems$.focus();\n });\n } else if (this.props.isOpen && isTab) {\n var _this$getMenuItems$;\n // Focus the first menu item if tabbing from an open menu. We need this\n // for cases where the DropdownMenu sets a custom container, which may\n // not be the natural next item to tab to from the DropdownToggle.\n e.preventDefault();\n (_this$getMenuItems$ = this.getMenuItems()[0]) === null || _this$getMenuItems$ === void 0 ? void 0 : _this$getMenuItems$.focus();\n } else if (this.props.isOpen && e.which === keyCodes.esc) {\n this.toggle(e);\n }\n }\n if (this.props.isOpen && isTargetMenuItem) {\n if ([keyCodes.tab, keyCodes.esc].indexOf(e.which) > -1) {\n this.toggle(e);\n this.getMenuCtrl().focus();\n } else if ([keyCodes.space, keyCodes.enter].indexOf(e.which) > -1) {\n e.target.click();\n this.getMenuCtrl().focus();\n } else if ([keyCodes.down, keyCodes.up].indexOf(e.which) > -1 || [keyCodes.n, keyCodes.p].indexOf(e.which) > -1 && e.ctrlKey) {\n var $menuitems = this.getMenuItems();\n var index = $menuitems.indexOf(e.target);\n if (keyCodes.up === e.which || keyCodes.p === e.which && e.ctrlKey) {\n index = index !== 0 ? index - 1 : $menuitems.length - 1;\n } else if (keyCodes.down === e.which || keyCodes.n === e.which && e.ctrlKey) {\n index = index === $menuitems.length - 1 ? 0 : index + 1;\n }\n $menuitems[index].focus();\n } else if (keyCodes.end === e.which) {\n var _$menuitems = this.getMenuItems();\n _$menuitems[_$menuitems.length - 1].focus();\n } else if (keyCodes.home === e.which) {\n var _$menuitems2 = this.getMenuItems();\n _$menuitems2[0].focus();\n } else if (e.which >= 48 && e.which <= 90) {\n var _$menuitems3 = this.getMenuItems();\n var charPressed = String.fromCharCode(e.which).toLowerCase();\n for (var i = 0; i < _$menuitems3.length; i += 1) {\n var firstLetter = _$menuitems3[i].textContent && _$menuitems3[i].textContent[0].toLowerCase();\n if (firstLetter === charPressed) {\n _$menuitems3[i].focus();\n break;\n }\n }\n }\n }\n }\n }, {\n key: \"handleProps\",\n value: function handleProps() {\n if (this.props.isOpen) {\n this.addEvents();\n } else {\n this.removeEvents();\n }\n }\n }, {\n key: \"getContextValue\",\n value: function getContextValue() {\n return {\n toggle: this.toggle,\n isOpen: this.props.isOpen,\n direction: this.props.direction === 'down' && this.props.dropup ? 'up' : this.props.direction,\n inNavbar: this.props.inNavbar,\n disabled: this.props.disabled,\n // Callback that should be called by DropdownMenu to provide a ref to\n // a HTML tag that's used for the DropdownMenu\n onMenuRef: this.handleMenuRef,\n onToggleRef: this.handleToggleRef,\n menuRole: this.props.menuRole\n };\n }\n }, {\n key: \"getContainer\",\n value: function getContainer() {\n return this.containerRef.current;\n }\n }, {\n key: \"getMenu\",\n value: function getMenu() {\n return this.menuRef.current;\n }\n }, {\n key: \"getToggle\",\n value: function getToggle() {\n return this.toggleRef.current;\n }\n }, {\n key: \"getMenuCtrl\",\n value: function getMenuCtrl() {\n if (this._$menuCtrl) return this._$menuCtrl;\n this._$menuCtrl = this.getToggle();\n return this._$menuCtrl;\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n if (this.props.menuRole === 'listbox') {\n return 'option';\n }\n return 'menuitem';\n }\n }, {\n key: \"getMenuItems\",\n value: function getMenuItems() {\n // In a real menu with a child DropdownMenu, `this.getMenu()` should never\n // be null, but it is sometimes null in tests. To mitigate that, we just\n // use `this.getContainer()` as the fallback `menuContainer`.\n var menuContainer = this.getMenu() || this.getContainer();\n return [].slice.call(menuContainer.querySelectorAll(\"[role=\\\"\".concat(this.getItemType(), \"\\\"]\")));\n }\n }, {\n key: \"addEvents\",\n value: function addEvents() {\n var _this3 = this;\n ['click', 'touchstart', 'keyup'].forEach(function (event) {\n return document.addEventListener(event, _this3.handleDocumentClick, true);\n });\n }\n }, {\n key: \"removeEvents\",\n value: function removeEvents() {\n var _this4 = this;\n ['click', 'touchstart', 'keyup'].forEach(function (event) {\n return document.removeEventListener(event, _this4.handleDocumentClick, true);\n });\n }\n }, {\n key: \"toggle\",\n value: function toggle(e) {\n if (this.props.disabled) {\n return e && e.preventDefault();\n }\n return this.props.toggle(e);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames,\n _this5 = this;\n var _omit = omit(this.props, ['toggle', 'disabled', 'inNavbar', 'a11y']),\n className = _omit.className,\n cssModule = _omit.cssModule,\n direction = _omit.direction,\n isOpen = _omit.isOpen,\n group = _omit.group,\n size = _omit.size,\n nav = _omit.nav,\n setActiveFromChild = _omit.setActiveFromChild,\n active = _omit.active,\n tag = _omit.tag,\n menuRole = _omit.menuRole,\n attrs = _objectWithoutProperties(_omit, _excluded);\n var Tag = tag || (nav ? 'li' : 'div');\n var subItemIsActive = false;\n if (setActiveFromChild) {\n React.Children.map(this.props.children[1].props.children, function (dropdownItem) {\n if (dropdownItem && dropdownItem.props.active) subItemIsActive = true;\n });\n }\n var classes = mapToCssModules(classNames(className, nav && active ? 'active' : false, setActiveFromChild && subItemIsActive ? 'active' : false, (_classNames = {\n 'btn-group': group\n }, _defineProperty(_classNames, \"btn-group-\".concat(size), !!size), _defineProperty(_classNames, \"dropdown\", !group), _defineProperty(_classNames, \"dropup\", direction === 'up'), _defineProperty(_classNames, \"dropstart\", direction === 'start' || direction === 'left'), _defineProperty(_classNames, \"dropend\", direction === 'end' || direction === 'right'), _defineProperty(_classNames, \"show\", isOpen), _defineProperty(_classNames, 'nav-item', nav), _classNames)), cssModule);\n if (this.context.insideInputGroup) {\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: this.getContextValue()\n }, /*#__PURE__*/React.createElement(Manager, null, React.Children.map(this.props.children, function (child) {\n return /*#__PURE__*/React.cloneElement(child, {\n onKeyDown: _this5.handleKeyDown\n });\n })));\n }\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: this.getContextValue()\n }, /*#__PURE__*/React.createElement(Manager, null, /*#__PURE__*/React.createElement(Tag, _extends({}, attrs, _defineProperty({}, typeof Tag === 'string' ? 'ref' : 'innerRef', this.containerRef), {\n onKeyDown: this.handleKeyDown,\n className: classes\n }))));\n }\n }]);\n return Dropdown;\n}(React.Component);\nDropdown.propTypes = propTypes;\nDropdown.defaultProps = defaultProps;\nDropdown.contextType = InputGroupContext;\nexport default Dropdown;","import * as React from 'react';\nimport warning from 'warning';\nimport { ManagerReferenceNodeSetterContext } from './Manager';\nimport { safeInvoke, unwrapArray, setRef } from './utils';\nexport function Reference(_ref) {\n var children = _ref.children,\n innerRef = _ref.innerRef;\n var setReferenceNode = React.useContext(ManagerReferenceNodeSetterContext);\n var refHandler = React.useCallback(function (node) {\n setRef(innerRef, node);\n safeInvoke(setReferenceNode, node);\n }, [innerRef, setReferenceNode]); // ran on unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n\n React.useEffect(function () {\n return function () {\n return setRef(innerRef, null);\n };\n }, []);\n React.useEffect(function () {\n warning(Boolean(setReferenceNode), '`Reference` should not be used outside of a `Manager` component.');\n }, [setReferenceNode]);\n return unwrapArray(children)({\n ref: refHandler\n });\n}","var _excluded = [\"className\", \"cssModule\", \"variant\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\nvar propTypes = {\n /** Disable the button if needed */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Change the variant to white */\n variant: PropTypes.oneOf(['white']),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nfunction CloseButton(props) {\n var className = props.className,\n cssModule = props.cssModule,\n variant = props.variant,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'btn-close', variant && \"btn-close-\".concat(variant)));\n return /*#__PURE__*/React.createElement(\"button\", _extends({\n ref: innerRef,\n type: \"button\",\n className: classes\n }, _objectSpread({\n 'aria-label': 'close'\n }, attributes)));\n}\nCloseButton.propTypes = propTypes;\nexport default CloseButton;","var _excluded = [\"active\", \"aria-label\", \"block\", \"className\", \"close\", \"cssModule\", \"color\", \"outline\", \"size\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nimport CloseButton from './CloseButton';\nvar propTypes = {\n /** Manually set the visual state of the button to active */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n block: PropTypes.bool,\n /** Pass children so this component can wrap them */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Use the button as a close button */\n close: PropTypes.bool,\n /** Change color of Button to one of the available colors */\n color: PropTypes.string,\n /** Disables the button */\n disabled: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Adds outline to the button */\n outline: PropTypes.bool,\n /** Make the button bigger or smaller */\n size: PropTypes.string,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Button(props) {\n var onClick = useCallback(function (e) {\n if (props.disabled) {\n e.preventDefault();\n return;\n }\n if (props.onClick) {\n return props.onClick(e);\n }\n }, [props.onClick, props.disabled]);\n var active = props.active,\n ariaLabel = props['aria-label'],\n block = props.block,\n className = props.className,\n close = props.close,\n cssModule = props.cssModule,\n _props$color = props.color,\n color = _props$color === void 0 ? 'secondary' : _props$color,\n outline = props.outline,\n size = props.size,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'button' : _props$tag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n if (close) {\n return /*#__PURE__*/React.createElement(CloseButton, attributes);\n }\n var btnOutlineColor = \"btn\".concat(outline ? '-outline' : '', \"-\").concat(color);\n var classes = mapToCssModules(classNames(className, 'btn', btnOutlineColor, size ? \"btn-\".concat(size) : false, block ? 'd-block w-100' : false, {\n active: active,\n disabled: props.disabled\n }), cssModule);\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && attributes.onClick ? 'button' : undefined\n }, attributes, {\n className: classes,\n ref: innerRef,\n onClick: onClick,\n \"aria-label\": ariaLabel\n }));\n}\nButton.propTypes = propTypes;\nexport default Button;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"color\", \"cssModule\", \"caret\", \"split\", \"nav\", \"tag\", \"innerRef\"];\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Reference } from 'react-popper';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, tagPropType } from './utils';\nimport Button from './Button';\nvar propTypes = {\n caret: PropTypes.bool,\n color: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n 'aria-haspopup': PropTypes.bool,\n split: PropTypes.bool,\n tag: tagPropType,\n nav: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nvar defaultProps = {\n color: 'secondary',\n 'aria-haspopup': true\n};\nvar DropdownToggle = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownToggle, _React$Component);\n var _super = _createSuper(DropdownToggle);\n function DropdownToggle(props) {\n var _this;\n _classCallCheck(this, DropdownToggle);\n _this = _super.call(this, props);\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(DropdownToggle, [{\n key: \"onClick\",\n value: function onClick(e) {\n if (this.props.disabled || this.context.disabled) {\n e.preventDefault();\n return;\n }\n if (this.props.nav && !this.props.tag) {\n e.preventDefault();\n }\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n this.context.toggle(e);\n }\n }, {\n key: \"getRole\",\n value: function getRole() {\n return this.context.menuRole || this.props['aria-haspopup'];\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props = this.props,\n className = _this$props.className,\n color = _this$props.color,\n cssModule = _this$props.cssModule,\n caret = _this$props.caret,\n split = _this$props.split,\n nav = _this$props.nav,\n tag = _this$props.tag,\n innerRef = _this$props.innerRef,\n props = _objectWithoutProperties(_this$props, _excluded);\n var ariaLabel = props['aria-label'] || 'Toggle Dropdown';\n var classes = mapToCssModules(classNames(className, {\n 'dropdown-toggle': caret || split,\n 'dropdown-toggle-split': split,\n 'nav-link': nav\n }), cssModule);\n var children = typeof props.children !== 'undefined' ? props.children : /*#__PURE__*/React.createElement(\"span\", {\n className: \"visually-hidden\"\n }, ariaLabel);\n var Tag;\n if (nav && !tag) {\n Tag = 'a';\n props.href = '#';\n } else if (!tag) {\n Tag = Button;\n props.color = color;\n props.cssModule = cssModule;\n } else {\n Tag = tag;\n }\n if (this.context.inNavbar) {\n return /*#__PURE__*/React.createElement(Tag, _extends({}, props, {\n className: classes,\n onClick: this.onClick,\n ref: this.context.onToggleRef,\n \"aria-expanded\": this.context.isOpen,\n \"aria-haspopup\": this.getRole(),\n children: children\n }));\n }\n return /*#__PURE__*/React.createElement(Reference, {\n innerRef: innerRef\n }, function (_ref) {\n var ref = _ref.ref;\n var handleRef = function handleRef(tagRef) {\n ref(tagRef);\n var onToggleRef = _this2.context.onToggleRef;\n if (onToggleRef) onToggleRef(tagRef);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({}, props, _defineProperty({}, typeof Tag === 'string' ? 'ref' : 'innerRef', handleRef), {\n className: classes,\n onClick: _this2.onClick,\n \"aria-expanded\": _this2.context.isOpen,\n \"aria-haspopup\": _this2.getRole(),\n children: children\n }));\n });\n }\n }]);\n return DropdownToggle;\n}(React.Component);\nDropdownToggle.propTypes = propTypes;\nDropdownToggle.defaultProps = defaultProps;\nDropdownToggle.contextType = DropdownContext;\nexport default DropdownToggle;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"dark\", \"end\", \"right\", \"tag\", \"flip\", \"modifiers\", \"persist\", \"strategy\", \"container\", \"updateOnSelect\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { Popper } from 'react-popper';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, tagPropType, targetPropType, getTarget, deprecated } from './utils';\nvar propTypes = {\n tag: tagPropType,\n children: PropTypes.node.isRequired,\n dark: PropTypes.bool,\n end: PropTypes.bool,\n /** Flips the menu to the opposite side if there is not enough space to fit */\n flip: PropTypes.bool,\n modifiers: PropTypes.array,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n style: PropTypes.object,\n persist: PropTypes.bool,\n strategy: PropTypes.string,\n container: targetPropType,\n /** Update popper layout when a click event comes up. This leverages event bubbling. */\n updateOnSelect: PropTypes.bool,\n right: deprecated(PropTypes.bool, 'Please use \"end\" instead.')\n};\nvar directionPositionMap = {\n up: 'top',\n left: 'left',\n right: 'right',\n start: 'left',\n end: 'right',\n down: 'bottom'\n};\nvar DropdownMenu = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownMenu, _React$Component);\n var _super = _createSuper(DropdownMenu);\n function DropdownMenu() {\n _classCallCheck(this, DropdownMenu);\n return _super.apply(this, arguments);\n }\n _createClass(DropdownMenu, [{\n key: \"getRole\",\n value: function getRole() {\n if (this.context.menuRole === 'listbox') {\n return 'listbox';\n }\n return 'menu';\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n dark = _this$props.dark,\n end = _this$props.end,\n right = _this$props.right,\n _this$props$tag = _this$props.tag,\n tag = _this$props$tag === void 0 ? 'div' : _this$props$tag,\n _this$props$flip = _this$props.flip,\n flip = _this$props$flip === void 0 ? true : _this$props$flip,\n _this$props$modifiers = _this$props.modifiers,\n modifiers = _this$props$modifiers === void 0 ? [] : _this$props$modifiers,\n persist = _this$props.persist,\n strategy = _this$props.strategy,\n container = _this$props.container,\n updateOnSelect = _this$props.updateOnSelect,\n attrs = _objectWithoutProperties(_this$props, _excluded);\n var classes = mapToCssModules(classNames(className, 'dropdown-menu', {\n 'dropdown-menu-dark': dark,\n 'dropdown-menu-end': end || right,\n show: this.context.isOpen\n }), cssModule);\n var Tag = tag;\n if (persist || this.context.isOpen && !this.context.inNavbar) {\n var position1 = directionPositionMap[this.context.direction] || 'bottom';\n var position2 = end || right ? 'end' : 'start';\n var poperPlacement = \"\".concat(position1, \"-\").concat(position2);\n var poperModifiers = [].concat(_toConsumableArray(modifiers), [{\n name: 'flip',\n enabled: !!flip\n }]);\n var persistStyles = {};\n if (persist) {\n persistStyles.display = 'block';\n persistStyles.visibility = this.context.isOpen ? 'visible' : 'hidden';\n }\n var popper = /*#__PURE__*/React.createElement(Popper, {\n placement: poperPlacement,\n modifiers: poperModifiers,\n strategy: strategy\n }, function (_ref) {\n var ref = _ref.ref,\n style = _ref.style,\n placement = _ref.placement,\n update = _ref.update;\n var combinedStyle = _objectSpread(_objectSpread(_objectSpread({}, _this.props.style), persistStyles), style);\n var handleRef = function handleRef(tagRef) {\n // Send the ref to `react-popper`\n ref(tagRef);\n // Send the ref to the parent Dropdown so that clicks outside\n // it will cause it to close\n var onMenuRef = _this.context.onMenuRef;\n if (onMenuRef) onMenuRef(tagRef);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n tabIndex: \"-1\",\n role: _this.getRole(),\n ref: handleRef\n }, attrs, {\n style: combinedStyle,\n \"aria-hidden\": !_this.context.isOpen,\n className: classes,\n \"data-popper-placement\": placement,\n onClick: function onClick() {\n return updateOnSelect && update();\n }\n }));\n });\n if (container) {\n return /*#__PURE__*/ReactDOM.createPortal(popper, getTarget(container));\n }\n return popper;\n }\n var onMenuRef = this.context.onMenuRef;\n return /*#__PURE__*/React.createElement(Tag, _extends({\n tabIndex: \"-1\",\n role: this.getRole()\n }, attrs, {\n ref: onMenuRef,\n \"aria-hidden\": !this.context.isOpen,\n className: classes,\n \"data-popper-placement\": attrs.placement,\n \"data-bs-popper\": \"static\"\n }));\n }\n }]);\n return DropdownMenu;\n}(React.Component);\nDropdownMenu.propTypes = propTypes;\nDropdownMenu.contextType = DropdownContext;\nexport default DropdownMenu;","import './SignIn.scss'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\n\nconst SignIn = ({ showTitle = true }) => {\n const goToUrl = () => {\n const { storeID, classicUrl, securityToken, storeFriendlyID, languageCode, userID, showThemeAsDraft } = themeContext.get()\n const showRibbon = UStoreProvider.state.customState.get('showCookieRibbon')\n\n const userIDfromStore = UStoreProvider.state.get().currentUser.ID\n\n const tempUserId = (!userID || (userIDfromStore && userIDfromStore !== userID)) ? userIDfromStore : userID\n\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n\n const pageURL = window.location.href\n\n CookiesManager.deleteCookie(storefrontCookies.token)\n window.location.href = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}&NgLanguageCode=${languageCode}&forceLogin=true&SignIn=true&ShowRibbon=${showRibbon}${isDraft ? '&showThemeAsDraft=true' : ''}&tempUserId=${tempUserId}&returnNGURL=/${encodeURIComponent(pageURL.slice(pageURL.indexOf(languageCode)))}`\n }\n\n return (\n <div className=\"signin\">\n <div className=\"signin-info\">\n {showTitle && <div className=\"signin-title\">{t('Profile.My_Account')}</div>}\n </div>\n <div className=\"btn-container d-flex align-items-center\">\n <span onClick={goToUrl} className='button-secondary'>{t('SignIn.SignIn')}</span>\n </div>\n </div>\n )\n}\nexport default SignIn\n","import './SignOut.scss'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { t } from '$themelocalization'\nimport { UStoreProvider } from '@ustore/core'\nimport { storefrontCookies, CookiesManager } from '$ustoreinternal/services/cookies'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport {useNavigate} from 'react-router-dom'\nimport { useRef } from 'react'\n\nconst getAttribute = (name) => {\n return UStoreProvider.state.get().currentStore.Attributes.find(attr => attr.Name === name)?.Value\n}\n\n/**\n * This component represents the signout icon in the header\n * When clicking - the store redirects to the login page\n *\n * @param {object} currentUser - the current user connected to the store\n */\nconst SignOut = (props) => {\n const navigate = useNavigate()\n const connectEnterpriseLogoutURL = useRef(false)\n\n if (!props.currentUser) {\n return null\n }\n\n const { currentUser: { FirstName } } = props\n\n const { showThemeAsDraft, securityToken, storeID, classicUrl, languageCode, logoutUrl } = themeContext.get()\n const showRibbon = UStoreProvider.state.customState.get('showCookieRibbon')\n const deleteCookies = () => [storefrontCookies.token, storefrontCookies.storeID, storefrontCookies.language].forEach(cn => CookiesManager.deleteCookie(cn))\n const onLogoutClicked = () => {\n if (connectEnterpriseLogoutURL.current) {\n const connectEnterpriseLogoutURL = urlGenerator.get({page:'connect-logged-out'}) + `?message=${t('SignOut.LoggedOut')}`;\n deleteCookies()\n navigate(connectEnterpriseLogoutURL)\n } else {\n deleteCookies()\n }\n }\n\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n\n const storeType = UStoreProvider && UStoreProvider.state && UStoreProvider.state.get().currentStore && UStoreProvider.state.get().currentStore.StoreType\n\n let sLogoutUrl = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&NgLanguageCode=${languageCode}&ShowRibbon=${showRibbon}&forceLogin=true${isDraft ? '&showThemeAsDraft=true' : ''}`\n\n // uStore Connect\n if (storeType === 3 && logoutUrl) {\n sLogoutUrl = decodeURIComponent(logoutUrl)\n // uStore Connect Enterprise\n } else if (getAttribute('HomepageToCart') === 'True') {\n // eslint-disable-next-line\n sLogoutUrl = getAttribute('LogoutUrl') ? decodeURIComponent(getAttribute('LogoutUrl')) : 'javascript:void(0)'\n connectEnterpriseLogoutURL.current = true\n }\n\n return (\n <div className=\"signout\">\n <div className=\"info\">\n <div className=\"title\">{t('Profile.My_Account')}</div>\n <div className=\"greeting truncate\">{t('SignOut.Hello_Message', { FirstName })}</div>\n </div>\n <div className=\"btn-container d-flex align-items-center\">\n <a onClick={onLogoutClicked} href={sLogoutUrl} className=\"button-secondary\">{t('SignOut.SignOut')}</a>\n </div>\n </div>\n )\n}\nexport default SignOut\n","/**\n * @function Profile - Dropdown for profile settings and actions\n *\n * @param {object} currentUser - should contains at least FirstName\n * @param {object} [userOrdersSummary] - data regarding the rejected/pending orders of the user in an approval process of the store\n */\n\nimport { Component } from 'react'\nimport {useNavigate} from 'react-router-dom'\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap'\nimport SignIn from './SignIn'\nimport SignOut from './SignOut'\nimport Icon from '$core-components/Icon'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { redirectToLegacy } from '$ustoreinternal/services/redirect'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './Profile.scss'\nimport { CART_MODE, getCartMode } from '../../../services/utils'\n\nconst createLink = (anonymous, loginURL, pageTitle, additional) => {\n const { languageCode } = themeContext.get()\n const pageURL = urlGenerator.get({ page: pageTitle })\n\n if (anonymous) {\n return `${loginURL}&returnNGURL=/${encodeURIComponent(pageURL.slice(pageURL.indexOf(languageCode)))}${additional ? '?' + additional : ''}`\n }\n\n return `${pageURL}${additional ? '?' + additional : ''}`\n}\n\nconst LinkComponent = ({ pageName, IsAnonymous, loginPage, pageTitle, additional }) => {\n const navigate = useNavigate();\n return IsAnonymous\n ? (\n <DropdownItem tag=\"a\" onClick={() => {\n CookiesManager.deleteCookie(storefrontCookies.token)\n redirectToLegacy(createLink(IsAnonymous, loginPage, pageTitle, additional))\n }}>\n {pageName}\n </DropdownItem>\n ) : (\n <DropdownItem tag=\"a\" onClick={() => {\n navigate(createLink(IsAnonymous, loginPage, pageTitle, additional))\n }}>\n {pageName}\n </DropdownItem>\n )\n}\n\nclass Profile extends Component {\n constructor (props) {\n super(props)\n this.toggle = this.toggle.bind(this)\n this.state = {\n isDropdownOpen: false\n }\n }\n\n toggle () {\n this.setState(prevState => ({\n isDropdownOpen: !prevState.isDropdownOpen\n }))\n }\n\n render () {\n const { currentUser, userOrdersSummary } = this.props\n const { userID, storeID, securityToken, storeFriendlyID, languageCode } = themeContext.get()\n\n const userIDFromStore = UStoreProvider.state.get().currentUser.ID\n const tempUserId = (!userID || (userIDFromStore && userIDFromStore !== userID)) ? userIDFromStore : userID\n const isUStoreConnectEnterprise =\n UStoreProvider.state.get().currentStore.Attributes.find(attr => attr.Name === 'HomepageToCart')?.Value === 'True'\n const isSingleList = getCartMode(UStoreProvider.state.get().currentStore) === CART_MODE.SingleList\n\n if (!currentUser) {\n return null\n }\n\n const rejectedOrderCount = (userOrdersSummary) ? userOrdersSummary.RejectedOrderCount : null\n const pendingApprovalOrderCount = (userOrdersSummary) ? userOrdersSummary.PendingApprovalOrderCount : null\n const loginPage = `/logout.aspx?tempUserId=${tempUserId}&SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}&NgLanguageCode=${languageCode}&forceLogin=true&ShowRibbon=false&SignIn=true`\n const IsAnonymous = currentUser.IsAnonymous\n\n return (\n <Dropdown\n isOpen={this.state.isDropdownOpen}\n toggle={this.toggle}\n direction=\"start\"\n className=\"profile\"\n >\n <DropdownToggle\n tag='div'\n data-toggle='dropdown'\n >\n {/* <i className=\"fas fa-user fa-lg\"></i> */}\n <div className=\"profile-icon-container\">\n <Icon name=\"user.svg\" width=\"20px\" height=\"20px\" className=\"profile-icon\" />\n {\n pendingApprovalOrderCount > 0 &&\n <div className=\"notification-icon\">\n <Icon name=\"profile-notification.svg\" width=\"20px\" height=\"20px\" className=\"profile-icon\" />\n </div>\n }\n </div>\n </DropdownToggle>\n <DropdownMenu>\n {\n IsAnonymous\n ? <SignIn />\n : <SignOut currentUser={currentUser} />\n }\n <div className=\"dd-body\">\n {!isSingleList && <LinkComponent\n pageName={t('Profile.My_orders')}\n IsAnonymous={IsAnonymous}\n loginPage={loginPage}\n pageTitle=\"order-history\"\n additional=\"filter=0\"\n />}\n\n {userOrdersSummary && currentUser.Roles.Shopper &&\n (<LinkComponent\n pageName={t('Profile.Rejected_orders', {rejectedOrderCount})}\n IsAnonymous={IsAnonymous}\n loginPage={loginPage}\n pageTitle=\"order-history\"\n additional=\"filter=2\"\n />)\n }\n {userOrdersSummary && currentUser.Roles.Approver &&\n (<LinkComponent\n pageName={t('Profile.Orders_to_approve', {pendingApprovalOrderCount})}\n IsAnonymous={IsAnonymous}\n loginPage={loginPage}\n pageTitle=\"order-approval-list\"\n />)\n }\n <LinkComponent\n pageName={t('Profile.Draft_orders')}\n IsAnonymous={IsAnonymous}\n loginPage={loginPage}\n pageTitle=\"drafts\"\n />\n <LinkComponent\n pageName={t('Profile.Recipient_lists')}\n IsAnonymous={IsAnonymous}\n loginPage={loginPage}\n pageTitle=\"my-recipient-lists\"\n />\n {!isUStoreConnectEnterprise && <>\n <LinkComponent\n pageName={t('Profile.Addresses')}\n IsAnonymous={IsAnonymous}\n loginPage={loginPage}\n pageTitle=\"addresses\"\n />\n <LinkComponent\n pageName={t('Profile.Personal_information')}\n IsAnonymous={IsAnonymous}\n loginPage={loginPage}\n pageTitle=\"personal-information\"\n />\n </>}\n </div>\n </DropdownMenu>\n </Dropdown>\n )\n }\n}\n\nexport default Profile\n","var _excluded = [\"className\", \"cssModule\", \"tag\", \"type\", \"size\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nimport Dropdown from './Dropdown';\nimport { InputGroupContext } from './InputGroupContext';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Sets size of InputGroup */\n size: PropTypes.string,\n /** Set a custom element for this component */\n tag: tagPropType,\n type: PropTypes.string\n};\nfunction InputGroup(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n type = props.type,\n size = props.size,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'input-group', size ? \"input-group-\".concat(size) : null), cssModule);\n if (props.type === 'dropdown') {\n return /*#__PURE__*/React.createElement(Dropdown, _extends({}, attributes, {\n className: classes\n }));\n }\n return /*#__PURE__*/React.createElement(InputGroupContext.Provider, {\n value: {\n insideInputGroup: true\n }\n }, /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n })));\n}\nInputGroup.propTypes = propTypes;\nexport default InputGroup;","/**\n * This component represents the search text box in the header\n * When searching - the store redirects to the 'Search' page with results from the input\n *\n * @param {object} customState - custom state of store\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { useNavigate, useLocation, useParams } from 'react-router-dom'\nimport { InputGroup } from 'reactstrap'\nimport Icon from '$core-components/Icon'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { useUStoreState } from '$ustoreinternal/services/hooks';\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './Search.scss'\n\nconst escapeValue = (value) => value ? value.replace(/[&:<>'\"+*?\\\\/.%#|]/g, \" \").trim() : ''\n\nconst Search = (props) => {\n const params = useParams()\n const { customState } = useUStoreState()\n const [searchValue, setSearchValue] = useState(params.page === 'search' ? params.id : '')\n const navigate = useNavigate()\n const location = useLocation()\n\n useEffect(() => {\n if (window.ga) {\n window.ga('send', 'pageview', location.pathname);\n }\n }, [location])\n\n const onSearchClicked = () => {\n let value = escapeValue(searchValue)\n if (value.length > 0) {\n UStoreProvider.state.customState.set('searchValue', value)\n navigate(urlGenerator.get({page: 'search', id: decodeURIComponent(value)}))\n }\n }\n\n const onKeyPress = (event) => {\n if (event.key === 'Enter') {\n onSearchClicked()\n event.preventDefault();\n }\n }\n\n const onChange = (e) => {\n UStoreProvider.state.customState.delete('searchValue')\n setSearchValue(e.target.value)\n }\n\n\n return customState && <div className={`search ${props.className || ''}`}>\n <InputGroup size=\"normal\">\n <input type=\"text\" className=\"search-input form-control\"\n value={searchValue}\n placeholder={t('Search.Search_Products')}\n onChange={onChange}\n onKeyPress={onKeyPress}/>\n <InputGroup className=\"search-button\" onClick={onSearchClicked}>\n <div className=\"search-icon-container\">\n <Icon name=\"search.svg\" width=\"21px\" height=\"21px\" className=\"search-icon\"/>\n </div>\n </InputGroup>\n </InputGroup>\n </div>\n\n}\n\nexport default Search\n","import {UStoreProvider} from '@ustore/core';\n\nexport const useUStoreState = () => {\n return UStoreProvider ? UStoreProvider.state.get() : {}\n}","/**\n * @function Overlay - Shadow overlay as a background for modals, popups etc.\n *\n * @param {bool} isActive - true: display, false: hide\n * @param {func} overlayClicked - the function to call when the user clicks on the overlay\n */\nimport React from 'react'\nimport './Overlay.scss'\n\nconst Overlay = ({ isActive, overlayClicked }) => {\n let className = 'overlay'\n className += isActive ? ' active' : ''\n\n return (\n <div className={className} onClick={overlayClicked} />\n )\n}\n\nexport default Overlay\n","/**\n * Wrapper component for flag image\n *\n * @param {object} props - all the properties we would like to pass to the flag image tag including:\n * @param {string} name - the flag file name\n * @param {number} width - the flag image width\n * @param {number} height - the flag image height\n * @param {string} [className] - a class to place on flag image element\n */\nimport React from 'react'\nimport themeContext from '$ustoreinternal/services/themeContext'\n\nconst Flag = (props) => {\n const assetPrefix = (themeContext && themeContext.get().hasOwnProperty('assetPrefix')) ? themeContext.get().assetPrefix : props.assetPrefix\n const { name } = props\n\n if (!name) {\n return null\n }\n\n const src = (`${assetPrefix}/static-internal/images/flags/${name.toLowerCase()}`)\n return (\n <img\n {...props}\n alt=''\n src={src}\n style={{ display: 'inline-block' }}\n />\n )\n}\n\nexport default Flag\n","/**\n * @function Switcher - Wrapper component for the bootstrap Dropdown menu\n *\n * @param {array} items - the menu data, should contain:\n * ID - unique id\n * icon (optional) - item's icon - file name\n * sign (optional) - item's icon - as string - the item's icon should be either icon or sign\n * value - the value that will be passed back to the server\n * @param {object} selected - the selected item in the switcher\n * @param {string} label - a label that would be displayed next to the current selected item\n * @param {func} onSelected - the function to be called when the user clicks on an item\n */\n\nimport React, { Component } from 'react'\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'\nimport Icon from './Icon'\nimport Flag from '$core-components/Flag'\nimport './Switcher.scss'\n\nclass Switcher extends Component {\n constructor (props) {\n super(props)\n\n this.toggle = this.toggle.bind(this)\n this.state = {\n isDropdownOpen: false,\n active: props.items && props.items.length > 1\n }\n }\n\n toggle () {\n if (!this.state.active) {\n return\n }\n\n this.setState(prevState => ({\n isDropdownOpen: !prevState.isDropdownOpen\n }))\n }\n\n render () {\n const { className, items, label, selected, onSelected } = this.props\n\n let classNameStr = 'switcher'\n classNameStr += (className) ? ` ${className}` : ''\n\n if (!items) {\n return <div/>\n }\n\n return (\n <Dropdown className={classNameStr} isOpen={this.state.isDropdownOpen} toggle={this.toggle}>\n <DropdownToggle tag=\"span\">\n <div>\n <div className=\"back-block\">\n <div className=\"back-icon-container\">\n <Icon name=\"back.svg\" width=\"9px\" height=\"19px\" className=\"back-icon\" />\n </div>\n <div className=\"main-title\">\n <div className=\"label-title\">{label}</div>\n </div>\n </div>\n <div className=\"selected-block\">\n {selected && selected.sign &&\n <div>\n <span className=\"selected-sign\">{selected.value}</span>\n <span className=\"label-selected\"> {label}</span>\n </div>\n }\n {selected && selected.icon &&\n <div>\n <span className=\"selected-icon\">\n <Flag name={selected.icon} width=\"29\" height=\"19\"/></span>\n <span className=\"label-selected\"> {label}</span>\n </div>\n }\n </div>\n </div>\n </DropdownToggle>\n <DropdownMenu className=\"list\">\n {\n items.map(({ ID, icon, sign, value }) => {\n return (\n <DropdownItem key={ID} onClick={() => {\n onSelected(ID)\n }}>\n <span className=\"item\" tabIndex=\"0\" role=\"button\">\n {sign && <span className=\"sign\">{sign}</span>}\n {icon && <Flag name={icon} width=\"29\" height=\"19\" className=\"icon\"/>}\n <span className=\"name truncate\">{value}</span>\n </span>\n </DropdownItem>\n )\n })\n }\n </DropdownMenu>\n </Dropdown>\n )\n }\n}\n\nexport default Switcher\n","import themeContext from \"$ustoreinternal/services/themeContext\";\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\n\n//NOTE: this method is not supported in SSR\nimport { getNextConfig } from \"./utils\";\n\nexport const getVariableValue = (varName, defaultValue, isImageURL, isURL) => {\n const setVarValue = (value) => {\n value = value.trim()\n if (value.startsWith(\"\\\"\") || value.startsWith(\"'\")) {\n value = value.substring(1, value.length - 1)\n }\n if (isImageURL && (value.startsWith(\"Assets\") || value.startsWith(\"assets\"))) {\n const { showThemeAsDraft, storeID } = themeContext.get()\n const { themeCustomizationUrl } = getNextConfig()\n const imagePrefix = `${themeCustomizationUrl}/${storeID}/${showThemeAsDraft === 'true' ? 'Draft' : 'Published'}`\n value = `${imagePrefix}/${value}`\n }\n if (isURL && value.startsWith(\"/\")) {\n let qs = null\n\n if (value.indexOf('?') > -1) {\n qs = value.split('?')[1]\n value = value.substring(0, value.indexOf('?'))\n }\n\n const params = value.split('/')\n const paramsObj = { page: params[1] }\n if (params.length > 2) {\n paramsObj.id = params[2]\n }\n\n value = `${urlGenerator.get(paramsObj)}${qs ? `?${qs}` : ''}`\n }\n return value\n }\n\n\n const style = window.getComputedStyle(document.body)\n let varValue = style.getPropertyValue(varName)\n varValue = setVarValue(varValue)\n return (varValue && varValue.length) ? varValue : defaultValue\n\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import { UStoreProvider } from '@ustore/core'\nimport { debounce } from 'throttle-debounce'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { queryOrCookieStrToObj, getNextConfig } from '$ustoreinternal/services/utils'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport variables from '$styles/_theme.scss'\nimport logger from './logger'\n\nconst ngToLegacyConversions = [\n {\n reg: /^((?!product|category).)*\\/drafts/,\n generateURL: () => `Drafts`\n },\n {\n reg: /(.*)\\/product\\/(.*)/,\n generateURL: (storeFriendlyID, id) => `${storeFriendlyID}/Category/0/Product/${id}/`,\n\n },\n {\n reg: /.*\\/order-final-step/,\n generateURL: () => `OrderFinalStep.aspx`\n },\n {\n reg: /^((?!product|category).)*\\/cart/,\n generateURL: () => `Cart`\n },\n {\n // In case `product` or `category` are used as folder names\n reg: /(product|categor).*\\/\\w{2}(-\\w{2})?\\/cart/,\n generateURL: () => `Cart`\n },\n {\n reg: /^((?!product|category).)*\\/addresses/,\n generateURL: () => `Adresses`\n },\n {\n reg: /.*\\/checkout-complete/,\n generateURL: () => `CheckoutComplete.aspx`\n },\n {\n reg: /.*\\/checkout-final/,\n generateURL: () => `CheckoutFinal.aspx`\n },\n {\n reg: /.*\\/checkout-payment-submission/,\n generateURL: () => `CheckoutPaymentSubmission.aspx`\n },\n {\n reg: /.*\\/clearing-unknown-order/,\n generateURL: () => `Clearing/UnknownOrder.aspx`\n },\n {\n reg: /.*\\/customization/,\n generateURL: () => `Customization.aspx`\n },\n {\n reg: /.*\\/custom-main/,\n generateURL: () => `CustomMain.aspx`\n },\n {\n reg: /.*\\/empty-page/,\n generateURL: () => `EmptyPage.aspx`\n },\n {\n reg: /.*\\/error-page/,\n generateURL: () => `ErrorPage.aspx`\n },\n {\n reg: /.*\\/file-submission/,\n generateURL: () => `FileSubmission/FileSubmission.aspx`\n },\n {\n reg: /.*\\/my-recipient-lists/,\n generateURL: () => `MyRecipientLists`\n },\n {\n reg: /.*\\/order-approval-list/,\n generateURL: () => `OrderApprovalList.aspx`\n },\n {\n reg: /.*\\/order-details/,\n generateURL: () => `OrderDetails.aspx`\n },\n {\n reg: /.*\\/order-history/,\n generateURL: () => `OrderHistory`\n },\n {\n reg: /.*\\/personal-information/,\n generateURL: () => `PersonalInformation`\n },\n {\n reg: /.*\\/product-details/,\n generateURL: () => `ProductDetails`\n },\n {\n reg: /.*\\/product-unavailable/,\n generateURL: () => `ProductUnavailable.aspx`\n },\n {\n reg: /^((?!product|category).)*\\/recipient/,\n generateURL: () => `Recipient.aspx`\n },\n // {\n // reg: /^((?!product|category).)*\\/search/,\n // generateURL: (storeFriendlyID, id) => `${storeFriendlyID}/Search/${id}`\n // },\n {\n reg: /.*\\/split-shipping-addresses/,\n generateURL: () => `SplitShipping/Addresses.aspx`\n },\n {\n reg: /.*\\/split-shipping-items/,\n generateURL: () => `SplitShipping/Items.aspx`\n },\n {\n reg: /.*\\/uedit-customization/,\n generateURL: () => `uEditCustomization.aspx`\n },\n]\n\nconst legacyToNGConversions = [\n {\n reg: /\\/category\\/0\\/product\\//,\n page: 'product',\n params: (url) => {\n const res = url.match(/\\/product\\/(\\d+)\\/(.*)/)\n\n return {\n id: res[1],\n name: res[2]\n }\n }\n },\n {\n reg: /\\/ustore\\/orderfinalstep/,\n page: 'order-final-step'\n },\n {\n reg: /\\/ustore\\/productdetails/,\n page: 'product-details'\n },\n {\n reg: /\\/ustore\\/(cart|checkout)(?!final|paymentsubmission|complete)/,\n page: 'cart'\n },\n {\n reg: /\\/ustore\\/checkoutfinal/,\n page: 'checkout-final'\n },\n {\n reg: /\\/ustore\\/checkoutpaymentsubmission/,\n page: 'checkout-payment-submission'\n },\n {\n reg: /\\/ustore\\/checkoutcomplete/,\n page: 'checkout-complete'\n },\n {\n reg: /\\/ustore\\/(orderhistory|orderlist)/,\n page: 'order-history'\n },\n {\n reg: /\\/ustore\\/(personalinformation|accountsettings)/,\n page: 'personal-information'\n },\n {\n reg: /\\/ustore\\/(adresses|deliveryaddress)/,\n page: 'addresses'\n },\n {\n reg: /\\/ustore\\/recipient(?!manager)/,\n page: 'recipient'\n },\n {\n reg: /\\/ustore\\/(myrecipientlists|recipientmanager)/,\n page: 'my-recipient-lists'\n },\n {\n reg: /\\/ustore\\/filesubmission\\/filesubmission/,\n page: 'file-submission'\n },\n {\n reg: /\\/ustore\\/customization/,\n page: 'customization'\n },\n {\n reg: /\\/ustore\\/ueditcustomization/,\n page: 'uedit-customization'\n },\n {\n reg: /\\/ustore\\/splitshipping\\/addresses/,\n page: 'split-shipping-addresses'\n },\n {\n reg: /\\/ustore\\/splitshipping\\/items/,\n page: 'split-shipping-items'\n },\n {\n reg: /\\/ustore\\/orderdetails/,\n page: 'order-details'\n },\n {\n reg: /\\/ustore\\/product-unavailable/,\n page: 'order-details'\n },\n {\n reg: /\\/ustore\\/drafts/,\n page: 'drafts'\n },\n {\n reg: /\\/ustore\\/emptypage/,\n page: 'empty-page'\n },\n {\n reg: /\\/ustore\\/errorpage/,\n page: 'error-page'\n },\n // {\n // reg: /\\/ustore\\/([\\w-]+)\\/search/,\n // page: 'search',\n // params: (url) => ({ id: url.match(/\\/search\\/(.*)\\?/)[1] })\n // },\n {\n reg: /\\/ustore\\/orderapprovallist/,\n page: 'order-approval-list'\n },\n {\n reg: /\\/ustore\\/custommain/,\n page: 'custom-main'\n },\n {\n reg: /\\/ustore\\/clearing\\/unknownorder/,\n page: 'clearing-unknown-order'\n },\n {\n reg: /\\/ustore(\\/?(([\\w-]+)\\/home\\/?)?)$/,\n page: 'home'\n },\n {\n reg: /\\/ustore\\/default/,\n page: 'home'\n }\n]\n\nclass LegacyIframeHandler {\n constructor() {\n this.viewMobileState = null\n this._iframeElm = null\n this.iframeID = 'legacy-iframe'\n this.clearContentSrc = 'about:blank'\n this.iframeContainer = null\n this.isIframeVisible = false\n this.buildType = getNextConfig().buildType\n this.router = null\n //TODO: No events listener for react-router, need to fix\n // Router.events.on('routeChangeComplete', this.handleRoute)\n }\n\n get iframeElm() {\n if (!this._iframeElm) {\n this._iframeElm = document.getElementById(this.iframeID)\n }\n return this._iframeElm\n }\n\n set setNavigate(navigateFn) {\n this.router = navigateFn\n }\n\n postMessage(message) {\n logger.info('message to iframe', message)\n\n if (!this.iframeElm) {\n return\n }\n this.iframeElm.contentWindow.postMessage(message, '*')\n }\n\n removeRandParamFromUrl(string) {\n if (!string) {\n return string\n }\n\n const randIndex = string.indexOf('rand')\n if (randIndex === -1) {\n return string\n }\n\n const ampersandIndex = string.indexOf('&', randIndex)\n return string.replace(\n ampersandIndex === -1 ? string.substring(randIndex - 1) : string.substring(randIndex, ampersandIndex + 1),\n ''\n )\n }\n\n setIframeSrc(url, mobileViewChanged = false) {\n try {\n const { pathname, search } = this.iframeElm.contentWindow.location\n\n const pathnameAfterCategoryFix = pathname\n .replace(/\\/Category\\/\\d+\\/Product\\//i, '/Category/0/Product/')\n .replace(/(\\/Category\\/0\\/Product\\/\\d+)(.*)/i, '$1')\n\n const pathIsTheSame = this.removeRandParamFromUrl(url)\n .toLowerCase()\n .startsWith(`${pathnameAfterCategoryFix}${this.removeRandParamFromUrl(search)}`.toLowerCase())\n\n if (!pathIsTheSame || mobileViewChanged) {\n this.iframeElm.contentWindow.location.replace(url)\n }\n } catch (e) {\n const ngurl = this.convertUrlLegacyToNG(url)\n window.location.href = ngurl\n }\n }\n\n getIframeSrc() {\n const { pathname, search, hash } = this.iframeElm.contentWindow.location\n return `${pathname}${search}${hash}`\n }\n\n handleRoute = (url) => {\n if (!this.iframeElm) {\n return\n }\n\n this.iframeElm.setAttribute('scrolling', 'no')\n\n // Send message to theme editor on routing changes\n window.parent.postMessage({\n type: '@CHANGE_NG_ROUTE',\n data: url\n }, '*')\n\n const { storeFriendlyID } = themeContext.get()\n\n // In case of a client only build on reload we need to wait until the\n // state is ready with currentStore, currentCulture and currentCurrency\n // for legacy iframe to be rendered correctly.\n const { currentCulture, currentCurrency } = UStoreProvider.state.get()\n if (!storeFriendlyID || !currentCurrency || !currentCulture) {\n setTimeout(() => this.handleRoute(url), 100)\n return\n }\n\n //Identify if the 'url' is legacy or NG.\n //If NG - hide iframe\n //If legacy - show iframe and set it's src\n const legacyURL = this.iframeURLWithMobileBreak(this.getLegacyUrl(url))\n const isCartPage = /^((?!product|category).)*\\/cart/i.test(legacyURL)\n const {currentStore} = window.UStoreProvider.state.get()\n const newCartPage = currentStore?.Attributes?.find((attr) => attr.Name === 'ForceCartAspx' && attr.Value === 'False')\n\n if (isCartPage && newCartPage) {\n this.hideIframe()\n return\n }\n if (legacyURL && legacyURL.length > 0 ) {\n this.isIframeVisible = true\n this.setIframeSrc(legacyURL)\n } else {\n this.hideIframe()\n }\n }\n\n iframeURLWithMobileBreak(url) {\n if (!url || url.length === 0 || url === this.clearContentSrc) {\n return url\n }\n\n const addViewMobile = (u, val) => url.includes(\"viewMobile\") ?\n u.replace(/viewMobile=false|viewMobile=true/gi, val) :\n u.includes('?') ? url.concat(`&${val}`) : url.concat(`?${val}`)\n\n const desktopBreakpoint = parseInt(variables.lg.replace('px', ''))\n const viewMobileVal = document.body.clientWidth > desktopBreakpoint ? 'viewMobile=false' : 'viewMobile=true'\n if (!this.viewMobileState || viewMobileVal !== this.viewMobileState) {\n this.viewMobileState = viewMobileVal\n return addViewMobile(url, viewMobileVal)\n }\n return url\n }\n\n getLegacyUrl(url) {\n let legacyUrl = this.convertUrlNGToLegacy(url)\n if (!legacyUrl || legacyUrl.length === 0) {\n return legacyUrl\n }\n const queryString = this.createCleanQueryString(url)\n legacyUrl += `${queryString.length > 0 ? '?' : ''}${queryString}`\n return this.appendMessagingParams(legacyUrl)\n }\n\n appendMessagingParams(url) {\n const { showThemeAsDraft, storeID, securityToken } = themeContext.get()\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n const { currentCulture, currentCurrency, currentUser } = UStoreProvider.state.get()\n url += url.includes('showThemeAsDraft') ? '' : (`${url.includes('?') ? '&' : '?'}showThemeAsDraft=${isDraft}&isFrameMode=true`)\n url += url.includes('currentCultureFriendlyID') ? '' : `¤tCultureFriendlyID=${currentCulture ? currentCulture.FriendlyID : ''}`\n url += url.includes('currentCurrencyFriendlyID') ? '' : `¤tCurrencyFriendlyID=${currentCurrency ? currentCurrency.FriendlyID : ''}`\n url += url.includes('rand') ? '' : `&rand=${Math.random()}`\n url += url.includes('userUniqueId') ? '' : `&userUniqueId=${currentUser ? currentUser.ID : ''}`\n url += url.includes('parentUrl') ? '' : `&parentUrl=${encodeURIComponent(window.location.href)}`\n url += url.includes('StoreGuid') ? '' : `&StoreGuid=${storeID ? storeID : ''}`\n url += url.includes('securityToken') ? '' : `&securityToken=${securityToken ? securityToken : ''}`\n\n return url\n }\n\n convertUrlLegacyToNG(legacyUrl) {\n const url = legacyUrl.toLowerCase();\n const ngUrl = legacyToNGConversions.reduce((res, { reg, page, params }) => {\n if (reg.test(url)) {\n const p = params ? params(url) : {}\n return urlGenerator.get({ page, ...p })\n }\n return res\n }, '')\n\n const queryString = this.createCleanQueryString(legacyUrl)\n return `${ngUrl}${queryString.length > 0 ? '?' : ''}${queryString}`\n }\n\n convertUrlNGToLegacy(url) {\n const { storeFriendlyID, id, classicUrl } = themeContext.get()\n const legacyURL = ngToLegacyConversions.reduce((res, { reg, generateURL }) => {\n if (reg.test(url)) {\n return generateURL(storeFriendlyID, id, classicUrl)\n }\n return res\n }, '')\n return legacyURL && legacyURL.length > 0 ? `${classicUrl}/${legacyURL}` : \"\"\n }\n\n createCleanQueryString(url = '') {\n const queryParamsJson = queryOrCookieStrToObj(url.split('?')[1]);\n\n return Object.entries(queryParamsJson)\n .filter(([key, value]) => key !== 'isFrameMode' && key !== 'showThemeAsDraft' && key !== 'currentCurrencyFriendlyID' && key !== 'currentCultureFriendlyID' && key !== 'rand')\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n }\n\n hideIframe() {\n if (this.iframeElm) {\n this.isIframeVisible = false\n this.setIframeSrc(this.clearContentSrc)\n this.iframeElm.style.display = 'none'\n }\n }\n\n adaptIframeToContainer() {\n if (this.iframeElm && this.iframeContainer) {\n this.iframeElm.style.top = `${this.iframeContainer.offsetTop}px`\n this.iframeElm.height = this.iframeContainer.style.height\n this.iframeElm.width = this.iframeContainer.clientWidth\n this.iframeElm.style.display = 'block'\n this.iframeElm.style.position = 'absolute'\n }\n }\n\n adaptContainerToIframe() {\n if (this.iframeContainer) {\n this.iframeContainer.style.height = this.iframeElm.height\n }\n }\n\n onRedirectRequested(msg, previousPath) {\n if (!msg || !msg.data || !msg.data.url) return\n const url = msg.data.url\n\n if (url.startsWith('http')) {\n window.location.href = url\n }\n else {\n this.router(url, { state: { previousPath } })\n }\n }\n\n onScrollParentRequested(msg) {\n if (!msg) return\n\n if (msg.type === '@SCROLL_PARENT_DISABLE') {\n\n var x = window.scrollX;\n var y = window.scrollY;\n window.onscroll = function () { window.scrollTo(x, y); };\n\n }\n else if (msg.type === '@SCROLL_PARENT_ENABLE') {\n window.onscroll = function () { }\n }\n }\n\n onRequestScrollPosition(msg) {\n if (this.iframeElm && this.iframeContainer) {\n const response = {\n type: '@RESPONSE_UI_INFO',\n data: {\n scroll: document.querySelector('html').scrollTop\n }\n }\n\n this.postMessage(response)\n }\n }\n\n changeRouteOrDimensions(msg, asPath) {\n logger.info('message from iframe', msg, asPath)\n\n const changeRouteResult = {\n isRoutingFromLegacy: false,\n messageHandled: msg.type === '@CHANGE_DIMENSIONS' || msg.type === '@CHANGE_LEGACY_ROUTE'\n }\n if (msg.type === '@CHANGE_LEGACY_ROUTE') {\n // The following code prevents the iframe to be showed with\n // the login page inside. The page will redirect to the\n // original login page\n if (/login\\.aspx/i.test(msg.data) || /showmessage\\.aspx/i.test(msg.data)) {\n this.hideIframe()\n window.location.href = msg.data\n return changeRouteResult\n }\n\n window && window.scrollTo(0, 0)\n const nextUrl = msg.data ? this.convertUrlLegacyToNG(msg.data) : null\n if (nextUrl) {\n if (nextUrl !== asPath) {\n changeRouteResult.isRoutingFromLegacy = true\n this.router(nextUrl, { replace: true })\n this.adaptIframeToContainer()\n }\n }\n } else if (msg.type === '@CHANGE_DIMENSIONS') {\n if (this.iframeContainer && msg.data && msg.data.height && this.isIframeVisible) {\n this.iframeContainer.style.height = `${msg.data.height}px`\n this.adaptIframeToContainer()\n }\n }\n return changeRouteResult\n }\n\n handleClickingIframe = () => {\n this.iframeContainer && this.iframeContainer.click()\n }\n\n handleResize = debounce(300, () => {\n const iframeSrc = this.getIframeSrc()\n\n const urlWithMobileBreak = this.iframeURLWithMobileBreak(iframeSrc)\n if (urlWithMobileBreak !== iframeSrc) {\n this.setIframeSrc(this.appendMessagingParams(urlWithMobileBreak), true)\n }\n this.adaptIframeToContainer()\n })\n\n handleScrolling({ type, data }) {\n if (type === '@SCROLL_ON') {\n this.iframeElm.setAttribute('scrolling', 'yes')\n }\n if (type === '@SCROLL_TO') {\n window.scrollTo(data.x, data.y)\n }\n return type === '@SCROLL_ON'\n }\n}\n\nconst legacyIframeHandler = new LegacyIframeHandler()\nexport default legacyIframeHandler\n","import { useLocation, useNavigate, useSearchParams } from 'react-router-dom';\n\nexport const withRouter = (Component) => {\n const Wrapper = (props) => {\n const { pathname } = useLocation()\n const navigate = useNavigate()\n const [searchParams] = useSearchParams()\n\n return (\n <Component asPath={pathname} navigate={navigate} searchParams={searchParams} {...props}/>\n )\n }\n\n return Wrapper\n}\n","import React, { useEffect } from 'react'\nimport { UStoreProvider } from '@ustore/core'\n\nconst Slot = ({ name }) => {\n const [widgetComponents, setWidgetComponents] = React.useState([]);\n\n useEffect(() => {\n (async () => {\n window.xmpie_uStore_widgets.instances.forEach((widget) => {\n if (widget.location === name) {\n const WidgetComponent = window[widget.name].default;\n const widgetConfig = Object.keys(window.uStoreWidgetsConfiguration).length &&\n window.uStoreWidgetsConfiguration[widget.id]\n ? atob(window.uStoreWidgetsConfiguration[widget.id]).toString()\n : null;\n setWidgetComponents((widgetComponents) => [...widgetComponents, React.createElement(WidgetComponent, { key: widget.name, uStoreProvider: UStoreProvider, config: widgetConfig })]);\n }\n })\n })();\n }, [name]);\n return widgetComponents;\n};\n\nexport default Slot;","/**\n * @function Header - contains all the components of the header section\n *\n * @param {object} categoriesTree - a list of CategoryTreeNodeModel. Each node should contain:\n * \t\tCategory {object} - CategoryModel\n * \t\tSubCategories {object} - list of CategoryTreeNodeModel\n * @param {object} currencies - all currencies - should contain:\n * ID {string} - unique currency id\n * Symbol {string} - the currency character\n * Code {string} - the currency name\n * @param {object} currentCurrency - the selected currency - should contain:\n * ID {string} - unique currency id\n * Symbol {string} - the currency character\n * Code {string} - the currency name\n * @param {object} cultures - all cultures - should contain:\n * ID {string} - unique culture id\n * Flag {string} - the flag file name\n * DisplayName {string} - the language name\n * @param currentCulture - the selected culture - should contain:\n * ID {string} - unique culture id\n * Flag {string} - the flag file name\n * DisplayName {string} - the language name\n * @param currentUser - should contains at least FirstName\n */\n\nimport { Component, createRef } from 'react'\nimport Cart from './Cart'\nimport CategoriesNavbar from './CategoriesNavbar'\nimport CategoriesSidebar from './CategoriesSidebar'\nimport Profile from './Profile'\nimport Search from './Search'\nimport SignIn from './SignIn'\nimport SignOut from './SignOut'\nimport Icon from '$core-components/Icon'\nimport Overlay from '$core-components/Overlay'\nimport Switcher from '$core-components/Switcher'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies';\nimport { getVariableValue } from \"$ustoreinternal/services/cssVariables\";\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { withRouter } from '$ustoreinternal/services/withRouter'\nimport theme from '$styles/_theme.scss'\nimport { t } from '$themelocalization'\nimport { UStoreProvider } from '@ustore/core'\nimport { Link } from 'react-router-dom'\nimport { throttle } from 'throttle-debounce'\nimport './Header.scss'\nimport Slot from \"../../widgets/Slot\";\n\nclass Header extends Component {\n constructor() {\n super();\n this.header = createRef();\t\t// A reference to the main wrapper element\n\n this.state = {\n drawerOpen: false,\t\t\t\t\t\t // Left drawer - opened/closed\n mobileSearchVisible: false,\n overlayActive: false,\t \t\t\t // The overlay - active or not\n logoImageUrl: require(`$assets/images/logo.png`).default,\n connectCartUrl: ''\n }\n }\n\n componentDidMount() {\n // const { currentStore } = this.props\n // document.title = document && document.title && currentStore ? currentStore.Name : '';\n\n window.addEventListener('resize', this.onResize);\n throttle(250, this.onResize);\t\t\t\t\t// Call this function once in 250ms only\n\n const { currentStore } = this.props\n const { cartUrl } = themeContext.get()\n\n const connectCartUrl = (currentStore && currentStore.StoreType === 3 && cartUrl) ? cartUrl : ''\n\n if (this.state.connectCartUrl !== connectCartUrl) this.setState({ connectCartUrl })\n }\n\n componentDidUpdate() {\n const { currentStore } = this.props\n const { cartUrl } = themeContext.get()\n\n const connectCartUrl = (currentStore && currentStore.StoreType === 3 && cartUrl) ? cartUrl : ''\n\n if (this.state.connectCartUrl !== connectCartUrl) this.setState({ connectCartUrl })\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize)\n }\n\n // NOTE: this is not supported in SSR\n setLogoImage = () => {\n const variableForLogoImg = window.matchMedia(`(min-width: ${theme.lg})`).matches ? '--logo-image' : '--logo-image-mobile'\n this.setState({ logoImageUrl: getVariableValue(variableForLogoImg, require(`$assets/images/logo.png`).default, true) })\n }\n\n onResize = () => {\n this.setLogoImage()\n }\n\n drawerStateChange(open) {\n this.setState({ drawerOpen: open })\n this.setState({ overlayActive: open })\n\n if (open) {\n document.body.style.overflow = 'hidden'\n }\n else {\n document.body.style.overflow = 'auto'\n }\n }\n\n burgerClicked() {\n this.drawerStateChange(true)\n }\n\n overlayClicked() {\n this.drawerStateChange(false)\n }\n\n getFlagFromCode(languageCode) {\n return `${languageCode}.svg`\n }\n\n render() {\n if (!this.props.customState) {\n return null\n }\n\n const { customState: { categoriesTree, userOrdersSummary }, currencies, cultures, currentCulture, currentUser, currentCurrency, navigate } = this.props\n\n const currenciesViewModel = currencies && currencies.map(({ ID, Symbol, Code }) => ({\n ID, sign: Symbol, value: Code\n }))\n\n const culturesViewModel = cultures && cultures.map(({ ID, CountryCode, Name }) => ({\n ID, icon: this.getFlagFromCode(CountryCode), value: Name\n }))\n\n const currencySelected = (selected) => {\n const selectedCurrency = currencies.find(i => i.ID === selected)\n UStoreProvider.state.culture.setCurrentCurrency(selectedCurrency)\n themeContext.set('currencyFriendlyID', selectedCurrency.FriendlyID)\n CookiesManager.setCookie({ key: storefrontCookies.currencyID, value: selectedCurrency.FriendlyID, days: 30 })\n CookiesManager.setCookie({ key: storefrontCookies.currencyGUID, value: selected, days: 30 })\n legacyIframeHandler.postMessage({\n type: '@CHANGE_CURRENCY',\n data: selectedCurrency.FriendlyID\n })\n }\n\n const cultureSelected = (selected) => {\n const selectedCulture = cultures.find(i => i.ID === selected)\n const pathWithNewLangugageCode = window.location.pathname.replace(/\\/[a-z]{2}-[A-Za-z]{2}\\//, `/${selectedCulture.LanguageCode}/`)\n const searchString = window.location.search\n const hashString = window.location.hash\n CookiesManager.setCookie({ key: storefrontCookies.language, value: selectedCulture.LanguageCode, days: 30 })\n window.location.replace(pathWithNewLangugageCode + searchString + hashString)\n }\n\n const sidebarRedirect = (pageParams) => {\n this.drawerStateChange(false)\n navigate(urlGenerator.get(pageParams))\n }\n\n const variableForLogoImg = window.matchMedia(`(min-width: ${theme.lg})`).matches ? '--logo-image' : '--logo-image-mobile'\n const currentLogo = getVariableValue(variableForLogoImg, require(`$assets/images/logo.png`), true)\n return (\n <div className='header' >\n <Slot name=\"header_above\" />\n <div className='header-stripe' ref={(ref) => this.header = ref} draweropen={`${this.state.drawerOpen}`}>\n <div className=\"logo-wrapper\">\n <div className=\"menu-icon-container\" onClick={this.burgerClicked.bind(this)}>\n <Icon name=\"menu.svg\" width=\"23px\" height=\"20px\" className=\"menu-icon\" />\n </div>\n <Link to={urlGenerator.get({ page: 'home' })}>\n <span>\n <div className=\"logo-container\">\n {currentLogo && <img className=\"logo\" src={currentLogo} alt=\"logo\" />}\n </div>\n </span>\n </Link>\n </div>\n {\n categoriesTree && categoriesTree.length > 0 &&\n <CategoriesNavbar categoriesTree={categoriesTree} />\n }\n <Search className={ this.state.mobileSearchVisible ? 'search-visible' : 'search-hidden'} />\n <div className=\"right-icons\">\n <button className=\"header-mobile-search-button\" onClick={() => this.setState({ mobileSearchVisible: !this.state.mobileSearchVisible})}>\n <Icon name=\"search.svg\" width=\"20px\" height=\"20px\" />\n </button>\n {culturesViewModel && culturesViewModel.length > 0 &&\n <Switcher\n className=\"culture\"\n items={culturesViewModel}\n selected={currentCulture && culturesViewModel.find((element) => { return currentCulture.ID === element.ID })}\n label={t('Header.Language')}\n onSelected={cultureSelected} />\n }\n {currenciesViewModel && currenciesViewModel.length > 0 &&\n <Switcher\n className=\"currency\"\n items={currenciesViewModel}\n selected={currentCurrency && currenciesViewModel.find((element) => { return currentCurrency.ID === element.ID })}\n label={t('Header.Currency')}\n onSelected={currencySelected} />\n }\n {currentUser && <Profile currentUser={currentUser} userOrdersSummary={userOrdersSummary} />}\n <Cart connectCartUrl={this.state.connectCartUrl} />\n </div>\n <div className=\"drawer-wrapper\">\n {currenciesViewModel && currenciesViewModel.length > 0 &&\n <Switcher\n className=\"currency\"\n items={currenciesViewModel}\n selected={currentCurrency && currenciesViewModel.find((element) => { return currentCurrency.ID === element.ID })}\n label={t('Header.Currency')}\n onSelected={currencySelected} />\n }\n {culturesViewModel && culturesViewModel.length > 0 &&\n <Switcher\n className=\"culture\"\n items={culturesViewModel}\n selected={currentCulture && culturesViewModel.find((element) => { return currentCulture.ID === element.ID })}\n label={t('Header.Language')}\n onSelected={cultureSelected} />\n }\n {\n categoriesTree && categoriesTree.length > 0 &&\n <CategoriesSidebar categoriesTree={categoriesTree} onRedirect={sidebarRedirect} />\n }\n {currentUser && currentUser.IsAnonymous ? <SignIn showTitle={false} /> : <SignOut currentUser={currentUser} />}\n </div>\n <Overlay isActive={this.state.overlayActive} overlayClicked={this.overlayClicked.bind(this)} />\n </div>\n <Slot name=\"header_below\" />\n </div>\n\n )\n }\n}\n\nexport default withRouter(Header)\n","import React from 'react'\nimport './Footer.scss'\nimport Slot from '../widgets/Slot';\n\n/**\n * This component represents the footer in the store\n */\nconst Footer = () => {\n return (\n \n <div className=\"footer\">\n <div className=\"divider\" />\n <div className=\"footer-txt\">Copyright 2024 IEEE | All rights reserved. </div>\n {/* <div className=\"footer-txt\">The following purchase terms apply for articles copyrighted by the American Chemical Society (such articles indicate “Copyright 2024 American Chemical Society.â€): Purchasers may distribute this material. Please note that articles copyrighted by the ACS cannot be posted on the Internet, including but not limited to a website or listserv. Copies of ACS articles may not be scanned electronically and made available or kept on shared electronic resources for the use of others, including colleagues at the same organization. If additional copies are needed in the form of photocopies, you must report your photocopying to the Copyright Clearance Center at 978-750-8400 or to your Reproduction Rights Organization. Anything that identifies the ACS may not be removed from the material, including but not limited to the ACS logo, ACS name, and publication title. Additionally, the following uses of ACS copyrighted content are also strictly prohibited: · Use by document delivery services and for any fulfillment of document delivery. · Indexing and storage on shared electronic resources for retrieval, distribution, or data mining. Customer agrees to the above terms via its purchase of the ACS material.</div> */}\n <div className=\"footer-text\">\n <a className = \"footer-link\" href=\"https://www.ieee.org/security-privacy.html\" target=\"_blank\">Security</a> | <a className = \"footer-link\" href=\"https://www.ieee.org/security-privacy.html\" target = \"_blank\">Privacy Policy</a>\n </div>\n \n \n </div>\n )\n}\n\nexport default Footer\n","import React from 'react'\nimport Icon from './Icon'\n\nimport './CrossCloseButton.scss'\n\nconst CrossCloseButton = ({ onClick, className }) => {\n return (\n <div onClick={onClick}\n className={`cross-close-button-container ${className || ''}`}>\n <Icon name=\"close_black.svg\" width=\"15px\" height=\"15px\" className=\"cross-close-button\"/>\n </div>\n )\n}\n\nexport default CrossCloseButton\n","import React from 'react'\n\nimport { t } from '$themelocalization'\nimport CrossCloseButton from '$core-components/CrossCloseButton'\nimport './CookiesConsent.scss'\n\nconst CookiesConsent = ({ onCookiesPolicyClicked, onCloseCookiesConsentClicked }) => {\n const localizeCookiesConsent = () => {\n const localizationString = t('GdprRibbon.Cookies_consent')\n const stringArray = localizationString.split('%{0}')\n stringArray.splice(1, 0, <span onClick={onCookiesPolicyClicked} key=\"content-policy\">{t('GdprRibbon.Cookie_policy')}</span>)\n return stringArray\n }\n\n return (\n <div className=\"cookies-consent-container\">\n <CrossCloseButton className=\"consent\"\n onClick={onCloseCookiesConsentClicked}/>\n <div className=\"cookies-consent-title\">{t('GdprRibbon.This_website_uses_cookies')}</div>\n <div className=\"cookies-consent-description\">\n {localizeCookiesConsent()}\n </div>\n </div>\n )\n}\n\nexport default CookiesConsent\n","import React from 'react'\n\nimport { t } from '$themelocalization'\nimport CrossCloseButton from '$core-components/CrossCloseButton'\nimport { getCookiesForRibbon } from '$ustoreinternal/services/cookies'\nimport './CookiesPolicy.scss'\n\nconst CookiesPolicy = ({ onCloseCookiesPolicyClicked }) => {\n return (\n <div className=\"cookies-policy-container\">\n <CrossCloseButton className=\"policy\"\n onClick={onCloseCookiesPolicyClicked}/>\n <div className=\"cookies-policy-title\">{t('GdprRibbon.Cookie_policy')}</div>\n <div className=\"cookies-policy-description\">\n <div className=\"cookies-explanation-title\">\n {t('GdprRibbon.CookieExplanationHeader1')}\n </div>\n <div className=\"cookies-explanation-description\">\n {t('GdprRibbon.CookieExplanationParagraph1_1')}\n <br/>\n {t('GdprRibbon.CookieExplanationParagraph1_2')}\n </div>\n <div className=\"cookies-necessary-title\">\n {t('GdprRibbon.CookieExplanationHeader2')}\n </div>\n <div className=\"cookies-necessary-description\">\n {t('GdprRibbon.CookieExplanationParagraph2_1')}\n </div>\n <div className=\"cookies-table-title\">\n {t('GdprRibbon.Table_title')}\n </div>\n <div className=\"cookies-table\">\n <table>\n <thead className=\"table-head\">\n <tr className=\"cookie-row\">\n <td><div>{t('lblName')}</div></td>\n <td><div>{t('lblDomain')}</div></td>\n <td><div>{t('lblExpiration')}</div></td>\n <td><div>{t('lblDescription')}</div></td>\n </tr>\n </thead>\n <tbody>\n {getCookiesForRibbon().map((cookie) => {\n const { name, expiration: { amount, units }, description } = cookie\n return (\n <tr key={name} className=\"cookie-row\">\n <td><div>{name}</div></td>\n <td><div>{window.location.hostname}</div></td>\n <td><div>{amount && `${amount}`}{t(units)}</div></td>\n <td><div>{t(description)}</div></td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n )\n}\n\nexport default CookiesPolicy\n","import React from 'react'\nimport { UStoreProvider } from '@ustore/core'\n\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport CookiesConsent from \"./CookiesConsent\";\nimport CookiesPolicy from \"./CookiesPolicy\";\nimport './CookiesRibbon.scss'\n\nconst CookieRibbon = ({ showRibbon }) => {\n const [showCookiesPolicy, setShowCookiesPolicy] = React.useState(false)\n\n if (!showRibbon) {\n return null\n }\n\n const closeCookiesRibbon = () => {\n UStoreProvider.state.customState.set('showCookieRibbon', false)\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: 'false' })\n }\n const openCookiesPolicy = () => setShowCookiesPolicy(true)\n const closeCookiesPolicy = () => setShowCookiesPolicy(false)\n\n return (\n <div className=\"cookies-ribbon\">\n {showCookiesPolicy\n ? <CookiesPolicy onCloseCookiesPolicyClicked={closeCookiesPolicy}/>\n : <CookiesConsent onCloseCookiesConsentClicked={closeCookiesRibbon}\n onCookiesPolicyClicked={openCookiesPolicy}/>}\n </div>\n )\n}\n\nexport default CookieRibbon\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the <html> itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\n\nfunction RouteChangeListener() {\n const location = useLocation();\n\n useEffect(() => {\n // This callback will be invoked every time the location (route) changes\n legacyIframeHandler.handleRoute(location.pathname + location.search)\n\n }, [location]); // The effect will re-run when the location changes\n\n return null; // This component doesn't render anything\n}\n\nexport default RouteChangeListener;\n","import React, { Component, createRef } from 'react'\nimport HeadSEO from './HeadSEO'\nimport Header from './Header'\nimport Footer from './Footer'\nimport './Layout.scss'\nimport CookiesRibbon from \"./CookiesRibbon\";\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport RouteChangeListener from '$core-components/RouteChangeListener'\n/**\n * The main page wrapper - contains the Header and Footer and gets children as the main content\n *\n * @param {object} state - state of store\n * @param {component} children - React components to be presented between header and footer\n * @param {string} [className] - class name to append to the container div\n */\n\nclass Layout extends Component {\n constructor() {\n super();\n\n this.isConnectStore = false\n this.resizeObserver = null;\n this.resizeElement = createRef()\n }\n\n static currentHeight = 0\n\n _debounce = function (ms, fn) {\n var timer;\n return function () {\n clearTimeout(timer)\n var args = Array.prototype.slice.call(arguments)\n args.unshift(this)\n timer = setTimeout(fn.bind.apply(fn, args), ms)\n };\n };\n\n componentWillUnmount() {\n if (this.resizeObserver) this.resizeObserver.disconnect();\n }\n\n render() {\n const { state, children, className } = this.props\n\n const storeType = (state && state.currentStore) ? state.currentStore.StoreType : null\n if (storeType === 3) {\n // connect store - hide header and footer.\n this.isConnectStore = true\n }\n\n if (this.isConnectStore) {\n if (this.resizeObserver) this.resizeObserver.disconnect();\n\n this.resizeObserver = new ResizeObserver(this._debounce(300, function (entries) {\n entries.forEach(entry => {\n if (Layout.currentHeight !== entry.contentRect.height) {\n Layout.currentHeight = entry.contentRect.height\n console.log('USTORE_CONNECT_RESIZE height: ' + entry.contentRect.height)\n window.parent.postMessage({\n type: '@USTORE_CONNECT_RESIZE',\n data: {\n height: entry.contentRect.height,\n width: entry.contentRect.width\n }\n }, '*')\n }\n })\n }))\n\n if (this.resizeElement.current) this.resizeObserver.observe(this.resizeElement.current);\n }\n\n let isPreviewMode = false\n let url = ''\n try {\n // wrapping in try catch so that in cross-domain (connect store) it will be ignored.\n url = window.top.location.href\n } catch (error) { }\n\n if (url && (url.includes('MobilePreview.aspx') || url.includes('ThemeCustomization.aspx')))\n isPreviewMode = true\n\n const showHeaderFooter = storeType === 4 ?\n state.currentStore.Attributes.find(attr => attr.Name === 'ShowHeaderAndFooter' && attr.Value === 'True') :\n (!this.isConnectStore || isPreviewMode)\n\n return (\n <div>\n <HeadSEO {...state} />\n <div className={`layout ${className ? className : ''} ${isPreviewMode ? 'preview' : ''} ${!showHeaderFooter ? 'connect' : ''}`}>\n {showHeaderFooter && <Header {...state} />}\n <div className=\"main-content\" ref={this.resizeElement}>\n {children}\n </div>\n {showHeaderFooter && <Footer />}\n {state.customState && state.currentStore && <CookiesRibbon showRibbon={state.customState.showCookieRibbon} />}\n </div>\n <RouteChangeListener/>\n </div>\n )\n }\n}\n\nexport default Layout\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport HTMLLinesEllipsis from 'react-lines-ellipsis/lib/html'\nimport './CategoryItem.scss'\n\n/**\n * This component represents the category in the store\n * It contains the category image and details\n *\n * @param {object} model - the category\n * @param {string} url - the url to redirects when clicking the category\n * @param {string} [className] - the css class to add to main div\n */\n\nconst CategoryItem = ({ model, url, className }) => {\n if (!model) {\n return <div className=\"category-item\" />\n }\n const imageUrl = model.ImageUrl ? model.ImageUrl : require(`$assets/images/default.png`)\n\n return (\n <Link to={url} className={`category-item ${className || ''}`} data-qaautomationinfo={model.FriendlyID}>\n <div className=\"image-wrapper\">\n <img alt='' src={imageUrl} />\n </div>\n <div className=\"category-name\">\n <HTMLLinesEllipsis style={{ whiteSpace: 'pre-wrap' }} unsafeHTML={model.Name} maxLine={2} basedOn='words' />\n </div>\n </Link>\n )\n}\n\nexport default CategoryItem\n","/**\n * A component to display inventory information of a product\n *\n * @param {object} model - ProductInventoryModel containing data regarding inventory of the product\n * @param {number} minQuantity - the minimum quantity of units that can be ordered from the product\n * @param {boolean} hideInStock (false) - Hide the 'In Stock #####' label if is in stock.\n * @param {string} pluralName - the plural name of the item type.\n */\nimport React from 'react'\nimport { t } from '$themelocalization'\nimport './Inventory.scss'\n\nexport const isOutOfStock = (quantity, minQuantity, AllowOutOfStockPurchase) => {\n return (quantity < minQuantity && !AllowOutOfStockPurchase)\n}\n\nconst Inventory = (props) => {\n const { model, minQuantity, hideInStock = true, pluralName, singleName } = props\n\n return (\n <span className=\"inventory\">\n {\n (model && model.Quantity < minQuantity)\n ? (\n model.AllowOutOfStockPurchase\n ? <div className='warning'>{t('Inventory.Out_of_stock_Delivery_delayed')}</div>\n : <div className='error'>{t('Inventory.Out_of_stock')}</div>\n ) : null\n }\n {!hideInStock && model && model.Quantity >= minQuantity\n ? <div className='inStock'>\n {/* {t('Inventory.In_Stock', model.Quantity)} */}\n {`${t('Inventory.In_stock')} ${model.Quantity} ${model.Quantity === 1 ? singleName || 'Item' : pluralName || 'Items'}`}\n </div>\n : null\n }\n </span>\n )\n}\n\nexport default Inventory\n","import React, { Component } from 'react'\nimport { UStoreProvider } from '@ustore/core'\nimport deepcopy from 'deepcopy'\n\nexport const withState = (WrappedComponent) => {\n class ConnectedComponent extends Component {\n render () {\n const preRender = WrappedComponent.preRender\n const state = UStoreProvider ? UStoreProvider.state.get() : {}\n const preRenderedState = preRender ? preRender(deepcopy(state)) : state\n return <WrappedComponent { ...this.props} state={preRenderedState} customState={preRenderedState.customState}/>\n }\n }\n\n return ConnectedComponent\n}\n","/**\n * A component to display price information of a product, formatted according to currency and culture definitions\n *\n * @param {object} model - ProductPriceModel containing data regarding the price of the product\n * @param {bool} isMinimumPrice - if true this price is the minimum price of the product (adding From before price string)\n * @param {object} state - current state of the store\n */\n\nimport { withState } from '$ustoreinternal/services/withState'\nimport { UStoreProvider } from '@ustore/core'\nimport { formatNumByLocale } from '$ustoreinternal/services/utils'\nimport { t } from '$themelocalization'\n\nexport const Price = ({ model, isMinimumPrice, state, showCurrency = true, overridePriceFormat = '' }) => {\n const { currentStore, currentCurrency, currentCulture } = state\n\n if (!currentStore || !currentCurrency || !currentCulture || !model || Number.isNaN(model.Price) || Number.isNaN(model.Tax)) { return '' }\n\n let formatParams = {\n taxFormat: overridePriceFormat || currentStore.TaxFormat,\n symbol: currentCurrency.Symbol,\n code: currentCurrency.Code,\n currencyFormat: currentCulture.CurrencyFormat,\n decimalSeparator: currentCulture.DecimalSeparator,\n decimalPlaces: currentCulture.DecimalPlaces,\n languageCode: currentCulture.LanguageCode\n }\n\n const { price, tax, priceIncludingTax } = UStoreProvider.state.culture.getConvertedPrices(model)\n // format the given price and tax amount to a string according to the tax, culture and currency definitions of models in state\n const priceDisplayString = formatParams.taxFormat\n .replace(/{Price}/g, formatForCurrencyAndCulture(price, formatParams))\n .replace(/{Tax}/g, formatForCurrencyAndCulture(tax, formatParams))\n .replace(/{PriceIncludingTax}/g, formatForCurrencyAndCulture(priceIncludingTax, formatParams))\n\n // if Price === -1 then it means that Excel is invalid or cannot perform the calculation - show NA instead.\n const isPriceValid = (price !== -1)\n\n // new Intl.NumberFormat(currentCulture.LanguageCode).format(priceDisplayString)\n return (\n <span className=\"price-display\">\n {\n isPriceValid && isMinimumPrice &&\n <span className=\"minimum-price-notation\">{t('ProductItem.From_Price')}<span> </span></span>\n }\n <span className=\"price\">{isPriceValid ? priceDisplayString : 'N/A'} {showCurrency && <span className='price-currency'>{formatParams.code}</span>}</span>\n </span>\n )\n}\n\n// format the given amount to a string according to the passed definitions of currency an culture\nconst formatForCurrencyAndCulture = (amount, formatParams) => {\n const { currencyFormat, symbol, decimalPlaces, decimalSeparator } = formatParams\n // split the amount to Integer and floating, apply toFixed(decimalPlaces) to get correct amount of digits.\n const [intAmount, floating] = amount.toFixed(decimalPlaces).toString().split('.') // in case of decimalPlaces == 0, the 'floating' const will be undefined.\n\n return currencyFormat\n .replace(/{Symbol}/g, symbol)\n // format the given amount to a string according to passed culture definitions\n // apply the formatNumByLocale function only on the Integer part of the amount, and add the floating part only if exist.\n // only show decimalSeparator if floating exist (in case of decimalPlaces == 0, the 'floating' const will be undefined)\n .replace(/{Amount}/g, formatNumByLocale(intAmount, formatParams.languageCode) + (floating ? decimalSeparator + floating : ''))\n}\n\nexport default withState(Price)\n","/**\n * A component to display quantity control of a product\n *\n * @param {object} quantityConfig - ProductQuantityModel containing data regarding the quantities of the product\n * @param {string} additionalClassName - a className that is added to the component (can be used to set invalid class).\n * @param {function} onChange - the callback function that fires when value was changed.\n * @param {string} id - a unique ID for the component.\n * @param {number} quantity - the current quantity.\n * @param {boolean} showMinimalDisplay - flag to show the quantity control in a minimal display (currently in ProductItem component)\n */\n\n\nimport { debounce } from 'throttle-debounce'\nimport React, { Component } from 'react'\nimport { t } from '$themelocalization'\nimport './BaseQuantity.scss'\n\nconst MAX_VALUE = 2147483646\n\nclass BaseQuantity extends Component {\n constructor(props) {\n super(props)\n\n this.onValueChange = this.onValueChange.bind(this)\n this.updatedQuantity = props.quantity\n }\n\n getValueFromRange = (options, value) => {\n if (options.length === 0) {\n return null\n }\n // if not in any range, use the minimum value.\n let selected = options.find((item) => { return value === item.Value })\n if (selected === undefined) {\n selected = options[0]\n }\n\n return selected\n }\n\n onValueChange(e) {\n e.persist();\n this.updatedQuantity = parseInt(e.target.value)\n this.debounced(e);\n }\n\n onKeyDown = (e) => {\n if (e.key === '.' || e.key === '-' || e.key === '+' || e.key === '=') {\n e.preventDefault()\n return false\n }\n }\n\n onClickPlusMinus(reduceOrAdd, id) {\n const value = parseInt(this.updatedQuantity + reduceOrAdd)\n if (value > 0) {\n const el = document.querySelector(`#${id}`)\n if (el) {\n el.value = value\n }\n this.updatedQuantity = value\n this.debounced({ target: { value, id } });\n }\n }\n\n debounced = debounce(300, (e) => {\n if (e.target.value > MAX_VALUE) {\n e.target.value = MAX_VALUE\n }\n e.target.value = parseInt(e.target.value)\n this.props.onChange(e)\n });\n\n render() {\n const { quantityConfig, quantity, additionalClassName, onChange, id, showMinimalDisplay } = this.props\n\n if (!quantityConfig) {\n return null\n }\n\n const selectedDropDownItem = quantityConfig.Options && this.getValueFromRange(quantityConfig.Options, quantity)\n\n return (<div className='product-quantity'>\n {!quantityConfig.Changeable && !showMinimalDisplay && // READ ONLY LABEL\n <div className='ro-quantity-wrapper'>\n <span className={'quantity-control quantity-label ' + additionalClassName} id={'quantity_' + id}>{quantity}</span>\n </div>\n }\n {!quantityConfig.Changeable && showMinimalDisplay && // READ ONLY LABEL with Quantity before\n <div className='ro-quantity-wrapper-show-quantity'>\n <span className='quantity-label'>{t('product.quantity')}:</span>\n <span className={'quantity-control quantity-label ' + additionalClassName} id={'quantity_' + id}>{quantity}</span>\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options === null && !showMinimalDisplay && // TEXT BOX\n <div className='txt-quantity-wrapper'>\n <input id={'quantity_' + id} type={'number'} className={'quantity-control quantity-input ' + additionalClassName}\n onChange={this.onValueChange} defaultValue={!isNaN(quantity) ? parseInt(quantity) : null}\n onKeyDown={this.onKeyDown}\n onWheel={(e) => { return false }} />\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options === null && showMinimalDisplay && // TEXT BOX WITH +/-\n <div className='txt-quantity-wrapper-show-indicators'>\n <span className={`indicator minus ${this.updatedQuantity <= 1 ? 'disabled' : ''}`}\n onClick={() => { this.onClickPlusMinus(-1, 'quantity_' + id) }}>-</span>\n <input id={'quantity_' + id} type={'number'} className={'quantity-control quantity-input ' + additionalClassName}\n onChange={this.onValueChange} defaultValue={!isNaN(quantity) ? parseInt(quantity) : null}\n onKeyDown={this.onKeyDown}\n onWheel={(e) => { return false }} />\n <span className='indicator plus' onClick={() => { this.onClickPlusMinus(1, 'quantity_' + id) }}>+</span>\n\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options != null && quantityConfig.Options.length && !showMinimalDisplay &&// DROPDOWN\n <div className='dd-quantity-wrapper'>\n <select id={'quantity_' + id} onChange={onChange} className={'quantity-control quantity-dropdown ' + additionalClassName} defaultValue={selectedDropDownItem.Value} title={selectedDropDownItem.Name}>\n {quantityConfig.Options.map((item) => {\n return <option key={item.Value} value={item.Value} >{item.Name}</option>\n })}\n </select>\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options != null && quantityConfig.Options.length && showMinimalDisplay &&// DROPDOWN with custom carret\n <div className='dd-quantity-wrapper-custom-caret'>\n <select id={'quantity_' + id} onChange={onChange} className={'quantity-control quantity-dropdown custom-caret ' + additionalClassName} defaultValue={selectedDropDownItem.Value} title={selectedDropDownItem.Name}>\n {quantityConfig.Options.map((item) => {\n return <option key={item.Value} value={item.Value} >{item.Name}</option>\n })}\n </select>\n </div>\n }\n </div>)\n }\n}\nexport default BaseQuantity\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport classNames from 'classnames';\nimport TooltipPopoverWrapper, { propTypes } from './TooltipPopoverWrapper';\nvar defaultProps = {\n placement: 'top',\n autohide: true,\n placementPrefix: 'bs-tooltip',\n trigger: 'hover focus'\n};\nfunction Tooltip(props) {\n var arrowClasses = classNames('tooltip-arrow', props.arrowClassName);\n var popperClasses = classNames('tooltip', 'show', props.popperClassName);\n var classes = classNames('tooltip-inner', props.innerClassName);\n return /*#__PURE__*/React.createElement(TooltipPopoverWrapper, _extends({}, props, {\n arrowClassName: arrowClasses,\n popperClassName: popperClasses,\n innerClassName: classes\n }));\n}\nTooltip.propTypes = propTypes;\nTooltip.defaultProps = defaultProps;\nexport default Tooltip;","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {object} productModel\n * @param {object} orderModel\n * @param {supportsInventory} boolean\n */\n\nimport React, { Component } from 'react'\nimport './ProductItemQuantity.scss'\nimport BaseQuantity from './BaseQuantity'\nimport { t } from '$themelocalization'\nimport { Tooltip } from 'reactstrap'\n\nclass ProductItemQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: '',\n showErrorTooltip: false,\n errorTooltipTarget: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Configuration: { Quantity: { Minimum, Maximum } } }, productModel: { Inventory }, supportsInventory } = this.props\n\n const inventory = supportsInventory && Inventory ? Inventory.Quantity : null\n\n if (value === null || value === undefined || isNaN(value)) {\n return <span className='validation-required'>{t('KitQuantity.Validation_required')}</span>\n }\n\n if (Minimum && Number(value) < Minimum) {\n return <span className='validation-minimum'>{t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })}</span>\n }\n\n if (Maximum && Number(value) > Maximum) {\n return <span className='validation-maximum'>{t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })}</span>\n }\n\n if (inventory && Number(value) > inventory && !Inventory.AllowOutOfStockPurchase) {\n return <span className='validation-inventory'>{t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })}</span>\n }\n\n return null\n }\n\n onChange (e) {\n const { onQuantityChange } = this.props\n\n const value = parseInt(e.target.value)\n const errorMessage = this.getValidationErrorMessage(value)\n this.setState({ errorMessage, showErrorTooltip: !!errorMessage, errorTooltipTarget: e.target.id })\n\n // send new value and isValid to parent.\n onQuantityChange(value, !errorMessage)\n }\n\n render () {\n const { productModel: { Configuration: { Quantity }, ID }, orderModel } = this.props\n\n // if no Configuration dont show anything\n if (!Quantity) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n const targetExist = document.getElementById(`${this.state.errorTooltipTarget}`)\n\n return (<div className=\"product-item-quantity\">\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n showMinimalDisplay={true}\n />\n {\n this.state.showErrorTooltip && targetExist &&\n <Tooltip placement='bottom' isOpen={true} target={this.state.errorTooltipTarget}\n className=\"quantity-error-tooltip bs-tooltip-bottom\">\n {this.state.errorMessage}\n </Tooltip>\n }\n </div>)\n }\n}\n\nexport default ProductItemQuantity\n","import { useRef } from 'react'\nimport './Tooltip.scss'\n\nconst Tooltip = (props) => {\n const { text, className, placement, arrow, maxLine } = props\n const elementRef = useRef()\n const titleRef = useRef()\n\n const isTargetElement = elementRef.current && (titleRef.current.offsetHeight < titleRef.current.scrollHeight)\n\n return (\n <div\n ref={elementRef}\n className={`defaultStylesTooltip ${className} placement-${placement}`}\n >\n <div className={`tooltip-title lines-${maxLine}`} ref={titleRef} dangerouslySetInnerHTML={ { __html: text } }/>\n {isTargetElement && <div className='tooltip-text' ref={elementRef}>\n <span className={`arrow-${arrow}`}/>\n {text}\n </div>}\n </div>\n )\n}\n\nTooltip.defaultProps = {\n text: '',\n className: '',\n placement: 'top',\n arrow: true,\n maxLine: 2\n}\n\nexport default Tooltip\n","/**\n * A component to display units of measure information of a product\n *\n * @param {object} model - ProductUnitModel containing data regarding the units of the product\n * @param {number} minQuantity - the minimum quantity of units that can be ordered from the product\n * @param {isMinimumPrice} boolean - a flag to denote if the component should show display regarding minimum price or not\n *\n */\n\nimport { t } from '$themelocalization'\nimport './UnitsOfMeasure.scss'\n\nconst UnitsOfMeasure = (props) => {\n const { model, minQuantity, isMinimumPrice } = props\n\n if (!model) {\n return null\n }\n\n const pricePerItem = model && model.PackType === null\n const { ItemType, PackType, ItemQuantity } = model\n return (\n <span className=\"units-of-measure\">\n {\n pricePerItem\n ? (minQuantity > 1 && isMinimumPrice) ? t('UnitsOfMeasure.Per_Quantity_Item_Type', {\n MinimumQuantity: minQuantity,\n ItemTypePluralName: ItemType.PluralName\n }) : '' // e.g. Per 100 items\n : (minQuantity === 1 || !isMinimumPrice) // e.g. Sold in Packs (100 Items/Pack)\n ? t('UnitsOfMeasure.Sold_in_Pack_Type', {\n PackTypePluralName: PackType.PluralName,\n ItemQuantity,\n PackTypeName: PackType.Name,\n ItemTypePluralName: ItemType.PluralName\n })\n : // e.g. Per 2 packs (100 items/pack)\n t('UnitsOfMeasure.Per_Quantity_Pack_Type',\n {\n MinimumQuantity: minQuantity,\n PackTypePluralName: PackType.PluralName,\n ItemQuantity,\n PackTypeName: PackType.Name,\n ItemTypePluralName: ItemType.PluralName\n })\n }\n </span>\n )\n}\n\nexport default UnitsOfMeasure\n","import './LoadingDots.scss'\n\nconst LoadingDots = ({ className }) => {\n return (\n <div className={`loading-dots ${className}`}>\n <div className='loading-dot'></div>\n <div className='loading-dot'></div>\n <div className='loading-dot'></div>\n <div className='loading-dot'></div>\n </div>\n )\n}\n\nexport default LoadingDots\n","/**\n * Component for button in the system\n *\n * @param {string} text - the text on the button\n * @param {function} onClick - a function to call when the button was clicked\n * @param {string} [className] - a class name to place on button element\n * @param {boolean} [isLoading] - if true the ui will show LoadingDots instead of the text\n * @param {boolean} [disabled] - if true the ui will show a disabled button\n */\nimport LoadingDots from './LoadingDots'\n\nconst Button = ({ text, onClick, className, isLoading, disabled }) => {\n return (\n <div disabled={disabled}\n className={`${className} button truncate `}\n onClick={(e) => !disabled && onClick(e)}\n >\n <span className={`${isLoading ? 'text-hidden' : ''}`}>{text}</span>\n {isLoading && <LoadingDots />}\n </div>\n )\n}\n\nexport default Button\n","import React, { Component } from 'react'\nimport './ImageLoader.scss'\nimport { debounce } from 'throttle-debounce'\n\nclass ImageLoader extends Component {\n\n constructor (props) {\n super(props)\n this.imageOnLoad = this.imageOnLoad.bind(this)\n this.imageOnError = this.imageOnError.bind(this)\n this.image = React.createRef()\n }\n\n componentDidMount () {\n const img = this.image.current\n if (img && img.complete) {\n this.imageOnLoad()\n }\n if (this.props.isStretched) {\n window.addEventListener('resize', this.imageOnLoad)\n }\n }\n\n componentWillUnmount () {\n if (this.props.isStretched) {\n window.removeEventListener('resize', this.imageOnLoad)\n }\n }\n\n imageOnLoad = debounce(50, () => {\n const img = this.image.current\n if (img) {\n img.classList.remove('hide')\n img.classList.add('show')\n img.previousSibling.classList.remove('show')\n img.previousSibling.classList.add('hide')\n if (this.props.isStretched) {\n let container = img.parentElement\n const borderWidth = parseInt(getComputedStyle(img).borderWidth, 10) * 2;\n let adjustedContainerWidth = container.offsetWidth - borderWidth;\n let adjustedContainerHeight = container.offsetHeight - borderWidth;\n\n while (adjustedContainerWidth <= 0 || adjustedContainerHeight <= 0) {\n container = container.parentElement\n adjustedContainerWidth = container.offsetWidth - borderWidth;\n adjustedContainerHeight = container.offsetHeight - borderWidth;\n }\n\n if (img.naturalWidth / img.naturalHeight > adjustedContainerWidth / adjustedContainerHeight) {\n img.style.width = `${adjustedContainerWidth}px`\n img.style.height = 'auto'\n } else {\n img.style.width = 'auto'\n img.style.height = `${adjustedContainerHeight}px`\n }\n }\n }\n })\n\n imageOnError = () => {\n const imageElem = this.image.current\n if (imageElem) {\n imageElem.src = require(`$assets/images/default.png`)\n imageElem.classList.remove('hide')\n imageElem.classList.add('show')\n imageElem.previousSibling.classList.remove('show')\n imageElem.previousSibling.classList.add('hide')\n }\n }\n\n render () {\n return (\n <div className={`image-loader ${this.props.className ? this.props.className : ''}`}>\n <div className=\"animated loading\"/>\n <img\n alt=''\n ref={this.image}\n src={this.props.src}\n onError={this.imageOnError}\n onLoad={this.imageOnLoad}\n className=\"hide\"\n />\n </div>\n )\n }\n}\n\nexport default ImageLoader\n","import { useEffect, useState} from 'react'\nimport { useNavigate} from 'react-router-dom'\nimport Inventory from './Inventory'\nimport Price from './Price'\nimport ProductItemQuantity from './ProductItemQuantity'\nimport Tooltip from '$core-components/Tooltip';\nimport UnitsOfMeasure from './UnitsOfMeasure'\nimport Button from '$core-components/Button'\nimport Icon from '$core-components/Icon'\nimport ImageLoader from '$core-components/ImageLoader'\nimport LoadingDots from '$core-components/LoadingDots'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './ProductItem.scss'\n\nconst ProductItem = (props) => {\n const navigate = useNavigate()\n const [currentOrderItem, setCurrentOrderItem] = useState(null)\n const [isPriceCalculating, setIsPriceCalculating] = useState(false)\n const [calculatedPriceModel, setCalculatedPriceModel] = useState(null)\n const [addToCartShowSuccess, setAddToCartShowSuccess] = useState(false)\n const [quantity, setQuantity] = useState(null)\n const [isQuantityValid, setIsQuantityValid] = useState(true)\n const [addToCartShowSuccessTimer, setAddToCartShowSuccessTimer] = useState(null)\n let {descriptionLines, productNameLines, model, url, detailed, className} = props\n\n const onQuantityChange = async (newQuantity, isValid) => {\n const { model } = props\n\n if (isValid) {\n setQuantity(newQuantity)\n if (model.HasPricing) {\n setIsPriceCalculating(true)\n const calculatedPriceModel = await onCalculatePrice(newQuantity)\n setIsPriceCalculating(false)\n setIsQuantityValid(true)\n setCalculatedPriceModel(calculatedPriceModel)\n } else {\n setIsQuantityValid(true)\n }\n } else {\n setIsQuantityValid(false)\n }\n }\n\n const onCalculatePrice = async (newQuantity) => {\n const { model } = props\n if (model.MinimumPrice === null) return\n const orderItemForApi = currentOrderItem || await UStoreProvider.api.orders.addOrderItem(model.ID)\n\n const priceModel = await UStoreProvider.api.orders.getPriceOrderItem(orderItemForApi.ID, { ...orderItemForApi, Quantity: newQuantity })\n setCalculatedPriceModel(priceModel.Price)\n setCurrentOrderItem(orderItemForApi)\n return priceModel.Price\n }\n\n const addToCart = async () => {\n if (isQuantityValid) {\n const { model } = props\n const orderItemForApi = currentOrderItem || await UStoreProvider.api.orders.addOrderItem(model.ID)\n // call the update order api if quantity is updated\n if (quantity) {\n const updated = {\n ...orderItemForApi,\n Quantity: quantity\n }\n\n await UStoreProvider.api.orders.updateOrderItem(orderItemForApi.ID, updated)\n }\n await UStoreProvider.api.orders.addToCart(orderItemForApi.ID)\n\n if (UStoreProvider.state.get()['currentStore']?.Attributes?.find((attr) => attr.Name === 'ForceCartAspx' && attr.Value === 'False')) {\n await UStoreProvider.state.store.loadCartItemsCount()\n }\n\n return true\n }\n\n return false\n }\n\n const onAddToCartClick = async () => {\n const success = await addToCart()\n\n if (success) {\n setAddToCartShowSuccess(true)\n setCurrentOrderItem(null)\n setQuantity(null)\n setAddToCartShowSuccessTimer(setTimeout(() => {\n setAddToCartShowSuccess(false)\n setCalculatedPriceModel(null)\n }, 3000))\n }\n }\n\n const onClick = (url) => {\n if (typeof url === \"string\") {\n navigate(url)\n }\n }\n\n useEffect(() => {\n return () => {\n clearTimeout(addToCartShowSuccessTimer)\n }\n }, [addToCartShowSuccessTimer])\n\n if (!model) {\n return null\n }\n\n productNameLines = productNameLines ? productNameLines : 2\n descriptionLines = descriptionLines ? descriptionLines : 4\n\n const imageUrl = (model && model.ImageUrl) ? model.ImageUrl : require(`$assets/images/default.png`)\n const productNameAndCatalog = model.CatalogNumber && model.CatalogNumber.trim().length > 0 ? `${model.Name} / ${model.CatalogNumber}` : model.Name\n const showQuickAddToCart = model.Configuration && model.Configuration.AllowQuickAddToCart\n const priceModelToDisplay = calculatedPriceModel || model.MinimumPrice\n const isMinimumPrice = !calculatedPriceModel && !showQuickAddToCart\n const quantityToShow = quantity || model.MinimumQuantity\n\n return (\n <div className={`product-item ${className ? className : ''}`} data-qaautomationinfo={model.FriendlyID}>\n <div className=\"image-wrapper\" onClick={() => onClick(url)}>\n <ImageLoader className=\"image\" src={imageUrl}/>\n </div>\n <div className=\"product-name\" style={{maxHeight: `${productNameLines * 1.5}em`}} onClick={() => onClick(url)}>\n <Tooltip placement=\"top\" text={productNameAndCatalog} maxLine={productNameLines}/>\n </div>\n {detailed && <div className=\"product-description\" style={{maxHeight: `${descriptionLines * 1.5}em`}}>\n <Tooltip placement=\"bottom\" text={model.ShortDescription} maxLine={descriptionLines}/>\n </div>}\n <Inventory model={model.Inventory} minQuantity={model.MinimumQuantity}/>\n {model.HasPricing && priceModelToDisplay && <div>\n <div className=\"product-units\">\n <UnitsOfMeasure minQuantity={model.MinimumQuantity} model={model.Unit} isMinimumPrice={isMinimumPrice}/>\n </div>\n <div className=\"product-price\">\n {isPriceCalculating ?\n <LoadingDots/> : <Price model={priceModelToDisplay} isMinimumPrice={isMinimumPrice}/>\n }\n </div>\n </div>}\n <div className=\"anchor-flex-end\"/>\n {showQuickAddToCart && <div className='add-to-cart'>\n {!addToCartShowSuccess && <div className='add-to-cart-controls'>\n <div className='add-to-cart-product-quantity'>\n <ProductItemQuantity\n supportsInventory={true}\n onQuantityChange={onQuantityChange}\n productModel={model}\n orderModel={{Quantity: quantityToShow}}\n />\n </div>\n <div className='add-to-cart-button-wrapper'>\n <Button className='button-secondary add-to-cart-button' text={t('ProductItem.Add_to_cart_button_text')}\n onClick={() => onAddToCartClick()}/>\n <Button className='button-secondary add-button' text={t('ProductItem.Add_button_text')}\n onClick={() => onAddToCartClick()}/>\n </div>\n </div>\n }\n {addToCartShowSuccess &&\n <div className='add-to-cart-success'>\n <div>{t('ProductItem.Added_successfully_message')}\n <span className='success-checkmark-icon-wrapper'>\n <Icon name=\"checkmark.svg\" width=\"20px\" height=\"20px\" className=\"success-checkmark-icon\"/>\n </span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n )\n}\n\n\nexport default ProductItem\n","import { useEffect, useRef } from 'react'\nimport { useNavigate} from 'react-router-dom'\nimport { throttle } from 'throttle-debounce'\nimport theme from '$styles/_theme.scss'\nimport './PromotionItem.scss'\n\nconst PromotionItem = ({ imageUrl, title, subTitle, buttonText, url, className }) => {\n const promotionItem = useRef()\n const navigate = useNavigate()\n\n const goTo = (url) => {\n if(!url){\n return\n }\n if (url.startsWith('http')) {\n window.location.href = url\n }\n else {\n navigate(url)\n }\n }\n\n useEffect(() => {\n const setButtonSize = () => {\n if(!promotionItem) {\n return\n }\n \n const button = promotionItem.current.querySelector('.button')\n const width = document.body.clientWidth\n \n if (window.matchMedia(`(max-width: ${theme.md})`).matches) {\n button.style['max-width'] = `${width - (2 * 20)}px`\n } else {\n button.style['max-width'] = ''\n }\n }\n\n window.addEventListener('resize', setButtonSize)\n throttle(250, setButtonSize)\n setButtonSize()\n\n return () => window.removeEventListener('resize', setButtonSize)\n }, [])\n\n return (\n <div className={`promotion-item ${className || ''}`} ref={promotionItem}>\n {\n imageUrl && <img className=\"promotion-image\" src={`${imageUrl}`} alt=\"\"/>\n }\n <div className=\"main\">\n <div className=\"title-area\">\n <div className=\"title text\">{title}</div>\n <div className=\"subtitle text\">{subTitle}</div>\n <div className=\"button button-primary truncate\" onClick={() => goTo(url)}>{buttonText}</div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default PromotionItem\n","import * as React from \"react\";\n\nexport const LEFT = \"Left\";\nexport const RIGHT = \"Right\";\nexport const UP = \"Up\";\nexport const DOWN = \"Down\";\nexport type HandledEvents = React.MouseEvent | TouchEvent | MouseEvent;\nexport type Vector2 = [number, number];\nexport type SwipeDirections =\n | typeof LEFT\n | typeof RIGHT\n | typeof UP\n | typeof DOWN;\nexport interface SwipeEventData {\n /**\n * Absolute displacement of swipe in x. Math.abs(deltaX);\n */\n absX: number;\n /**\n * Absolute displacement of swipe in y. Math.abs(deltaY);\n */\n absY: number;\n /**\n * Displacement of swipe in x. (current.x - initial.x)\n */\n deltaX: number;\n /**\n * Displacement of swipe in y. (current.y - initial.y)\n */\n deltaY: number;\n /**\n * Direction of swipe - Left | Right | Up | Down\n */\n dir: SwipeDirections;\n /**\n * Source event.\n */\n event: HandledEvents;\n /**\n * True for the first event of a tracked swipe.\n */\n first: boolean;\n /**\n * Location where swipe started - [x, y].\n */\n initial: Vector2;\n /**\n * \"Absolute velocity\" (speed) - √(absX^2 + absY^2) / time\n */\n velocity: number;\n /**\n * Velocity per axis - [ deltaX/time, deltaY/time ]\n */\n vxvy: Vector2;\n}\n\nexport type SwipeCallback = (eventData: SwipeEventData) => void;\nexport type TapCallback = ({ event }: { event: HandledEvents }) => void;\n\nexport type SwipeableDirectionCallbacks = {\n /**\n * Called after a DOWN swipe\n */\n onSwipedDown: SwipeCallback;\n /**\n * Called after a LEFT swipe\n */\n onSwipedLeft: SwipeCallback;\n /**\n * Called after a RIGHT swipe\n */\n onSwipedRight: SwipeCallback;\n /**\n * Called after a UP swipe\n */\n onSwipedUp: SwipeCallback;\n};\n\nexport type SwipeableCallbacks = SwipeableDirectionCallbacks & {\n /**\n * Called at start of a tracked swipe.\n */\n onSwipeStart: SwipeCallback;\n /**\n * Called after any swipe.\n */\n onSwiped: SwipeCallback;\n /**\n * Called for each move event during a tracked swipe.\n */\n onSwiping: SwipeCallback;\n /**\n * Called after a tap. A touch under the min distance, `delta`.\n */\n onTap: TapCallback;\n /**\n * Called for `touchstart` and `mousedown`.\n */\n onTouchStartOrOnMouseDown: TapCallback;\n /**\n * Called for `touchend` and `mouseup`.\n */\n onTouchEndOrOnMouseUp: TapCallback;\n};\n\n// Configuration Options\nexport type ConfigurationOptionDelta =\n | number\n | { [key in Lowercase<SwipeDirections>]?: number };\n\nexport interface ConfigurationOptions {\n /**\n * Min distance(px) before a swipe starts. **Default**: `10`\n */\n delta: ConfigurationOptionDelta;\n /**\n * Prevents scroll during swipe in most cases. **Default**: `false`\n */\n preventScrollOnSwipe: boolean;\n /**\n * Set a rotation angle. **Default**: `0`\n */\n rotationAngle: number;\n /**\n * Track mouse input. **Default**: `false`\n */\n trackMouse: boolean;\n /**\n * Track touch input. **Default**: `true`\n */\n trackTouch: boolean;\n /**\n * Allowable duration of a swipe (ms). **Default**: `Infinity`\n */\n swipeDuration: number;\n /**\n * Options for touch event listeners\n */\n touchEventOptions: { passive: boolean };\n}\n\nexport type SwipeableProps = Partial<SwipeableCallbacks & ConfigurationOptions>;\n\nexport type SwipeablePropsWithDefaultOptions = Partial<SwipeableCallbacks> &\n ConfigurationOptions;\n\nexport interface SwipeableHandlers {\n ref(element: HTMLElement | null): void;\n onMouseDown?(event: React.MouseEvent): void;\n}\n\nexport type SwipeableState = {\n cleanUpTouch?: () => void;\n el?: HTMLElement;\n eventData?: SwipeEventData;\n first: boolean;\n initial: Vector2;\n start: number;\n swiping: boolean;\n xy: Vector2;\n};\n\nexport type StateSetter = (\n state: SwipeableState,\n props: SwipeablePropsWithDefaultOptions\n) => SwipeableState;\nexport type Setter = (stateSetter: StateSetter) => void;\nexport type AttachTouch = (\n el: HTMLElement,\n props: SwipeablePropsWithDefaultOptions\n) => () => void;\n","/* global document */\nimport * as React from \"react\";\nimport {\n AttachTouch,\n SwipeDirections,\n DOWN,\n SwipeEventData,\n HandledEvents,\n LEFT,\n RIGHT,\n Setter,\n ConfigurationOptions,\n SwipeableDirectionCallbacks,\n SwipeableHandlers,\n SwipeableProps,\n SwipeablePropsWithDefaultOptions,\n SwipeableState,\n SwipeCallback,\n TapCallback,\n UP,\n Vector2,\n} from \"./types\";\n\nexport {\n LEFT,\n RIGHT,\n UP,\n DOWN,\n SwipeDirections,\n SwipeEventData,\n SwipeableDirectionCallbacks,\n SwipeCallback,\n TapCallback,\n SwipeableHandlers,\n SwipeableProps,\n Vector2,\n};\n\nconst defaultProps: ConfigurationOptions = {\n delta: 10,\n preventScrollOnSwipe: false,\n rotationAngle: 0,\n trackMouse: false,\n trackTouch: true,\n swipeDuration: Infinity,\n touchEventOptions: { passive: true },\n};\nconst initialState: SwipeableState = {\n first: true,\n initial: [0, 0],\n start: 0,\n swiping: false,\n xy: [0, 0],\n};\nconst mouseMove = \"mousemove\";\nconst mouseUp = \"mouseup\";\nconst touchEnd = \"touchend\";\nconst touchMove = \"touchmove\";\nconst touchStart = \"touchstart\";\n\nfunction getDirection(\n absX: number,\n absY: number,\n deltaX: number,\n deltaY: number\n): SwipeDirections {\n if (absX > absY) {\n if (deltaX > 0) {\n return RIGHT;\n }\n return LEFT;\n } else if (deltaY > 0) {\n return DOWN;\n }\n return UP;\n}\n\nfunction rotateXYByAngle(pos: Vector2, angle: number): Vector2 {\n if (angle === 0) return pos;\n const angleInRadians = (Math.PI / 180) * angle;\n const x =\n pos[0] * Math.cos(angleInRadians) + pos[1] * Math.sin(angleInRadians);\n const y =\n pos[1] * Math.cos(angleInRadians) - pos[0] * Math.sin(angleInRadians);\n return [x, y];\n}\n\nfunction getHandlers(\n set: Setter,\n handlerProps: { trackMouse: boolean | undefined }\n): [\n {\n ref: (element: HTMLElement | null) => void;\n onMouseDown?: (event: React.MouseEvent) => void;\n },\n AttachTouch\n] {\n const onStart = (event: HandledEvents) => {\n const isTouch = \"touches\" in event;\n // if more than a single touch don't track, for now...\n if (isTouch && event.touches.length > 1) return;\n\n set((state, props) => {\n // setup mouse listeners on document to track swipe since swipe can leave container\n if (props.trackMouse && !isTouch) {\n document.addEventListener(mouseMove, onMove);\n document.addEventListener(mouseUp, onUp);\n }\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const xy = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n\n props.onTouchStartOrOnMouseDown &&\n props.onTouchStartOrOnMouseDown({ event });\n\n return {\n ...state,\n ...initialState,\n initial: xy.slice() as Vector2,\n xy,\n start: event.timeStamp || 0,\n };\n });\n };\n\n const onMove = (event: HandledEvents) => {\n set((state, props) => {\n const isTouch = \"touches\" in event;\n // Discount a swipe if additional touches are present after\n // a swipe has started.\n if (isTouch && event.touches.length > 1) {\n return state;\n }\n\n // if swipe has exceeded duration stop tracking\n if (event.timeStamp - state.start > props.swipeDuration) {\n return state.swiping ? { ...state, swiping: false } : state;\n }\n\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const [x, y] = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n const deltaX = x - state.xy[0];\n const deltaY = y - state.xy[1];\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n const time = (event.timeStamp || 0) - state.start;\n const velocity = Math.sqrt(absX * absX + absY * absY) / (time || 1);\n const vxvy: Vector2 = [deltaX / (time || 1), deltaY / (time || 1)];\n\n const dir = getDirection(absX, absY, deltaX, deltaY);\n\n // if swipe is under delta and we have not started to track a swipe: skip update\n const delta =\n typeof props.delta === \"number\"\n ? props.delta\n : props.delta[dir.toLowerCase() as Lowercase<SwipeDirections>] ||\n defaultProps.delta;\n if (absX < delta && absY < delta && !state.swiping) return state;\n\n const eventData = {\n absX,\n absY,\n deltaX,\n deltaY,\n dir,\n event,\n first: state.first,\n initial: state.initial,\n velocity,\n vxvy,\n };\n\n // call onSwipeStart if present and is first swipe event\n eventData.first && props.onSwipeStart && props.onSwipeStart(eventData);\n\n // call onSwiping if present\n props.onSwiping && props.onSwiping(eventData);\n\n // track if a swipe is cancelable (handler for swiping or swiped(dir) exists)\n // so we can call preventDefault if needed\n let cancelablePageSwipe = false;\n if (\n props.onSwiping ||\n props.onSwiped ||\n props[`onSwiped${dir}` as keyof SwipeableDirectionCallbacks]\n ) {\n cancelablePageSwipe = true;\n }\n\n if (\n cancelablePageSwipe &&\n props.preventScrollOnSwipe &&\n props.trackTouch &&\n event.cancelable\n ) {\n event.preventDefault();\n }\n\n return {\n ...state,\n // first is now always false\n first: false,\n eventData,\n swiping: true,\n };\n });\n };\n\n const onEnd = (event: HandledEvents) => {\n set((state, props) => {\n let eventData: SwipeEventData | undefined;\n if (state.swiping && state.eventData) {\n // if swipe is less than duration fire swiped callbacks\n if (event.timeStamp - state.start < props.swipeDuration) {\n eventData = { ...state.eventData, event };\n props.onSwiped && props.onSwiped(eventData);\n\n const onSwipedDir =\n props[\n `onSwiped${eventData.dir}` as keyof SwipeableDirectionCallbacks\n ];\n onSwipedDir && onSwipedDir(eventData);\n }\n } else {\n props.onTap && props.onTap({ event });\n }\n\n props.onTouchEndOrOnMouseUp && props.onTouchEndOrOnMouseUp({ event });\n\n return { ...state, ...initialState, eventData };\n });\n };\n\n const cleanUpMouse = () => {\n // safe to just call removeEventListener\n document.removeEventListener(mouseMove, onMove);\n document.removeEventListener(mouseUp, onUp);\n };\n\n const onUp = (e: HandledEvents) => {\n cleanUpMouse();\n onEnd(e);\n };\n\n /**\n * The value of passive on touchMove depends on `preventScrollOnSwipe`:\n * - true => { passive: false }\n * - false => { passive: true } // Default\n *\n * NOTE: When preventScrollOnSwipe is true, we attempt to call preventDefault to prevent scroll.\n *\n * props.touchEventOptions can also be set for all touch event listeners,\n * but for `touchmove` specifically when `preventScrollOnSwipe` it will\n * supersede and force passive to false.\n *\n */\n const attachTouch: AttachTouch = (el, props) => {\n let cleanup = () => {};\n if (el && el.addEventListener) {\n const baseOptions = {\n ...defaultProps.touchEventOptions,\n ...props.touchEventOptions,\n };\n // attach touch event listeners and handlers\n const tls: [\n typeof touchStart | typeof touchMove | typeof touchEnd,\n (e: HandledEvents) => void,\n { passive: boolean }\n ][] = [\n [touchStart, onStart, baseOptions],\n // preventScrollOnSwipe option supersedes touchEventOptions.passive\n [\n touchMove,\n onMove,\n {\n ...baseOptions,\n ...(props.preventScrollOnSwipe ? { passive: false } : {}),\n },\n ],\n [touchEnd, onEnd, baseOptions],\n ];\n tls.forEach(([e, h, o]) => el.addEventListener(e, h, o));\n // return properly scoped cleanup method for removing listeners, options not required\n cleanup = () => tls.forEach(([e, h]) => el.removeEventListener(e, h));\n }\n return cleanup;\n };\n\n const onRef = (el: HTMLElement | null) => {\n // \"inline\" ref functions are called twice on render, once with null then again with DOM element\n // ignore null here\n if (el === null) return;\n set((state, props) => {\n // if the same DOM el as previous just return state\n if (state.el === el) return state;\n\n const addState: { cleanUpTouch?: () => void } = {};\n // if new DOM el clean up old DOM and reset cleanUpTouch\n if (state.el && state.el !== el && state.cleanUpTouch) {\n state.cleanUpTouch();\n addState.cleanUpTouch = void 0;\n }\n // only attach if we want to track touch\n if (props.trackTouch && el) {\n addState.cleanUpTouch = attachTouch(el, props);\n }\n\n // store event attached DOM el for comparison, clean up, and re-attachment\n return { ...state, el, ...addState };\n });\n };\n\n // set ref callback to attach touch event listeners\n const output: { ref: typeof onRef; onMouseDown?: typeof onStart } = {\n ref: onRef,\n };\n\n // if track mouse attach mouse down listener\n if (handlerProps.trackMouse) {\n output.onMouseDown = onStart;\n }\n\n return [output, attachTouch];\n}\n\nfunction updateTransientState(\n state: SwipeableState,\n props: SwipeablePropsWithDefaultOptions,\n previousProps: SwipeablePropsWithDefaultOptions,\n attachTouch: AttachTouch\n) {\n // if trackTouch is off or there is no el, then remove handlers if necessary and exit\n if (!props.trackTouch || !state.el) {\n if (state.cleanUpTouch) {\n state.cleanUpTouch();\n }\n\n return {\n ...state,\n cleanUpTouch: undefined,\n };\n }\n\n // trackTouch is on, so if there are no handlers attached, attach them and exit\n if (!state.cleanUpTouch) {\n return {\n ...state,\n cleanUpTouch: attachTouch(state.el, props),\n };\n }\n\n // trackTouch is on and handlers are already attached, so if preventScrollOnSwipe changes value,\n // remove and reattach handlers (this is required to update the passive option when attaching\n // the handlers)\n if (\n props.preventScrollOnSwipe !== previousProps.preventScrollOnSwipe ||\n props.touchEventOptions.passive !== previousProps.touchEventOptions.passive\n ) {\n state.cleanUpTouch();\n\n return {\n ...state,\n cleanUpTouch: attachTouch(state.el, props),\n };\n }\n\n return state;\n}\n\nexport function useSwipeable(options: SwipeableProps): SwipeableHandlers {\n const { trackMouse } = options;\n const transientState = React.useRef({ ...initialState });\n const transientProps = React.useRef<SwipeablePropsWithDefaultOptions>({\n ...defaultProps,\n });\n\n // track previous rendered props\n const previousProps = React.useRef<SwipeablePropsWithDefaultOptions>({\n ...transientProps.current,\n });\n previousProps.current = { ...transientProps.current };\n\n // update current render props & defaults\n transientProps.current = {\n ...defaultProps,\n ...options,\n };\n // Force defaults for config properties\n let defaultKey: keyof ConfigurationOptions;\n for (defaultKey in defaultProps) {\n if (transientProps.current[defaultKey] === void 0) {\n (transientProps.current[defaultKey] as any) = defaultProps[defaultKey];\n }\n }\n\n const [handlers, attachTouch] = React.useMemo(\n () =>\n getHandlers(\n (stateSetter) =>\n (transientState.current = stateSetter(\n transientState.current,\n transientProps.current\n )),\n { trackMouse }\n ),\n [trackMouse]\n );\n\n transientState.current = updateTransientState(\n transientState.current,\n transientProps.current,\n previousProps.current,\n attachTouch\n );\n\n return handlers;\n}\n","import React from 'react'\nimport { useSwipeable } from 'react-swipeable'\n\nexport const Swipeable = ({children, ...props}) => {\n const handlers = useSwipeable(props)\n return (<div {...handlers}>{children}</div>)\n}\n","/**\n * @function Slider - a component which displays items in a circular way\n *\n * @param {boolean} multi - defined: multiple items in a page, not-defined: single item\n * @param {Component} children - The children components\n */\n\nimport React, { Component } from \"react\";\nimport { Swipeable } from \"$core-components/Swipeable\";\nimport { throttle } from \"throttle-debounce\";\nimport Icon from \"./Icon\";\nimport \"./Slider.scss\";\n\n/**\n * Direction mapping for the react-swipeable library\n */\nconst RIGHT = \"-1\";\nconst LEFT = \"+1\";\n\n/**\n * Transition speed\n */\nconst TRANSITION_SPEED = 500;\n\n/**\n * arrows consts\n */\nconst ARROW_MARGIN = 20;\nconst ARROW_WIDTH = 60;\nconst ARROW_HEIGHT = 60;\n\nclass Slider extends Component {\n constructor(props) {\n super(props);\n\n this.slider = React.createRef();\n\n this.state = {\n children: [], // Holds a copy of each item\n childrenLength: 0, // Number of items\n currentPosition: 0, // Current \"left\" value of the slider\n currentPage: 0, // Current page\n displayedItems: 0, // Number of items in a page\n lastClonedItemRight: null, // Index (children) of the last item on the right section\n lastClonedItemLeft: null, // Index (children) of the last item on the left section\n lastItemWidth: null, // Used to check if there was a change in breakpoint\n };\n\n this.arrowsActive = true;\n }\n\n componentDidMount() {\n // Some initializations code\n this.setInitState();\n\n // On screen resizing\n window.addEventListener(\"resize\", () => {\n this.onResize();\n });\n\n throttle(250, this.onResize);\n throttle(250, this.slide);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.onResize);\n }\n\n onResize() {\n const { multi } = this.props;\n\n if (!this.slider || !this.state || !multi || !this.arrowsActive) {\n return;\n }\n\n const children = this.slider.childNodes;\n const displayedItems = Math.round(\n this.slider.clientWidth / children[0].clientWidth\n );\n\n const lastItemWidth = this.state.lastItemWidth;\n let addPosition = 0;\n\n if (lastItemWidth !== children[0].clientWidth) {\n if (lastItemWidth > children[0].clientWidth) {\n addPosition -= children[0].clientWidth;\n } else {\n addPosition += children[0].clientWidth;\n }\n }\n\n const currentPosition = -this.slider.clientWidth + addPosition;\n this.slider.style.left = `${currentPosition}px`;\n\n this.setState({\n currentPosition,\n displayedItems,\n lastItemWidth,\n });\n }\n\n setButtons() {\n if (this.slider && this.slider.parentNode) {\n const sliderClientWidth = this.slider.clientWidth;\n\n const leftBtn = this.slider.parentNode.querySelector(`.left-btn`);\n const rightBtn = this.slider.parentNode.querySelector(`.right-btn`);\n\n if (leftBtn && rightBtn) {\n if (this.arrowsActive) {\n leftBtn.style.visibility = \"visible\";\n rightBtn.style.visibility = \"visible\";\n rightBtn.style.left = `${\n sliderClientWidth - ARROW_WIDTH - ARROW_MARGIN\n }px`;\n } else {\n leftBtn.style.visibility = \"hidden\";\n rightBtn.style.visibility = \"hidden\";\n }\n }\n }\n }\n\n setInitState() {\n if (!(this.slider && this.slider.childNodes)) {\n return;\n }\n\n const children = this.slider.childNodes;\n const itemsInRow = this.getItemsInRow() || 1;\n const clonedNodes = [];\n const childrenLength = this.state.childrenLength || children.length;\n\n this.setState({\n childrenLength,\n });\n\n // On init (componentDidMount) - Clone all children\n if (this.state.children.length === 0) {\n for (let i = 0; i < childrenLength; i++) {\n clonedNodes.push(children[i].cloneNode(true));\n }\n this.setState({\n children: clonedNodes,\n });\n }\n // On Resize - clear slider, fill with children, set left to position zero\n else {\n this.slider.innerHTML = \"\";\n\n for (let i = 0; i < this.state.children.length; i++) {\n this.slider.appendChild(this.state.children[i]);\n }\n\n this.slider.style.left = \"0px\";\n }\n\n if (childrenLength <= itemsInRow) {\n this.slider.style.justifyContent = \"center\";\n this.arrowsActive = false;\n return;\n }\n\n this.arrowsActive = true;\n\n // Calculate number of items in a row\n const displayedItems = Math.round(\n this.slider.clientWidth / children[0].clientWidth\n );\n\n this.setState({\n displayedItems,\n lastItemWidth: children[0].clientWidth,\n });\n\n this.createInitRightSection(displayedItems, clonedNodes);\n this.createInitLeftSection(displayedItems, clonedNodes);\n this.setSliderPosition(true, false, displayedItems);\n this.setDotsPosition();\n this.initDots(childrenLength);\n }\n\n createInitRightSection(displayedItems, children) {\n const clonedNodesToAppend = [];\n\n // Clone all first items that need to filled the gap of items per row\n const itemsTofill = displayedItems - (children.length % displayedItems);\n\n for (let i = 0; i < itemsTofill; i++) {\n if (!children[i]) {\n continue;\n }\n\n clonedNodesToAppend.push(children[i].cloneNode(true));\n\n if (i === itemsTofill - 1) {\n this.setState({\n lastClonedItemRight: i,\n });\n }\n }\n\n // Append the clonedNodesToAppend after the last item\n for (let i = 0; i < clonedNodesToAppend.length; i++) {\n this.slider.append(clonedNodesToAppend[i]);\n }\n }\n\n createInitLeftSection(displayedItems, children) {\n const clonedNodesToPrepend = [];\n\n // Clone all last items per row child nodes\n let j = displayedItems;\n for (let i = children.length - 1; i >= 0; i--) {\n clonedNodesToPrepend.push(children[i].cloneNode(true));\n j--;\n if (j === 0) {\n this.setState({\n lastClonedItemLeft: i,\n });\n break;\n }\n }\n\n // Prepend the clonedNodesToPrepend before the first item\n for (let i = 0; i < clonedNodesToPrepend.length; i++) {\n const firstItem = this.slider.firstChild;\n this.slider.insertBefore(clonedNodesToPrepend[i], firstItem);\n }\n }\n\n reorderItems(isForward) {\n let lastClonedItem = isForward\n ? this.state.lastClonedItemRight\n : this.state.lastClonedItemLeft;\n\n if (lastClonedItem === null) {\n return;\n }\n\n if (isForward) {\n const clonedNodesToAppend = [];\n let j = lastClonedItem + 1;\n\n // Clone all items of the next row\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === this.state.children.length) {\n j = 0;\n }\n clonedNodesToAppend.push(this.state.children[j].cloneNode(true));\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemRight: j,\n });\n lastClonedItem = j;\n }\n j++;\n }\n\n // Append the clonedNodesToAppend after the last item\n for (let i = 0; i < clonedNodesToAppend.length; i++) {\n this.slider.append(clonedNodesToAppend[i]);\n }\n\n // Remove trailing row\n for (let i = 0; i < this.state.displayedItems; i++) {\n this.slider.childNodes[0].remove();\n }\n\n // Find the last left cloned item\n j = lastClonedItem - 1;\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === -1) {\n j = this.state.children.length - 1;\n }\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemLeft: j,\n });\n }\n j--;\n }\n\n this.setSliderPosition(false, false, this.state.displayedItems);\n } else {\n const children = this.slider.childNodes;\n const clonedNodesToPrepend = [];\n let j = lastClonedItem - 1;\n\n // Clone all items of the next row\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === -1) {\n j = this.state.children.length - 1;\n }\n\n clonedNodesToPrepend.push(this.state.children[j].cloneNode(true));\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemLeft: j,\n });\n lastClonedItem = j;\n }\n j--;\n }\n\n // Append the clonedNodesToPrepend after the last item\n for (let i = 0; i < clonedNodesToPrepend.length; i++) {\n const firstItem = children[0];\n this.slider.insertBefore(clonedNodesToPrepend[i], firstItem);\n }\n\n // Remove last row\n for (let i = 0; i < this.state.displayedItems; i++) {\n this.slider.childNodes[this.slider.childNodes.length - 1].remove();\n }\n\n // Find the last right cloned item\n j = lastClonedItem + 1;\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === this.state.children.length) {\n j = 0;\n }\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemRight: j,\n });\n }\n j++;\n }\n\n this.setSliderPosition(true, false, this.state.displayedItems);\n }\n }\n\n setSliderPosition(isForward, isTransition, displayedItems) {\n const itemWidth = this.slider.childNodes[0].clientWidth;\n const sliderWidth = displayedItems * itemWidth;\n let currentPosition = this.state.currentPosition;\n\n if (isForward) {\n currentPosition -= sliderWidth;\n } else {\n currentPosition += sliderWidth;\n }\n\n if (isTransition) {\n this.slider.style.transition = `left ${TRANSITION_SPEED}ms`;\n } else {\n this.slider.style.transition = `none`;\n }\n\n const left = `${currentPosition}px`;\n this.slider.style.left = left;\n\n this.setState({\n currentPosition,\n });\n }\n\n slide(isForward, isReorder) {\n if (!this.arrowsActive) {\n return;\n }\n\n this.setSliderPosition(isForward, true, this.state.displayedItems);\n\n setTimeout(() => {\n if (isReorder) {\n this.reorderItems(isForward);\n }\n }, TRANSITION_SPEED);\n\n this.setActiveDot(isForward);\n }\n\n setDotsPosition() {\n const dots = this.slider.parentNode.querySelector(`div.dots`);\n if (!dots) {\n return;\n }\n dots.style.top = \"-100px\";\n }\n\n initDots(childrenLength) {\n const dots = this.slider.parentNode.querySelector(`div.dots`);\n if (!dots) {\n return;\n }\n\n dots.innerHTML = \"\";\n\n for (let i = 0; i < childrenLength; i++) {\n const dot = document.createElement(\"div\");\n dot.className = \"dot\";\n dots.appendChild(dot);\n }\n\n dots.childNodes[0].setAttribute(\"class\", \"dot active\");\n }\n\n setActiveDot(isForward) {\n const dots = this.slider.parentNode.querySelector(`div.dots`);\n if (!dots) {\n return;\n }\n\n let currentPage = this.state.currentPage;\n const childrenLength = this.state.childrenLength;\n\n if (isForward) {\n currentPage += 1;\n if (currentPage === childrenLength) {\n currentPage = 0;\n }\n } else {\n currentPage -= 1;\n if (currentPage === -1) {\n currentPage = childrenLength - 1;\n }\n }\n\n this.setState({\n currentPage,\n });\n\n for (let i = 0; i < dots.childNodes.length; i++) {\n dots.childNodes[i].setAttribute(\"class\", \"dot\");\n }\n dots.childNodes[currentPage].setAttribute(\"class\", \"dot active\");\n }\n\n getCssContent(key) {\n let content = window\n .getComputedStyle(this.slider, \":after\")\n .getPropertyValue(\"content\");\n content = content\n .replace(new RegExp('\"', \"g\"), \"\")\n .replace(new RegExp(\"`\", \"g\"), '\"');\n\n if (content === \"none\") {\n return null;\n }\n\n try {\n content = JSON.parse(content);\n return content[key];\n } catch (e) {\n console.error(e);\n }\n }\n\n getItemsInRow() {\n return this.getCssContent(\"items\");\n }\n\n onSwiped(direction) {\n const isForward = direction !== RIGHT;\n this.slide(isForward, true);\n }\n\n render() {\n const { children, multi } = this.props;\n\n if (!children) {\n return null;\n }\n\n this.setButtons();\n\n return (\n <Swipeable\n trackMouse\n preventDefaultTouchmoveEvent\n onSwipedLeft={() => children.length > 1 && this.onSwiped(LEFT)}\n onSwipedRight={() => children.length > 1 && this.onSwiped(RIGHT)}\n >\n <div className={`slider-wrapper${multi ? \"-multi\" : \"-single\"}`}>\n <div\n className=\"slider\"\n ref={(ref) => {\n this.slider = ref;\n }}\n >\n {children}\n </div>\n <div\n className=\"arrows left-btn\"\n onClick={this.slide.bind(this, false, true)}\n >\n <Icon\n name=\"arrow.svg\"\n width={`${ARROW_WIDTH}px`}\n height={`${ARROW_HEIGHT}px`}\n className=\"left-arrow-icon\"\n />\n </div>\n <div\n className=\"arrows right-btn\"\n onClick={this.slide.bind(this, true, true)}\n >\n <Icon\n name=\"arrow.svg\"\n width={`${ARROW_WIDTH}px`}\n height={`${ARROW_HEIGHT}px`}\n className=\"right-arrow-icon\"\n />\n </div>\n {!multi && <div className=\"dots\" />}\n </div>\n </Swipeable>\n );\n }\n}\n\nexport default Slider;\n","/**\n * This is the Homepage\n * URL : http://<store-domain>/{language-code}/home/\n *\n * @param {object} state - the state of the store\n */\nimport React, { Component } from 'react'\nimport { throttle } from 'throttle-debounce'\n\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\n\nimport Layout from '../components/layout'\nimport CategoryItem from '../components/category/CategoryItem'\nimport ProductItem from '../components/products/ProductItem'\nimport PromotionItem from '../components/products/PromotionItem'\nimport Slider from '$core-components/Slider'\nimport Gallery from '$core-components/Gallery'\n\nimport { getIsNGProduct } from '../services/utils'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\nimport { getVariableValue } from '$ustoreinternal/services/cssVariables'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport './Home.scss'\nimport theme from '$styles/_theme.scss'\nimport Slot from '../components/widgets/Slot';\n\nclass Home extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n isMobile: false,\n promotionItemButtonUrl: ''\n }\n }\n\n componentDidMount () {\n window.addEventListener('resize', this.onResize.bind(this))\n throttle(250, this.onResize) // Call this function once in 250ms only\n\n this.onResize()\n }\n\n componentWillUnmount () {\n window.removeEventListener('resize', this.onResize)\n\n this.clearCustomState()\n }\n\n clearCustomState () {\n UStoreProvider.state.customState.delete('homeFeaturedProducts')\n UStoreProvider.state.customState.delete('homeFeaturedCategory')\n UStoreProvider.state.customState.delete('currentProduct')\n UStoreProvider.state.customState.delete('currentOrderItem')\n UStoreProvider.state.customState.delete('currentOrderItemId')\n UStoreProvider.state.customState.delete('currentOrderItemPriceModel')\n UStoreProvider.state.customState.delete('lastOrder')\n UStoreProvider.state.customState.delete('currentProductThumbnails')\n }\n\n onResize () {\n this.setState({ isMobile: document.body.clientWidth < parseInt(theme.md.replace('px', '')) })\n }\n\n static getDerivedStateFromProps (props, state) {\n if (!(props.state && props.customState)) {\n return null\n }\n\n const { categories } = props.customState\n // NOTE: this is not supported in SSR\n if (categories && categories.length && !state.promotionItemButtonUrl.length) {\n const { FriendlyID, Name } = categories[0]\n const defaultURL = urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })\n return { promotionItemButtonUrl: getVariableValue('--homepage-carousel-slide-1-button-url', defaultURL, false, true) }\n }\n return null\n }\n\n render () {\n if (!this.props.state) {\n return null\n }\n\n const { customState: { categories, homeFeaturedProducts, homeFeaturedCategory } } = this.props\n\n const promotionItemImageUrl = getVariableValue('--homepage-carousel-slide-1-image', require(`$assets/images/banner_image.png`), true)\n const promotionItemTitle = getVariableValue('--homepage-carousel-slide-1-main-text', t('PromotionItem.Title'))\n const promotionItemSubtitle = getVariableValue('--homepage-carousel-slide-1-sub-text', t('PromotionItem.Subtitle'))\n const promotionItemButtonText = getVariableValue('--homepage-carousel-slide-1-button-text', t('PromotionItem.Button_Text'))\n\n return (\n <Layout {...this.props} className=\"home\">\n <Slot name=\"homepage_top\" />\n <div className=\"promotion-wrapper\">\n <Slider>\n <PromotionItem\n imageUrl={promotionItemImageUrl}\n title={promotionItemTitle}\n subTitle={promotionItemSubtitle}\n buttonText={promotionItemButtonText}\n url={this.state.promotionItemButtonUrl}\n />\n </Slider>\n </div>\n\n <div className=\"middle-section\">\n\n \n\n {/* <div className=\"divider\" /> */}\n\n \n\n <div className = \"Section-Right-Image\">\n\n <div className = \"Left-Side-Text\">\n <div className = \"Section-Header\">WELCOME to the IEEE Publications Reprint Store</div>\n <div className = \"Section-Text\">This site is designed to help visitors order copies of back issues of selected IEEE Journals and Magazines.</div>\n <div className = \"Section-Text\">Please use the Journals and Specialty Publications menus to browse titles available for purchase. Also, use our convenient web form to send us specific requests (see Customer Service / Contact Us section) if you have questions about titles not shown in our current menu listings.</div>\n {/* <div className = \"Section-Button\"><a className = \"maxbutton\" href=\"http://xmpiedev.cierant.com/ustorethemes/IEEEPubsstore/2063/en-US/category/3579/Journals/\">Journals</a>\n \n\n </div> */}\n </div>\n\n <div className = \"Right-Side-Image\">\n <img src=\"http://xmpiedev.cierant.com/ustore/images/IEEE-Img/111jproc01-frontcover-fill-3229540.jpg\" alt=\"react logo\" className=\"Section-Image\"/>\n </div>\n </div>\n\n \n\n {/* <div className = \"Section-Left-Image\">\n <div className = \"Left-Side-Image\">\n <img src=\"http://xmpiedev.cierant.com/ustore/images/IEEE-Img/112jproc01-frontcover-fill-3366789.jpg\" alt=\"react logo\" className=\"Section-Image\"/>\n </div>\n <div className = \"Right-Side-Text\">\n <div className = \"Section-Header\">Complete Journal Issues</div>\n <div className = \"Section-Text\">Journals available for ordering are listed in the Journals menu section. The search box will allow you to browse and search for specific Journal issues.</div>\n <div className = \"Section-Button\"><a className = \"maxbutton\" href=\"http://xmpiedev.cierant.com/ustorethemes/IEEEPubsstore/2063/en-US/category/3579/Journals/\">Journal Issues</a></div>\n </div>\n </div> */}\n\n {/* <div className=\"welcomeContent\">\n <div className=\"welcome-h2\">WELCOME</div>\n <p>Order copies of ACS Journals. You can access volumes that have been released since January of 2010, as well as individual article reprints from these journals. </p>\n <div className=\"welcome-h3\">Complete Journal Issues </div>\n <p>Journals available for ordering are listed in the Journals menu section. The search box will allow you to browse and search for specific Journal issues. </p>\n <div className=\"welcome-h3\">Individual Articles</div>\n <p>Order individual articles from ACS Journals. Individual article reprints are now available for commercial purchase in the Articles menu section. The search box will allow you to input a specific DOI for purchase. In addition to pricing for commercial use, ACS Authors may take advantage of special pricing made available at the time of issue publication. If you are unable to locate your invitation email, please send an email to acs_pubs_assist@acs.org.</p>\n </div> */}\n\n <div className=\"divider\" />\n\n \n\n </div>\n\n <Slot name=\"homepage_bottom\" />\n\n </Layout>\n )\n }\n}\n\nHome.getInitialProps = async function (ctx) {\n const maxInPage = 200\n const { Count } = await UStoreProvider.api.categories.getTopCategories(1, maxInPage)\n if (Count === 0) {\n return { homeFeaturedProducts: null, homeFeaturedCategory: null }\n }\n\n const page = Math.ceil(Count / maxInPage)\n const { Categories } = await UStoreProvider.api.categories.getTopCategories(page, maxInPage)\n\n if (Categories.length === 0) {\n return { homeFeaturedProducts: null, homeFeaturedCategory: null }\n }\n\n const homeFeaturedCategory = Categories[Categories.length - 1]\n const { Products: homeFeaturedProducts } = await UStoreProvider.api.products.getProducts(homeFeaturedCategory.ID, 1)\n\n return { homeFeaturedProducts, homeFeaturedCategory }\n}\n\nexport default Home\n","/**\n * @function Gallery - a component which displays an array of items (childrens)\n *\n * @param {String} [title] - The main title at the top of the component\n * @param {Function} onScroll - The callback function to call for loading more items on scroll\n * @param (Boolean) [hasMoreItems] - True if the gallery has more items o show on scroll, false otherwise\n * @param {Component} children - The children components\n */\n\nimport React, { Component } from 'react'\nimport InfiniteScroll from 'react-infinite-scroller'\nimport './Gallery.scss'\n\nclass ScrollableGallery extends Component {\n render () {\n const { title, onScroll, hasMoreItems, children } = this.props\n\n if (!onScroll || !children) {\n return null\n }\n\n return (\n <div className=\"gallery\">\n <div className=\"top\">\n {\n title && <div className='main-title scrollable-title'>{title}</div>\n }\n </div>\n <InfiniteScroll\n className=\"main\"\n loadMore={onScroll}\n hasMore={hasMoreItems}\n initialLoad={false}>\n {children}\n </InfiniteScroll>\n </div>\n )\n }\n}\n\nexport default ScrollableGallery\n","import React, { useEffect, useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { UStoreProvider } from \"@ustore/core\";\nimport { throttle } from \"throttle-debounce\";\nimport Layout from \"../components/layout\";\nimport Slider from \"$core-components/Slider\";\nimport CategoryItem from \"../components/category/CategoryItem\";\nimport ProductItem from \"../components/products/ProductItem\";\nimport ScrollableGallery from \"$core-components/ScrollableGallery\";\n\nimport urlGenerator from \"$ustoreinternal/services/urlGenerator\";\nimport { t } from \"$themelocalization\";\nimport { getIsNGProduct } from \"../services/utils\";\nimport { decodeStringForURL } from \"$ustoreinternal/services/utils\";\n// Custom Added\nimport { Link } from \"react-router-dom\";\n\nimport theme from \"$styles/_theme.scss\";\nimport \"./Category.scss\";\nimport Slot from \"../components/widgets/Slot\";\n\nconst PRODUCTS_PAGE_SIZE = 8;\nconst SUB_CATEGORIES_PAGE_SIZE = 200;\n\nconst clearCustomState = () => {\n UStoreProvider.state.customState.delete(\"categoryFeaturedProducts\");\n UStoreProvider.state.customState.delete(\"categoryProductsCount\");\n UStoreProvider.state.customState.delete(\"currentCategory\");\n UStoreProvider.state.customState.delete(\"subCategories\");\n UStoreProvider.state.customState.delete(\"currentProduct\");\n UStoreProvider.state.customState.delete(\"currentOrderItem\");\n UStoreProvider.state.customState.delete(\"currentOrderItemId\");\n UStoreProvider.state.customState.delete(\"currentOrderItemPriceModel\");\n UStoreProvider.state.customState.delete(\"lastOrder\");\n UStoreProvider.state.customState.delete(\"currentProductThumbnails\");\n};\n\nconst Category = (props) => {\n const { id: categoryFriendlyID } = useParams();\n const [isMobile, setIsMobile] = useState(false);\n const [categoryID, setCategoryID] = useState(null);\n const [currentCategory, setCurrentCategory] = useState(null);\n const [subCategories, setSubCategories] = useState(null);\n const [categoryFeaturedProducts, setCategoryFeaturedProducts] =\n useState(null);\n const [categoryProductsCount, setCategoryProductsCount] = useState(null);\n\n const onResize = throttle(250, () =>\n setIsMobile(\n document.body.clientWidth < parseInt(theme.md.replace(\"px\", \"\"))\n )\n );\n const initialLoad = async () => {\n setSubCategories(null);\n\n if (categoryFriendlyID !== currentCategory?.FriendlyID) {\n clearCustomState();\n const newCategoryID =\n await UStoreProvider.api.categories.getCategoryIDByFriendlyID(\n categoryFriendlyID\n );\n setCategoryID(newCategoryID);\n setCurrentCategory(\n await UStoreProvider.api.categories.getCategory(newCategoryID)\n );\n setSubCategories(\n (\n await UStoreProvider.api.categories.getSubCategories(\n newCategoryID,\n 1,\n SUB_CATEGORIES_PAGE_SIZE\n )\n )?.Categories\n );\n const { Products, Count } = await UStoreProvider.api.products.getProducts(\n newCategoryID,\n 1,\n PRODUCTS_PAGE_SIZE\n );\n setCategoryFeaturedProducts(Products);\n setCategoryProductsCount(Count);\n }\n };\n\n const loadProducts = async () => {\n if (!props.customState) {\n return null;\n }\n const nextPage = categoryFeaturedProducts\n ? Math.ceil(categoryFeaturedProducts.length / PRODUCTS_PAGE_SIZE) + 1\n : 1;\n const { Products: products } =\n await UStoreProvider.api.products.getProducts(\n currentCategory?.ID || categoryID,\n nextPage,\n PRODUCTS_PAGE_SIZE\n );\n const joinedProducts = categoryFeaturedProducts\n ? [...categoryFeaturedProducts, ...products]\n : products;\n setCategoryFeaturedProducts(joinedProducts);\n UStoreProvider.state.customState.set(\n \"categoryFeaturedProducts\",\n joinedProducts\n );\n };\n\n useEffect(() => {\n (async () => {\n window.addEventListener(\"resize\", onResize);\n await initialLoad();\n })();\n return () => {\n window.removeEventListener(\"resize\", onResize);\n clearCustomState();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n (async () => await initialLoad())();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [categoryFriendlyID]);\n\n if (!props.customState) {\n return null;\n }\n const galleryTitle = categoryProductsCount\n ? subCategories && subCategories.length > 0\n ? t(\"Category.Count_featured_products\", { count: categoryProductsCount })\n : t(\"Category.Count_products\", { count: categoryProductsCount })\n : \"\";\n\n const hasMoreItems =\n categoryFeaturedProducts &&\n categoryFeaturedProducts.length < categoryProductsCount;\n\n // Custom Added\n const activeTreeCheck = (item, currentCategory) => {\n if (currentCategory) {\n if (currentCategory.FriendlyID === item.Category.FriendlyID) {\n return true;\n } else {\n if (item.SubCategories && item.SubCategories.length !== 0) {\n let bool = false;\n item.SubCategories.map((itm) => {\n bool = activeTreeCheck(itm, currentCategory) ? true : bool;\n });\n return bool;\n } else {\n return false;\n }\n }\n }\n };\n\n // Custom Added\n const generateTree = (data, currentCategory) => {\n return data.length !== 0 ? (\n data.map((item, i) => {\n const itemInner = item.Category;\n const active = activeTreeCheck(item, currentCategory);\n\n return active ? (\n <span key={i}>\n <span>></span> \n <Link\n key={i}\n to={urlGenerator.get({\n page: \"category\",\n id: itemInner.FriendlyID,\n name: decodeStringForURL(itemInner.Name),\n })}\n >\n <a key={i}>{itemInner.Name}</a>\n </Link>\n {generateTree(item.SubCategories, currentCategory)}\n </span>\n ) : null;\n })\n ) : (\n <></>\n );\n };\n\n return (\n <Layout {...props} className=\"category\">\n <Slot name=\"category_top\" />\n\n {/* custom Added */}\n <div className=\"breadcrumbs\">\n <span>\n <Link to={urlGenerator.get({ page: \"home\" })}>\n <a>Home</a>\n </Link>\n {props.customState.categoriesTree && currentCategory\n ? generateTree(props.customState.categoriesTree, currentCategory)\n : null}\n </span>\n </div>\n\n <div\n className=\"title\"\n dangerouslySetInnerHTML={{\n __html: currentCategory && currentCategory.Name,\n }}\n />\n {subCategories && subCategories.length > 0 && (\n <div>\n <div className=\"categories-wrapper\">\n <Slider key={currentCategory.ID} multi>\n {subCategories.map((model) => {\n return (\n <CategoryItem\n key={model.ID}\n model={model}\n url={urlGenerator.get({\n page: \"category\",\n id: model.FriendlyID,\n name: decodeStringForURL(model.Name),\n })}\n />\n );\n })}\n </Slider>\n </div>\n <div className=\"divider\" />\n </div>\n )}\n {currentCategory &&\n categoryFeaturedProducts &&\n categoryFeaturedProducts.length > 0 && (\n <div>\n <div className=\"featured-products-wrapper\">\n <ScrollableGallery\n title={galleryTitle}\n hasMoreItems={hasMoreItems}\n onScroll={loadProducts}\n >\n {categoryFeaturedProducts.map((model) => {\n const hideProduct =\n isMobile &&\n model.Attributes &&\n model.Attributes.find(\n (attr) =>\n attr.Name === \"UEditEnabled\" && attr.Value === \"true\"\n ) !== undefined;\n\n return (\n !hideProduct && (\n <ProductItem\n key={model.ID}\n model={model}\n detailed\n productNameLines=\"2\"\n descriptionLines=\"4\"\n url={\n getIsNGProduct(model)\n ? urlGenerator.get({\n page: \"products\",\n id: model.FriendlyID,\n name: decodeStringForURL(model.Name),\n })\n : urlGenerator.get({\n page: \"product\",\n id: model.FriendlyID,\n name: decodeStringForURL(model.Name),\n })\n }\n />\n )\n );\n })}\n </ScrollableGallery>\n </div>\n </div>\n )}\n <Slot name=\"category_bottom\" />\n </Layout>\n );\n};\n\nexport default Category;\n","import React, { useEffect } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport Layout from '../components/layout'\nimport { UStoreProvider } from '@ustore/core'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\nimport './Legacy.scss'\n\n//Using https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage\nconst Legacy = (props) => {\n const navigate = useNavigate()\n\n const handleFrameMessage = (e) => {\n const msg = e.data\n if (!msg || !msg.type) {\n return\n }\n\n const asPath = window.location.pathname + window.location.search\n\n // if the message is an info request message, just call the function to get the info and post the reposnse.\n if (msg.type === '@REQUEST_UI_INFO') {\n legacyIframeHandler.onRequestScrollPosition(msg)\n return\n }\n\n if (msg.type === '@NG_REDIRECT' || msg.type === '@CHANGE_NG_ROUTE') {\n legacyIframeHandler.onRedirectRequested(msg, asPath)\n return\n }\n\n if (msg.type === '@SCROLL_PARENT_DISABLE' || msg.type === '@SCROLL_PARENT_ENABLE') {\n legacyIframeHandler.onScrollParentRequested(msg)\n return\n }\n\n const { messageHandled: changeRouteOrDimensionsHandled } = legacyIframeHandler.changeRouteOrDimensions(msg, asPath)\n const messageHandled = changeRouteOrDimensionsHandled || legacyIframeHandler.handleScrolling(msg)\n\n if (!messageHandled && !(['START', 'STATE', 'ACTION', 'PARTIAL_STATE', 'INIT_INSTANCE', '@SCROLL_ON', '@SCROLL_OFF', '@SCROLL_TO', '@CHANGE_ROUTE', '__REACT_CONTEXT_DEVTOOL_GLOBAL_HOOK_EVENT', 'webpackWarnings', 'webpackClose'].includes(msg.type))) { UStoreProvider.state.dispatch(msg) }\n }\n\n useEffect(() => {\n legacyIframeHandler.setNavigate = navigate\n })\n\n useEffect(() => {\n window.addEventListener('resize', legacyIframeHandler.handleResize)\n window.addEventListener('message', handleFrameMessage)\n window.addEventListener('blur', () => legacyIframeHandler.handleClickingIframe())\n\n legacyIframeHandler.adaptContainerToIframe()\n\n return () => {\n window.removeEventListener('resize', legacyIframeHandler.handleResize)\n window.removeEventListener('message', handleFrameMessage)\n window.removeEventListener('blur', () => legacyIframeHandler.handleClickingIframe())\n }\n }, [])\n\n return (\n <Layout {...props}>\n <div className=\"iframe-container\" ref={e => legacyIframeHandler.iframeContainer = e} />\n </Layout>\n )\n}\n\nexport default Legacy\n","import React, {Component} from 'react'\nimport Legacy from './Legacy'\nimport {UStoreProvider} from \"@ustore/core\";\n\nexport default class Product extends Component {\n componentWillUnmount() {\n UStoreProvider.state.customState.delete('currentProduct')\n }\n\n static getInitialProps = async (ctx) => {\n const { query: { id: productFriendlyID } } = ctx\n\n if (!productFriendlyID) return {}\n\n const productID = await UStoreProvider.api.products.getProductIDByFriendlyID(productFriendlyID)\n const currentProduct = await UStoreProvider.api.products.getProductByID(productID, false)\n\n return {\n currentProduct\n }\n }\n\n render() {\n return <Legacy {...this.props}/>\n }\n}\n","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {object} productModel\n * @param {object} orderModel\n */\n\nimport{ Component } from 'react'\nimport BaseQuantity from '../BaseQuantity'\nimport { t } from '$themelocalization'\nimport './KitQuantity.scss'\n\nclass KitQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n componentDidMount () {\n const { productModel: { Configuration: { Quantity } }, orderModel } = this.props\n // run onChange on mount, to show validation errors on default value.\n if ((Quantity.Changeable && Quantity.Options === null)) {\n // text box\n this.onChange({ target: { value: orderModel.Quantity } })\n }\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Configuration: { Quantity: { Minimum, Maximum } } } } = this.props\n\n if (!value || isNaN(value)) {\n return t('KitQuantity.Validation_required')\n }\n\n if (Minimum && Number(value) < Minimum) {\n return t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })\n }\n\n if (Maximum && Number(value) > Maximum) {\n return t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })\n }\n\n return null\n }\n\n onChange (e) {\n const { onQuantityChange } = this.props\n\n const value = e.target.value\n const errorMessage = this.getValidationErrorMessage(value)\n\n this.setState({ errorMessage: errorMessage })\n\n // send new value and error (if any, null if valid) to parent.\n onQuantityChange(value, errorMessage === null)\n }\n\n render () {\n const { productModel: { Configuration: { Quantity }, ID }, orderModel } = this.props\n\n // if no Configuration or if value = 1 and read only => dont show anything\n if (!Quantity || (!Quantity.Changeable && orderModel.Quantity === 1)) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n\n return (<div className='kit-quantity-component'>\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n />\n {this.state.errorMessage && (\n <span className='quantity-error'>{this.state.errorMessage}</span>\n )}\n </div>)\n }\n}\n\nexport default KitQuantity\n","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {number} kitQuantity - the number of Kits (to multiply in case of Component Quantity)\n * @param {object} productModel\n * @param {object} orderModel\n */\n\nimport React, { Component } from 'react'\nimport './KitQuantity.scss'\nimport { Tooltip } from 'reactstrap'\nimport BaseQuantity from '../BaseQuantity'\nimport { t } from '$themelocalization'\n\nclass KitItemQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n componentDidUpdate (prevProps, prevState) {\n if (prevProps.kitQuantity !== this.props.kitQuantity && !isNaN(this.props.kitQuantity)) {\n const { orderModel } = this.props\n this.onChange({ target: { value: orderModel.Quantity } })\n }\n }\n\n componentDidMount () {\n const { orderModel } = this.props\n\n if (!orderModel) {\n return\n }\n\n // run onChange on mount, to show validation errors on default value.\n this.onChange({ target: { value: orderModel.Quantity } })\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Unit, Configuration: { Quantity: { Minimum, Maximum } }, Inventory }, kitQuantity } = this.props\n\n const itemUnitName = Unit.PackType ? Unit.PackType.PluralName : Unit.ItemType ? Unit.ItemType.PluralName : ''\n\n const inventory = Inventory ? Inventory.Quantity : null\n\n if (!value || isNaN(value)) {\n return t('KitQuantity.Validation_required')\n }\n\n if (Minimum && Number(value) < Minimum) {\n return t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })\n }\n\n if (Maximum && Number(value) * kitQuantity > Maximum) {\n return kitQuantity === 1\n ? t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })\n : `${t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })}. \n ${t('KitQuantity.Validation_quantity_multiplier', {\n Quantity: Number(value),\n UnitPluralName: itemUnitName,\n KitQuantity: kitQuantity,\n TotalQuantity: kitQuantity * Number(value)\n })}\n `\n }\n\n if (inventory && Number(value) * kitQuantity > inventory && !Inventory.AllowOutOfStockPurchase) {\n return kitQuantity === 1\n ? t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })\n : `${t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })}\n ${t('KitQuantity.Validation_quantity_multiplier', {\n Quantity: Number(value),\n UnitPluralName: itemUnitName,\n KitQuantity: kitQuantity,\n TotalQuantity: kitQuantity * Number(value)\n })}`\n }\n\n return null // valid\n }\n\n onChange (e) {\n const { onQuantityChange } = this.props\n\n const value = e.target.value\n const errorMessage = this.getValidationErrorMessage(value)\n\n this.setState({ errorMessage: errorMessage })\n\n // send new value and error (if any, null if valid) to parent.\n onQuantityChange(value, errorMessage === null)\n }\n\n render () {\n const { productModel, orderModel } = this.props\n\n if (!productModel || !orderModel) {\n return null\n }\n\n const { Configuration: { Quantity }, ID } = productModel\n\n if (!Quantity) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n\n return (<div className='kit-quantity-component'>\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n />\n {this.state.errorMessage &&\n <Tooltip className='quantity-error-tooltip' placement=\"bottom\" isOpen={true} target={'quantity_' + ID}>\n {this.state.errorMessage}\n </Tooltip>\n }\n </div>)\n }\n}\n\nexport default KitItemQuantity\n","import React from 'react';\n\n/**\n * CarouselContext\n * {\n * direction: PropTypes.oneOf(['start', 'end']).isRequired,\n * }\n */\nexport var CarouselContext = /*#__PURE__*/React.createContext({});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"in\", \"children\", \"cssModule\", \"slide\", \"tag\", \"className\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Transition } from 'react-transition-group';\nimport { CarouselContext } from './CarouselContext';\nimport { mapToCssModules, TransitionTimeouts, TransitionStatuses, tagPropType } from './utils';\nvar CarouselItem = /*#__PURE__*/function (_React$Component) {\n _inherits(CarouselItem, _React$Component);\n var _super = _createSuper(CarouselItem);\n function CarouselItem(props) {\n var _this;\n _classCallCheck(this, CarouselItem);\n _this = _super.call(this, props);\n _this.state = {\n startAnimation: false\n };\n _this.onEnter = _this.onEnter.bind(_assertThisInitialized(_this));\n _this.onEntering = _this.onEntering.bind(_assertThisInitialized(_this));\n _this.onExit = _this.onExit.bind(_assertThisInitialized(_this));\n _this.onExiting = _this.onExiting.bind(_assertThisInitialized(_this));\n _this.onExited = _this.onExited.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(CarouselItem, [{\n key: \"onEnter\",\n value: function onEnter(node, isAppearing) {\n this.setState({\n startAnimation: false\n });\n this.props.onEnter(node, isAppearing);\n }\n }, {\n key: \"onEntering\",\n value: function onEntering(node, isAppearing) {\n // getting this variable triggers a reflow\n var offsetHeight = node.offsetHeight;\n this.setState({\n startAnimation: true\n });\n this.props.onEntering(node, isAppearing);\n return offsetHeight;\n }\n }, {\n key: \"onExit\",\n value: function onExit(node) {\n this.setState({\n startAnimation: false\n });\n this.props.onExit(node);\n }\n }, {\n key: \"onExiting\",\n value: function onExiting(node) {\n this.setState({\n startAnimation: true\n });\n node.dispatchEvent(new CustomEvent('slide.bs.carousel'));\n this.props.onExiting(node);\n }\n }, {\n key: \"onExited\",\n value: function onExited(node) {\n node.dispatchEvent(new CustomEvent('slid.bs.carousel'));\n this.props.onExited(node);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props = this.props,\n isIn = _this$props[\"in\"],\n children = _this$props.children,\n cssModule = _this$props.cssModule,\n _this$props$slide = _this$props.slide,\n slide = _this$props$slide === void 0 ? true : _this$props$slide,\n _this$props$tag = _this$props.tag,\n Tag = _this$props$tag === void 0 ? 'div' : _this$props$tag,\n className = _this$props.className,\n transitionProps = _objectWithoutProperties(_this$props, _excluded);\n return /*#__PURE__*/React.createElement(Transition, _extends({}, transitionProps, {\n enter: slide,\n exit: slide,\n \"in\": isIn,\n onEnter: this.onEnter,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }), function (status) {\n var direction = _this2.context.direction;\n var isActive = status === TransitionStatuses.ENTERED || status === TransitionStatuses.EXITING;\n var directionClassName = (status === TransitionStatuses.ENTERING || status === TransitionStatuses.EXITING) && _this2.state.startAnimation && (direction === 'end' ? 'carousel-item-start' : 'carousel-item-end');\n var orderClassName = status === TransitionStatuses.ENTERING && (direction === 'end' ? 'carousel-item-next' : 'carousel-item-prev');\n var itemClasses = mapToCssModules(classNames(className, 'carousel-item', isActive && 'active', directionClassName, orderClassName), cssModule);\n return /*#__PURE__*/React.createElement(Tag, {\n className: itemClasses\n }, children);\n });\n }\n }]);\n return CarouselItem;\n}(React.Component);\nCarouselItem.propTypes = _objectSpread(_objectSpread({}, Transition.propTypes), {}, {\n /** Set a custom element for this component */\n tag: tagPropType,\n \"in\": PropTypes.bool,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n children: PropTypes.node,\n /** Enable/disable animation */\n slide: PropTypes.bool,\n /** Add custom class */\n className: PropTypes.string\n});\nCarouselItem.defaultProps = _objectSpread(_objectSpread({}, Transition.defaultProps), {}, {\n timeout: TransitionTimeouts.Carousel\n});\nCarouselItem.contextType = CarouselContext;\nexport default CarouselItem;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport CarouselItem from './CarouselItem';\nimport { CarouselContext } from './CarouselContext';\nimport { mapToCssModules, omit } from './utils';\nvar SWIPE_THRESHOLD = 40;\nvar propTypes = {\n /** the current active slide of the carousel */\n activeIndex: PropTypes.number,\n /** a function which should advance the carousel to the next slide (via activeIndex) */\n next: PropTypes.func.isRequired,\n /** a function which should advance the carousel to the previous slide (via activeIndex) */\n previous: PropTypes.func.isRequired,\n /** controls if the left and right arrow keys should control the carousel */\n keyboard: PropTypes.bool,\n /** If set to \"hover\", pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on\n * mouseleave. If set to false, hovering over the carousel won't pause it.\n */\n pause: PropTypes.oneOf(['hover', false]),\n /** Autoplays the carousel after the user manually cycles the first item. If \"carousel\", autoplays the carousel on load. */\n ride: PropTypes.oneOf(['carousel']),\n /** the interval at which the carousel automatically cycles */\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.bool]),\n children: PropTypes.array,\n /** called when the mouse enters the Carousel */\n mouseEnter: PropTypes.func,\n /** called when the mouse exits the Carousel */\n mouseLeave: PropTypes.func,\n /** controls whether the slide animation on the Carousel works or not */\n slide: PropTypes.bool,\n /** make the controls, indicators and captions dark on the Carousel */\n dark: PropTypes.bool,\n fade: PropTypes.bool,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Add custom class */\n className: PropTypes.string,\n /** Enable touch support */\n enableTouch: PropTypes.bool\n};\nvar propsToOmit = Object.keys(propTypes);\nvar defaultProps = {\n interval: 5000,\n pause: 'hover',\n keyboard: true,\n slide: true,\n enableTouch: true,\n fade: false\n};\nvar Carousel = /*#__PURE__*/function (_React$Component) {\n _inherits(Carousel, _React$Component);\n var _super = _createSuper(Carousel);\n function Carousel(props) {\n var _this;\n _classCallCheck(this, Carousel);\n _this = _super.call(this, props);\n _this.handleKeyPress = _this.handleKeyPress.bind(_assertThisInitialized(_this));\n _this.renderItems = _this.renderItems.bind(_assertThisInitialized(_this));\n _this.hoverStart = _this.hoverStart.bind(_assertThisInitialized(_this));\n _this.hoverEnd = _this.hoverEnd.bind(_assertThisInitialized(_this));\n _this.handleTouchStart = _this.handleTouchStart.bind(_assertThisInitialized(_this));\n _this.handleTouchEnd = _this.handleTouchEnd.bind(_assertThisInitialized(_this));\n _this.touchStartX = 0;\n _this.touchStartY = 0;\n _this.state = {\n activeIndex: _this.props.activeIndex,\n direction: 'end',\n indicatorClicked: false\n };\n return _this;\n }\n _createClass(Carousel, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n // Set up the cycle\n if (this.props.ride === 'carousel') {\n this.setInterval();\n }\n\n // TODO: move this to the specific carousel like bootstrap. Currently it will trigger ALL carousels on the page.\n document.addEventListener('keyup', this.handleKeyPress);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (prevState.activeIndex === this.state.activeIndex) return;\n this.setInterval();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearInterval();\n document.removeEventListener('keyup', this.handleKeyPress);\n }\n }, {\n key: \"handleKeyPress\",\n value: function handleKeyPress(evt) {\n if (this.props.keyboard) {\n if (evt.keyCode === 37) {\n this.props.previous();\n } else if (evt.keyCode === 39) {\n this.props.next();\n }\n }\n }\n }, {\n key: \"handleTouchStart\",\n value: function handleTouchStart(e) {\n if (!this.props.enableTouch) {\n return;\n }\n this.touchStartX = e.changedTouches[0].screenX;\n this.touchStartY = e.changedTouches[0].screenY;\n }\n }, {\n key: \"handleTouchEnd\",\n value: function handleTouchEnd(e) {\n if (!this.props.enableTouch) {\n return;\n }\n var currentX = e.changedTouches[0].screenX;\n var currentY = e.changedTouches[0].screenY;\n var diffX = Math.abs(this.touchStartX - currentX);\n var diffY = Math.abs(this.touchStartY - currentY);\n\n // Don't swipe if Y-movement is bigger than X-movement\n if (diffX < diffY) {\n return;\n }\n if (diffX < SWIPE_THRESHOLD) {\n return;\n }\n if (currentX < this.touchStartX) {\n this.props.next();\n } else {\n this.props.previous();\n }\n }\n }, {\n key: \"getContextValue\",\n value: function getContextValue() {\n return {\n direction: this.state.direction\n };\n }\n }, {\n key: \"setInterval\",\n value: function (_setInterval) {\n function setInterval() {\n return _setInterval.apply(this, arguments);\n }\n setInterval.toString = function () {\n return _setInterval.toString();\n };\n return setInterval;\n }(function () {\n var _this2 = this;\n // make sure not to have multiple intervals going...\n this.clearInterval();\n if (this.props.interval) {\n this.cycleInterval = setInterval(function () {\n _this2.props.next();\n }, parseInt(this.props.interval, 10));\n }\n })\n }, {\n key: \"clearInterval\",\n value: function (_clearInterval) {\n function clearInterval() {\n return _clearInterval.apply(this, arguments);\n }\n clearInterval.toString = function () {\n return _clearInterval.toString();\n };\n return clearInterval;\n }(function () {\n clearInterval(this.cycleInterval);\n })\n }, {\n key: \"hoverStart\",\n value: function hoverStart() {\n if (this.props.pause === 'hover') {\n this.clearInterval();\n }\n if (this.props.mouseEnter) {\n var _this$props;\n (_this$props = this.props).mouseEnter.apply(_this$props, arguments);\n }\n }\n }, {\n key: \"hoverEnd\",\n value: function hoverEnd() {\n if (this.props.pause === 'hover') {\n this.setInterval();\n }\n if (this.props.mouseLeave) {\n var _this$props2;\n (_this$props2 = this.props).mouseLeave.apply(_this$props2, arguments);\n }\n }\n }, {\n key: \"renderItems\",\n value: function renderItems(carouselItems, className) {\n var _this3 = this;\n var slide = this.props.slide;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className\n }, carouselItems.map(function (item, index) {\n var isIn = index === _this3.state.activeIndex;\n return /*#__PURE__*/React.cloneElement(item, {\n \"in\": isIn,\n slide: slide\n });\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this4 = this;\n var _this$props3 = this.props,\n cssModule = _this$props3.cssModule,\n slide = _this$props3.slide,\n className = _this$props3.className,\n dark = _this$props3.dark,\n fade = _this$props3.fade;\n var attributes = omit(this.props, propsToOmit);\n var outerClasses = mapToCssModules(classNames(className, 'carousel', fade && 'carousel-fade', slide && 'slide', dark && 'carousel-dark'), cssModule);\n var innerClasses = mapToCssModules(classNames('carousel-inner'), cssModule);\n\n // filter out booleans, null, or undefined\n var children = this.props.children.filter(function (child) {\n return child !== null && child !== undefined && typeof child !== 'boolean';\n });\n var slidesOnly = children.every(function (child) {\n return child.type === CarouselItem;\n });\n\n // Rendering only slides\n if (slidesOnly) {\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: outerClasses,\n onMouseEnter: this.hoverStart,\n onMouseLeave: this.hoverEnd\n }), /*#__PURE__*/React.createElement(CarouselContext.Provider, {\n value: this.getContextValue()\n }, this.renderItems(children, innerClasses)));\n }\n\n // Rendering slides and controls\n if (children[0] instanceof Array) {\n var _carouselItems = children[0];\n var _controlLeft = children[1];\n var _controlRight = children[2];\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: outerClasses,\n onMouseEnter: this.hoverStart,\n onMouseLeave: this.hoverEnd\n }), /*#__PURE__*/React.createElement(CarouselContext.Provider, {\n value: this.getContextValue()\n }, this.renderItems(_carouselItems, innerClasses), _controlLeft, _controlRight));\n }\n\n // Rendering indicators, slides and controls\n var indicators = children[0];\n var wrappedOnClick = function wrappedOnClick(e) {\n if (typeof indicators.props.onClickHandler === 'function') {\n _this4.setState({\n indicatorClicked: true\n }, function () {\n return indicators.props.onClickHandler(e);\n });\n }\n };\n var wrappedIndicators = /*#__PURE__*/React.cloneElement(indicators, {\n onClickHandler: wrappedOnClick\n });\n var carouselItems = children[1];\n var controlLeft = children[2];\n var controlRight = children[3];\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: outerClasses,\n onMouseEnter: this.hoverStart,\n onMouseLeave: this.hoverEnd,\n onTouchStart: this.handleTouchStart,\n onTouchEnd: this.handleTouchEnd\n }), /*#__PURE__*/React.createElement(CarouselContext.Provider, {\n value: this.getContextValue()\n }, wrappedIndicators, this.renderItems(carouselItems, innerClasses), controlLeft, controlRight));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var newState = null;\n var activeIndex = prevState.activeIndex,\n direction = prevState.direction,\n indicatorClicked = prevState.indicatorClicked;\n if (nextProps.activeIndex !== activeIndex) {\n // Calculate the direction to turn\n if (nextProps.activeIndex === activeIndex + 1) {\n direction = 'end';\n } else if (nextProps.activeIndex === activeIndex - 1) {\n direction = 'start';\n } else if (nextProps.activeIndex < activeIndex) {\n direction = indicatorClicked ? 'start' : 'end';\n } else if (nextProps.activeIndex !== activeIndex) {\n direction = indicatorClicked ? 'end' : 'start';\n }\n newState = {\n activeIndex: nextProps.activeIndex,\n direction: direction,\n indicatorClicked: false\n };\n }\n return newState;\n }\n }]);\n return Carousel;\n}(React.Component);\nCarousel.propTypes = propTypes;\nCarousel.defaultProps = defaultProps;\nexport default Carousel;","import { useCallback, useEffect, useState } from 'react'\nimport deepcopy from 'deepcopy'\nimport './DotCarousel.scss'\n\nconst LEFT = 'left'\nconst RIGHT = 'right'\nconst REGULAR = 'regular-dot'\nconst PADDING = 8\nconst SMALLEST_WIDTH = 6\nconst SMALLER_WIDTH = 7\nconst REGULAR_WIDTH = 8\nconst SMALLER = 'smaller-dot'\nconst SMALLEST = 'smallest-dot'\nconst HIDDEN = 'hidden-dot'\n\nconst DotCarousel = (props) => {\n const { images, active, onDotClick, disabled } = props\n\n const [dots, setDots] = useState([])\n\n const filterDots = useCallback((dots, reverse) => {\n if (reverse) {\n images.forEach((image, i) => {\n if ([active + 1, active - 3].includes(i)) {\n dots.push({ class: SMALLER, id: i })\n } else if ([active + 2, active - 4].includes(i)) {\n dots.push({ class: SMALLEST, id: i })\n } else if ([active, active - 1, active - 2].includes(i)) {\n dots.push({ class: REGULAR, id: i, active: i === active })\n } else {\n dots.push({ class: HIDDEN, id: i })\n }\n })\n } else {\n images.forEach((image, i) => {\n if ([active - 2, active + 4].includes(i)) {\n dots.push({ class: SMALLEST, id: i })\n } else if ([active - 1, active + 3].includes(i)) {\n dots.push({ class: SMALLER, id: i })\n } else if ([active, active + 1, active + 2].includes(i)) {\n dots.push({ class: REGULAR, id: i, active: i === active })\n } else {\n dots.push({ class: HIDDEN, id: i })\n }\n })\n }\n }, [active, images])\n\n useEffect(() => {\n setDots(dots)\n if (images.length < 6) {\n images.forEach((image, i) => {\n dots.push({ class: REGULAR, id: i, active: i === active })\n })\n }\n // eslint-disable-next-line\n },[images])\n\n useEffect(() => {\n const dots = []\n if (images.length < 6) {\n images.forEach((image, i) => {\n dots.push({ class: REGULAR, id: i, active: i === active })\n })\n } else {\n filterDots(dots)\n }\n\n setDots(dots)\n }, [active, images, filterDots])\n\n useEffect(() => {\n const newDots = deepcopy(dots)\n const nextActiveDot = newDots.find(dot => dot.id === active)\n const actualActiveDot = newDots.find(dot => dot.active)\n\n if (nextActiveDot && nextActiveDot !== actualActiveDot) {\n if (nextActiveDot.class === REGULAR) {\n if (actualActiveDot) {\n actualActiveDot.active = false\n }\n nextActiveDot.active = true\n\n setDots(newDots)\n } else {\n const direction = actualActiveDot.id > active ? LEFT : RIGHT\n const dots = []\n\n if (direction === LEFT) {\n filterDots(dots)\n } else {\n filterDots(dots, true)\n }\n\n setDots(dots)\n }\n }\n // Added dots & filterDots as dependencies but CAN'T TEST\n }, [active, dots, filterDots, images])\n\n const renderDots = () => {\n let left = 0\n if (dots.length < 6) {\n left = 0\n return dots.map((dot) => {\n const styles = { position: 'relative', margin: '0 4px' }\n\n return (\n <span\n style={styles}\n key={dot.id}\n className={`dot-indicator ${dot.class} ${dot.active ? 'active' : ''}`}\n onClick={() => {\n if(disabled) return\n onDotClick(dot.id)\n }}\n />\n )\n })\n }\n\n const visible = dots.filter(dot => dot.class !== HIDDEN)\n const last = dots[dots.length - 1]\n if (last) {\n if (last.class === REGULAR) {\n left = SMALLER_WIDTH + SMALLEST_WIDTH + PADDING * 2\n } else if (last.class === SMALLER) {\n left = PADDING + SMALLEST_WIDTH\n }\n }\n\n return dots.map((dot, i) => {\n const styles = {}\n if (dot.class === HIDDEN && i < visible[0].id) {\n styles.left = `-${PADDING + SMALLEST_WIDTH}px`\n } else if (dot.class === HIDDEN && i > visible[visible.length - 1].id) {\n styles.left = '196px'\n } else {\n const prev = dots[i - 1]\n if (prev) {\n if (prev.class === SMALLER) {\n left += PADDING + SMALLER_WIDTH\n } else if (prev.class === SMALLEST) {\n left += PADDING + SMALLEST_WIDTH\n } else if (prev.class === REGULAR) {\n left += PADDING + REGULAR_WIDTH\n }\n }\n\n styles.left = `${left}px`\n }\n\n return (\n <span\n style={styles}\n key={dot.id}\n className={`dot-indicator ${dot.class} ${dot.active ? 'active' : ''}`}\n onClick={() => onDotClick(dot.id)}\n />\n )\n })\n }\n\n if (!images || images.length < 2) {\n return null\n }\n\n return (\n <div className=\"dot-carousel-wrapper\">\n <div className=\"dot-carousel\" style={{\n height: `${REGULAR_WIDTH}px`,\n width: `${PADDING * 7 + REGULAR_WIDTH * 6}px`\n }}>\n {renderDots()}\n </div>\n </div>\n )\n}\n\nexport default DotCarousel\n","import { useEffect, useRef, useState } from 'react'\nimport ImageLoader from '$core-components/ImageLoader'\nimport './ImageZoom.scss'\n\nconst ImageZoom = ({ src, onImageZoomed, isStretched = false }) => {\n const wrapper = useRef(null)\n const img = src || require(`$assets/images/default.png`)\n\n const [zoomed, setZoomed] = useState(false)\n const [backgroundPosition, setBackgroundPosition] = useState('50% 50%')\n const [backgroundSize, setBackgroundSize] = useState('50% 50%')\n const [zoomAllowed, setZoomAllowed] = useState({ x: false, y: false })\n\n const checkIfZoomAllowed = () => {\n const { offsetWidth, offsetHeight } = wrapper.current\n if (offsetWidth !== 0 && offsetHeight !== 0) {\n const img = wrapper.current.querySelector('img')\n const { naturalWidth: imgWidth, naturalHeight: imgHeight } = img\n\n setZoomAllowed({ x: imgWidth > offsetWidth, y: imgHeight > offsetHeight })\n }\n }\n\n useEffect(() => {\n onImageZoomed && onImageZoomed(zoomed)\n // eslint-disable-next-line\n }, [zoomed])\n\n const mouseMoveHandler = (e) => {\n if (!zoomed) {\n return\n }\n\n const zoom = e.currentTarget\n const { offsetX, offsetY } = e.nativeEvent\n const x = zoomAllowed.x ? offsetX / zoom.offsetWidth * 100 : 50\n const y = zoomAllowed.y ? offsetY / zoom.offsetHeight * 100 : 50\n setBackgroundPosition(`${x}% ${y}%`)\n }\n\n const triggerZoomed = () => {\n if (zoomAllowed.x || zoomAllowed.y) {\n if (!zoomed) {\n const { naturalHeight, naturalWidth } = wrapper.current.querySelector('img')\n setBackgroundSize(`${naturalWidth}px ${naturalHeight}px`)\n }\n\n setZoomed(prev => !prev)\n }\n }\n\n const canBeZoomed = zoomAllowed.x || zoomAllowed.y\n return (\n <div\n onMouseOver={checkIfZoomAllowed}\n onLoad={checkIfZoomAllowed}\n className={`img-zoomed-wrapper${zoomed ? ' cursor-scroll' : ''}${canBeZoomed ? ' zoom' : ''}`}\n ref={wrapper}\n onClick={triggerZoomed}\n onMouseLeave={() => {\n setZoomed(false)\n }}\n >\n <ImageLoader className={`image ${!zoomed ? 'opacity-1' : 'opacity-0'}`} src={img} isStretched={isStretched} />\n <div\n onMouseMove={mouseMoveHandler}\n onLoad={mouseMoveHandler.bind(this, { offsetWidth: 0.5, offsetHeight: 0.5 })}\n className={`img-zoomed ${zoomed ? 'opacity-1' : 'opacity-0'}`}\n style={{\n backgroundImage: `url(${img})`,\n backgroundSize,\n backgroundPosition,\n backgroundRepeat: 'no-repeat'\n }}\n />\n </div>\n )\n}\n\nexport default ImageZoom\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import { useCallback, useEffect, useRef, useState } from 'react'\nimport ImageLoader from './ImageLoader'\nimport { ReactComponent as LeftArrow } from '$assets/icons/dark_left_arrow.svg'\nimport { ReactComponent as RightArrow } from '$assets/icons/dark_right_arrow.svg'\nimport './MultiItemsCarousel.scss'\n\nconst INITIAL_ITEMS = 7\n\nconst getItemsPerSlide = (responsive) => {\n const { innerWidth } = window\n const breakpoints = Object\n .keys(responsive)\n .filter(width => width < innerWidth)\n .sort((a, b) => b - a)\n\n return breakpoints && breakpoints.length > 0 ? responsive[breakpoints[0]].items : INITIAL_ITEMS\n}\n\n\nconst MultiItemsCarousel = (props) => {\n const {\n leftArrow = {\n width: 20, height: 40\n },\n rightArrow = {\n width: 20, height: 40\n },\n hideDisabledArrows = true,\n itemWidth = 64,\n itemHeight = 64,\n borderWidth = 2,\n marginBetween = 9,\n responsive = {\n 1919: { items: 7 },\n 1199: { items: 4 }\n },\n images = [],\n items = [],\n onItemHovered,\n onItemClicked,\n activeImage = -1,\n styles\n } = props\n\n const [carouselWidth, setCarouselWidth] = useState('0')\n const [activeIndex, setActiveIndex] = useState(0)\n const [children, setChildren] = useState([])\n const [leftPos, setLeftPos] = useState(borderWidth)\n const calculateLeftPos = useCallback(() => {\n if (activeIndex === 0) {\n setLeftPos(borderWidth)\n } else {\n const left = (itemWidth + marginBetween) * activeIndex - borderWidth\n setLeftPos(`-${left}`)\n }\n }, [activeIndex, borderWidth, itemWidth, marginBetween])\n\n useEffect(() => {\n const itemsPerSlide = getItemsPerSlide(responsive)\n const dif = activeImage - activeIndex\n\n if (dif >= itemsPerSlide) {\n setActiveIndex(activeImage - itemsPerSlide + 1)\n }\n\n if (dif < 0) {\n setActiveIndex(activeImage)\n }\n }, [activeImage, activeIndex, responsive])\n\n useEffect(() => {\n setActiveIndex(0)\n }, [children.length])\n\n useEffect(() => {\n setChildren(images && images.length ? images : items)\n }, [images, items])\n\n useEffect(() => {\n calculateLeftPos()\n }, [activeIndex, calculateLeftPos])\n\n const getHideArrows = () => {\n return (images && images.length <= getItemsPerSlide(responsive)) && (items && items.length <= getItemsPerSlide(responsive))\n }\n\n const calculateLeftPosCallbackRef = useRef(calculateLeftPos)\n const getHideArrowsCallbackRef = useRef(getHideArrows)\n useEffect(() => {\n calculateLeftPosCallbackRef.current = calculateLeftPos\n getHideArrowsCallbackRef.current = getHideArrows\n });\n\n useEffect(() => {\n const calculateLeftPosCallback = e => calculateLeftPosCallbackRef.current(e);\n const getHideArrowsCallback = e => getHideArrowsCallbackRef.current(e);\n\n const calculateCarouselWidth = () => {\n setCarouselWidth(getHideArrowsCallback() ? '100%' : '80%')// `${itemWidth * itemsPerSlide + marginBetween * (itemsPerSlide - 1) + borderWidth * 2}px`)\n }\n\n const onResize = () => {\n setActiveIndex(0)\n calculateCarouselWidth()\n calculateLeftPosCallback()\n }\n\n onResize()\n window.addEventListener('resize', onResize)\n return () => {\n window.removeEventListener('resize', onResize)\n }\n }, [])\n\n const calculateSlideTo = (length) => {\n const itemsPerSlide = getItemsPerSlide(responsive)\n const itemsLeft = length - itemsPerSlide - activeIndex\n\n const next = itemsLeft >= itemsPerSlide ? activeIndex + itemsPerSlide : activeIndex + itemsLeft\n const prev = activeIndex < itemsPerSlide ? 0 : activeIndex - itemsPerSlide\n\n return { next, prev }\n }\n\n const itemsPerSlide = getItemsPerSlide(responsive)\n\n const rightArrowDisabled = activeIndex + itemsPerSlide >= children.length\n const leftArrowDisabled = activeIndex === 0\n\n const { next, prev } = calculateSlideTo(children.length)\n\n if ((!images || !images.length) && (!items || !items.length)) {\n return null\n }\n\n return (\n <div style={styles} className=\"multi-carousel-container\">\n {!getHideArrows() && <div\n style={{ width: leftArrow.width }}\n className={`multi-carousel-arrow left-arrow${leftArrowDisabled ? ' disabled' : ''}`}\n >\n {hideDisabledArrows && leftArrowDisabled ? null\n : <LeftArrow\n onClick={() => !leftArrowDisabled && setActiveIndex(prev)}\n name={leftArrow.svg}\n width={`${leftArrow.width}px`}\n height={`${leftArrow.height}px`}\n />\n }\n </div>}\n <div\n style={{\n width: carouselWidth,\n height: `${itemHeight + borderWidth * 2}px`\n }}\n className=\"multi-carousel-wrapper\"\n >\n <div\n style={{ left: `${leftPos}px` }}\n className=\"multi-carousel\"\n >\n {items && items.length\n ? items.map((item, i) => (\n <div\n onMouseOver={() => onItemHovered && onItemHovered(i)}\n onMouseLeave={() => onItemHovered && onItemHovered(-1)}\n onClick={() => onItemClicked && onItemClicked(i)}\n style={{ width: `${itemWidth}px`, height: `${itemHeight}px`, marginRight: `${marginBetween}px` }}\n className=\"multi-carousel-item-wrapper\"\n key={`item_${i}`}\n >\n {item}\n </div>\n ))\n : images.map((image, i) => (\n <div\n onMouseOver={() => onItemHovered && onItemHovered(i)}\n onMouseLeave={() => onItemHovered && onItemHovered(-1)}\n onClick={() => onItemClicked && onItemClicked(i)}\n style={{ width: `${itemWidth}px`, height: `${itemHeight}px`, marginRight: `${marginBetween}px` }}\n className={`multi-carousel-item-wrapper${i === activeImage ? ' highlight-border' : ''}`}\n key={`image_${i}`}\n >\n <ImageLoader className=\"multi-carousel-image\" src={image} />\n </div>\n ))}\n </div>\n </div>\n {!getHideArrows() && <div\n style={{ width: rightArrow.width }}\n className={`multi-carousel-arrow right-arrow${rightArrowDisabled ? ' disabled' : ''}`}\n >\n {hideDisabledArrows && rightArrowDisabled ? null\n : <RightArrow\n onClick={() => !rightArrowDisabled && setActiveIndex(next)}\n width={`${rightArrow.width}px`}\n height={`${rightArrow.height}px`}\n />\n }\n </div>}\n </div>\n )\n}\n\nexport default MultiItemsCarousel\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import { useCallback, useEffect, useState, useRef } from 'react'\nimport { Carousel, CarouselItem } from 'reactstrap'\nimport { useSwipeable } from 'react-swipeable'\nimport DotCarousel from './DotCarousel'\nimport ImageZoom from '$core-components/ImageZoom'\nimport LoadingDots from '$core-components/LoadingDots'\nimport ImageLoader from '$core-components/ImageLoader'\nimport MultiItemsCarousel from '$core-components/MultiItemsCarousel'\nimport { ReactComponent as LeftArrow } from '$assets/icons/left_arrow.svg'\nimport { ReactComponent as RightArrow } from '$assets/icons/right_arrow.svg'\nimport './ImageCarousel.scss'\n\nconst SHOW_TITLE = 1\nconst SHOW_NUM = 2\nconst IMAGES_LIMIT = 20\n\nconst ImageCarousel = ({images = [], zoomAllowed = true, showLoaderDots = false, isStretched = false }) => {\n const wrapper = useRef(null)\n const [animating, setAnimating] = useState(false)\n const [activeImage, setActiveImage] = useState(0)\n const [activeHoveredImage, setActiveHoveredImage] = useState(-1)\n const [showArrows, setShowArrows] = useState(true)\n const [hoveredImageTimeout, setHoveredImageTimeout] = useState(null)\n\n useEffect(() => {\n setAnimating(false)\n if (images.length < activeImage) {\n setActiveImage(images.length - 1)\n }\n\n setActiveHoveredImage(-1)\n setShowArrows(true)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [images])\n\n useEffect(() => {\n if (hoveredImageTimeout) clearTimeout(hoveredImageTimeout)\n\n if (activeHoveredImage !== -1) {\n setHoveredImageTimeout(setTimeout(() => setActiveImage(activeHoveredImage), 500))\n }\n }, [activeHoveredImage, hoveredImageTimeout])\n\n const handlers = useSwipeable({\n onSwipedLeft: () => slides.length > 1 && next(),\n onSwipedRight: () => slides.length > 1 && previous(),\n preventDefaultTouchmoveEvent: true,\n trackTouch: true,\n })\n\n const triggerZoomed = useCallback((imageZoomed) => {\n if (imageZoomed) {\n setShowArrows(false)\n } else {\n setShowArrows(true)\n }\n }, [])\n\n const next = () => {\n if (animating) return\n const nextIndex = activeImage === images.length - 1 ? 0 : activeImage + 1\n setActiveImage(nextIndex)\n }\n\n const previous = () => {\n if (animating) return\n const nextIndex = activeImage === 0 ? images.length - 1 : activeImage - 1\n setActiveImage(nextIndex)\n }\n\n const slides = images.map((image, index) => (\n <CarouselItem\n key={image.Url + index}\n onExiting={() => setAnimating(true)}\n onExited={() => setAnimating(false)}\n >\n <div className=\"image-wrapper\">\n {zoomAllowed\n ? <ImageZoom onImageZoomed={triggerZoomed} src={image.Url} isStretched={isStretched} />\n : <ImageLoader className='image' src={image.Url} isStretched={isStretched}/>\n }\n </div>\n </CarouselItem>\n ))\n\n const getThumbnailTitleWrapper = () => {\n const titleShouldAppear = images[activeImage]?.DisplayName && images[activeImage]?.DisplayName?.trim().length > 0\n\n let type = 0\n let value = null\n if (titleShouldAppear) {\n type = SHOW_TITLE\n } else if (images.length > IMAGES_LIMIT) {\n type = SHOW_NUM\n }\n\n switch (type) {\n case SHOW_TITLE:\n value = images[activeImage].DisplayName\n break\n case SHOW_NUM:\n value = `${activeImage + 1}/${images.length}`\n break\n default:\n return null\n }\n\n return (\n <div className=\"thumbnail-title-wrapper\">\n {value}\n </div>\n )\n }\n\n if (!images || images.length === 0) return null\n\n return (\n <div ref={wrapper} className=\"main-carousel-wrapper\">\n <div\n id=\"image-carousel-wrapper\"\n className=\"image-carousel-wrapper carousel-fade\"\n >\n {slides.length > 1 &&\n <span className={`arrows left-arrow${showArrows ? ' show' : ''}`}>\n <LeftArrow width=\"40px\" height=\"40px\" onClick={previous} />\n </span>\n }\n <div {...handlers}>\n <Carousel\n interval={false}\n previous={previous}\n next={next}\n activeIndex={activeImage}>\n {slides}\n </Carousel>\n </div>\n {slides.length > 1 &&\n <span className={`arrows right-arrow${showArrows ? ' show' : ''}`}>\n <RightArrow width=\"40px\" height=\"40px\" onClick={next} />\n </span>\n }\n </div>\n {getThumbnailTitleWrapper()}\n {images.length > 1 &&\n <MultiItemsCarousel\n responsive={{\n 1919: { items: 7 },\n 1439: { items: 5 },\n 1199: { items: 4 },\n 1024: { items: 3 },\n 767: { items: 2 }\n }}\n leftArrow={{\n width: 7, height: 12\n }}\n rightArrow={{\n width: 7, height: 12\n }}\n styles={{ width: `100%` }}\n images={images.map(image => image.Url)}\n onItemClicked={setActiveImage}\n onItemHovered={setActiveHoveredImage}\n activeImage={activeImage}\n hideDisabledArrows={false}\n />}\n <DotCarousel images={images} active={activeImage} onDotClick={(id) => setActiveImage(id)} />\n {showLoaderDots && <div className=\"carousel-dots-loader\">\n <LoadingDots/>\n </div>}\n </div>\n )\n}\n\nexport default ImageCarousel\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { canUseDOM } from './utils';\nvar propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};\nvar Portal = /*#__PURE__*/function (_React$Component) {\n _inherits(Portal, _React$Component);\n var _super = _createSuper(Portal);\n function Portal() {\n _classCallCheck(this, Portal);\n return _super.apply(this, arguments);\n }\n _createClass(Portal, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!canUseDOM) {\n return null;\n }\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n return /*#__PURE__*/ReactDOM.createPortal(this.props.children, this.props.node || this.defaultNode);\n }\n }]);\n return Portal;\n}(React.Component);\nPortal.propTypes = propTypes;\nexport default Portal;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Portal from './Portal';\nimport Fade from './Fade';\nimport { getOriginalBodyPadding, conditionallyUpdateScrollbar, setScrollbarWidth, mapToCssModules, omit, focusableElements, TransitionTimeouts, keyCodes, targetPropType, getTarget } from './utils';\nfunction noop() {}\nvar FadePropTypes = PropTypes.shape(Fade.propTypes);\nvar propTypes = {\n /** */\n autoFocus: PropTypes.bool,\n /** Add backdrop to modal */\n backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['static'])]),\n /** add custom classname to backdrop */\n backdropClassName: PropTypes.string,\n backdropTransition: FadePropTypes,\n /** Vertically center the modal */\n centered: PropTypes.bool,\n /** Add children for the modal to wrap */\n children: PropTypes.node,\n /** Add custom className for modal content */\n contentClassName: PropTypes.string,\n className: PropTypes.string,\n container: targetPropType,\n cssModule: PropTypes.object,\n external: PropTypes.node,\n /** Enable/Disable animation */\n fade: PropTypes.bool,\n /** Make the modal fullscreen */\n fullscreen: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['sm', 'md', 'lg', 'xl'])]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** The status of the modal, either open or close */\n isOpen: PropTypes.bool,\n /** Allow modal to be closed with escape key. */\n keyboard: PropTypes.bool,\n /** Identifies the element (or elements) that labels the current element. */\n labelledBy: PropTypes.string,\n modalClassName: PropTypes.string,\n modalTransition: FadePropTypes,\n /** Function to be triggered on close */\n onClosed: PropTypes.func,\n /** Function to be triggered on enter */\n onEnter: PropTypes.func,\n /** Function to be triggered on exit */\n onExit: PropTypes.func,\n /** Function to be triggered on open */\n onOpened: PropTypes.func,\n /** Returns focus to the element that triggered opening of the modal */\n returnFocusAfterClose: PropTypes.bool,\n /** Accessibility role */\n role: PropTypes.string,\n /** Make the modal scrollable */\n scrollable: PropTypes.bool,\n /** Two optional sizes `lg` and `sm` */\n size: PropTypes.string,\n /** Function to toggle modal visibility */\n toggle: PropTypes.func,\n trapFocus: PropTypes.bool,\n /** Unmounts the modal when modal is closed */\n unmountOnClose: PropTypes.bool,\n wrapClassName: PropTypes.string,\n zIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n};\nvar propsToOmit = Object.keys(propTypes);\nvar defaultProps = {\n isOpen: false,\n autoFocus: true,\n centered: false,\n scrollable: false,\n role: 'dialog',\n backdrop: true,\n keyboard: true,\n zIndex: 1050,\n fade: true,\n onOpened: noop,\n onClosed: noop,\n modalTransition: {\n timeout: TransitionTimeouts.Modal\n },\n backdropTransition: {\n mountOnEnter: true,\n timeout: TransitionTimeouts.Fade // uses standard fade transition\n },\n\n unmountOnClose: true,\n returnFocusAfterClose: true,\n container: 'body',\n trapFocus: false\n};\nvar Modal = /*#__PURE__*/function (_React$Component) {\n _inherits(Modal, _React$Component);\n var _super = _createSuper(Modal);\n function Modal(props) {\n var _this;\n _classCallCheck(this, Modal);\n _this = _super.call(this, props);\n _this._element = null;\n _this._originalBodyPadding = null;\n _this.getFocusableChildren = _this.getFocusableChildren.bind(_assertThisInitialized(_this));\n _this.handleBackdropClick = _this.handleBackdropClick.bind(_assertThisInitialized(_this));\n _this.handleBackdropMouseDown = _this.handleBackdropMouseDown.bind(_assertThisInitialized(_this));\n _this.handleEscape = _this.handleEscape.bind(_assertThisInitialized(_this));\n _this.handleStaticBackdropAnimation = _this.handleStaticBackdropAnimation.bind(_assertThisInitialized(_this));\n _this.handleTab = _this.handleTab.bind(_assertThisInitialized(_this));\n _this.onOpened = _this.onOpened.bind(_assertThisInitialized(_this));\n _this.onClosed = _this.onClosed.bind(_assertThisInitialized(_this));\n _this.manageFocusAfterClose = _this.manageFocusAfterClose.bind(_assertThisInitialized(_this));\n _this.clearBackdropAnimationTimeout = _this.clearBackdropAnimationTimeout.bind(_assertThisInitialized(_this));\n _this.trapFocus = _this.trapFocus.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: false,\n showStaticBackdropAnimation: false\n };\n return _this;\n }\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n isOpen = _this$props.isOpen,\n autoFocus = _this$props.autoFocus,\n onEnter = _this$props.onEnter;\n if (isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n if (autoFocus) {\n this.setFocus();\n }\n }\n if (onEnter) {\n onEnter();\n }\n\n // traps focus inside the Modal, even if the browser address bar is focused\n document.addEventListener('focus', this.trapFocus, true);\n this._isMounted = true;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.isOpen && !prevProps.isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n // let render() renders Modal Dialog first\n return;\n }\n\n // now Modal Dialog is rendered and we can refer this._element and this._dialog\n if (this.props.autoFocus && this.state.isOpen && !prevState.isOpen) {\n this.setFocus();\n }\n if (this._element && prevProps.zIndex !== this.props.zIndex) {\n this._element.style.zIndex = this.props.zIndex;\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearBackdropAnimationTimeout();\n if (this.props.onExit) {\n this.props.onExit();\n }\n if (this._element) {\n this.destroy();\n if (this.props.isOpen || this.state.isOpen) {\n this.close();\n }\n }\n document.removeEventListener('focus', this.trapFocus, true);\n this._isMounted = false;\n }\n\n // not mouseUp because scrollbar fires it, shouldn't close when user scrolls\n }, {\n key: \"handleBackdropClick\",\n value: function handleBackdropClick(e) {\n if (e.target === this._mouseDownElement) {\n e.stopPropagation();\n var backdrop = this._dialog ? this._dialog.parentNode : null;\n if (backdrop && e.target === backdrop && this.props.backdrop === 'static') {\n this.handleStaticBackdropAnimation();\n }\n if (!this.props.isOpen || this.props.backdrop !== true) return;\n if (backdrop && e.target === backdrop && this.props.toggle) {\n this.props.toggle(e);\n }\n }\n }\n }, {\n key: \"handleTab\",\n value: function handleTab(e) {\n if (e.which !== 9) return;\n if (this.modalIndex < Modal.openCount - 1) return; // last opened modal\n\n var focusableChildren = this.getFocusableChildren();\n var totalFocusable = focusableChildren.length;\n if (totalFocusable === 0) return;\n var currentFocus = this.getFocusedChild();\n var focusedIndex = 0;\n for (var i = 0; i < totalFocusable; i += 1) {\n if (focusableChildren[i] === currentFocus) {\n focusedIndex = i;\n break;\n }\n }\n if (e.shiftKey && focusedIndex === 0) {\n e.preventDefault();\n focusableChildren[totalFocusable - 1].focus();\n } else if (!e.shiftKey && focusedIndex === totalFocusable - 1) {\n e.preventDefault();\n focusableChildren[0].focus();\n }\n }\n }, {\n key: \"handleBackdropMouseDown\",\n value: function handleBackdropMouseDown(e) {\n this._mouseDownElement = e.target;\n }\n }, {\n key: \"handleEscape\",\n value: function handleEscape(e) {\n if (this.props.isOpen && e.keyCode === keyCodes.esc && this.props.toggle) {\n if (this.props.keyboard) {\n e.preventDefault();\n e.stopPropagation();\n this.props.toggle(e);\n } else if (this.props.backdrop === 'static') {\n e.preventDefault();\n e.stopPropagation();\n this.handleStaticBackdropAnimation();\n }\n }\n }\n }, {\n key: \"handleStaticBackdropAnimation\",\n value: function handleStaticBackdropAnimation() {\n var _this2 = this;\n this.clearBackdropAnimationTimeout();\n this.setState({\n showStaticBackdropAnimation: true\n });\n this._backdropAnimationTimeout = setTimeout(function () {\n _this2.setState({\n showStaticBackdropAnimation: false\n });\n }, 100);\n }\n }, {\n key: \"onOpened\",\n value: function onOpened(node, isAppearing) {\n this.props.onOpened();\n (this.props.modalTransition.onEntered || noop)(node, isAppearing);\n }\n }, {\n key: \"onClosed\",\n value: function onClosed(node) {\n var unmountOnClose = this.props.unmountOnClose;\n // so all methods get called before it is unmounted\n this.props.onClosed();\n (this.props.modalTransition.onExited || noop)(node);\n if (unmountOnClose) {\n this.destroy();\n }\n this.close();\n if (this._isMounted) {\n this.setState({\n isOpen: false\n });\n }\n }\n }, {\n key: \"setFocus\",\n value: function setFocus() {\n if (this._dialog && this._dialog.parentNode && typeof this._dialog.parentNode.focus === 'function') {\n this._dialog.parentNode.focus();\n }\n }\n }, {\n key: \"getFocusableChildren\",\n value: function getFocusableChildren() {\n return this._element.querySelectorAll(focusableElements.join(', '));\n }\n }, {\n key: \"getFocusedChild\",\n value: function getFocusedChild() {\n var currentFocus;\n var focusableChildren = this.getFocusableChildren();\n try {\n currentFocus = document.activeElement;\n } catch (err) {\n currentFocus = focusableChildren[0];\n }\n return currentFocus;\n }\n }, {\n key: \"trapFocus\",\n value: function trapFocus(ev) {\n if (!this.props.trapFocus) {\n return;\n }\n if (!this._element) {\n // element is not attached\n return;\n }\n if (this._dialog && this._dialog.parentNode === ev.target) {\n // initial focus when the Modal is opened\n return;\n }\n if (this.modalIndex < Modal.openCount - 1) {\n // last opened modal\n return;\n }\n var children = this.getFocusableChildren();\n for (var i = 0; i < children.length; i += 1) {\n // focus is already inside the Modal\n if (children[i] === ev.target) return;\n }\n if (children.length > 0) {\n // otherwise focus the first focusable element in the Modal\n ev.preventDefault();\n ev.stopPropagation();\n children[0].focus();\n }\n }\n }, {\n key: \"init\",\n value: function init() {\n try {\n this._triggeringElement = document.activeElement;\n } catch (err) {\n this._triggeringElement = null;\n }\n if (!this._element) {\n this._element = document.createElement('div');\n this._element.setAttribute('tabindex', '-1');\n this._element.style.position = 'relative';\n this._element.style.zIndex = this.props.zIndex;\n this._mountContainer = getTarget(this.props.container);\n this._mountContainer.appendChild(this._element);\n }\n this._originalBodyPadding = getOriginalBodyPadding();\n if (Modal.openCount < 1) {\n Modal.originalBodyOverflow = window.getComputedStyle(document.body).overflow;\n }\n conditionallyUpdateScrollbar();\n if (Modal.openCount === 0) {\n document.body.className = classNames(document.body.className, mapToCssModules('modal-open', this.props.cssModule));\n document.body.style.overflow = 'hidden';\n }\n this.modalIndex = Modal.openCount;\n Modal.openCount += 1;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this._element) {\n this._mountContainer.removeChild(this._element);\n this._element = null;\n }\n this.manageFocusAfterClose();\n }\n }, {\n key: \"manageFocusAfterClose\",\n value: function manageFocusAfterClose() {\n if (this._triggeringElement) {\n var returnFocusAfterClose = this.props.returnFocusAfterClose;\n if (this._triggeringElement.focus && returnFocusAfterClose) this._triggeringElement.focus();\n this._triggeringElement = null;\n }\n }\n }, {\n key: \"close\",\n value: function close() {\n if (Modal.openCount <= 1) {\n var modalOpenClassName = mapToCssModules('modal-open', this.props.cssModule);\n // Use regex to prevent matching `modal-open` as part of a different class, e.g. `my-modal-opened`\n var modalOpenClassNameRegex = new RegExp(\"(^| )\".concat(modalOpenClassName, \"( |$)\"));\n document.body.className = document.body.className.replace(modalOpenClassNameRegex, ' ').trim();\n document.body.style.overflow = Modal.originalBodyOverflow;\n }\n this.manageFocusAfterClose();\n Modal.openCount = Math.max(0, Modal.openCount - 1);\n setScrollbarWidth(this._originalBodyPadding);\n }\n }, {\n key: \"clearBackdropAnimationTimeout\",\n value: function clearBackdropAnimationTimeout() {\n if (this._backdropAnimationTimeout) {\n clearTimeout(this._backdropAnimationTimeout);\n this._backdropAnimationTimeout = undefined;\n }\n }\n }, {\n key: \"renderModalDialog\",\n value: function renderModalDialog() {\n var _classNames,\n _this3 = this;\n var attributes = omit(this.props, propsToOmit);\n var dialogBaseClass = 'modal-dialog';\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: mapToCssModules(classNames(dialogBaseClass, this.props.className, (_classNames = {}, _defineProperty(_classNames, \"modal-\".concat(this.props.size), this.props.size), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-centered\"), this.props.centered), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-scrollable\"), this.props.scrollable), _defineProperty(_classNames, 'modal-fullscreen', this.props.fullscreen === true), _defineProperty(_classNames, \"modal-fullscreen-\".concat(this.props.fullscreen, \"-down\"), typeof this.props.fullscreen === 'string'), _classNames)), this.props.cssModule),\n role: \"document\",\n ref: function ref(c) {\n _this3._dialog = c;\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-content', this.props.contentClassName), this.props.cssModule)\n }, this.props.children));\n }\n }, {\n key: \"render\",\n value: function render() {\n var unmountOnClose = this.props.unmountOnClose;\n if (!!this._element && (this.state.isOpen || !unmountOnClose)) {\n var isModalHidden = !!this._element && !this.state.isOpen && !unmountOnClose;\n this._element.style.display = isModalHidden ? 'none' : 'block';\n var _this$props2 = this.props,\n wrapClassName = _this$props2.wrapClassName,\n modalClassName = _this$props2.modalClassName,\n backdropClassName = _this$props2.backdropClassName,\n cssModule = _this$props2.cssModule,\n isOpen = _this$props2.isOpen,\n backdrop = _this$props2.backdrop,\n role = _this$props2.role,\n labelledBy = _this$props2.labelledBy,\n external = _this$props2.external,\n innerRef = _this$props2.innerRef;\n var modalAttributes = {\n onClick: this.handleBackdropClick,\n onMouseDown: this.handleBackdropMouseDown,\n onKeyUp: this.handleEscape,\n onKeyDown: this.handleTab,\n style: {\n display: 'block'\n },\n 'aria-labelledby': labelledBy,\n 'aria-modal': true,\n role: role,\n tabIndex: '-1'\n };\n var hasTransition = this.props.fade;\n var modalTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.modalTransition), {}, {\n baseClass: hasTransition ? this.props.modalTransition.baseClass : '',\n timeout: hasTransition ? this.props.modalTransition.timeout : 0\n });\n var backdropTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.backdropTransition), {}, {\n baseClass: hasTransition ? this.props.backdropTransition.baseClass : '',\n timeout: hasTransition ? this.props.backdropTransition.timeout : 0\n });\n var Backdrop = backdrop && (hasTransition ? /*#__PURE__*/React.createElement(Fade, _extends({}, backdropTransition, {\n \"in\": isOpen && !!backdrop,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal-backdrop', backdropClassName), cssModule)\n })) : /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-backdrop', 'show', backdropClassName), cssModule)\n }));\n return /*#__PURE__*/React.createElement(Portal, {\n node: this._element\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(wrapClassName)\n }, /*#__PURE__*/React.createElement(Fade, _extends({}, modalAttributes, modalTransition, {\n \"in\": isOpen,\n onEntered: this.onOpened,\n onExited: this.onClosed,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal', modalClassName, this.state.showStaticBackdropAnimation && 'modal-static'), cssModule),\n innerRef: innerRef\n }), external, this.renderModalDialog()), Backdrop));\n }\n return null;\n }\n }]);\n return Modal;\n}(React.Component);\nModal.propTypes = propTypes;\nModal.defaultProps = defaultProps;\nModal.openCount = 0;\nModal.originalBodyOverflow = null;\nexport default Modal;","var _excluded = [\"className\", \"cssModule\", \"children\", \"toggle\", \"tag\", \"wrapTag\", \"closeAriaLabel\", \"close\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Custom close button */\n close: PropTypes.object,\n closeAriaLabel: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Function to be triggered when close button is clicked */\n toggle: PropTypes.func,\n wrapTag: tagPropType\n};\nfunction ModalHeader(props) {\n var closeButton;\n var className = props.className,\n cssModule = props.cssModule,\n children = props.children,\n toggle = props.toggle,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'h5' : _props$tag,\n _props$wrapTag = props.wrapTag,\n WrapTag = _props$wrapTag === void 0 ? 'div' : _props$wrapTag,\n _props$closeAriaLabel = props.closeAriaLabel,\n closeAriaLabel = _props$closeAriaLabel === void 0 ? 'Close' : _props$closeAriaLabel,\n close = props.close,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-header'), cssModule);\n if (!close && toggle) {\n closeButton = /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n onClick: toggle,\n className: mapToCssModules('btn-close', cssModule),\n \"aria-label\": closeAriaLabel\n });\n }\n return /*#__PURE__*/React.createElement(WrapTag, _extends({}, attributes, {\n className: classes\n }), /*#__PURE__*/React.createElement(Tag, {\n className: mapToCssModules('modal-title', cssModule)\n }, children), close || closeButton);\n}\nModalHeader.propTypes = propTypes;\nexport default ModalHeader;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalBody.propTypes = propTypes;\nexport default ModalBody;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalFooter(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-footer'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalFooter.propTypes = propTypes;\nexport default ModalFooter;","\nexport const kitChangeType =\n {\n KIT_QUANTITY: 1,\n QUANTITY: 2,\n REMOVE: 3,\n ADD: 4,\n SAVE: 5\n }\n","/**\n * A component to display an item of a product of type Kit.\n *\n * @param {object} kitItemProductModel - the product related to this kit item\n * @param {object} kitItemOrderItemModel - the order item related to this kit item\n * @param {object} kitItemViewModel - the view model of this kit item, with all the information about displaying itself\n * @param {object} [kitItemPriceModel] - the order item price model for this kit item order item\n * @param {function} [onChange] - a callback to signal the item has changed\n * @param {boolean} [doLoadIframe] - a flag to denotes a required action of loading the iframe\n * @param {boolean} [doValidate] - a flag to denotes a required action of validation\n * @param {boolean} [isPriceCalculating] - a flag to indicate if the item's price is in loading state\n * @param {number} kitQuantity - the quantity of the parent kit component, used for inventory validations.\n */\n\nimport React, { Component } from 'react'\nimport KitItemQuantity from './KitItemQuantity'\nimport Inventory, { isOutOfStock } from '../Inventory'\nimport Price from '../Price'\nimport Tooltip from \"$core-components/Tooltip\";\nimport ImageCarousel from '../ImageCarousel';\nimport ImageLoader from '$core-components/ImageLoader'\nimport LoadingDots from '$core-components/LoadingDots'\nimport Icon from '$core-components/Icon'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport logger from '$ustoreinternal/services/logger'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { withRouter } from '$ustoreinternal/services/withRouter'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport theme from '$styles/_theme.scss'\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { kitChangeType } from './consts'\nimport './KitItem.scss'\n\nclass KitItem extends Component {\n constructor(props) {\n super(props)\n this.externalValidation = false\n\n this.iframeElementModal = React.createRef()\n this.iframeElement = React.createRef()\n this.scrollbars = React.createRef()\n this.scrollableContainer = React.createRef()\n this.iframeSrc = ''\n this.shouldValidateModal = false\n\n this.togglePreviewModal = this.togglePreviewModal.bind(this)\n this.onClickCancel = this.onClickCancel.bind(this)\n this.onClickSave = this.onClickSave.bind(this)\n this.onClickEditOptions = this.onClickEditOptions.bind(this)\n this.onQuantityChange = this.onQuantityChange.bind(this)\n this.onRemove = this.onRemove.bind(this)\n this.onAdd = this.onAdd.bind(this)\n this.onModalCarouselChange = this.onModalCarouselChange.bind(this)\n this.onResizeHandler = this.onResizeHandler.bind(this)\n\n this.state = {\n isPropertiesOpen: false,\n isPreviewOpen: false,\n activeModalImage: 0,\n isPropsModalLoading: false,\n isMediumBreak: false,\n }\n }\n\n componentWillUnmount() {\n // if unmounting (clicking back on the browser) when modal is open, we need to manually remove the modal class from the html tag.\n if ((this.state.isPreviewOpen || this.state.isPropertiesOpen) && document && document.querySelector('html')) {\n document.querySelector('html').classList.remove('modal-open')\n }\n\n window.removeEventListener('message', this.onMessageRecieved)\n window.removeEventListener('resize', this.onResizeHandler)\n }\n\n onMessageRecieved = (e) => {\n\n const { kitItemOrderItemModel, navigate } = this.props\n\n logger.info(e.data.type + ' message from iframe', e)\n\n if (e.data.type === '@SCROLL_PARENT_DISABLE') {\n\n var x = document.querySelector('.view').scrollLeft;\n var y = document.querySelector('.view').scrollTop;\n document.querySelector('.view').onscroll = function () { document.querySelector('.view').scrollTo(x, y); };\n }\n if (e.data.type === '@SCROLL_PARENT_ENABLE') {\n document.querySelector('.view').onscroll = function () { }\n }\n if (e.data.type === '@SCROLL_TO' && e.data.data) {\n document.querySelector('.view').scrollTo(e.data.data.x, e.data.data.y);\n }\n\n if (e.data.type === '@PRODUCT_PROPERTIES_STATUS') {\n const orderItemID = e.data.data.orderItemID\n const isValid = e.data.data.isValid\n if (orderItemID && orderItemID === kitItemOrderItemModel.ID) {\n this.onValidateIframeReturn(isValid)\n }\n }\n if (e.data.type === '@PRODUCT_POPERTIES_LOADED') {\n const orderItemID = e.data.data.orderItemID\n if (orderItemID && orderItemID === kitItemOrderItemModel.ID) {\n if (this.props.kitItemViewModel.iframeLoading) {\n this.setKitViewModel(kitItemOrderItemModel.ID, { iframeLoading: false, iframeLoaded: true })\n }\n else if (this.state.isPropsModalLoading) {\n this.setState({ isPropsModalLoading: false })\n if (this.shouldValidateModal) {\n this.shouldValidateModal = false\n this.externalValidation = false\n this.validate()\n }\n }\n }\n }\n if (e.data.type === '@CHANGE_DIMENSIONS') {\n const orderItemID = e.data.data.orderItemID\n if (orderItemID && orderItemID === kitItemOrderItemModel.ID) {\n const height = e.data.data.height\n const width = e.data.data.width\n\n if (this.iframeElementModal && this.iframeElementModal.style) {\n this.iframeElementModal.style.height = `${height}px`\n this.iframeElementModal.style.width = `${width}px`\n\n const modalBody = document.querySelector('.kit-item-properties-modal .modal-body')\n this.scrollableContainer.style.height = `${modalBody.clientHeight - 16}px`\n this.scrollableContainer.style.width = `${modalBody.clientWidth}px`\n this.scrollbars.scrollTop(0)\n }\n }\n }\n\n if (e.data.type === '@CHANGE_LEGACY_ROUTE') {\n //session expired - we need to prevent displaying login page within iframe\n if (e.data.data.match(/\\/login\\.aspx\\?/) || e.data.data.match(/\\/ShowMessage\\.aspx\\?.*StoreID=-1&ErrorCode=3/)) {\n const { securityToken, storeID, classicUrl, languageCode } = themeContext.get()\n const cookiesToDelete = [storefrontCookies.token, storefrontCookies.storeID, storefrontCookies.language]\n cookiesToDelete.forEach(cn => CookiesManager.deleteCookie(cn))\n\n const url = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&ShowRibbon=false&forceLogin=true&NgLanguageCode=${languageCode}`\n navigate(url)\n }\n }\n }\n\n componentDidMount() {\n const { kitItemOrderItemModel } = this.props\n\n if (!kitItemOrderItemModel)\n return null\n\n this.iframeSrc = this.getIframeSrc(kitItemOrderItemModel.ID)\n\n const isMediumBreak = document.body.clientWidth <= parseInt(theme.lg.replace('px', ''))\n\n this.setState({ isMediumBreak: isMediumBreak })\n\n if (isMediumBreak) {\n const input = document.getElementsByClassName('.quantity-control.quantity-input')\n if (input && input.length === 1) input[0].addEventListener('focus', function (e) { e.target.scrollIntoView(true) })\n }\n\n window.addEventListener('message', this.onMessageRecieved)\n window.addEventListener('resize', this.onResizeHandler)\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { kitItemProductModel, kitItemOrderItemModel: { ID, IsIncluded }, kitItemViewModel: { isPropertiesValid } } = this.props\n\n const hasProperties = !!kitItemProductModel.Configuration.Properties.length\n\n if (this.props.doValidate && !prevProps.doValidate) {\n if (!isPropertiesValid && IsIncluded && hasProperties) {\n this.externalValidation = true\n this.validate()\n }\n else if (IsIncluded) {\n this.setKitViewModel(ID, { isPropertiesValid: true })\n }\n }\n }\n\n onResizeHandler() {\n const isMediumBreak = document.body.clientWidth <= parseInt(theme.lg.replace('px', ''))\n this.setState({ isMediumBreak: isMediumBreak })\n }\n\n setKitViewModel(orderItemID, object) {\n UStoreProvider.state.customState.merge({ kitViewModel: { items: { [orderItemID]: object } } })\n }\n\n onValidateIframeReturn(isPropertiesValid) {\n const { onChange, kitItemOrderItemModel: { ID }, kitItemViewModel: { modalIsOpen: currentModalIsOpen } } = this.props\n let modalIsOpen = currentModalIsOpen //modalIsOpen is set according to current state in kitItemViewModel\n\n if (!this.externalValidation && isPropertiesValid) {\n this.iframeElement && this.iframeElement.contentWindow && this.iframeElement.contentWindow.location.replace(this.getIframeSrc(ID))\n this.setState({ isPropertiesOpen: false })\n modalIsOpen = false //if not external validation and properties are valid - modalIsOpen = false\n onChange(ID, kitChangeType.SAVE)\n }\n else if (!this.externalValidation) {\n this.scrollbars && this.scrollbars.scrollToTop()\n }\n\n if (this.externalValidation) {\n this.externalValidation = false\n }\n\n this.setKitViewModel(ID, { isPropertiesValid: !!isPropertiesValid, modalIsOpen: modalIsOpen })\n }\n\n onClickCancel() {\n const { kitItemOrderItemModel: { ID } } = this.props\n this.setState({ isPropertiesOpen: false }) //close even if not valid\n this.setKitViewModel(ID, { isPropertiesValid: null, modalIsOpen: false })\n }\n\n onClickSave() {\n this.externalValidation = false\n this.validate()\n }\n\n validate() {\n if (!this.externalValidation && this.iframeElement.contentWindow) {\n this.iframeElementModal.contentWindow.postMessage({\n type: '@PRODUCT_PROPERTIES_SAVE',\n data: {}\n }, '*')\n }\n else if (this.externalValidation && this.iframeElement.contentWindow) {\n this.iframeElement.contentWindow.postMessage({\n type: '@PRODUCT_PROPERTIES_SAVE',\n data: {}\n }, '*')\n }\n }\n\n onClickEditOptions() {\n const { kitItemOrderItemModel: { ID }, kitItemViewModel } = this.props\n\n if (kitItemViewModel.isPropertiesValid === false) {\n this.shouldValidateModal = true\n }\n\n this.setState({ isPropertiesOpen: !this.state.isPropertiesOpen, isPropsModalLoading: true })\n\n if (!kitItemViewModel.propsWasOpened) {\n this.setKitViewModel(ID, { propsWasOpened: true, modalIsOpen: true })\n }\n else {\n this.setKitViewModel(ID, { modalIsOpen: true })\n }\n }\n\n onQuantityChange(quantity, isValid) {\n const { onChange, kitItemOrderItemModel: { ID, Quantity } } = this.props\n this.setKitViewModel(ID, { isQuantityValid: isValid })\n\n if (quantity !== Quantity) {\n onChange(ID, kitChangeType.QUANTITY, { quantity })\n }\n }\n\n onRemove() {\n const { onChange, kitItemOrderItemModel: { ID } } = this.props\n onChange(ID, kitChangeType.REMOVE)\n this.setKitViewModel(ID, { isQuantityValid: null, isPropertiesValid: null })\n }\n\n onAdd() {\n const { onChange, kitItemOrderItemModel: { ID } } = this.props\n onChange(ID, kitChangeType.ADD)\n this.setKitViewModel(ID, { iframeLoaded: null, isPropertiesValid: null })\n }\n\n togglePreviewModal() {\n const { kitItemOrderItemModel: { ID } } = this.props\n this.setState({ isPreviewOpen: !this.state.isPreviewOpen })\n this.setKitViewModel(ID, { modalIsOpen: !this.state.isPreviewOpen })\n }\n\n\n onModalCarouselChange(value) {\n this.setState({ activeModalImage: value })\n }\n\n getIframeSrc(orderItemID) {\n const { storeID } = themeContext.get()\n const { currentUser } = UStoreProvider.state.get()\n\n const desktopBreakpoint = parseInt(theme.lg.replace('px', ''))\n const viewMobileVal = document.body.clientWidth > desktopBreakpoint ? 'viewMobile=false' : 'viewMobile=true'\n const { classicUrl } = themeContext.get()\n return `${classicUrl}/ProductProperties.aspx?OrderItemId=${orderItemID}&${viewMobileVal}&isFrameMode=true&rand=${Math.random()}&userUniqueId=${currentUser ? currentUser.ID : ''}&parentUrl=${encodeURIComponent(window.location.href)}&StoreGuid=${storeID ? storeID : ''}`\n }\n\n renderEditLink(className, isOutOfStock) {\n const { kitItemOrderItemModel, kitItemViewModel } = this.props\n\n return (\n <div className={'edit-section ' + className}>\n {kitItemOrderItemModel.IsIncluded && kitItemViewModel.iframeLoading && !isOutOfStock && <LoadingDots />}\n {kitItemViewModel.isPropertiesValid === false && (<span className='edit-options-error-icon'><Icon name=\"error.svg\" width=\"15px\" height=\"15px\" className=\"error-icon\" /></span>)}\n {kitItemOrderItemModel.IsIncluded && !kitItemViewModel.iframeLoading && !isOutOfStock && (<span className={'edit-options'} onClick={this.onClickEditOptions}><Tooltip placement=\"top\" text={t('KitItem.Edit_options')} maxLine={2} /></span>)}\n {(!kitItemOrderItemModel.IsIncluded || isOutOfStock) && (<span className='disabled-edit-options'><Tooltip placement=\"top\" text={t('KitItem.Edit_options')} maxLine={2} /></span>)}\n </div>\n )\n }\n\n renderInventoryLabel(className) {\n const { kitItemProductModel } = this.props\n return (\n <span className={className}>\n {kitItemProductModel.Inventory && kitItemProductModel.Inventory.AllowOutOfStockPurchase && <Inventory model={kitItemProductModel.Inventory} minQuantity={kitItemProductModel.Configuration.Quantity.Minimum} />}\n </span>\n )\n }\n\n propertiesModalOnOpened() {\n document.querySelector('.kit-item-properties-modal .modal-title').classList.add('truncate')\n }\n\n render() {\n const { kitItemProductModel, kitItemOrderItemModel, kitItemPriceModel, doLoadIframe, isPriceCalculating, kitItemViewModel, kitQuantity } = this.props\n\n if (!kitItemProductModel || !kitItemOrderItemModel || !kitItemViewModel)\n return null\n\n const { Name, ImageUrl, Thumbnails } = kitItemProductModel\n const { IsIncluded } = kitItemOrderItemModel\n\n const hasProperties = !!kitItemProductModel.Configuration.Properties.length\n\n if (doLoadIframe && IsIncluded && hasProperties && !kitItemViewModel.iframeLoading && !kitItemViewModel.iframeLoaded) {\n this.setKitViewModel(kitItemOrderItemModel.ID, { iframeLoading: true })\n }\n\n let itemClasses = 'kit-item-panel'\n if (!IsIncluded) itemClasses += ' excluded'\n\n let kitItemClasses = 'kit-item'\n if ((kitItemViewModel.isPropertiesValid === false || kitItemViewModel.isQuantityValid === false) && !this.state.isPropertiesOpen) {\n kitItemClasses += ' not-valid'\n }\n else {\n if (IsIncluded && !kitItemViewModel.propsWasOpened && kitItemViewModel.showPropsNotOpenedWarning && hasProperties) {\n kitItemClasses += ' not-edited'\n }\n }\n\n const itemUnitName = kitItemProductModel.Unit.PackType ? kitItemProductModel.Unit.PackType.PluralName : kitItemProductModel.Unit.ItemType ? kitItemProductModel.Unit.ItemType.PluralName : ''\n const OutOfStock = kitItemProductModel.Inventory && isOutOfStock(kitItemProductModel.Inventory.Quantity, kitItemProductModel.Configuration.Quantity.Minimum, kitItemProductModel.Inventory.AllowOutOfStockPurchase)\n\n const itemName = kitItemProductModel.CatalogNumber ? `${Name} / ${kitItemProductModel.CatalogNumber.toString()}` : Name\n\n const priceNotZero = kitItemPriceModel && kitItemPriceModel.Price && kitItemPriceModel.Price.Price !== 0\n return (\n <div className={kitItemClasses} data-qaautomationinfo={kitItemProductModel.FriendlyID}>\n <div className={itemClasses}>\n <div className='item-image' onClick={this.togglePreviewModal}>\n <ImageLoader className=\"image\" src={ImageUrl} />\n </div>\n <div className='item-name-price-quantity'>\n <div className='item-name-and-price'>\n <div className='item-name'>\n <Tooltip placement=\"top\" text={itemName} maxLine={2} />\n {hasProperties && this.renderEditLink('big-screen-only', OutOfStock)}\n {this.renderInventoryLabel('big-screen-only')}\n </div>\n <div className='item-price'>\n {isPriceCalculating && kitItemPriceModel && priceNotZero && <LoadingDots />}\n {!isPriceCalculating && kitItemPriceModel && priceNotZero && <Price model={kitItemPriceModel.Price} isMinimumPrice={kitItemPriceModel.IsMinimumPrice} />}\n </div>\n {hasProperties && this.renderEditLink('medium-screen-only', OutOfStock)}\n {this.renderInventoryLabel('medium-or-small-screen-only')}\n </div>\n {IsIncluded && (!kitItemProductModel.Inventory || kitItemProductModel.Inventory.AllowOutOfStockPurchase === true || kitItemProductModel.Inventory.Quantity >= kitItemProductModel.Configuration.Quantity.Minimum) && <div className=\"quantity\">\n <KitItemQuantity\n onQuantityChange={this.onQuantityChange}\n kitQuantity={kitQuantity}\n productModel={kitItemProductModel}\n orderModel={kitItemOrderItemModel}\n />\n {IsIncluded && <span className='quantity-label'>{itemUnitName}</span>}\n {kitItemProductModel.Unit.PackType &&\n <span className='quantity-per-pack'>\n {t('KitItem.Units_of_measure_notation',\n {\n PackTypeName: kitItemProductModel.Unit.PackType.Name,\n ItemQuantity: kitItemProductModel.Unit.ItemQuantity,\n ItemTypePluralName: kitItemProductModel.Unit.ItemType.PluralName\n })}\n </span>}\n </div>}\n\n {!IsIncluded && OutOfStock && <div className=\"out-of-stock\"><Inventory model={kitItemProductModel.Inventory} minQuantity={kitItemProductModel.Configuration.Quantity.Minimum} /></div>}\n {!IsIncluded && !OutOfStock && <div className=\"add-btn\"><div className=\"btn button button-secondary\" onClick={this.onAdd}>{t('KitItem.Add')}</div></div>}\n {hasProperties && this.renderEditLink('small-screen-only', OutOfStock)}\n\n </div>\n {IsIncluded && <div className=\"remove-btn\" onClick={this.onRemove}>×</div>}\n\n </div>\n <Modal isOpen={this.state.isPropertiesOpen} modalClassName=\"kit-item-properties-modal\" onOpened={this.propertiesModalOnOpened}>\n <ModalHeader><div dangerouslySetInnerHTML={{__html: `${t('KitItem.Edit_options')} - ${Name}`}}/><div className='modal-close'><div className='close-btn' onClick={this.onClickCancel}>×</div></div></ModalHeader>\n <ModalBody>\n {\n !this.state.isMediumBreak &&\n <div className=\"product-thumbnail\"><ImageLoader className=\"image\" src={ImageUrl} /></div>\n }\n <div className=\"scrollable-container\" ref={(ref) => this.scrollableContainer = ref}>\n <Scrollbars className=\"scrollbar\" universal renderThumbHorizontal={props => <div {...props} className=\"thumb-horizontal\" />}\n renderThumbVertical={props => <div {...props} className=\"thumb-vertical\" />} renderView={props => <div {...props} className=\"view\" />} ref={(ref) => this.scrollbars = ref}>\n {\n this.state.isMediumBreak &&\n <div className=\"product-thumbnail\"><ImageLoader className=\"image\" src={ImageUrl} /></div>\n }\n {\n this.state.isPropsModalLoading &&\n <div className=\"properties-loading-container\"><LoadingDots /></div>\n }\n <iframe className={`iframe-modal ${this.state.isPropsModalLoading ? 'iframe-hidden' : ''}`} src={this.iframeSrc} ref={(ref) => this.iframeElementModal = ref} frameBorder=\"0\" height=\"400px\" title=\"Kit Item Modal\" width=\"600px\" scrolling=\"no\" />\n </Scrollbars>\n </div>\n </ModalBody>\n <ModalFooter>\n <div className=\"cancel-btn button button-secondary thin\" onClick={this.onClickCancel}>{t('KitItem.Properties_cancel')}</div>\n <div className=\"save-btn button button-primary thin\" onClick={this.onClickSave}>{t('KitItem.Properties_save')}</div>\n </ModalFooter>\n </Modal>\n {\n doLoadIframe && IsIncluded && hasProperties &&\n <iframe src={this.iframeSrc} ref={(ref) => this.iframeElement = ref} className=\"iframe-hidden\" title='iframe hidden'/>\n }\n\n <Modal isOpen={this.state.isPreviewOpen} modalClassName=\"kit-preview-modal\" toggle={this.togglePreviewModal}>\n <ModalBody>\n <div>\n <div className='modal-close'><div className='close-btn' onClick={this.togglePreviewModal}>×</div></div>\n <div className='modal-title'>\n <Tooltip placement=\"top\" text={Name} maxLine={1} />\n </div>\n <div className='modal-carousel-wrapper'>\n <ImageCarousel id={`kitItemCarousel_${kitItemOrderItemModel.ID}`}\n activeSlide={this.state.activeModalImage}\n images={Thumbnails.map((image) => {\n return {\n Url: image\n }\n })}\n zoomAllowed={!this.state.isMediumBreak}\n />\n </div>\n </div>\n </ModalBody>\n </Modal>\n </div>\n )\n }\n}\n\nexport default withRouter(KitItem)\n","/**\n * A component to display and manage all items of a product of type Kit.\n *\n * @param {object} kitProduct - the kit product that is currently in redux state\n * @param {object} kitOrderItem - the order item of the kit product that is currently in redux state\n * @param {object} kitViewModel - the view model of this kit item, with all the information about displaying himself and its items\n * @param {object} [kitOrderItemPriceModel] - the price model of the kit order item that is currently in redux state\n * @param {boolean} [doValidate] - a flag to denotes a required action of validation, this flag is set from the parent component and passed to the children\n * @param {function} [onCalculatePrice] - a callback to signal that the price should be recalculated\n * @param {function} [onChange] - a callback to signal that one of the items were changed (added/removed/quantity/properties save)\n * @param {boolean} [isPriceCalculating] - a flag to indicate if the price is in loading state, this flag is set from the parent component and passed to the children\n * @param {number} lastChangedOrderItemID - the ID of the last orderItem that were changed, this should come as prop from parent component in order for the parent to manage this in case of concurrent actions from UI\n * @param {number} kitQuantity - the Quantity of the kit itself, to pass to the items, used for validation of quantity.\n */\n\nimport React, { Component } from 'react'\nimport KitItem from './KitItem'\n\nclass KitItemsList extends Component {\n constructor (props) {\n super(props)\n this.state = {\n doValidate: false\n }\n this.doLoadIframes = false\n\n this.onItemChange = this.onItemChange.bind(this)\n }\n\n static getDerivedStateFromProps (props, state) {\n if (props.doValidate && !state.doValidate) {\n return { doValidate: true }\n }\n return { doValidate: false }\n }\n\n componentDidMount () {\n this.doLoadIframes = true\n }\n\n onItemChange (orderItemID, changeType, data) {\n const { onChange } = this.props\n\n onChange && onChange(orderItemID, changeType, data)\n }\n\n render () {\n const { kitProduct, kitOrderItem, kitViewModel, kitOrderItemPriceModel, doValidate, isPriceCalculating, lastChangedOrderItemID, kitQuantity } = this.props\n\n if (!kitProduct || !kitOrderItem || !kitViewModel) {\n return null\n }\n const { Items: productItems } = kitProduct\n let { Items: orderItems } = kitOrderItem\n\n if (!productItems || !orderItems) {\n return null\n }\n return orderItems.map((orderItem, i) => {\n const productItem = productItems.find(\n kitProductItem => kitProductItem.Product.ID === orderItem.ProductID\n )\n const orderItemPriceModel = kitOrderItemPriceModel && kitOrderItemPriceModel.Items.find(\n kitItemPriceModel => kitItemPriceModel.OrderItemID === orderItem.ID\n )\n\n // show loading for price if all these conditions exist:\n // - isPriceCalculating flag is true\n // - the item is included\n // - there is no lastChangedOrderItemID, or there is a lastChangedOrderItemID its this item\n // otherwise: dont show loading\n const isPriceCalculatingForItem =\n isPriceCalculating && orderItem.IsIncluded && (!lastChangedOrderItemID || (lastChangedOrderItemID && lastChangedOrderItemID === orderItem.ID))\n\n const kitItemViewModel = kitViewModel.items[orderItem.ID]\n\n return (\n productItem && (\n <KitItem\n key={i}\n kitItemOrderItemModel={orderItem}\n kitItemProductModel={productItem.Product}\n kitItemViewModel={kitItemViewModel}\n kitItemPriceModel={orderItemPriceModel}\n onChange={this.onItemChange}\n doLoadIframe={this.doLoadIframes}\n doValidate={doValidate}\n isPriceCalculating={isPriceCalculatingForItem}\n kitQuantity={kitQuantity}\n />\n )\n )\n })\n }\n}\n\nexport default KitItemsList\n","/**\n * A component that is loaded for displaying a product of type Kit\n *\n * @param {object} customState - the entire object from redux state\n * @param {object} router - the information about the current route, query param, etc\n *\n */\n\nimport { Component } from 'react'\nimport KitQuantity from './KitQuantity'\nimport KitItemsList from './KitItemsList'\nimport { isOutOfStock } from '../Inventory'\nimport Price from '../Price'\nimport ImageCarousel from '../ImageCarousel'\nimport LoadingDots from '$core-components/LoadingDots'\nimport { Popover, PopoverBody } from 'reactstrap'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { withRouter } from '$ustoreinternal/services/withRouter'\nimport { decodeStringForURL, formatDateByLocale } from '$ustoreinternal/services/utils'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport deepcopy from 'deepcopy'\nimport { throttle } from 'throttle-debounce'\nimport { kitChangeType } from './consts'\nimport './KitProduct.scss'\n\nclass KitProduct extends Component {\n constructor() {\n super()\n this.state = {\n activeCarouselSlide: 0,\n doValidate: false,\n isKitQuantityValid: true,\n isPriceCalculating: true,\n showLoadingOnContinue: true,\n isLoading: false,\n isLoadingReorder: false,\n showWarningPopover: false,\n showErrorPopover: false,\n }\n\n this.initialDataLoaded = false // flag to indicate on ComponentDidUpdate whether the data APIs were already called.\n this.firstPriceCalculated = false\n\n this.ContinueErrorProperties = false\n this.ContinueErrorQuantity = false\n\n this.quantityChangeTriggered = false\n this.showItemsErrorOnKit = false\n this.lastChangedOrderItemID = 0\n\n this.onClickContinue = this.onClickContinue.bind(this)\n this.onClickContinueAnyway = this.onClickContinueAnyway.bind(this)\n this.onQuantityChange = this.onQuantityChange.bind(this)\n this.onCarouselImageChange = this.onCarouselImageChange.bind(this)\n this.onCalculatePrice = this.onCalculatePrice.bind(this)\n this.toggleWarningPopover = this.toggleWarningPopover.bind(this)\n this.toggleErrorPopover = this.toggleErrorPopover.bind(this)\n this.routeToCustomization = this.routeToCustomization.bind(this)\n this.onChange = this.onChange.bind(this)\n this.onReorder = this.onReorder.bind(this)\n }\n\n getData = async function (productID, orderItemID) {\n\n if (!productID) return\n\n const product = await UStoreProvider.api.products.getProductByID(productID, true)\n let orderProduct = null\n\n let currentOrderItemId;\n const { searchParams } = this.props;\n if (searchParams) {\n currentOrderItemId = searchParams.get('OrderItemId')\n }\n\n if (orderItemID || currentOrderItemId) {\n orderProduct = await UStoreProvider.api.orders.getOrderItem(orderItemID || currentOrderItemId)\n } else {\n orderProduct = await UStoreProvider.api.orders.addOrderItem(productID)\n }\n\n const lastOrder = await UStoreProvider.api.orders.getLastOrder(productID)\n\n const kitViewModel = { items: {} }\n orderProduct.Items.forEach(orderItem => {\n kitViewModel.items[orderItem.ID] = {\n iframeLoading: false,\n iframeLoaded: null,\n propsWasOpened: false,\n modalIsOpen: false,\n showPropsNotOpenedWarning: false,\n isPropertiesValid: null,\n isQuantityValid: null\n }\n\n if (orderItem.IsIncluded && product.Items) {\n const productItem = product.Items.find(\n kitProductItem => kitProductItem.Product.ID === orderItem.ProductID\n )\n if (productItem && productItem.Product.Inventory && isOutOfStock(productItem.Product.Inventory.Quantity, productItem.Product.Configuration.Quantity.Minimum, productItem.Product.Inventory.AllowOutOfStockPurchase)) {\n orderItem.IsIncluded = false\n }\n }\n })\n\n UStoreProvider.state.customState.setBulk({ currentProduct: product, currentOrderItem: orderProduct, lastOrder: lastOrder, kitViewModel: kitViewModel })\n }\n\n componentDidMount() {\n window.addEventListener('scroll', this.onScroll, true)\n throttle(250, this.onScroll);\t\t\t\t\t// Call this function once in 250ms only\n\n this.onScroll()\n }\n\n componentDidUpdate() {\n const { customState: { currentProduct } } = this.props\n\n const { customState: { currentOrderItem, kitViewModel } } = this.props\n\n if (!currentOrderItem || !kitViewModel || !currentProduct || !currentProduct.Items) return // we still don't have all data, do not continue.\n\n const { customState: { kitViewModel: { items } } } = this.props\n\n // if this is the first time we are getting the current order Item, and we found items with iframes, start showing loader on continue button, and calculate p\n if (!this.firstPriceCalculated) {\n this.firstPriceCalculated = true\n\n const itemsWithNoProperties = currentOrderItem.Items.filter(orderItem => {\n const productItem = orderItem && currentProduct.Items.find(kitProductItem => orderItem.ProductID === kitProductItem.Product.ID).Product\n return (productItem && !productItem.Configuration.Properties.length)\n }).map(item => item.ID)\n\n //check if there are items which are included and have properties\n const includedItemsWithIframe = currentOrderItem.Items.filter(orderItem => {\n return orderItem.IsIncluded && !itemsWithNoProperties.includes(orderItem.ID)\n })\n\n this.setState({ showLoadingOnContinue: !!includedItemsWithIframe.length })\n\n this.onCalculatePrice()\n .then((res) => res)\n .catch((err) => err)\n return\n }\n\n const includedItems = currentOrderItem.Items.filter(item => item.IsIncluded).map(item => item.ID)\n\n const itemsWithNoProperties = currentOrderItem.Items.filter(orderItem => {\n const productItem = orderItem && currentProduct.Items.find(kitProductItem => orderItem.ProductID === kitProductItem.Product.ID).Product\n return (productItem && !productItem.Configuration.Properties.length)\n }).map(item => item.ID)\n\n //check if all included kit items with properties has finished loading their iframes\n const allIncludedIframesAreLoaded = Object.keys(items).every(key => {\n return !includedItems.includes(key) ||\n (items[key].iframeLoaded && includedItems.includes(key)) ||\n itemsWithNoProperties.includes(key)\n })\n\n //if all included kit items are loaded - remove loading from continue\n if (this.state.showLoadingOnContinue && allIncludedIframesAreLoaded) {\n this.setState({ showLoadingOnContinue: false })\n }\n\n //if the kit quantity was changed and there is at least one item with invalid quantity - show general error on kit quantity\n if (this.quantityChangeTriggered && Object.keys(items).find(key => includedItems.includes(key) && items[key].isQuantityValid === false)) {\n this.showItemsErrorOnKit = true\n }\n\n //if the show general error on kit quantity is shown and all items have valid quantity or are not included - remove general error, remove flag of quantity changed\n if (this.showItemsErrorOnKit && Object.keys(items).every(key => !includedItems.includes(key) || items[key].isQuantityValid)) {\n this.showItemsErrorOnKit = false\n this.quantityChangeTriggered = false\n }\n\n const allItemsValidationReturned = Object.keys(items).every(key => !includedItems.includes(key) || items[key].isPropertiesValid !== null)\n\n //if all items returned from validation with any isValid value:\n // - remove loader on right side\n // - if at least one item is invalid or kit quantity is invalid - do nothing (errors are already shown)\n // - if all items are valid and kit quantity is valid check for warning on continue for not opening all items' props window\n // - if all items' props were opened dont show warning, navigate to next page\n if (this.state.isLoading && allItemsValidationReturned) {\n\n this.setState({ isLoading: false, isLoadingReorder: false, doValidate: false })\n\n //all is valid if kit quantity is valid, and all items have valid properties and valid quantity (or they are initially not included and their quantity in null)\n const isAllValid = this.state.isKitQuantityValid &&\n Object.keys(items).every(key => !includedItems.includes(key) || (items[key].isPropertiesValid && items[key].isQuantityValid)\n )\n\n if (isAllValid) {\n //reset flag for showing validation error popover\n this.ContinueErrorQuantity = this.ContinueErrorQuantity = false\n\n const allOpened = Object.keys(items).every(key => {\n return !includedItems.includes(key) ||\n items[key].propsWasOpened ||\n itemsWithNoProperties.includes(key)\n })\n\n // if at least one is included, has properties and not opened -> show the continue popover\n if (!allOpened) {\n this.setState({ showWarningPopover: !this.state.showWarningPopover })\n this.setAllKitViewModel(items, { showPropsNotOpenedWarning: true })\n return\n }\n\n // if valid and no need for popover, first put the OrderItemID into the URL, for navigation.\n this.routeToCustomization()\n .then((res) => res)\n .catch((err) => err)\n }\n else {\n this.setState({ showErrorPopover: true })\n //if kit quantity is not valid or there is at least one item with invalid quantity - raise flag for quantity error\n this.ContinueErrorQuantity = !this.state.isKitQuantityValid || Object.keys(items).find(key => includedItems.includes(key) && items[key].isQuantityValid === false)\n //if there is at least one item with invalid properties - raise flag for properties error\n this.ContinueErrorProperties = Object.keys(items).find(key => includedItems.includes(key) && items[key].isPropertiesValid === false)\n\n const nonValidItems = document.getElementsByClassName('not-valid')\n nonValidItems && nonValidItems.length && nonValidItems[0].scrollIntoView(true)\n }\n }\n\n //if any of the items has a modal opened, prevent scrolling on the back\n if (Object.keys(items).find(key => items[key].modalIsOpen)) {\n document.querySelector('html').classList.add('modal-open')\n }\n else {\n document.querySelector('html').classList.remove('modal-open')\n }\n\n }\n\n componentWillUnmount() {\n window.removeEventListener('scroll', this.onScroll, true)\n UStoreProvider.state.customState.delete('currentProduct')\n UStoreProvider.state.customState.delete('currentOrderItem')\n UStoreProvider.state.customState.delete('currentOrderItemId')\n UStoreProvider.state.customState.delete('currentOrderItemPriceModel')\n UStoreProvider.state.customState.delete('kitViewModel')\n UStoreProvider.state.customState.delete('lastOrder')\n }\n\n onScroll() {\n // make sure needed HTML elements exist\n const carousel = document.querySelector('.imageCarousel-component')\n const footer = document.querySelector('.footer')\n const stickyPanel = document.querySelector('.sticky-price-panel')\n\n if (!stickyPanel || stickyPanel.length === 0 || !carousel || !footer) return\n\n if (window.scrollY > 80) {\n carousel.classList.add('floating')\n }\n else if (window.scrollY < 80) {\n carousel.classList.remove('floating')\n }\n\n if (footer.getBoundingClientRect().top <= window.innerHeight) {\n stickyPanel.classList.remove('fixed')\n }\n else {\n stickyPanel.classList.add('fixed')\n }\n }\n\n setAllKitViewModel(items, object) {\n const kitViewModelToMerge = { kitViewModel: { items: {} } }\n items && Object.keys(items).forEach(key => {\n kitViewModelToMerge.kitViewModel.items[key] = object\n })\n\n UStoreProvider.state.customState.merge(kitViewModelToMerge)\n }\n\n onClickContinue() {\n\n if (this.state.showLoadingOnContinue || this.state.isLoading) return\n\n const { customState: { currentOrderItem, kitViewModel: { items } } } = this.props\n\n const hasIncluded = currentOrderItem.Items && currentOrderItem.Items.find(item => item.IsIncluded) !== undefined\n\n if (!hasIncluded) return\n\n this.setAllKitViewModel(items, { isPropertiesValid: null })\n this.setState({ doValidate: true, isLoading: true, isLoadingReorder: false })\n }\n\n onClickContinueAnyway() {\n this.routeToCustomization()\n .then((res) => res)\n .catch((err) => err)\n }\n\n async routeToCustomization() {\n const { customState: { currentOrderItem }, asPath, navigate } = this.props\n\n const updatedFromDB = await UStoreProvider.api.orders.updateOrderItem(currentOrderItem.ID, currentOrderItem)\n\n //route only if update succeeded\n if (updatedFromDB) {\n if (!asPath.toLowerCase().includes(('?OrderItemID=').toLowerCase())) {\n const href = `${asPath}?OrderItemID=${currentOrderItem.ID}`\n\n let currentState = window.history.state\n // in Safari, history.state is NULL, so we need to replace it with an object.\n if (currentState === null || currentState === undefined) {\n currentState = { url: '', as: '', options: {} }\n }\n\n currentState.url = href\n currentState.as = href\n\n window.history.replaceState(currentState, '', href)\n }\n\n // now move to the next page (customization)\n navigate(urlGenerator.get({ page: 'customization' }) + `?OrderItemID=${currentOrderItem.ID}`)\n }\n }\n\n onQuantityChange(value, isvalid) {\n const { customState: { currentOrderItem } } = this.props\n\n if (currentOrderItem.Quantity !== value) {\n this.quantityChangeTriggered = true\n this.onChange(null, kitChangeType.KIT_QUANTITY, { quantity: value })\n }\n\n this.setState({ isKitQuantityValid: isvalid })\n\n }\n\n onCarouselImageChange(index) {\n this.setState({ activeCarouselSlide: index })\n }\n\n //this function is called when something has changed - kit_quantity/quantity/remove/add/save - price should be recalculate\n onChange(orderItemID, changeType, data) {\n let updatedKitOrderItem\n let orderItem\n let requestID\n\n //performing a lock in this thread in order to prevent concurrent updates on the OrderItem object\n if (!this.locked) {\n this.locked = true\n\n const { customState: { currentOrderItem } } = this.props\n\n updatedKitOrderItem = deepcopy(currentOrderItem)\n const orderItems = updatedKitOrderItem.Items\n switch (changeType) {\n case kitChangeType.KIT_QUANTITY:\n updatedKitOrderItem.Quantity = parseInt(data.quantity)\n break\n case kitChangeType.QUANTITY:\n orderItem = orderItems.find(item => item.ID === orderItemID)\n orderItem.Quantity = parseInt(data.quantity)\n break\n case kitChangeType.REMOVE:\n orderItem = orderItems.find(item => item.ID === orderItemID)\n orderItem.IsIncluded = false\n break\n case kitChangeType.ADD:\n orderItem = orderItems.find(item => item.ID === orderItemID)\n orderItem.IsIncluded = true\n //TODO: set showLoadingOnContinue: true only if item has properties\n this.setState({ showLoadingOnContinue: true })\n break\n case kitChangeType.SAVE:\n break\n default:\n // do nothing t\n }\n\n //saving the last OrderItemID that made the request in order to know which loader to show\n this.lastChangedOrderItemID = orderItemID\n\n //saving the last requestID in order to know when the last updated price is returned and show it\n requestID = Math.floor(Math.random() * Math.pow(10, 17)) + 1\n this.lastChangeRequestID = requestID\n\n UStoreProvider.state.customState.set('currentOrderItem', updatedKitOrderItem)\n this.locked = false\n }\n\n updatedKitOrderItem && this.onCalculatePrice(updatedKitOrderItem, requestID)\n .then((res) => res)\n .catch((err) => err)\n }\n\n // A method to calculate the price of this kit OrderItem.\n // The price is calculated with the API and change the price model in the state in order to re render all children.\n // Optional parameter:\n // - updatedKitOrderItem - an updated kit OrderItem to perform calculation of price according to, if doesnt exist takes the currentOrderItem from the props\n async onCalculatePrice(updatedKitOrderItem, requestID) {\n const { customState: { currentOrderItem } } = this.props\n\n this.setState({ isPriceCalculating: true })\n\n const kitOrderItemForPrice = updatedKitOrderItem ? updatedKitOrderItem : currentOrderItem\n\n const priceModel = await UStoreProvider.api.orders.getPriceOrderItem(kitOrderItemForPrice.ID, kitOrderItemForPrice)\n\n //validating that the returned price is the one received from the last updated OrderItem object, otherwise discard it.\n if (this.lastChangeRequestID === requestID || !requestID) {\n UStoreProvider.state.customState.set('currentOrderItemPriceModel', priceModel)\n this.setState({ isPriceCalculating: false })\n }\n }\n\n toggleWarningPopover() {\n this.setState({ showWarningPopover: false })\n const notEdited = document.getElementsByClassName('not-edited')\n notEdited && notEdited.length && notEdited[0].scrollIntoView(true)\n }\n\n toggleErrorPopover() {\n this.setState({ showErrorPopover: false })\n }\n\n async onReorder() {\n const { customState: { currentProduct, lastOrder } } = this.props\n this.setState({ isLoading: true, isLoadingReorder: true })\n const newOrder = await UStoreProvider.api.orders.reorder(lastOrder.OrderItemID)\n const newURL = `${urlGenerator.get({ page: 'products', id: currentProduct.FriendlyID, name: decodeStringForURL(currentProduct.Name) })}?OrderItemId=${newOrder.ID}&reorder=true`\n window.location.replace(newURL)\n }\n\n render() {\n if (!this.props.customState) return null\n\n const { customState: { currentProduct, currentOrderItem, lastOrder, kitViewModel, currentOrderItemPriceModel, currentOrderItemId } } = this.props\n\n if (!this.initialDataLoaded && currentProduct) {\n this.initialDataLoaded = true\n\n this.getData(currentProduct.ID, currentOrderItemId)\n .then((res) =>res)\n .catch((err) => err)\n\n return null\n }\n\n const { searchParams } = this.props\n const showReorderLink = !!searchParams.get('reorder')\n\n const { languageCode } = themeContext.get()\n\n if (!currentProduct) return null\n\n const quantityError = this.showItemsErrorOnKit ? t('KitProduct.Validation_kit_quantity_change_invalid_items') : null\n\n const catalogNumber = currentProduct.CatalogNumber ? ' / ' + currentProduct.CatalogNumber : ''\n\n const hasIncluded = !currentOrderItem || !currentOrderItem.Items ? null : currentOrderItem.Items.find(item => item.IsIncluded) !== undefined\n const showQuantity = !currentOrderItem ? false : !(!currentProduct.Configuration.Quantity.Changeable && currentOrderItem.Quantity === 1)\n\n return (\n <div className='kit-product'>\n <div className='main'>\n <div className='relative-size-left desktop-only'>\n <ImageCarousel\n images={currentProduct.Thumbnails.map((image) => {\n return {\n Url: image\n }\n })}\n zoomAllowed={true}\n />\n </div>\n <div className='fixed-size-right'>\n {this.state.isLoading && (\n <div className='right-side-loading-container'>\n <div className='loading-content-container'>\n {this.state.isLoadingReorder && <div className='reorder-loading-msg'>{t('KitProduct.Reorder_loading_msg')}</div>}\n <LoadingDots />\n </div>\n </div>\n )}\n\n <div className='kit-name' dangerouslySetInnerHTML={{ __html: `${currentProduct.Name} ${catalogNumber}` }} />\n {lastOrder && !showReorderLink && <div className='kit-reorder'>\n {t('KitProduct.Last_order_notation', {\n OrderSubmittedDate: formatDateByLocale(lastOrder.SubmittedDate, languageCode)\n })}\n <span className='reorder-link' onClick={this.onReorder}>{t('KitProduct.Reorder')}</span>\n </div>}\n {currentProduct.Description && <div className='kit-description'>\n <div dangerouslySetInnerHTML={{ __html: currentProduct.Description }} />\n </div>}\n <div className='image-carousel mobile-only'>\n <div className='carousel-wrapper'>\n <ImageCarousel\n images={currentProduct.Thumbnails.map((image) => {\n return {\n Url: image\n }\n })}\n zoomAllowed={false} />\n </div>\n </div>\n {showQuantity && currentOrderItem && <span className='kit-quantity'>\n {t('KitProduct.Quantity')}\n <div className='quantity-wrapper'>\n <KitQuantity\n onQuantityChange={this.onQuantityChange}\n productModel={currentProduct}\n orderModel={currentOrderItem}\n />\n {quantityError && (\n <div className='quantity-error'>{quantityError}</div>\n )}\n </div>\n </span>}\n\n <div className='divider' />\n <span className='kit-includes-title'>{t('KitProduct.Kit_includes')}</span>\n <div className='kit-item-list-wrapper'>\n {currentOrderItem && kitViewModel && currentOrderItemPriceModel ?\n <KitItemsList\n kitOrderItem={currentOrderItem}\n kitProduct={currentProduct}\n kitViewModel={kitViewModel}\n kitOrderItemPriceModel={currentOrderItemPriceModel}\n doValidate={this.state.doValidate}\n onCalculatePrice={this.onCalculatePrice}\n onChange={this.onChange}\n isPriceCalculating={this.state.isPriceCalculating}\n lastChangedOrderItemID={this.lastChangedOrderItemID}\n kitQuantity={currentOrderItem.Quantity}\n />\n :\n <div className='list-loader'>\n <LoadingDots />\n </div>\n }\n </div>\n\n <div id='kit-product-popover-container' />\n\n <div className='sticky-price-panel fixed'>\n <span className='total-price'>\n {this.state.isPriceCalculating && <LoadingDots />}\n {!this.state.isPriceCalculating && currentOrderItemPriceModel && <Price model={currentOrderItemPriceModel.Total.Price} isMinimumPrice={currentOrderItemPriceModel.Total.IsMinimumPrice} />}\n </span>\n\n <div\n id='kit-continue-button'\n className='continue-button button button-primary truncate'\n onClick={this.onClickContinue}\n disabled={!hasIncluded || this.state.isLoading}\n >\n {this.state.showLoadingOnContinue ?\n <LoadingDots />\n :\n t('KitProduct.Continue')}\n </div>\n\n {\n this.state.showWarningPopover &&\n <Popover\n className='continue-popover warning'\n container='kit-product-popover-container'\n isOpen={this.state.showWarningPopover}\n placement='top'\n target='kit-continue-button'\n toggle={this.toggleWarningPopover}>\n <PopoverBody>\n <div className='continue-popover-message'>\n {t('KitProduct.Continue_warning_msg')}\n </div>\n <div className='popover-buttons'>\n <div\n className='button btn-popover-cancel'\n onClick={this.toggleWarningPopover} >\n {t('KitProduct.Continue_warning_cancel')}\n </div>\n <div\n className='btn-popover-continue button button-secondary'\n onClick={this.onClickContinueAnyway} >\n {t('KitProduct.Continue_warning_continue')}\n </div>\n </div>\n </PopoverBody>\n </Popover>\n }\n {\n this.state.showErrorPopover &&\n <Popover\n className='continue-popover error'\n container='kit-product-popover-container'\n isOpen={this.state.showErrorPopover}\n placement='top'\n target='kit-continue-button'\n toggle={this.toggleErrorPopover}>\n <PopoverBody>\n <div className='popover-close'><div className='close-btn' onClick={this.toggleErrorPopover}>×</div></div>\n <div className='continue-popover-message'>\n {t('KitProduct.Continue_error_msg')} \n {\n this.ContinueErrorProperties && this.ContinueErrorQuantity ?\n <div>\n <ul>\n <li>{t('KitProduct.Continue_error_edit_msg')}</li>\n <li>{t('KitProduct.Continue_error_quantity_msg')}</li>\n </ul>\n </div>\n :\n this.ContinueErrorProperties ? t('KitProduct.Continue_error_edit_msg') : t('KitProduct.Continue_error_quantity_msg')\n }\n </div>\n </PopoverBody>\n </Popover>\n }\n </div>\n </div>\n </div>\n </div>\n )\n }\n}\nexport default withRouter(KitProduct)\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport Icon from '$core-components/Icon'\nimport { ReactComponent as ErrorIcon } from '$assets/icons/error.svg'\nimport { t } from '$themelocalization'\nimport './Popper.scss'\n\nconst popperPositions = {\n topPrice: {\n refElementSelector: '#total-price-component.total-price',\n location: {\n top: '50px',\n left: '0'\n },\n tipPosition: {\n bottom: '95%',\n left: '10%',\n rotation: '225deg'\n }\n },\n stickyPriceError: {\n refElementSelector: '.sticky-add-to-cart-icon-container',\n location: {\n bottom: '72px',\n right: '0px'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '50%',\n rotation: '45deg'\n }\n },\n stickyPriceWarning: {\n refElementSelector: '.product-sticky-price .price-display',\n location: {\n bottom: '72px',\n right: '0px'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '50%',\n rotation: '45deg'\n }\n },\n bottomPrice: {\n refElementSelector: '.summary-table-row.total-row',\n location: {\n bottom: '35px',\n right: '0px'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '85%',\n rotation: '45deg'\n }\n },\n addToCartButton: {\n refElementSelector: '.add-to-cart-button-wrapper',\n location: {\n bottom: '166px',\n left: '50%',\n transform: 'translateX(-50%)'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '48%',\n rotation: '45deg'\n }\n }\n}\n\nconst isInViewport = (el, top = 140) => {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= top && // header height + tooltip height\n rect.left >= 0 &&\n rect.bottom - rect.height <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nconst setPopperPosition = (popperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton) => {\n if (!popperWrapper || !stickPriceRef|| !topPriceRef|| !bottomPriceRef) {\n return\n }\n const getPosition = () => {\n const stickyPanel = stickPriceRef.current\n if ((!stickyPanel || stickyPanel.style.height === '0px') && forceAddToCartButton) {\n return popperPositions.addToCartButton\n }\n if (popperData.errorType === 'error' && forceAddToCartButton && stickyPanel && stickyPanel.style.height !== '0px') {\n return popperPositions.stickyPriceError\n }\n if (popperData.errorType === 'warning' && stickyPanel && stickyPanel.style.height !== '0px') {\n return popperPositions.stickyPriceWarning\n }\n if (topPriceRef?.current && isInViewport(topPriceRef.current)) {\n return popperPositions.topPrice\n }\n if (bottomPriceRef?.current && isInViewport(bottomPriceRef.current)) {\n return popperPositions.bottomPrice\n }\n return null\n }\n\n const position = getPosition()\n if (position && popperWrapper.current) {\n const refElement = document.querySelector(position.refElementSelector)\n if (refElement) {\n refElement.appendChild(popperWrapper.current)\n refElement.style.setProperty('position', 'relative')\n popperWrapper.current.setAttribute('style', '')\n Object.keys(position.location).forEach((locationPoint) => {\n popperWrapper.current.style.setProperty(locationPoint, position.location[locationPoint])\n })\n if (position.tipPosition && Object.keys(position.tipPosition).length) {\n popperWrapper.current.style.setProperty('--tip-position-bottom', position.tipPosition.bottom)\n popperWrapper.current.style.setProperty('--tip-position-left', position.tipPosition.left)\n popperWrapper.current.style.setProperty('--tip-rotation', position.tipPosition.rotation)\n }\n }\n }\n\n}\n\nconst Popper = ({ errorCode, forceAddToCartButton, resetError, popperAffectedSections, stickPriceRef, topPriceRef, bottomPriceRef }) => {\n const [popperData, setPopperData] = useState({})\n const popperWrapper = useRef(null)\n\n const handleClose = () => {\n setPopperData({})\n resetError()\n }\n\n const setPosition = useCallback(() => {\n setPopperPosition(popperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton)\n }, [popperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton])\n\n const setPositionCallbackRef = useRef(setPosition)\n useEffect(() => {\n setPositionCallbackRef.current = setPosition\n }, [setPosition]);\n\n useEffect(() => {\n const handleScroll = () => {\n setPositionCallbackRef.current()\n }\n\n window.addEventListener('scroll', handleScroll)\n return () => {\n window.addEventListener('scroll', handleScroll)\n }\n }, [])\n\n useEffect(() => {\n const errors = {\n 'SOMETHING_WENT_WRONG': {\n type: 'error',\n message: t('product.error_something_went_wrong')\n },\n 'GET_PRICE': {\n type: 'error',\n message: t('product.price_is_not_valid')\n },\n 'PRICE_CAN_NOT_BE_UPDATED': {\n type: 'warning',\n message: t('product.price_cannot_be_updated')\n },\n 'VALIDATION_ERROR': {\n type: 'error',\n message: t('product.validation_error')\n },\n 'SECTION_ERROR': {\n type: 'error',\n message: t('Product.SectionError', {sections: `\\n${popperAffectedSections.slice(0, 5).join('\\n')}` })\n }\n }\n\n if (errorCode) {\n const newPopperData = { errorType: errors[errorCode].type, errorMessage: errors[errorCode].message }\n setPopperData(newPopperData)\n setPopperPosition(newPopperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton)\n if (popperWrapper.current) {\n popperWrapper.current.style.setProperty('display', 'block')\n popperWrapper.current.children[0].style.setProperty('display', 'flex')\n }\n } else if (errorCode === null) {\n setPopperData({})\n if (popperWrapper.current) {\n popperWrapper.current.style.setProperty('display', 'none')\n popperWrapper.current.children[0].style.setProperty('display', 'none')\n }\n const popperElement = document.getElementById('popper')\n if (popperElement) {\n const popperParentElement = popperElement.parentElement\n popperParentElement.removeChild(popperElement)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errorCode, popperAffectedSections])\n\n return (\n <div ref={popperWrapper} className={`popper-tooltip ${popperData.errorType}`} id=\"popper\" style={{ display: 'none' }}>\n <div className='popper-tooltip-inner' style={{ display: 'none' }}>\n <button className=\"close-popper\" onClick={() => handleClose()}>\n <Icon name=\"close_black.svg\" width=\"10px\" height=\"10px\"/>\n </button>\n <div className='error-icon'>\n <ErrorIcon width='15px' height='15px'/>\n </div>\n <div className='popover-message'>{popperData.errorMessage}</div>\n </div>\n <span className='arrow'/>\n </div>\n )\n}\n\nexport default Popper\n","import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\nimport { t } from '$themelocalization'\nimport { ReactComponent as ErrorIcon } from '$assets/icons/error.svg'\nimport { ReactComponent as PencilIcon } from '$assets/icons/pencil_section.svg'\nimport { ReactComponent as TickIcon } from '$assets/icons/tick.svg'\n\nexport const Section =forwardRef(({\n number, section, children, isOpen, setOpenSection,\n isLastSection, onNext, changed, sectionToScrollTo, sectionErrors\n}, sectionRef) => {\n const sectionContentRef = useRef(null)\n const [hasBeenOpened, setHasBeenOpened] = useState(isOpen)\n const [hasChanged, setHasChanged] = useState(changed)\n\n const contentObserver = new MutationObserver(useCallback(() => {\n if (sectionContentRef.current.style.overflow !== 'hidden') {\n sectionContentRef.current.style.setProperty('max-height', (sectionContentRef.current.scrollHeight + 50) + 'px')\n }\n },[sectionContentRef]))\n\n useEffect(() => {\n if (isOpen) {\n setHasBeenOpened(true)\n sectionContentRef.current.style.setProperty('max-height', (sectionContentRef.current.scrollHeight + 50) + 'px')\n } else {\n sectionContentRef.current.style.setProperty('overflow', 'hidden')\n sectionContentRef.current.style.setProperty('max-height', '0px')\n }\n }, [isOpen])\n\n useEffect(() => {\n setHasChanged(changed)\n }, [changed])\n\n useEffect(() => {\n contentObserver.observe(sectionContentRef.current, { childList: true, subtree: true, attributes: true })\n return () => contentObserver.disconnect()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const onHeaderClick = () => setOpenSection(isOpen ? -1 : number)\n const onHeaderKeyPress = (e) => e.key === 'Enter' && onHeaderClick()\n const transitionEnd = () => {\n if (isOpen) {\n sectionContentRef.current.style.setProperty('overflow', 'unset')\n }\n }\n const hasErrors = sectionErrors.reduce((r, err) => r || err, false)\n\n return (\n <>\n <div className={`section ${isOpen ? 'section-open' : ''} ${hasErrors ? 'section-error' : ''}`} ref={sectionRef}>\n <div className=\"section-header\" onClick={onHeaderClick} onKeyDown={onHeaderKeyPress} tabIndex=\"0\">\n <div className=\"section-title\">\n <span className=\"section-title-id\">{number + 1}. </span>\n <span className=\"section-title-text\">\n {section.name === 'xmpie_product_properties' ? t('xmpie_product_properties') : section.name}</span>\n </div>\n {hasErrors && !isOpen && <ErrorIcon width=\"15px\" height=\"15px\"/>}\n {!hasErrors && hasBeenOpened && hasChanged && !isOpen &&\n <TickIcon className=\"section-tick-icon\" height=\"20px\" width=\"20px\"/>}\n {!hasErrors && (!hasBeenOpened || !hasChanged) && !isOpen &&\n <PencilIcon className=\"section-pencil-icon\" height=\"20px\" width=\"20px\"/>}\n </div>\n <div className={`section-content`} ref={sectionContentRef} onTransitionEnd={transitionEnd} >\n {children}\n <div className=\"button button-primary\" onClick={onNext} onKeyDown={(e) => e.key === 'Enter' && onNext()}\n tabIndex=\"0\">{isLastSection ? t('KitProduct.Continue') : 'Done'}</div>\n </div>\n </div>\n {\n ((!isOpen && hasErrors)) &&\n <div className=\"section-error-msg\">\n {t('product.validation_error')}\n </div>\n }\n </>\n )\n})\n","export type NumberLike = bigint | number\n\nexport const keepUnique = <T>(content: Iterable<T>): T[] => [\n ...new Set(content),\n]\n\nexport const withoutChars = (\n chars: string[],\n charsToExclude: string[],\n): string[] => chars.filter((char) => !charsToExclude.includes(char))\n\nexport const onlyChars = (chars: string[], keepChars: string[]): string[] =>\n chars.filter((char) => keepChars.includes(char))\n\nexport const isIntegerNumber = (n: NumberLike | string) =>\n typeof n === 'bigint' ||\n (!Number.isNaN(Number(n)) && Math.floor(Number(n)) === n)\n\nexport const isPositiveAndFinite = (n: NumberLike) =>\n typeof n === 'bigint' || (n >= 0 && Number.isSafeInteger(n))\n\nexport function shuffle(\n alphabetChars: string[],\n saltChars: string[],\n): string[] {\n if (saltChars.length === 0) {\n return alphabetChars\n }\n\n let integer: number\n const transformed = [...alphabetChars]\n\n for (let i = transformed.length - 1, v = 0, p = 0; i > 0; i--, v++) {\n v %= saltChars.length\n // eslint-disable-next-line no-multi-assign\n p += integer = saltChars[v]!.codePointAt(0)!\n const j = (integer + v + p) % i\n\n // swap characters at positions i and j\n const a = transformed[i]!\n const b = transformed[j]!\n transformed[j] = a\n transformed[i] = b\n }\n\n return transformed\n}\n\nexport const toAlphabet = (\n input: NumberLike,\n alphabetChars: string[],\n): string[] => {\n const id: string[] = []\n let value = input\n\n if (typeof value === 'bigint') {\n const alphabetLength = BigInt(alphabetChars.length)\n do {\n id.unshift(alphabetChars[Number(value % alphabetLength)]!)\n value /= alphabetLength\n } while (value > BigInt(0))\n } else {\n do {\n id.unshift(alphabetChars[value % alphabetChars.length]!)\n value = Math.floor(value / alphabetChars.length)\n } while (value > 0)\n }\n\n return id\n}\n\nexport const fromAlphabet = (\n inputChars: string[],\n alphabetChars: string[],\n): NumberLike =>\n inputChars.reduce<NumberLike>((carry, item) => {\n const index = alphabetChars.indexOf(item)\n if (index === -1) {\n throw new Error(\n `The provided ID (${inputChars.join(\n '',\n )}) is invalid, as it contains characters that do not exist in the alphabet (${alphabetChars.join(\n '',\n )})`,\n )\n }\n if (typeof carry === 'bigint') {\n return carry * BigInt(alphabetChars.length) + BigInt(index)\n }\n const value = carry * alphabetChars.length + index\n const isSafeValue = Number.isSafeInteger(value)\n if (isSafeValue) {\n return value\n }\n\n throwIfBigIntNotAvailable(\n `Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment`,\n )\n\n return BigInt(carry) * BigInt(alphabetChars.length) + BigInt(index)\n }, 0)\n\nconst safeToParseNumberRegExp = /^\\+?\\d+$/\n\nexport const safeParseInt10 = (str: string) => {\n if (!safeToParseNumberRegExp.test(str)) {\n return Number.NaN\n }\n\n const int10 = Number.parseInt(str, 10)\n\n if (Number.isSafeInteger(int10)) {\n return int10\n }\n\n throwIfBigIntNotAvailable(\n 'Unable to encode the provided BigInt string without loss of information due to lack of support for BigInt type in the current environment',\n )\n\n return BigInt(str)\n}\n\nexport const splitAtIntervalAndMap = <T>(\n str: string,\n nth: number,\n map: (n: string) => T,\n): T[] =>\n Array.from<never, T>({ length: Math.ceil(str.length / nth) }, (_, index) =>\n map(str.slice(index * nth, (index + 1) * nth)),\n )\n\nexport const makeAnyOfCharsRegExp = (chars: string[]) =>\n new RegExp(\n chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('|'),\n )\n\nexport const makeAtLeastSomeCharRegExp = (chars: string[]) =>\n new RegExp(\n `^[${chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('')}]+$`,\n )\n\nconst escapeRegExp = (text: string) =>\n text.replace(/[\\s#$()*+,.?[\\\\\\]^{|}-]/g, '\\\\$&')\n\nconst throwIfBigIntNotAvailable = (\n errorMessage: string = 'BigInt is not available in this environment',\n) => {\n if (typeof BigInt !== 'function') {\n throw new TypeError(errorMessage)\n }\n}\n","import type { NumberLike } from './util'\nimport {\n fromAlphabet,\n isIntegerNumber,\n isPositiveAndFinite,\n keepUnique,\n makeAnyOfCharsRegExp,\n makeAtLeastSomeCharRegExp,\n onlyChars,\n safeParseInt10,\n shuffle,\n splitAtIntervalAndMap,\n toAlphabet,\n withoutChars,\n} from './util'\n\nconst MIN_ALPHABET_LENGTH = 16\nconst SEPARATOR_DIV = 3.5\nconst GUARD_DIV = 12\nconst HEXADECIMAL = 16\nconst SPLIT_AT_EVERY_NTH = 12\n\nconst MODULO_PART = 100\nexport default class Hashids {\n private alphabet: string[]\n private seps: string[]\n private guards: string[]\n private salt: string[]\n private guardsRegExp: RegExp\n private sepsRegExp: RegExp\n private allowedCharsRegExp: RegExp\n\n constructor(\n salt = '',\n private minLength = 0,\n alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',\n seps = 'cfhistuCFHISTU',\n ) {\n if (typeof minLength !== 'number') {\n throw new TypeError(\n `Hashids: Provided 'minLength' has to be a number (is ${typeof minLength})`,\n )\n }\n if (typeof salt !== 'string') {\n throw new TypeError(\n `Hashids: Provided 'salt' has to be a string (is ${typeof salt})`,\n )\n }\n if (typeof alphabet !== 'string') {\n throw new TypeError(\n `Hashids: Provided alphabet has to be a string (is ${typeof alphabet})`,\n )\n }\n\n const saltChars = Array.from(salt)\n const alphabetChars = Array.from(alphabet)\n const sepsChars = Array.from(seps)\n\n this.salt = saltChars\n\n const uniqueAlphabet = keepUnique(alphabetChars)\n\n if (uniqueAlphabet.length < MIN_ALPHABET_LENGTH) {\n throw new Error(\n `Hashids: alphabet must contain at least ${MIN_ALPHABET_LENGTH} unique characters, provided: ${uniqueAlphabet.join(\n '',\n )}`,\n )\n }\n\n /** `alphabet` should not contains `seps` */\n this.alphabet = withoutChars(uniqueAlphabet, sepsChars)\n /** `seps` should contain only characters present in `alphabet` */\n const filteredSeps = onlyChars(sepsChars, uniqueAlphabet)\n this.seps = shuffle(filteredSeps, saltChars)\n\n let sepsLength\n let diff\n\n if (\n this.seps.length === 0 ||\n this.alphabet.length / this.seps.length > SEPARATOR_DIV\n ) {\n sepsLength = Math.ceil(this.alphabet.length / SEPARATOR_DIV)\n\n if (sepsLength > this.seps.length) {\n diff = sepsLength - this.seps.length\n this.seps.push(...this.alphabet.slice(0, diff))\n this.alphabet = this.alphabet.slice(diff)\n }\n }\n\n this.alphabet = shuffle(this.alphabet, saltChars)\n const guardCount = Math.ceil(this.alphabet.length / GUARD_DIV)\n\n if (this.alphabet.length < 3) {\n this.guards = this.seps.slice(0, guardCount)\n this.seps = this.seps.slice(guardCount)\n } else {\n this.guards = this.alphabet.slice(0, guardCount)\n this.alphabet = this.alphabet.slice(guardCount)\n }\n\n this.guardsRegExp = makeAnyOfCharsRegExp(this.guards)\n this.sepsRegExp = makeAnyOfCharsRegExp(this.seps)\n this.allowedCharsRegExp = makeAtLeastSomeCharRegExp([\n ...this.alphabet,\n ...this.guards,\n ...this.seps,\n ])\n }\n\n encode(numbers: NumberLike[] | string[] | string): string\n encode(...numbers: NumberLike[]): string\n encode(...numbers: string[]): string\n encode<T extends NumberLike | string>(\n first: T | T[],\n ...inputNumbers: T[]\n ): string {\n const ret = ''\n\n let numbers: T[] = Array.isArray(first)\n ? first\n : [...(first != null ? [first] : []), ...inputNumbers]\n\n if (numbers.length === 0) {\n return ret\n }\n\n if (!numbers.every(isIntegerNumber)) {\n numbers = numbers.map((n) =>\n typeof n === 'bigint' || typeof n === 'number'\n ? n\n : safeParseInt10(String(n)),\n ) as T[]\n }\n\n if (!(numbers as NumberLike[]).every(isPositiveAndFinite)) {\n return ret\n }\n\n return this._encode(numbers as number[]).join('')\n }\n\n decode(id: string): NumberLike[] {\n if (!id || typeof id !== 'string' || id.length === 0) return []\n return this._decode(id)\n }\n\n /**\n * @description Splits a hex string into groups of 12-digit hexadecimal numbers,\n * then prefixes each with '1' and encodes the resulting array of numbers\n *\n * Encoding '00000000000f00000000000f000f' would be the equivalent of:\n * Hashids.encode([0x100000000000f, 0x100000000000f, 0x1000f])\n *\n * This means that if your environment supports BigInts,\n * you will get different (shorter) results if you provide\n * a BigInt representation of your hex and use `encode` directly, e.g.:\n * Hashids.encode(BigInt(`0x${hex}`))\n *\n * To decode such a representation back to a hex string, use the following snippet:\n * Hashids.decode(id)[0].toString(16)\n */\n encodeHex(inputHex: bigint | string): string {\n let hex = inputHex\n switch (typeof hex) {\n case 'bigint':\n hex = hex.toString(HEXADECIMAL)\n break\n case 'string':\n if (!/^[\\dA-Fa-f]+$/.test(hex)) return ''\n break\n default:\n throw new Error(\n `Hashids: The provided value is neither a string, nor a BigInt (got: ${typeof hex})`,\n )\n }\n\n const numbers = splitAtIntervalAndMap(hex, SPLIT_AT_EVERY_NTH, (part) =>\n Number.parseInt(`1${part}`, 16),\n )\n return this.encode(numbers)\n }\n\n decodeHex(id: string): string {\n return this.decode(id)\n .map((number) => number.toString(HEXADECIMAL).slice(1))\n .join('')\n }\n\n isValidId(id: string): boolean {\n return this.allowedCharsRegExp.test(id)\n }\n\n private _encode(numbers: NumberLike[]): string[] {\n let { alphabet } = this\n\n const numbersIdInt = numbers.reduce<number>(\n (last, number, i) =>\n last +\n (typeof number === 'bigint'\n ? Number(number % BigInt(i + MODULO_PART))\n : number % (i + MODULO_PART)),\n 0,\n )\n\n let ret: string[] = [alphabet[numbersIdInt % alphabet.length]!]\n const lottery = [...ret]\n\n const { seps } = this\n const { guards } = this\n\n numbers.forEach((number, i) => {\n const buffer = lottery.concat(this.salt, alphabet)\n\n alphabet = shuffle(alphabet, buffer)\n const last = toAlphabet(number, alphabet)\n\n ret.push(...last)\n\n if (i + 1 < numbers.length) {\n const charCode = last[0]!.codePointAt(0)! + i\n const extraNumber =\n typeof number === 'bigint'\n ? Number(number % BigInt(charCode))\n : number % charCode\n ret.push(seps[extraNumber % seps.length]!)\n }\n })\n\n if (ret.length < this.minLength) {\n const prefixGuardIndex =\n (numbersIdInt + ret[0]!.codePointAt(0)!) % guards.length\n ret.unshift(guards[prefixGuardIndex]!)\n\n if (ret.length < this.minLength) {\n const suffixGuardIndex =\n (numbersIdInt + ret[2]!.codePointAt(0)!) % guards.length\n ret.push(guards[suffixGuardIndex]!)\n }\n }\n\n const halfLength = Math.floor(alphabet.length / 2)\n while (ret.length < this.minLength) {\n alphabet = shuffle(alphabet, alphabet)\n ret.unshift(...alphabet.slice(halfLength))\n ret.push(...alphabet.slice(0, halfLength))\n\n const excess = ret.length - this.minLength\n if (excess > 0) {\n const halfOfExcess = excess / 2\n ret = ret.slice(halfOfExcess, halfOfExcess + this.minLength)\n }\n }\n\n return ret\n }\n\n private _decode(id: string): NumberLike[] {\n if (!this.isValidId(id)) {\n throw new Error(\n `The provided ID (${id}) is invalid, as it contains characters that do not exist in the alphabet (${this.guards.join(\n '',\n )}${this.seps.join('')}${this.alphabet.join('')})`,\n )\n }\n const idGuardsArray = id.split(this.guardsRegExp)\n const splitIndex =\n idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0\n\n const idBreakdown = idGuardsArray[splitIndex]!\n if (idBreakdown.length === 0) return []\n\n const lotteryChar = idBreakdown[Symbol.iterator]().next().value as string\n const idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp)\n\n let lastAlphabet: string[] = this.alphabet\n const result: NumberLike[] = []\n\n for (const subId of idArray) {\n const buffer = [lotteryChar, ...this.salt, ...lastAlphabet]\n const nextAlphabet = shuffle(\n lastAlphabet,\n buffer.slice(0, lastAlphabet.length),\n )\n result.push(fromAlphabet(Array.from(subId), nextAlphabet))\n lastAlphabet = nextAlphabet\n }\n\n // if the result is different from what we'd expect, we return an empty result (malformed input):\n if (this._encode(result).join('') !== id) return []\n return result\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useEffect, useRef, useState } from 'react'\nimport { Section } from './Section'\nimport Icon from '$core-components/Icon'\nimport features from '$features'\nimport Hashids from 'hashids'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './DynamicForm.scss'\n\nconst withCustomProps = (WrappedComponent = {}) => {\n class ConnectedComponent extends React.Component {\n constructor (props) {\n super(props)\n const regex = new RegExp(/[!$%^&*()+|~=`{}[\\]:\";'<>?,./]/, 'g')\n this.id = this.props.id.replace('root_', '').replace(regex, '')\n }\n\n onDucChange = (value, errors = [], skipValidation = false) => {\n const newDucValue = value === 'default' ? undefined : value\n const schemaErrors = !value && this.props.uiSchema['ui:errorMessages']\n ? Object.values(this.props.uiSchema['ui:errorMessages']).map((err) => err)\n : []\n const errSchema = { [this.props.id]: { __errors: [...schemaErrors, ...errors] } }\n this.props.onChange(this.props.id, newDucValue === '__xmpie__clear__' ? '' : newDucValue, errSchema, skipValidation)\n }\n\n render () {\n const hashids = new Hashids(this.id)\n const hashedID = hashids.encode(1, 2, 3)\n\n return (\n <div className={`a${hashedID}`}>\n <WrappedComponent\n {...this.props}\n id={this.id}\n disabled={this.props.readonly}\n onChange={this.onDucChange}\n />\n </div>\n )\n }\n }\n\n return ConnectedComponent\n}\n\nconst widgets = window.uStoreDucs.reduce((r, duc) => ({ ...r, [duc.name]: withCustomProps(duc.component) }), {})\n\nexport const sectionSplitter = (properties, nameOfSectionToKeepOpen, changedSections) => {\n const sections = Object.values(properties).reduce((r, property) => {\n if (property.uiSchema['ui:options'].section !== r.lastSectionName) {\n r.sections.push({\n name: property.uiSchema['ui:options'].section,\n properties: [property],\n changed: changedSections[r.sections.length] || false,\n })\n r.lastSectionName = property.uiSchema['ui:options'].section\n } else {\n r.sections[r.sections.length - 1].properties.push(property)\n }\n return r\n }, { sections: [], lastSectionName: null })\n\n return sections.sections\n}\n\nconst checkIfPropertyDependersHaveDefaultValueSelected = (property, formData) =>\n property.depended !== null &&\n formData[property.parent] === property.condition.enum[0] ?\n checkIfPropertyDependersHaveDefaultValueSelected(property.depended, formData) :\n formData[property.parent] === property.condition.enum[0]\n\nconst Property = ({ property, errors, handlePropertyChange, internalFormData }) => {\n\n if ((\n property.depended && checkIfPropertyDependersHaveDefaultValueSelected(property.depended, internalFormData)) ||\n !property.depended\n ) {\n\n const WidgetComponent = widgets[property.uiSchema['ui:widget']]\n return (\n <div key={property.id}\n className={`duc-wrapper \n ${property.uiSchema['ui:options'].visible ? '' : 'hidden'}\n ${errors[property.id] && errors[property.id].errors.length && errors[property.id].show ? 'errors' : ''}\n `}>\n <div className=\"duc-head\">\n <label htmlFor={property.id} className=\"duc-title\">\n {property.title}\n {property.required\n ? <span className=\"required-field\">*</span>\n : null\n }\n </label>\n {property.description &&\n <span className=\"duc-description\">\n <Icon name=\"info.svg\" width=\"16px\" height=\"16px\" className=\"info-icon\" title=\"\"/>\n <div className=\"duc-description-text\">{property.description}</div>\n </span>\n }\n {property.custom.info &&\n <span className=\"info-icon\">(i)\n <span className=\"tooltip-text\" dangerouslySetInnerHTML={{ __html: property.custom.info }}/>\n </span>\n }\n </div>\n <WidgetComponent\n features={features}\n formContext={{ UStoreProvider }}\n id={property.id}\n onChange={handlePropertyChange}\n onBlur={(id, value, errorsFromProperty, skipValidation) =>\n value && handlePropertyChange(id, value, errorsFromProperty || [], skipValidation)\n }\n options={property.uiSchema['ui:options']}\n readonly={property.uiSchema['ui:readonly']}\n required={property.required}\n schema={property.propertySchema}\n t={t}\n uiSchema={property.uiSchema}\n value={internalFormData[property.id]}\n />\n {\n errors[property.id] &&\n errors[property.id].errors &&\n errors[property.id].show\n ? errors[property.id].errors.map((error) => {\n return (\n <div className=\"duc-error\" key=\"err\">\n <div className=\"error-text\">{error}</div>\n </div>\n )\n })\n : null\n }\n </div>\n )\n }\n return null\n}\n\nconst getFirstSectionWithErrors = (sections, errors) => {\n const sectionWithErrors = sections.map((section) => {\n return section.properties.reduce((r, property) => r || (errors[property.id] && errors[property.id].show), false)\n })\n for (let i = 0; i < sectionWithErrors.length; i++) {\n if (sectionWithErrors[i]) {\n return i\n }\n }\n return -1\n}\n\nconst DynamicForm = ({ errors, excelPricingEnabled, formData, onChange, properties, sectionToOpen }) => {\n const [internalFormData, setInternalFormData] = useState(formData || {})\n const [openSection, setOpenSection] = useState(0)\n const [sections, setSections] = useState([])\n const [changedSections, setChangedSections] = useState({})\n const sectionsRef = useRef({})\n\n useEffect(() => formData && setInternalFormData(formData), [formData])\n\n// eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => setSections(sectionSplitter(properties, openSection, changedSections)), [properties])\n\n useEffect(() => {\n if (sectionToOpen && sectionToOpen !== openSection) {\n if (sectionToOpen < -2) {\n const firstSectionWithErrors = getFirstSectionWithErrors(sections, errors)\n setOpenSection(firstSectionWithErrors)\n scrollToElement(sectionsRef.current[firstSectionWithErrors])\n return\n }\n setOpenSection(sectionToOpen)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sectionToOpen])\n\n const handlePropertyChange = (id, value, errorsFromProperty, skipValidation = false) => {\n const sectionIndex = sections.findIndex(section => section.properties.some(property => property.id === id))\n setChangedSections({ ...changedSections, [sectionIndex]: true })\n\n const updatedErrors = Object.keys(errors)\n .reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: (errorsFromProperty[propertyId] &&\n errorsFromProperty[propertyId].__errors) || errors[propertyId].errors\n }), {})\n setInternalFormData({\n ...internalFormData,\n [id]: value\n })\n\n onChange(id, value, updatedErrors, {}, skipValidation)\n }\n\n const onNextSection = () => {\n const sectionProps = sections[openSection].properties\n const sectionChanges = sectionProps.reduce((acc, prop) => ({ ...acc, [prop.id]: prop.value || '' }), {})\n const changedPropList = sectionProps.map(prop => prop.id)\n setInternalFormData({\n ...internalFormData, ...sectionChanges\n })\n setChangedSections({ ...changedSections, [openSection]: true })\n const currentErrors = Object.entries(errors).reduce((acc, [key, value]) => ({ ...acc, [key]: value.errors }), {})\n onChange(changedPropList, null, currentErrors, sectionChanges, false)\n const nextSectionIndex = openSection + 1\n if (nextSectionIndex < sections.length) {\n setOpenSection(nextSectionIndex)\n scrollToElement(sectionsRef.current[nextSectionIndex])\n } else {\n setOpenSection(-1)\n }\n }\n\n if (!Object.keys(properties).length) return null\n\n if (sections.length < 2) {\n return Object.values(properties).map((property) => {\n return (<Property property={property} errors={errors} handlePropertyChange={handlePropertyChange}\n internalFormData={internalFormData}/>)\n })\n }\n\n const getSectionErrors = (section, index) => {\n if (changedSections[index] && openSection !== index) {\n return section.properties.map((prop) => errors[prop.id].errors.length > 0)\n }\n return section.properties.map((prop) => errors[prop.id].show && errors[prop.id].errors.length > 0)\n }\n\n return sections.map((section, index) => (\n <Section key={section.name} number={index}\n setOpenSection={(sectionNumber) => setOpenSection(sectionNumber)}\n section={section} sections={sections}\n isOpen={openSection === index}\n isLastSection={sections.length - 1 !== index}\n onNext={onNextSection}\n changed={section.changed}\n sectionToScrollTo={openSection}\n sectionErrors={getSectionErrors(section, index)}\n ref={(ref) => sectionsRef.current[index] = ref}\n >\n {section.properties.map((property) => (\n <Property key={property.id} property={property} errors={errors} handlePropertyChange={handlePropertyChange}\n internalFormData={internalFormData}/>\n ))}\n </Section>\n ))\n}\n\nexport default DynamicForm\n\nfunction smoothScroll (target, { duration = 100, offset = 0, container = document.body }) {\n const targetPosition = target.offsetTop - offset\n const startPosition = container.scrollTop\n const distance = targetPosition - startPosition\n\n let start = null\n\n const animation = (currentTime) => {\n if (!start) start = currentTime\n const timeElapsed = currentTime - start\n const run = ease(timeElapsed, startPosition, distance, duration)\n container.scrollTop = run\n if (timeElapsed < duration) {\n requestAnimationFrame(animation)\n }\n }\n\n const ease = (t, b, c, d) => {\n t /= d / 2\n if (t < 1) return c / 2 * t * t + b\n t--\n return -c / 2 * (t * (t - 2) - 1) + b\n }\n\n requestAnimationFrame(animation)\n}\n\nfunction scrollToElement (element) {\n setTimeout(() => {\n const header = document.querySelector('.header')\n const headerHeight = header ? header.offsetHeight + 20 : 20\n smoothScroll(element, { offset: headerHeight })\n\n }, 400)\n}\n\n","import React from 'react'\nimport './ErrorBalloon.scss'\nimport Icon from '$core-components/Icon'\n\nconst ErrorBalloon = ({ children, className }) => {\n return <div className={`error-balloon ${className}`}>\n <div className=\"error-balloon-container\">\n <Icon name=\"error.svg\" width=\"13px\" height=\"13px\"/>\n <div className=\"error-balloon-children-container\">\n {children}\n </div>\n </div>\n </div>\n}\n\nexport default ErrorBalloon\n","import React from 'react'\nimport { t } from '$themelocalization'\nimport ErrorBalloon from '../ErrorBalloon'\n\nconst PreviewErrorBalloon = ({ poofPreviewError }) => poofPreviewError ?\n <ErrorBalloon className=\"proof-preview-failure\">\n {t('productProof.PreviewFailure')}\n </ErrorBalloon> : null\n\nexport default PreviewErrorBalloon\n","import React from 'react'\nimport './ProductDetails.scss'\nimport Inventory from './Inventory'\nimport { t } from '$themelocalization'\nimport { formatDateByLocale } from '$ustoreinternal/services/utils'\nimport Slot from \"../widgets/Slot\";\n\n/**\n * A component that is loaded for displaying the main details of the product (name, description, inventory, reorder)\n *\n * @param {object} productModel - the productModel that contains the details of the product.\n * @param {object} reorderModel - the object (if exist) that contains the reorder details for the product.\n * @param {function} onReorder - the callback function to be called when the reorder link is clicked.\n * @param {string} langCode - the locale code for date conversion.\n * @param {string} className -the class name to be added to the main container\n *\n */\n\nconst ProductDetails = ({ className, productModel, onReorder, reorderModel, langCode }) => {\n if (!productModel || Object.keys(productModel).length === 0) {\n return null\n }\n\n const displayName = `${productModel.Name} ${productModel.CatalogNumber ? ' / ' + productModel.CatalogNumber : ''}`\n\n const pluralName = productModel.Unit.PackType ? productModel.Unit.PackType.PluralName : productModel.Unit.ItemType.PluralName\n const itemName = productModel.Unit.PackType ? productModel.Unit.PackType.Name : productModel.Unit.ItemType.Name\n\n return <div className={`${className} product-details`}>\n <Slot name=\"static_product_above_name\" />\n <div className='product-name' dangerouslySetInnerHTML={{ __html: displayName }} />\n {reorderModel && <div className='product-reorder'>\n {t('KitProduct.Last_order_notation', {\n OrderSubmittedDate: formatDateByLocale(reorderModel.SubmittedDate, langCode)\n })}\n <span className='reorder-link' onClick={onReorder}>{t('KitProduct.Reorder')}</span>\n </div>}\n {productModel.Inventory && <div className='product-inventory'>\n <Inventory hideInStock={false}\n model={productModel.Inventory}\n minQuantity={productModel.Configuration.Quantity.Minimum}\n pluralName={pluralName}\n singleName={itemName}\n />\n </div>}\n {productModel.Description && <div className='product-description'>\n <div className='product-description' dangerouslySetInnerHTML={{ __html: productModel.Description }} />\n </div>}\n </div>\n}\n\nexport default ProductDetails\n","import React from 'react'\nimport './RadioGroup.scss'\n\n// option:\n// {\n// value: string\n// label: string\n// }\n\nconst RadioGroup = (props) => {\n const { className, groupName, options, selectedValue, onChange } = props\n\n if (!options || options.length === 0 || !groupName) {\n return null\n }\n\n return <div className={`${className} radio-group`}>\n {\n options.map((opt) => {\n return <label key={opt.value} className='radio-button'>{opt.label}\n {opt.value === selectedValue\n ? <input key={`input_${opt.value}`} type='radio' data-qaautomationinfo={opt.value} data-isselected={true} checked='checked' name={groupName} onChange={onChange.bind(this, opt.value, opt)} id='ship'/>\n : <input key={`input_${opt.value}`} type='radio' data-qaautomationinfo={opt.value} data-isselected={false} name={groupName} onChange={onChange.bind(this, opt.value, opt)} id='mail'/>\n }\n <span className='radio-checkmark' />\n </label>\n })\n }\n </div>\n}\n\nexport default RadioGroup\n","import React, { Component } from 'react'\nimport './ProductDeliveryMethod.scss'\nimport RadioGroup from '$core-components/RadioGroup'\nimport { t } from '$themelocalization'\n\n/**\n * A component that is\n *\n * @param {string} className -\n * @param {object} productModel -\n * @param {function} onDeliveryChange -\n * @param {number} currentDeliveryMethod\n * @param {string} currentDeliveryServiceID\n * @param {array} deliveryServices\n *\n */\n\nclass ProductDeliveryMethod extends Component {\n deliveryOptions = []\n\n constructor(props) {\n super(props)\n\n this.state = {\n selectedDelivery: props.currentDeliveryServiceID ? props.currentDeliveryServiceID : props.currentDeliveryMethod,\n }\n }\n\n componentDidMount() {\n const { onDeliveryChange, currentDeliveryMethod, currentDeliveryServiceID } = this.props\n\n onDeliveryChange && onDeliveryChange(currentDeliveryMethod, currentDeliveryServiceID, true)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n const { currentDeliveryServiceID, currentDeliveryMethod } = this.props\n\n if (currentDeliveryServiceID !== prevProps.currentDeliveryServiceID || currentDeliveryMethod !== prevProps.currentDeliveryMethod)\n this.setState({\n selectedDelivery: currentDeliveryServiceID ? currentDeliveryServiceID : currentDeliveryMethod\n })\n }\n\n onDeliveryChanged = (value, obj) => {\n const { onDeliveryChange } = this.props\n\n this.setState({ selectedDelivery: value })\n onDeliveryChange && onDeliveryChange(obj && obj.isMailing ? 2 : value, obj && obj.isMailing ? value : null)\n }\n\n render() {\n const { className, productModel, deliveryServices } = this.props\n\n if (!productModel) { // || !isMultiple || !productModel.Configuration.Delivery.Shipping.Enabled && !productModel.Configuration.Delivery.Mailing.Enabled) {\n return null\n }\n\n this.deliveryOptions = [\n {\n value: 1,\n label: t('product.shipping'),\n enabled: productModel.Configuration && productModel.Configuration.Delivery && productModel.Configuration.Delivery.Shipping.Enabled,\n isMailing: false\n },\n // { value: 2, label: 'Mail Drop', enabled: productModel.Configuration.Delivery.Mailing.Enabled }\n ]\n if (deliveryServices && deliveryServices.MailingServices && deliveryServices.MailingServices.length) {\n deliveryServices.MailingServices.forEach((service) => {\n this.deliveryOptions.push(\n {\n value: service.ID,\n label: service.Name,\n enabled: productModel.Configuration && productModel.Configuration.Delivery && productModel.Configuration.Delivery.Mailing.Enabled,\n isMailing: true\n })\n })\n }\n\n const enabledOptions = this.deliveryOptions.filter(item => item.enabled)\n\n if (!enabledOptions || enabledOptions.length <= 1) {\n return null\n }\n\n return <div className={`${className} product-delivery-method`}>\n <div className='delivery-method'>\n <div className='delivery-method-label'>\n <span>{t('product.delivery')}</span><span className='required-indicator'>*</span>\n </div>\n <RadioGroup\n groupName='delivery'\n className={'static-delivery'}\n options={this.deliveryOptions.filter(d => d.enabled)}\n selectedValue={this.state.selectedDelivery}\n onChange={this.onDeliveryChanged}\n />\n </div>\n </div>\n }\n}\n\nexport default ProductDeliveryMethod\n","import React, { forwardRef } from 'react'\nimport Price from './Price'\nimport LoadingDots from '$core-components/LoadingDots'\nimport { t } from '$themelocalization'\nimport './ProductOrderSummary.scss'\nimport Slot from '../widgets/Slot'\n\nconst ProductOrderSummary = forwardRef(({\n currency,\n className,\n productModel,\n quantity,\n priceModel,\n isPriceCalculating,\n deliveryMethod,\n taxFormatType\n }, ref) => {\n\n if (!productModel || !priceModel || !productModel.HasPricing || priceModel.Price === null) return null\n\n const itemUnitName = productModel.Unit.PackType\n ? `(${quantity} ${quantity.toString() === '1' ? productModel.Unit.PackType.Name : productModel.Unit.PackType.PluralName})`\n : productModel.Unit.ItemType\n ? `(${quantity} ${quantity.toString() === '1' ? productModel.Unit.ItemType.Name : productModel.Unit.ItemType.PluralName})`\n : ''\n\n return <div className={`${className} product-order-summary`}>\n <Slot name=\"static_product_above_summary\"/>\n <div className=\"summary-header\">{t('product.summary')}</div>\n\n <div className={`summary-table${taxFormatType === 3 ? ' custom-price' : ''}`}>\n {/* <div className={`summary-table`}> */}\n <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.product_total', { itemUnitName })} </div>\n <div className=\"summary-table-value\">{isPriceCalculating ? <LoadingDots/>\n : priceModel.IsMinimumPrice ? <span>-</span> : <Price showCurrency={false}\n model={{ Price: priceModel.ProductPrice, Tax: 0 }}\n isMinimumPrice={false}\n overridePriceFormat={'{Price}'}/>}\n </div>\n </div>\n {deliveryMethod === 1 && <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.shipping_message')}</div>\n </div>}\n {deliveryMethod === 2 && <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.mailiing_fee')}</div>\n <div className=\"summary-table-value\">{isPriceCalculating ? <LoadingDots/>\n : priceModel.IsMinimumPrice ? <span>-</span> : <Price showCurrency={false}\n model={{ Price: priceModel.MailingFee, Tax: 0 }}\n isMinimumPrice={false}\n overridePriceFormat={'{Price}'}/>}\n </div>\n </div>}\n {(taxFormatType === 3 || taxFormatType === 2) && <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.tax')}</div>\n <div className=\"summary-table-value\">{isPriceCalculating ? <LoadingDots/>\n : priceModel.IsMinimumPrice ? <span>-</span> : <Price showCurrency={false}\n model={{ Price: priceModel.Price.Tax, Tax: 0 }}\n isMinimumPrice={false}\n overridePriceFormat={'{Price}'}/>}\n </div>\n </div>}\n <div className=\"summary-table-row total-row\" ref={ref}>\n <div className=\"summary-table-label total\">{t('productPrice.total_price', { currency })}</div>\n <div className=\"summary-table-value total\">{isPriceCalculating ? <LoadingDots/>\n : <Price showCurrency={false} model={priceModel.Price} isMinimumPrice={priceModel.IsMinimumPrice}/>}\n </div>\n </div>\n </div>\n <Slot name=\"static_product_below_summary\"/>\n </div>\n\n }\n)\n\nexport default ProductOrderSummary\n","import React, { forwardRef } from 'react'\nimport Price from './Price'\nimport Icon from '$core-components/Icon'\nimport LoadingDots from '$core-components/LoadingDots'\nimport './ProductStickyPrice.scss'\n\nconst ProductStickyPrice = forwardRef(({\n priceModel,\n addToCartBtnText,\n disabled,\n onClick,\n longPrice,\n isPriceLoading,\n showMinimumPrice,\n productThumbnails,\n onImageClick,\n lastViewImageId\n }, ref) => {\n const image = (productThumbnails && productThumbnails.Thumbnails && productThumbnails.Thumbnails.length)\n ? productThumbnails.Thumbnails[lastViewImageId?lastViewImageId:0] : null;\n return (\n <div className='product-sticky-price'>\n <div className=\"sticky-container\">\n {image &&\n <div className=\"sticky-image-block\" onClick={onImageClick}>\n <img className=\"block-reload\" key={image.Url} height={50} src={image.Url} alt={image.DisplayName}/>\n </div>\n }\n\n <div className={`total-price${longPrice ? ' long-price' : ''}${!priceModel ? ' button-only' : ''}`}>\n {priceModel\n ?\n (<>\n <span className={`${isPriceLoading ? 'text-hidden' : ''}`}>\n <Price\n showCurrency\n model={priceModel.Price}\n isMinimumPrice={showMinimumPrice}/>\n </span>\n {isPriceLoading && <LoadingDots/>}\n <div className='filler'/>\n </>)\n : null\n }\n <div className='sticky-add-to-cart-icon-container'>\n {image === null &&\n <span className='add-to-cart-icon-wrapper' onClick={() => !disabled ? onClick('sticky_add_button') : undefined}>\n <Icon id='sticky-add-to-cart-icon' className='sticky-add-to-cart-icon' name='add_to_cart.svg'\n width='26px'\n height='26px'\n onClick={() => !disabled ? onClick('sticky_add_icon') : undefined}/>\n </span>\n }\n <div\n id='sticky-add-to-cart-button'\n className={'button button-secondary sticky-add-to-cart-button'}\n onClick={() => !disabled ? onClick('sticky_add_button') : undefined} ref={ref}>\n <span className={`${disabled ? 'text-hidden' : ''}`}>{addToCartBtnText}</span>\n {disabled && <LoadingDots/>}\n </div>\n </div>\n\n </div>\n </div>\n {image\n &&\n (<span className='add-to-cart-icon-wrapper'>\n <Icon id='sticky-add-to-cart-icon' className='sticky-add-to-cart-icon' name='add_to_cart.svg'\n width='26px'\n height='26px'\n onClick={() => !disabled ? onClick('sticky_add_icon') : undefined}/>\n </span>)\n }\n </div>\n )\n})\n\nexport default ProductStickyPrice\n","import React, { useEffect, useState } from 'react'\nimport { ReactComponent as LeftArrow } from '$assets/icons/left_arrow.svg'\nimport { ReactComponent as RightArrow } from '$assets/icons/right_arrow.svg'\nimport { Carousel, CarouselItem } from 'reactstrap'\nimport ImageZoom from '$core-components/ImageZoom'\nimport DotCarousel from '../DotCarousel'\nimport { useSwipeable } from 'react-swipeable'\nimport './DynamicImageViewer.scss'\n\nconst DynamicImageViewer = ({thumbnails, onChange, disabled}) => {\n const [images, setImages] = useState([])\n const [activeImage, setActiveImage] = useState(0)\n const [animating, setAnimating] = useState(false)\n const [zoomed, setZoomed] = useState(false)\n useEffect(() => {\n setImages(thumbnails)\n setActiveImage(0)\n },[thumbnails])\n\n useEffect(() => {\n if (onChange) {\n onChange(activeImage)\n }\n }, [activeImage, onChange])\n\n const next = () => {\n if (animating) return\n const nextIndex = activeImage === images.length - 1 ? 0 : activeImage + 1\n setActiveImage(nextIndex)\n }\n\n const previous = () => {\n if (animating) return\n const nextIndex = activeImage === 0 ? images.length - 1 : activeImage - 1\n setActiveImage(nextIndex)\n }\n\n const handlers = useSwipeable({\n onSwipedLeft: () => images.length > 1 && next(),\n onSwipedRight: () => images.length > 1 && previous(),\n preventDefaultTouchmoveEvent: true,\n trackTouch: true,\n })\n\n const handleImageZoom = (zoom) => {\n setZoomed(zoom)\n }\n return <>\n {!zoomed && images?.length > 1 &&\n <span className=\"preview-arrows-left\">\n <LeftArrow width=\"40px\" height=\"40px\" onClick={previous} />\n </span>\n }\n {images?.length > 0 &&\n <div className=\"preview-image dynamic-product-approval\" {...handlers}>\n <Carousel\n interval={false}\n previous={previous}\n next={next}\n activeIndex={activeImage}>\n {images.map(image => (<CarouselItem\n key={image.Url}\n onExiting={() => setAnimating(true)}\n onExited={() => setAnimating(false)}\n >\n <ImageZoom src={images[activeImage].Url} onImageZoomed={(zoom) => handleImageZoom(zoom)} isStretched={true}/>\n </CarouselItem>))}\n </Carousel>\n </div>}\n {!zoomed &&\n <>\n {images?.length > 1 &&\n <span className=\"preview-arrows-right\">\n <RightArrow width=\"40px\" height=\"40px\" onClick={next} />\n </span>\n }\n <div className=\"preview-page-title\">\n {images?.length > 1 && <span>{images[activeImage].DisplayName}</span>}\n </div>\n <DotCarousel images={images} active={activeImage} disabled={animating || disabled} onDotClick={(id) => setActiveImage(id)} />\n </>\n\n }\n\n\n </>\n}\n\nexport default DynamicImageViewer\n","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport './ProductThumbnailsPreview.scss'\nimport DynamicImageViewer from './DynamicImageViewer'\nimport ErrorBalloon from '../ErrorBalloon'\nimport { t } from '$themelocalization'\n\nconst ProofErrorBalloon = ({ show }) => show &&\n <ErrorBalloon\n className=\"mobile-preview-failure\">{t('productProof.PreviewFailure')}</ErrorBalloon>\n\nconst ProductThumbnailsPreview = ({\n productThumbnails,\n isModalOpen,\n onCloseModal,\n modalClassName,\n onImageChange,\n poofPreviewError,\n}) => {\n\n return (\n <Modal toggle={onCloseModal} isOpen={isModalOpen} modalClassName={`${modalClassName}`}>\n <div className=\"modal-close\">\n <div className=\"close-btn\" onClick={onCloseModal}>×</div>\n </div>\n <ModalBody>\n <div className=\"thumbnail-modal-image mobile\">\n <ProofErrorBalloon show={poofPreviewError}/>\n <DynamicImageViewer\n thumbnails={productThumbnails.Thumbnails}\n onChange={(id) => onImageChange(id)}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ProductThumbnailsPreview\n","import React, { useEffect, useState } from 'react'\nimport { t } from '$themelocalization'\n\nconst RefreshPreviewButton = ({showRefreshPreview, onProofPreviewClick, disabled}) => {\n const [isDisabled, setIsDisabled] = useState(false)\n\n useEffect(() => {\n setIsDisabled(disabled)\n }, [disabled])\n\n return showRefreshPreview ?\n <div className=\"button button-secondary refresh-preview\" disabled={isDisabled} onClick={onProofPreviewClick}>\n {t('productProof.RefreshPreview')}\n </div> : null\n}\n\nexport default RefreshPreviewButton\n","import './ProductLayout.scss'\n\n/**\n * A component that is loaded for displaying a product of type Kit\n *\n * @param {string} className -the class name to be added to the main container\n *\n * @param children\n */\n\nconst ProductLayout = ({ className, children, dynamic }) => {\n if (!children) {\n return null\n }\n\n return <div className={`${className} product-layout`}>\n <div className={`main-wrapper ${dynamic ? 'dynamic' : 'static'}`}>\n <div className='left'>\n {children.find((child) => { return child.type === 'left' })}\n </div>\n <div className='right'>\n {children.find((child) => { return child.type === 'right' })}\n </div>\n </div>\n </div>\n}\n\nexport default ProductLayout\n","import React, { useState } from 'react'\nimport { t } from '$themelocalization'\nimport { ReactComponent as ProofIcon } from '$assets/icons/proof.svg'\n\nconst Proof = ({ onToggle, hideLink, currentProduct, orderItemId, isMobile, hasThumbnails }) => {\n const [fileUrl] = useState(\n currentProduct && currentProduct.Proof ? `${currentProduct.Proof.Url}&OrderItemID=${orderItemId}` : null\n )\n const [isDownloadProof] = useState(\n currentProduct && currentProduct.Proof &&\n ((isMobile && !currentProduct.Proof.MimeType.startsWith('image/')) ||\n (!isMobile && currentProduct.Proof.MimeType !== 'application/pdf' &&\n !currentProduct.Proof.MimeType.startsWith('image/')))\n )\n\n const handleModalToggle = () => {\n onToggle()\n }\n\n if (hideLink) return null\n if (!isMobile) {\n if (isDownloadProof) {\n return (\n <a download className=\"view-proof-wrapper desktop\" href={fileUrl} >\n <div className=\"view-proof\">\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n <div className=\"view-proof-title\">{t('product.view_proof')}</div>\n </div>\n </a>\n )\n }\n\n return <div className=\"view-proof-wrapper desktop\" onClick={handleModalToggle} >\n <div className=\"view-proof\">\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n <div className=\"view-proof-title\">{t('product.view_proof')}</div>\n </div>\n </div >\n } else {\n if (isDownloadProof) {\n return <a download className={`view-proof-wrapper mobile ${hasThumbnails ? '' : 'no-thumbs'}`} href={fileUrl}>\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n </a>\n }\n return <div className={`view-proof-wrapper mobile ${hasThumbnails ? '' : 'no-thumbs'}`} onClick={handleModalToggle}>\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n </div>\n }\n}\n\nexport default Proof\n","import React, {forwardRef} from 'react'\nimport LoadingDots from '$core-components/LoadingDots'\nimport PriceDisplay from '../Price'\n\nconst Price = forwardRef(({ price, isPriceCalculating, showMinimumPrice }, ref) => {\n if (!price) return null\n return (\n <div className='product-instance-price' ref={ref}>\n <div className='total-price' id='total-price-component'>\n {isPriceCalculating || !price\n ? <LoadingDots />\n : <div className='price-wrapper'>\n <PriceDisplay\n model={price.Price}\n showCurrency\n isMinimumPrice={showMinimumPrice}\n />\n </div>\n }\n </div>\n </div>\n )\n})\n\nexport default Price\n","import deepcopy from 'deepcopy'\nimport {UStoreProvider} from '@ustore/core'\n\nexport const convertPropertiesFromApiToPropertiesObject = (propertiesFromApi, dependenciesObject = null) => {\n // We create a sorted properties array according\n const propertiesOrder = Object\n .keys(propertiesFromApi.JSONSchema.definitions)\n .sort((a, b) => propertiesFromApi.JSONSchema.definitions[a].custom.displayOrder - propertiesFromApi.JSONSchema.definitions[b].custom.displayOrder)\n\n // We create a dependent properties array to check which property has dependencies\n\n // Array of property objects, sorted\n const sortedPropertiesObject = propertiesOrder.map((propertyId) => {\n return {\n ...propertiesFromApi.JSONSchema.definitions[propertyId],\n id: propertyId,\n pattern: propertiesFromApi.JSONSchema.definitions[propertyId].pattern,\n custom: propertiesFromApi.JSONSchema.definitions[propertyId].custom,\n depended: dependenciesObject && Object.keys(dependenciesObject).includes(propertyId) ? createNestedDependencyTree(propertiesFromApi, dependenciesObject, propertyId) : null,\n required: propertiesFromApi.JSONSchema.required.includes(propertyId),\n order: propertiesFromApi.JSONSchema.definitions[propertyId].custom.displayOrder,\n uiSchema: {\n ...propertiesFromApi.UISchema[propertyId],\n 'ui:errorMessages': propertiesFromApi.UISchema[propertyId]['ui:errorMessages']\n },\n propertySchema: dependenciesObject &&\n Object\n .keys(dependenciesObject)\n .includes(propertyId)\n ? {\n ...propertiesFromApi\n .JSONSchema\n .dependencies[Object.values(dependenciesObject)[Object.keys(dependenciesObject).indexOf(propertyId)]]\n .oneOf\n .filter((dependees) => Object.keys(dependees.properties).includes(propertyId))[0]\n .properties[propertyId],\n ...propertiesFromApi.JSONSchema.definitions[propertyId]\n }\n : {\n ...propertiesFromApi.JSONSchema.properties[propertyId],\n ...propertiesFromApi.JSONSchema.definitions[propertyId]\n },\n value: propertiesFromApi.formData[propertyId] === '' || propertiesFromApi.formData[propertyId] === '[]' ? undefined : propertiesFromApi.formData[propertyId]\n }\n })\n\n const propertiesObject = {}\n // Convert array back to object\n sortedPropertiesObject.forEach((property) => {\n propertiesObject[property.id] = {\n ...property\n }\n })\n\n return propertiesObject\n}\n\nexport const pushOrderItem = async (orderId, orderItem) => {\n return UStoreProvider.api.orders.updateOrderItem(orderId, orderItem)\n}\n\nexport const pushPropertiesState = async (orderItemId, dataToPush) => {\n return UStoreProvider.api.orders.updatePropertiesState(orderItemId, dataToPush)\n}\n\nexport const getPriceOrderItem = (orderItemId, obj) => {\n return UStoreProvider.api.orders.getPriceOrderItem(orderItemId, obj)\n}\n\nexport const pushCart = async (orderId) => {\n await UStoreProvider.api.orders.addToCart(orderId)\n}\n\nexport const pushSavedForLater = async (orderId) => {\n await UStoreProvider.api.orders.saveForLater(orderId)\n}\n\nexport const getReorder = async (lastOrderId) => {\n return UStoreProvider.api.orders.reorder(lastOrderId)\n}\n\nexport const pushProperties = async (orderId, properties) => {\n await UStoreProvider.api.orders.updateProperties(orderId, properties)\n}\n\nexport const removeEmptyValuesFromFormData = (formData) => Object\n .keys(formData)\n .map((propertyId) => (\n {\n [propertyId]: formData[propertyId] === '' || formData[propertyId] === '[]'\n ? undefined\n : formData[propertyId]\n }))\n .reduce((acc, value) => (\n {\n ...acc,\n [Object.entries(value)[0][0].toString().replace(',', '')]: Object.entries(value)[0][1] }\n ), {})\n\nexport const getDependentSchema = (schema, formData) => {\n if (schema.dependencies) {\n const depTree = Object.entries(schema.dependencies).reduce((r, [key, dep]) => {\n const allDeps = dep.oneOf.map(({ properties }) => {\n const parentKey = `${key}|${properties[key].enum.join('|')}`\n const depProps = { ...properties }\n delete depProps[key]\n\n return { parentKey, depProps }\n }).reduce((acc, deps) => ({ ...acc, [deps.parentKey]: deps.depProps }), {})\n\n return { ...r, ...allDeps }\n }, {})\n const schemaWithDeps = deepcopy(schema)\n\n const getProperty = (propSchema) => {\n return Object.keys(propSchema).map(key => {\n if (depTree[`${key}|${formData[key]}`]) {\n return [{ [key]: propSchema[key] }, ...getProperty(depTree[`${key}|${formData[key]}`])]\n } else {\n return { [key]: propSchema[key] }\n }\n }).flat()\n }\n\n schemaWithDeps.properties = getProperty(schema.properties).reduce((r, prop) => ({ ...r, ...prop }), {})\n\n const propsMap = Object.keys(schemaWithDeps.properties).reduce((r, d) => ({ ...r, [d]: 1 }), {})\n schemaWithDeps.required = schemaWithDeps.required.filter(d => propsMap[d])\n schemaWithDeps.dependencies = {}\n\n return schemaWithDeps\n } else {\n return schema\n }\n}\n\nexport const getDependenciesObject = (properties, excelPricing) => {\n if (properties.JSONSchema.dependencies) {\n const dependenciesObject = {}\n const dependenciesObjectWithValues = {}\n\n Object\n .keys(properties.JSONSchema.dependencies)\n .forEach((propertyId) => {\n properties\n .JSONSchema\n .dependencies[propertyId]\n .oneOf\n .forEach((dependees) => {\n Object.keys(dependees.properties)\n .forEach((dependentPropertyId) => {\n if (propertyId !== dependentPropertyId) {\n dependenciesObject[dependentPropertyId] = propertyId\n dependenciesObjectWithValues[dependentPropertyId] = {\n dependant: propertyId,\n dependantValue: dependees.properties[propertyId].enum\n }\n }\n })\n })\n })\n return { dependenciesObject, dependenciesObjectWithValues }\n }\n return null\n}\n\nconst createNestedDependencyTree = (propertiesFromApi, dependenciesObject, propertyId) => {\n if (Object.keys(dependenciesObject).includes(propertyId)) {\n return {\n parent: dependenciesObject[propertyId],\n condition: propertiesFromApi.JSONSchema.dependencies[dependenciesObject[propertyId]].oneOf\n .filter((dependees) => Object.keys(dependees.properties).includes(propertyId))\n .map((dependees) => dependees.properties[dependenciesObject[propertyId]])[0],\n depended: createNestedDependencyTree(propertiesFromApi, dependenciesObject, dependenciesObject[propertyId]) || null\n }\n }\n}\n\n","import { UStoreProvider } from '@ustore/core'\n\nconst GET_FETCH_PROOF_INTERVAL = 300\nconst WAIT_AFTER_PROOF_FAILURE = 1000\n\nconst wait = (ms) => new Promise(resolve => setTimeout(resolve, ms))\n\n//\n// this service is used to prevent multiple proof requests in a short time\n// and to only call the last proof for the file names\n// it also prevents proof requests if there is a proof in progress\n//\nclass ProofService {\n\n constructor () {\n this.current = null\n this.next = null\n this.ready = true\n this.onProof = null\n this.onError = null\n }\n\n timeoutCall = (params) => {\n if (this.ready) {\n if (!this.current) {\n this.current = params\n }\n this.proof()\n } else {\n this.timeoutCall(params)\n }\n }\n\n breakCurrentLoop = () => {\n this.current = this.next\n this.next = null\n this.ready = true\n this.timeoutCall(this.current)\n }\n\n async proof () {\n try {\n if (this.current) {\n this.ready = false\n let result = await UStoreProvider.api.products.createProofPreview(...this.current)\n // if proof is still in progress, wait and check again\n while (result && result.Status === 1) {\n await wait(GET_FETCH_PROOF_INTERVAL)\n result = await UStoreProvider.api.products.getProofPreview(this.current[0], result.PreviewID)\n //if we have another proof request, break the loop and start the new one with the new params\n if (this.next) {\n this.breakCurrentLoop()\n return\n }\n }\n\n // if we have another proof request, process it\n this.current = this.next\n this.next = null\n\n this.ready = true\n if (this.current) {\n this.timeoutCall(this.current)\n return\n }\n //notify the caller that the proof is ready\n this.onProof && this.onProof(result)\n }\n } catch (e) {\n if (e.Message.toLowerCase() === 'too much requests.') {\n await wait(WAIT_AFTER_PROOF_FAILURE)\n this.current = this.next || this.current\n this.next = null\n this.ready = true\n this.timeoutCall(this.current)\n return\n }\n this.current = null\n this.next = null\n this.ready = true\n this.onError && this.onError(e)\n }\n }\n\n push (params) {\n if (!this.ready) {\n this.next = params\n } else {\n this.timeoutCall(params)\n }\n\n }\n\n}\n\nconst proofService = new ProofService()\nexport default proofService\n","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {object} productModel\n * @param {object} orderModel\n * @param {supportsInventory} boolean\n */\n\nimport React, { Component } from 'react'\nimport './ProductQuantity.scss'\nimport BaseQuantity from './/BaseQuantity'\nimport { t } from '$themelocalization'\n\nclass ProductQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n componentDidMount () {\n const { productModel: { Configuration: { Quantity } }, orderModel } = this.props\n // run onChange on mount, to show validation errors on default value.\n if ((Quantity.Changeable && Quantity.Options === null)) {\n // text box\n this.onChange({ target: { value: orderModel.Quantity || Quantity.Minimum } }, true)\n }\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Configuration: { Quantity: { Minimum, Maximum } } }, productModel: { Inventory }, supportsInventory } = this.props\n\n const inventory = supportsInventory && Inventory ? Inventory.Quantity : null\n\n if (!value || isNaN(value)) {\n return <span className='validation-required'>{t('KitQuantity.Validation_required')}</span>\n }\n\n if (Minimum && Number(value) < Minimum) {\n return <span className='validation-minimum'>{t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })}</span>\n }\n\n if (Maximum && Number(value) > Maximum) {\n return <span className='validation-maximum'>{t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })}</span>\n }\n\n if (inventory && Number(value) > inventory && !Inventory.AllowOutOfStockPurchase) {\n return <span className='validation-inventory'>{t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })}</span>\n }\n\n return null\n }\n\n onChange (e, initialChange = false) {\n const { onQuantityChange } = this.props\n\n const value = e.target.value\n const errorMessage = this.getValidationErrorMessage(value)\n\n this.setState({ errorMessage })\n\n // send new value and error (if any, null if valid) to parent.\n onQuantityChange(value, errorMessage, initialChange)\n }\n\n render () {\n const { productModel: { Configuration: { Quantity }, ID, Unit }, orderModel } = this.props\n\n // if no Configuration or if value = 1 and read only => dont show anything\n if (!Quantity || !orderModel.Quantity) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n\n const itemUnitName = Unit.PackType\n ? `${Unit.PackType.PluralName}`\n : Unit.ItemType ? Unit.ItemType.PluralName : ''\n\n const packDesc = Unit.PackType ? ` (${t('product.packs_notation',\n {\n PackTypeName: Unit.PackType.Name,\n ItemQuantity: Unit.ItemQuantity,\n ItemTypePluralName: Unit.ItemType.PluralName\n })})` : ''\n\n return (<div className='product-quantity-component'>\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n />\n <span className='quantity-units'>{itemUnitName}</span>\n {Unit.PackType && <span className='pack-description'>{packDesc}</span>}\n {this.state.errorMessage && (<span className='quantity-error'>{this.state.errorMessage}</span>)}\n </div>)\n }\n}\n\nexport default ProductQuantity\n","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport ImageLoader from '$core-components/ImageLoader'\nimport ImageZoom from '$core-components/ImageZoom'\nimport './ProductProof.scss'\n\nconst ProductProof = ({ type, src, isModalOpen, onCloseModal, modalClassName = 'product-proof-modal', isMobile = false }) => {\n if (!src) {\n return null\n }\n\n const isProofPdf = type === 'application/pdf'\n\n return (\n <Modal toggle={onCloseModal} isOpen={isModalOpen} modalClassName={`${modalClassName} product-proof-modal`}>\n <div className='modal-close'>\n <div className='close-btn' onClick={onCloseModal}>×</div>\n </div>\n <ModalBody>\n {isProofPdf &&\n <div className='proof-modal-pdf'>\n <object data={src + '&inline=true&#view=Fit'}\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\">\n <div className='download-pdf-wrapper'>\n <a href={src}>{t('productProof.download')}</a>\n </div>\n </object>\n </div>}\n {!isProofPdf && !isMobile &&\n <div className=\"proof-modal-image\"><ImageZoom src={src} /></div>\n }\n {!isProofPdf && isMobile &&\n <div className=\"proof-modal-image mobile\"><ImageLoader className='image' src={src} /></div>\n }\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ProductProof\n","import { useState } from 'react'\nimport ImageZoom from '$core-components/ImageZoom'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport theme from '$styles/_theme.scss'\nimport './ProductApproval.scss'\n\nconst ProductApproval = ({ type, isModalOpen, onCloseModal, src, onAddToCartClick, addToCartBtnText, checkboxText, errorText }) => {\n const isMobile = document.body.clientWidth < parseInt(theme.lg.replace('px', ''))\n\n const isProofPdf = type === 'application/pdf'\n const isimage = type.startsWith('image/')\n const [approved, setApproved] = useState(false)\n const [showError, setShowError] = useState(false)\n\n const onAddClicked = () => {\n if (approved) {\n setShowError(false)\n onAddToCartClick()\n } else {\n setShowError(true)\n }\n }\n\n if (!src) {\n return null\n }\n\n return (\n <Modal toggle={onCloseModal} isOpen={isModalOpen} modalClassName=\"proof-approval\">\n <div className={`${isProofPdf ? 'transparent' : ''} modal-close`}>\n <div className='close-btn' onClick={onCloseModal}>×</div>\n </div>\n <ModalBody>\n <div className={`approval-title mobile`}>\n {t('productProof.review_label')}\n </div>\n {isProofPdf && !isMobile &&\n <div className='approve-modal-pdf'>\n <object data={src + '&inline=true&#view=Fit'}\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\"\n >\n </object>\n </div>\n }\n {isimage && (\n !isMobile\n ? <div className=\"approval-image-wrapper\"><ImageZoom src={src} /></div>\n : <div className=\"approval-image-wrapper mobile\"><img src={src} alt='product-approval' /></div>\n )\n }\n {((!isimage && !isProofPdf) || (isProofPdf && isMobile)) &&\n <div className={`approve-modal-pdf ${isMobile ? 'mobile' : ''}`}>\n\n <div className='download-pdf-wrapper'>\n <a download href={src}>{t('productProof.download')}</a>\n </div>\n </div>\n }\n <div className={`proof-approval ${isMobile ? 'mobile' : ''}`}>\n <div className=\"approval-title desktop\">\n {t('productProof.review_label')}\n </div>\n <div className=\"approval-checkbox\">\n <label>\n <input type=\"checkbox\" onChange={() => { setApproved(prev => !prev) }} />\n <span className='checkbox-label'>{checkboxText || t('productProof.ProofIsApproved')}</span>\n <span className=\"required\">*</span>\n </label>\n </div>\n {\n showError && <div className='proof-approval-required'>\n <span>{errorText || t('productProof.ConfirmProof')}</span>\n </div>\n }\n <div\n className='button button-primary add-to-cart-button'\n onClick={onAddClicked}\n >\n {addToCartBtnText}\n </div>\n </div>\n </ModalBody>\n </Modal >\n )\n}\n\nexport default ProductApproval\n","import { useEffect, useState } from 'react'\nimport Ajv from 'ajv'\nimport { union } from 'lodash'\nimport { getDependenciesObject, getDependentSchema, removeEmptyValuesFromFormData } from './utils'\n\nconst useErrors = (initialPropertiesSchema) => {\n const [errors, setErrors] = useState({})\n const [errorsExist, setErrorsExist] = useState(false)\n const [visibleErrorsExist, setVisibleErrorsExist] = useState(false)\n const [initialSchemaLoaded, setInitialSchemaLoaded] = useState(false)\n const [excelPricingError, setExcelPricingError] = useState(false)\n\n useEffect(() => {\n if (Object.keys(initialPropertiesSchema).length && !initialSchemaLoaded) {\n setErrors(\n Object.keys(initialPropertiesSchema.JSONSchema.definitions)\n .reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: {\n errors: [],\n show: false\n }\n }), {})\n )\n setInitialSchemaLoaded(true)\n }\n }, [initialPropertiesSchema, initialSchemaLoaded])\n\n useEffect(() => {\n setErrorsExist(checkIfThereArePropertyErrors())\n setVisibleErrorsExist(checkIfThereAreVisiblePropertyErrors())\n // eslint-disable-next-line\n }, [errors])\n\n const checkIfThereArePropertyErrors = () => Object.values(errors)\n .some((property) => !!(property && property.errors && property.errors.length))\n\n const checkIfThereAreVisiblePropertyErrors = () => Object.values(errors)\n .some((property) => property.errors && property.errors.length && property.show)\n\n const checkIfThereAreDisabledAffectPricePropertiesWithErrors = (updatedProperties) => Object.keys(updatedProperties.UISchema)\n .some(propertyId =>\n updatedProperties.UISchema[propertyId]['ui:readonly'] &&\n updatedProperties.JSONSchema.definitions[propertyId].custom.affectPrice &&\n updatedProperties.errors &&\n Object.keys(updatedProperties.errors).includes(propertyId)\n )\n\n const processErrorsOnApiResponse = (propertiesFromApi, currentErrors = null, propertiesToShowErrors = []) => {\n const excelError = checkIfThereAreDisabledAffectPricePropertiesWithErrors(propertiesFromApi)\n setExcelPricingError(excelError)\n const updatedFormErrors = combineAjvErrorsWithUiSchema(propertiesFromApi)\n const updatedErrors = getErrorsObject(combineApiErrorsWithFormErrors(propertiesFromApi, excelError ? {} : updatedFormErrors, excelError), propertiesFromApi, currentErrors || errors)\n Object.keys(updatedErrors).forEach((propertyId) => {\n const showError = () => {\n if (excelError) {\n if (propertiesFromApi.errors && Object.keys(propertiesFromApi.errors).includes(propertyId)) return true\n return errors[propertyId] ? errors[propertyId].show : false\n } else {\n if (!propertiesToShowErrors.includes(propertyId)) {\n if (currentErrors) {\n return currentErrors[propertyId] ? currentErrors[propertyId].show : false\n }\n return errors[propertyId] ? errors[propertyId].show : false\n }\n return true\n }\n }\n updatedErrors[propertyId].show = showError()\n })\n\n setErrors(updatedErrors)\n return updatedErrors\n }\n\n const processErrorsOnFormChange = (changedPropertyId, propertyErrors, propertiesSchema, changedPropertyValue = null) => {\n if (changedPropertyValue === '__xmpie__clear__') {\n return\n }\n const formErrors = combineAjvErrorsWithUiSchema(propertiesSchema)\n const updatedFormErrors = propertyErrors\n ? combineOnFormChangeErrorsWithFormErrors(propertyErrors, formErrors)\n : formErrors\n const errorsObject = getErrorsObject(updatedFormErrors, propertiesSchema, errors)\n if (Array.isArray(changedPropertyId)) {\n changedPropertyId.forEach((propertyId) => {\n errorsObject[propertyId].show = !!errorsObject[propertyId].errors.length\n })\n Object.keys(propertiesSchema.JSONSchema.definitions).forEach((propertyId) => {\n if (!changedPropertyId.includes(propertyId)) {\n errorsObject[propertyId].show = !errorsObject[propertyId].errors.length ? false : errorsObject[propertyId].show\n }\n })\n } else {\n if (changedPropertyValue === '__xmpie__error__' && propertyErrors) {\n errorsObject[changedPropertyId].show = true\n } else {\n errorsObject[changedPropertyId].show = !!errorsObject[changedPropertyId].errors.length\n }\n Object.keys(propertiesSchema.JSONSchema.definitions).forEach((propertyId) => {\n if (propertyId !== changedPropertyId) {\n errorsObject[propertyId].show = !errorsObject[propertyId].errors.length ? false : errorsObject[propertyId].show\n }\n })\n }\n\n // Before returning errorsObject, check if the parent field has dependencies and if so, clear errors of the other dependant fields of parent than the one clicked\n if (getDependenciesObject(propertiesSchema) && propertiesSchema.JSONSchema.dependencies && Object.keys(propertiesSchema.JSONSchema.dependencies).includes(changedPropertyId)) {\n const { dependenciesObjectWithValues } = getDependenciesObject(propertiesSchema)\n const dependentFields = Object.keys(dependenciesObjectWithValues)\n .filter(key => dependenciesObjectWithValues[key].dependant === changedPropertyId && dependenciesObjectWithValues[key].dependantValue[0] !== changedPropertyValue)\n dependentFields.forEach((field) => {\n errorsObject[field].errors = []\n errorsObject[field].show = false\n })\n }\n\n setErrors(errorsObject)\n return errorsObject\n }\n\n const processErrorsOnAddToCart = (propertiesSchema) => {\n if (propertiesSchema && Object.keys(propertiesSchema).length) {\n const formErrors = combineAjvErrorsWithUiSchema(propertiesSchema)\n const errorsObject = getErrorsObject(formErrors, propertiesSchema, errors)\n Object.keys(errorsObject).forEach((propertyId) => {\n errorsObject[propertyId].show = true\n })\n setErrors(errorsObject)\n return errorsObject\n }\n return errors\n }\n\n const getAjvErrors = (propertiesSchema) => {\n const ajv = new Ajv({ allErrors: true, strict: false, coerceTypes: true })\n const schemaWithDeps = getDependentSchema(propertiesSchema.JSONSchema, propertiesSchema.formData)\n ajv.validate(schemaWithDeps, removeEmptyValuesFromFormData(propertiesSchema.formData))\n return ajv.errors\n }\n\n\n const combineAjvErrorsWithUiSchema = (propertiesSchema) => {\n const isPropertyForError = (ajvError, propertyId) => {\n if (ajvError.keyword === 'required') {\n return ajvError.params.missingProperty === propertyId\n }\n return ajvError.instancePath.substring(1) === propertyId\n }\n const ajvErrors = getAjvErrors(propertiesSchema)\n\n if (ajvErrors) {\n return Object.keys(propertiesSchema.JSONSchema.definitions)\n .reduce((acc, propertyId) =>\n ({\n ...acc,\n [propertyId]: [\n ...ajvErrors\n .filter((ajvError) => isPropertyForError(ajvError, propertyId))\n .map((errorObj) => {\n if (\n propertiesSchema.UISchema[propertyId]['ui:errorMessages'] &&\n Object.keys(propertiesSchema.UISchema[propertyId]['ui:errorMessages']).length\n ) {\n if (\n propertiesSchema.UISchema[propertyId]['ui:errorMessages'][errorObj.keyword] &&\n isPropertyForError(errorObj, propertyId)\n ) {\n return propertiesSchema\n .UISchema[propertyId]['ui:errorMessages'][errorObj.keyword]\n }\n }\n\n return undefined\n })\n .filter((error) => error !== undefined)\n ]\n }), {})\n }\n return Object.keys(errors).reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: []\n }), {})\n }\n\n const combineApiErrorsWithFormErrors = (propertiesSchema, formErrors, excelPricingError) => {\n const apiErrors = excelPricingError ? propertiesSchema.errors : formErrors\n if (propertiesSchema.errors) {\n return Object.keys(apiErrors).reduce((acc, propertyId) =>\n formErrors[propertyId] ? {\n ...acc,\n [propertyId]: union(propertiesSchema.errors[propertyId], formErrors[propertyId])\n } : {\n ...acc,\n [propertyId]: propertiesSchema.errors[propertyId]\n }, {})\n } else {\n return formErrors\n }\n }\n\n const getErrorsObject = (newErrors, propertiesSchema, currentErrors) => {\n return Object.keys(propertiesSchema.JSONSchema.definitions).reduce((acc, propertyId) => newErrors[propertyId] ? {\n ...acc,\n [propertyId]: {\n errors: newErrors[propertyId],\n show: currentErrors[propertyId] ? currentErrors[propertyId].show : false,\n ...(propertiesSchema.UISchema[propertyId]['ui:options'].section && { section: propertiesSchema.UISchema[propertyId]['ui:options'].section })\n }\n } : {\n ...acc,\n [propertyId]: {\n errors: [],\n show: false\n }\n }, {})\n }\n\n const combineOnFormChangeErrorsWithFormErrors = (propertyErrors, formErrors) => {\n return Object.keys(errors).reduce((acc, propertyId) =>\n (propertyErrors[propertyId] && propertyErrors[propertyId].length)\n ? {\n ...acc,\n [propertyId]: union(propertyErrors[propertyId], formErrors[propertyId])\n }\n : {\n ...acc,\n [propertyId]: formErrors[propertyId] || []\n }, {})\n }\n\n const showErrors = (propertiesToShowErrors, currentErrors = null) => {\n const errorsToUse = currentErrors || errors\n const showAll = propertiesToShowErrors.length === 0\n const updatedErrors = Object.keys(errorsToUse).reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: {\n errors: errorsToUse[propertyId].errors,\n show: showAll ? true : propertiesToShowErrors.includes(propertyId)\n }\n }), {})\n setErrors(updatedErrors)\n }\n\n const showAllErrors = (updatedErrors = null) => {\n const errorsObject = updatedErrors || errors\n Object.keys(errorsObject).forEach((propertyId) => {\n errorsObject[propertyId].show = !!errorsObject[propertyId].errors.length\n })\n setErrors(errorsObject)\n }\n\n const hideErrors = (propertiesToHideErrors) => {\n const updatedErrors = Object.keys(errors).reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: {\n errors: errors[propertyId].errors,\n show: !propertiesToHideErrors.includes(propertyId)\n }\n }), {})\n setErrors(updatedErrors)\n }\n\n return ({\n errors,\n errorsExist,\n visibleErrorsExist,\n processErrorsOnApiResponse,\n processErrorsOnFormChange,\n processErrorsOnAddToCart,\n showErrors,\n hideErrors,\n showAllErrors,\n excelPricingError\n })\n}\n\nexport default useErrors\n","import { useEffect, useRef, useState } from 'react'\n\nconst useUpdateProperties = () => {\n const [promises, setPromises] = useState([])\n const [loading, setLoading] = useState(false)\n const lastPromise = useRef(null)\n const lastCallback = useRef(null)\n\n const addPromise = (promise, callback) => {\n setPromises((prev) => [...prev, promise])\n lastPromise.current = promise\n lastCallback.current = callback\n }\n\n useEffect(() => {\n const resolvePromises = async () => {\n setLoading(true)\n try {\n const promiseToResolve = await promises[0]\n if (promises[0] === lastPromise.current) {\n await lastCallback.current(promiseToResolve)\n }\n setPromises((prev) => prev.slice(1))\n } catch (e) {\n console.error(e)\n await lastCallback.current(null, e)\n }\n setLoading(false)\n }\n\n if (promises.length > 0) {\n resolvePromises()\n }\n }, [promises])\n\n return {\n addPromise,\n loading\n }\n}\n\nexport default useUpdateProperties\n","import React, { useEffect, useState } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport './DynamicProductApproval.scss'\nimport LoadingDots from '$core-components/LoadingDots'\nimport ErrorBalloon from '../ErrorBalloon'\nimport DynamicImageViewer from './DynamicImageViewer'\nimport { UStoreProvider } from '@ustore/core'\nimport { convertProductPropertiesFormIntoArray } from '$themeservices/utils'\n\nconst ProofErrorBalloon = ({ show, isPDF }) => show &&\n <ErrorBalloon\n className={`proof-failure ${isPDF ? 'proof-pdf-failure' : ''}`}>{t('productProof.PreviewFailure')}</ErrorBalloon>\n\nconst DesktopProofPreview = ({ proof, images, showLoaderDots }) => proof && proof.Format === 1 && proof.Items?.length > 0 ? <object\n data={proof.Items[0].Url + '#view=Fit'}\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\"\n >\n </object> :\n <DynamicImageViewer thumbnails={images} disabled={showLoaderDots}/>\n\nconst MobileProofPreview =\n ({ isPDF, showLoaderDots, proof, onDownloadPDFClick, images, proofError }) => {\n if (isPDF) {\n return <>\n {showLoaderDots ? <div className=\"button button-secondary\"><LoadingDots/></div> :\n <div className=\"button button-secondary download-pdf-proof\" disabled={proofError}\n onClick={() => onDownloadPDFClick(proof.Items[0])}>\n {t('productProof.DownloadPreview')}\n </div>}\n </>\n }\n return <>\n {showLoaderDots && <div className=\"carousel-dots-loader\"><LoadingDots/></div>}\n <DynamicImageViewer thumbnails={images} disabled={showLoaderDots}/>\n </>\n}\nconst ProductApproval = ({\n thumbnails,\n isModalOpen,\n onCloseModal,\n onAddToCartClick,\n addToCartBtnText,\n checkboxText,\n errorText,\n orderItemID,\n orderItem,\n proofType,\n properties,\n excelPricingEnabled,\n}) => {\n\n const [proof, setProof] = useState(null)\n const [approved, setApproved] = useState(false)\n const [showError, setShowError] = useState(false)\n const [images, setImages] = useState([])\n const [showLoaderDots, setShowLoaderDots] = useState(true)\n const [proofError, setProofError] = useState(false)\n const isPDF = proofType && proofType.toLowerCase().endsWith('pdf')\n\n useEffect(() => {\n (async () => {\n try {\n if (isModalOpen && orderItem) {\n await UStoreProvider.api.orders.updateProperties(orderItem.ID, convertProductPropertiesFormIntoArray(properties))\n await UStoreProvider.api.orders.updateOrderItem(orderItem.ID, {\n ...orderItem,\n Properties: properties && Object.keys(properties).length ? convertProductPropertiesFormIntoArray(\n properties,\n excelPricingEnabled\n ) : null\n })\n let proof = await window.UStoreProvider.api.products.createProof(orderItem.ID)\n while (proof.Status === 1) {\n await new Promise(resolve => setTimeout(resolve, 2000))\n proof = await window.UStoreProvider.api.products.createProof(orderItem.ID)\n }\n const fileNames = proof.Items.map((p) => ({ Url: p.Url.replace(/.*?fileName=(.*)$/, '$1') }))\n proof.Items = []\n let hasError = false\n for (const file of fileNames) {\n const fileBlob = await UStoreProvider.api.products.downloadProof(orderItem.ID, file.Url)\n if (fileBlob) {\n proof.Items = [...proof.Items, {\n Url: URL.createObjectURL(fileBlob),\n DisplayName: t('DynamicProof.Page', { pageNumber: proof.Items.length + 1 }),\n type: proof.Format === 1 ? 'pdf' : 'image',\n fileName: file.Url\n }]\n if (proof.Format === 2) {\n setImages(proof.Items)\n }\n } else {\n hasError = true\n }\n }\n setProof(proof)\n setShowLoaderDots(false)\n setProofError(hasError)\n }\n } catch {\n setShowLoaderDots(false)\n setProofError(true)\n }\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [orderItemID, isModalOpen])\n\n useEffect(() => {\n if (proof?.Status !== 2) {\n setImages(thumbnails)\n }\n }, [thumbnails, proof])\n\n const onAddClicked = () => {\n if (approved) {\n setShowError(false)\n onAddToCartClick()\n } else {\n setShowError(true)\n }\n }\n\n if (!isModalOpen) {\n return false\n }\n\n const onDownloadPDFClick = (itemToDownload) => {\n if (proofError) {\n return\n }\n const downloadLink = document.createElement('a')\n downloadLink.href = itemToDownload.Url\n downloadLink.download = itemToDownload.fileName\n downloadLink.textContent = 'Download File'\n downloadLink.click()\n }\n\n return (\n <Modal toggle={onCloseModal} isOpen={isModalOpen} modalClassName=\"dynamic-proof-approval\">\n <div className={`${proof?.Format === 1 ? 'transparent' : ''} modal-close`}>\n <div className=\"close-btn\" onClick={onCloseModal}>×</div>\n </div>\n <ModalBody>\n <div className={`approval-title-mobile`}>\n {t('productProof.review_label')}\n </div>\n <div className=\"approval-preview\">\n <ProofErrorBalloon show={proofError}/>\n <DesktopProofPreview proof={proof} images={images} showLoaderDots={showLoaderDots}/>\n {showLoaderDots && <div className=\"carousel-dots-loader\">\n <LoadingDots/>\n </div>}\n </div>\n <div className=\"mobile-approval-preview\">\n <MobileProofPreview {...{ isPDF, showLoaderDots, proof, onDownloadPDFClick, images, proofError }} />\n <ProofErrorBalloon show={proofError} isPDF={isPDF}/>\n </div>\n\n <div className=\"proof-approval\">\n <div className=\"approval-title-desktop\">\n {t('productProof.review_label')}\n </div>\n <div className=\"approval-checkbox\">\n <label>\n <input type=\"checkbox\" onChange={() => { setApproved(prev => !prev) }}/>\n <span className=\"checkbox-label\">{checkboxText || t('productProof.ProofIsApproved')}</span>\n <span className=\"required\">*</span>\n </label>\n </div>\n {\n showError && <div className=\"proof-approval-required\">\n <span>{errorText || t('productProof.ConfirmProof')}</span>\n </div>\n }\n <div\n className=\"button button-primary add-to-cart-button\"\n onClick={onAddClicked}\n >\n {addToCartBtnText}\n </div>\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ProductApproval\n","import { useEffect, useRef, useState } from 'react'\n\nexport const useSticky = (topMarkerRef, bottomMarkerRef) => {\n const [showStickyPrice, setShowStickyPrice] = useState(true)\n const [topIntersecting, setTopIntersecting] = useState(false)\n const [bottomIntersecting, setBottomIntersecting] = useState(false)\n\n const topObserver = useRef(null)\n const bottomObserver = useRef(null)\n\n useEffect(() => {\n setShowStickyPrice(!topIntersecting && !bottomIntersecting)\n }, [topIntersecting, bottomIntersecting])\n\n const observeCallback = (entries) => {\n entries.forEach((entry) => {\n if (topMarkerRef && entry.target === topMarkerRef.current) {\n setTopIntersecting(entry.isIntersecting)\n }\n if (bottomMarkerRef && entry.target === bottomMarkerRef.current) {\n setBottomIntersecting(entry.isIntersecting)\n }\n })\n }\n\n const stickyConnect = () => {\n if (topMarkerRef) {\n topObserver.current = new IntersectionObserver(observeCallback, {\n root: null,\n rootMargin: '0px',\n threshold: 0.2,\n })\n topObserver.current.observe(topMarkerRef.current)\n }\n\n if (bottomMarkerRef) {\n bottomObserver.current = new IntersectionObserver(observeCallback, {\n root: null,\n rootMargin: '0px',\n threshold: 0.999,\n })\n bottomObserver.current.observe(bottomMarkerRef.current)\n }\n }\n\n const stickyDisconnect = () => {\n topObserver.current.disconnect()\n bottomObserver.current.disconnect()\n }\n\n return {\n showStickyPrice,\n stickyConnect,\n stickyDisconnect\n }\n\n}\n\n\n\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { throttle } from \"throttle-debounce\";\nimport { UStoreProvider } from \"@ustore/core\";\nimport { t } from \"$themelocalization\";\nimport { useNavigate, useSearchParams } from \"react-router-dom\";\nimport LoadingDots from \"$core-components/LoadingDots\";\nimport Popper from \"./Popper\";\nimport DynamicForm from \"../DynamicForm\";\nimport PreviewErrorBalloon from \"./PreviewErrorBalloon\";\nimport urlGenerator from \"$ustoreinternal/services/urlGenerator\";\nimport theme from \"$styles/_theme.scss\";\nimport themeContext from \"$ustoreinternal/services/themeContext\";\nimport ImageCarousel from \"../ImageCarousel\";\nimport ProductDetails from \"../ProductDetails\";\nimport ProductDeliveryMethod from \"../ProductDeliveryMethod\";\nimport ProductOrderSummary from \"../ProductOrderSummary\";\nimport ProductStickyPrice from \"../ProductStickyPrice\";\nimport ProductThumbnailsPreview from \"../dynamic/ProductThumbnailsPreview\";\nimport RefreshPreviewButton from \"./RefreshPreviewButton\";\nimport ProductLayout from \"../ProductLayout\";\nimport Proof from \"./Proof\";\nimport Price from \"./Price\";\nimport {\n convertPropertiesFromApiToPropertiesObject,\n getDependenciesObject,\n getPriceOrderItem,\n getReorder,\n pushCart,\n pushOrderItem,\n pushProperties,\n pushPropertiesState,\n pushSavedForLater,\n} from \"./utils\";\nimport {\n convertProductPropertiesFormIntoArray,\n preparingFormDataToSendToServer,\n productTypes,\n} from \"$themeservices/utils\";\nimport proofPreview from \"$themeservices/fastProof\";\nimport { isOutOfStock } from \"../Inventory\";\nimport ProductQuantity from \"../ProductQuantity\";\nimport ProductProof from \"../ProductProof\";\nimport ProductApproval from \"../ProductApproval\";\nimport \"./StaticProduct.scss\";\nimport \"./ProductProperties.scss\";\nimport useErrors from \"./useErrors\";\nimport useUpdateProperties from \"./useUpdateProperties\";\nimport Slot from \"../../widgets/Slot\";\nimport \"./ProductProperties.scss\";\nimport \"./StaticProduct.scss\";\nimport DynamicProductApproval from \"../dynamic/DynamicProductApproval\";\nimport { useSticky } from \"./useSticky\";\n\nconst State = {\n loading: \"LOADING\",\n calculatingPrice: \"CALCULATING_PRICE\",\n initial: \"INITIAL\",\n clickedAddToCart: \"CLICKED_ADD_TO_CART\",\n error: \"ERROR\",\n};\n\nconst StaticProduct = ({\n customState,\n state: {\n currentCurrency,\n currentStore: { TaxFormatType, StoreType },\n },\n}) => {\n // set page to loading\n const [loadingData, setLoadingData] = useState(false);\n const [inputDataLoaded, setInputDataLoaded] = useState(false);\n // set page to loading\n\n const [pageState, setPageState] = useState(State.loading);\n const [orderItem, setOrderItem] = useState(\n customState.currentOrderItem || {}\n );\n const [product, setProduct] = useState(customState.currentProduct || {});\n const [productThumbnails, setProductThumbnails] = useState({});\n const [quantity, setQuantity] = useState(1);\n const [price, setPrice] = useState({});\n const [properties, setProperties] = useState({});\n const [propertiesObject, setPropertiesObject] = useState({});\n const [excelPricingEnabled, setExcelPricingEnabled] = useState(false);\n const [productDeliveries, setProductDeliveries] = useState(\n customState.currentDeliveryServices || null\n );\n const [deliveryMethod, setDeliveryMethod] = useState(null);\n const [deliveryService, setDeliveryService] = useState(null);\n const [priceError, setPriceError] = useState(null);\n const [quantityError, setQuantityError] = useState(null);\n const [proofUrl, setProofUrl] = useState(null);\n const [proofModalOpen, setProofModalOpen] = useState(false);\n const [approvalModalOpen, setApprovalModalOpen] = useState(false);\n const [thumbnailModalOpen, setThumbnailModalOpen] = useState(false);\n const [popperAffectedSections, setPopperAffectedSections] = useState([]);\n const [popperError, setPopperError] = useState(null);\n const [postLoadingProcedures, setPostLoadingProcedures] = useState(false);\n const [forceAddToCartButtonPopper, setForceAddToCartButtonPopper] =\n useState(false);\n const [htmlDataUpdateTimeout, setHtmlDataUpdateTimeout] = useState(null);\n const [showLoaderDots, setShowLoaderDots] = useState(false);\n const [disabledRefreshPreviewButton, setDisabledRefreshPreviewButton] =\n useState(false);\n const [lastViewImageId, setLastViewImageId] = useState(0);\n const [isMobile, setIsMobile] = useState(\n document.body.clientWidth < parseInt(theme.md.replace(\"px\", \"\"))\n );\n const [sectionToOpen, setSectionToOpen] = useState(0);\n const [searchParams, setSearchParams] = useSearchParams();\n const [poofPreviewError, setPoofPreviewError] = useState(false);\n const topMarkerRef = useRef(null);\n const bottomMarkerRef = useRef(null);\n const { showStickyPrice, stickyConnect, stickyDisconnect } = useSticky(\n topMarkerRef,\n bottomMarkerRef\n );\n const topPriceRef = useRef(null);\n const bottomPriceRef = useRef(null);\n const { addPromise } = useUpdateProperties();\n const navigate = useNavigate();\n const {\n errors,\n processErrorsOnApiResponse,\n processErrorsOnFormChange,\n processErrorsOnAddToCart,\n showAllErrors,\n excelPricingError,\n } = useErrors(properties);\n const [showRefreshPreview, setShowRefreshPreview] = useState(false);\n const stickyPriceRef = useRef(null);\n\n const checkIfThereArePropertyErrors = useCallback(\n (updatedErrors = null, updatedProperties = null) => {\n const productErrors = updatedErrors\n ? { ...updatedErrors }\n : { ...errors };\n const propertiesToUse = updatedProperties\n ? convertPropertiesFromApiToPropertiesObject(updatedProperties)\n : propertiesObject;\n\n return Object.keys(productErrors).some(\n (propertyId) =>\n productErrors[propertyId] &&\n productErrors[propertyId].errors &&\n productErrors[propertyId].errors.length &&\n propertiesToUse[propertyId].uiSchema[\"ui:options\"].visible\n );\n },\n [errors, propertiesObject]\n );\n\n const checkIfThereAreSectionErrors = useCallback(() => {\n return Object.values(errors).some(\n (property) => property.errors.length && property.show && property.section\n );\n }, [errors]);\n\n const checkIfThereAreVisiblePropertyErrors = useCallback(\n (updatedErrors = null) => {\n const productErrors = updatedErrors\n ? { ...updatedErrors }\n : { ...errors };\n return Object.values(productErrors).some(\n (property) => property.errors.length && property.show\n );\n },\n [errors]\n );\n\n const calculateProperties = throttle(\n 750,\n async (\n usedQuantity,\n updatedOrderItem = null,\n updatedProperties = null,\n updatedErrors = null\n ) => {\n if (price.Price === null) return;\n setPageState(State.calculatingPrice);\n const updatedPrice = await getPriceOrderItem(\n updatedOrderItem ? updatedOrderItem.ID : orderItem.ID,\n {\n ...(updatedOrderItem || orderItem),\n Properties:\n (updatedProperties && Object.keys(updatedProperties).length) ||\n (properties && Object.keys(properties).length)\n ? convertProductPropertiesFormIntoArray(\n updatedProperties || properties,\n excelPricingEnabled\n )\n : null,\n Quantity: usedQuantity,\n }\n );\n if (updatedPrice.Price === null) {\n setPrice(updatedPrice);\n setPageState(State.initial);\n return;\n }\n if (updatedErrors && updatedProperties) {\n const errorsExist = checkIfThereArePropertyErrors(\n updatedErrors,\n updatedProperties\n );\n if (\n errorsExist &&\n (updatedPrice.Price.Price === -1 || updatedPrice.IsMinimumPrice)\n ) {\n setPriceError(\"can not recalculate\");\n setPostLoadingProcedures(true);\n } else if (\n !errorsExist &&\n (updatedPrice.Price.Price === -1 || updatedPrice.IsMinimumPrice)\n ) {\n setPricingError({\n ErrorCode: \"ExcelCalculation\",\n });\n setPageState(State.initial);\n return;\n } else if (product.Type === productTypes.DYNAMIC) {\n const keepError = Object.entries(updatedErrors).reduce(\n (r, [key, val]) => {\n return (\n r ||\n (val.show &&\n updatedProperties.JSONSchema.definitions[key]?.custom\n .affectPrice)\n );\n },\n false\n );\n if (!keepError) {\n setPriceError(null);\n }\n } else {\n setPriceError(null);\n }\n }\n setPrice(updatedPrice);\n UStoreProvider.state.customState.set(\n \"currentOrderItemPriceModel\",\n updatedPrice\n );\n setPageState(State.initial);\n }\n );\n\n const updateProperties = useCallback(\n async (\n changedProperties = [],\n updatedProperties = null,\n usedQuantity = null,\n recalculatePrice = true,\n updatedErrors = null\n ) => {\n const updatedPropertiesSchema = updatedProperties || properties;\n\n const formDataForApi = preparingFormDataToSendToServer(\n updatedPropertiesSchema.formData,\n properties\n );\n if (changedProperties.includes(\"quantity\")) {\n formDataForApi.push({\n id: \"uStoreOrderItemQuantity\",\n value: usedQuantity,\n });\n }\n\n const handleResponse = async (response, e) => {\n if (e) {\n console.error(e);\n // Excel template V15.0 error\n setPricingError(e);\n return {\n updatedPropertiesFromApi: properties,\n updatedPropertiesObject: propertiesObject,\n };\n }\n\n const updatedPropertiesObject =\n convertPropertiesFromApiToPropertiesObject(\n response,\n getDependenciesObject(response, excelPricingEnabled)\n ? getDependenciesObject(response, excelPricingEnabled)\n .dependenciesObject\n : null\n );\n setProperties(response);\n setPropertiesObject(updatedPropertiesObject);\n\n UStoreProvider.state.customState.set(\n \"currentProductProperties\",\n response\n );\n const updatedErrorsFromApi = await processErrorsOnApiResponse(\n response,\n updatedErrors || errors,\n changedProperties\n );\n if (product.Type === productTypes.DYNAMIC) {\n recalculatePrice = changedProperties.reduce((acc, propertyId) => {\n return (\n acc ||\n response.JSONSchema.definitions[propertyId]?.custom.affectPrice\n );\n }, recalculatePrice);\n }\n\n if (\n recalculatePrice &&\n !checkIfThereAreVisiblePropertyErrors(updatedErrorsFromApi)\n ) {\n calculateProperties(\n usedQuantity || quantity,\n null,\n response,\n updatedErrorsFromApi\n );\n }\n return { updatedPropertiesFromApi: response, updatedPropertiesObject };\n };\n\n addPromise(\n pushPropertiesState(orderItem.ID, formDataForApi),\n handleResponse\n );\n\n return {\n updatedPropertiesFromApi: properties,\n updatedPropertiesObject: propertiesObject,\n };\n },\n [\n addPromise,\n calculateProperties,\n checkIfThereAreVisiblePropertyErrors,\n errors,\n excelPricingEnabled,\n orderItem.ID,\n processErrorsOnApiResponse,\n properties,\n propertiesObject,\n quantity,\n product.Type,\n ]\n );\n\n const createPreview = useCallback(\n async (\n propsFromApiToPropsObject,\n orderItemId = null,\n propertiesFromApi = null\n ) => {\n setDisabledRefreshPreviewButton(() => true);\n const propsForProof = preparingFormDataToSendToServer(\n Object.values(propsFromApiToPropsObject).reduce(\n (r, p) => ({ ...r, [p.id]: p.value }),\n {}\n ),\n propertiesFromApi || properties\n );\n proofPreview.onError = () => {\n setDisabledRefreshPreviewButton(() => false);\n if (!showRefreshPreview) {\n return;\n }\n proofPreview.breakCurrentLoop();\n setPoofPreviewError(true);\n setShowLoaderDots(false);\n };\n\n proofPreview.onProof = async (proof) => {\n setDisabledRefreshPreviewButton(() => false);\n const fileNames = proof.Items.map((p) => ({\n Url: p.Url.replace(/.*?fileName=(.*)$/, \"$1\"),\n }));\n let proofedDownloaded = [];\n let hadError = false;\n let firstProof = true;\n for (const file of fileNames) {\n const fileBlob =\n await UStoreProvider.api.products.downloadProofPreview(\n orderItem.ID || orderItemId,\n proof.PreviewID,\n file.Url\n );\n if (fileBlob) {\n if (firstProof) {\n window[\"proofPreview\"] = window[\"proofPreview\"] || {};\n window[\"proofPreview\"][orderItem.ID || orderItemId] =\n window[\"proofPreview\"][orderItem.ID || orderItemId] || [];\n window[\"proofPreview\"][orderItem.ID || orderItemId].push(\n fileBlob\n );\n firstProof = false;\n }\n proofedDownloaded = [\n ...proofedDownloaded,\n {\n Url: URL.createObjectURL(fileBlob),\n DisplayName: t(\"DynamicProof.Page\", {\n pageNumber: proofedDownloaded.length + 1,\n }),\n type: proof.Format === 1 ? \"image\" : \"pdf\",\n },\n ];\n } else {\n hadError = true;\n }\n }\n if (!hadError) {\n setProductThumbnails({ Thumbnails: proofedDownloaded });\n }\n setShowLoaderDots(false);\n setPoofPreviewError(hadError);\n };\n if (showRefreshPreview) {\n setShowLoaderDots(true);\n }\n setPoofPreviewError(false);\n proofPreview.push([orderItem.ID || orderItemId, propsForProof]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [orderItem.ID, properties]\n );\n\n const handleFormChange = useCallback(\n async (\n propertyId = null,\n propertyValue = undefined,\n propertyErrors = null,\n formChanges = {}\n ) => {\n setPriceError(null);\n resetPopperError();\n const updatedPropertiesSchema = properties;\n if (Object.keys(formChanges).length) {\n updatedPropertiesSchema.formData = {\n ...properties.formData,\n ...formChanges,\n };\n } else {\n updatedPropertiesSchema.formData = {\n ...properties.formData,\n [propertyId]: propertyValue,\n };\n }\n const updatedErrors = processErrorsOnFormChange(\n Object.keys(formChanges).length ? Object.keys(formChanges) : propertyId,\n propertyErrors,\n updatedPropertiesSchema,\n propertyValue\n );\n const updatedFormData = {\n ...properties,\n formData: updatedPropertiesSchema.formData,\n };\n const propsFromApiToPropsObject =\n convertPropertiesFromApiToPropertiesObject(\n updatedFormData,\n getDependenciesObject(updatedFormData, excelPricingEnabled)\n ? getDependenciesObject(updatedFormData, excelPricingEnabled)\n .dependenciesObject\n : null\n );\n\n const propAffectProof =\n formChanges && !propertyId\n ? Object.entries(formChanges).reduce(\n (r, [key, value]) =>\n r ||\n updatedFormData.JSONSchema.definitions[key]?.custom?.affectProof\n )\n : updatedFormData.JSONSchema.definitions[propertyId]?.custom\n ?.affectProof;\n\n if (\n propAffectProof &&\n product.Type === productTypes.DYNAMIC &&\n !showRefreshPreview &&\n (formChanges || propertyErrors[propertyId]?.length === 0)\n ) {\n await createPreview(propsFromApiToPropsObject);\n }\n\n // Set temporal local state\n setPropertiesObject(propsFromApiToPropsObject);\n setProperties({\n ...properties,\n formData: updatedPropertiesSchema.formData,\n });\n if (!quantityError) {\n // Check if there are validation errors on changed property\n if (\n (!Object.keys(formChanges).length &&\n updatedErrors[propertyId] &&\n updatedErrors[propertyId].errors.length) ||\n (Object.keys(formChanges).length &&\n checkIfThereArePropertyErrors(updatedErrors))\n ) {\n // Errors already shown as part of errors processing - processErrorsOnFormChange\n setPageState(State.initial);\n } else if (checkIfThereArePropertyErrors(updatedErrors)) {\n if (excelPricingEnabled) {\n await updateProperties(\n Object.keys(formChanges).length\n ? Object.keys(formChanges)\n : [propertyId],\n updatedPropertiesSchema,\n null,\n true,\n updatedErrors\n );\n setPageState(State.initial);\n } else if (\n !excelPricingEnabled &&\n checkIfThereAreVisiblePropertyErrors(updatedErrors)\n ) {\n await updateProperties(\n Object.keys(formChanges).length\n ? Object.keys(formChanges)\n : [propertyId],\n updatedPropertiesSchema,\n null,\n false,\n updatedErrors\n );\n setPageState(State.initial);\n } else if (\n !excelPricingEnabled &&\n !checkIfThereAreVisiblePropertyErrors(updatedErrors)\n ) {\n await updateProperties(\n Object.keys(formChanges).length\n ? Object.keys(formChanges)\n : [propertyId],\n updatedPropertiesSchema,\n null,\n false,\n updatedErrors\n );\n if (product.Type === productTypes.DYNAMIC) {\n setPageState(State.initial);\n if (\n updatedPropertiesSchema.JSONSchema?.definitions[propertyId]\n ?.custom?.affectPrice\n ) {\n setPriceError(\"can not recalculate\");\n setPostLoadingProcedures(true);\n }\n } else {\n setPageState(State.initial);\n setPriceError(\"can not recalculate\");\n setPostLoadingProcedures(true);\n }\n }\n } else {\n await updateProperties(\n Object.keys(formChanges).length\n ? Object.keys(formChanges)\n : [propertyId],\n updatedPropertiesSchema,\n null,\n true,\n updatedErrors\n );\n setPageState(State.initial);\n }\n }\n if (\n quantityError === \"invalid\" &&\n product.Type === productTypes.DYNAMIC\n ) {\n setPageState(State.initial);\n }\n },\n [\n checkIfThereArePropertyErrors,\n checkIfThereAreVisiblePropertyErrors,\n excelPricingEnabled,\n product.Type,\n processErrorsOnFormChange,\n properties,\n quantityError,\n updateProperties,\n createPreview,\n showRefreshPreview,\n ]\n );\n\n const loadProductData = async () => {\n if (product.ID) {\n setPageState(State.loading);\n const productFromApi = await UStoreProvider.api.products.getProductByID(\n product.ID\n );\n setProduct(productFromApi);\n const fastPreviewEnabled =\n !productFromApi?.Configuration?.Proof?.FastPreviewEnabled &&\n productFromApi.Type === productTypes.DYNAMIC;\n setShowRefreshPreview(fastPreviewEnabled);\n const productThumbnailsFromApi =\n await UStoreProvider.api.products.getProductThumbnails(\n productFromApi.ID\n );\n setProductThumbnails(productThumbnailsFromApi);\n let orderItemFromApi;\n if (searchParams.get(\"OrderItemId\"))\n orderItemFromApi = await UStoreProvider.api.orders.getOrderItem(\n searchParams.get(\"OrderItemId\")\n );\n else\n orderItemFromApi = await UStoreProvider.api.orders.addOrderItem(\n productFromApi.ID\n );\n setOrderItem(orderItemFromApi);\n setQuantity(orderItemFromApi.Quantity);\n setDeliveryMethod(orderItemFromApi.DeliveryMethod);\n setDeliveryService(orderItemFromApi.DeliveryServiceID);\n const lastOrderFromApi = await UStoreProvider.api.orders.getLastOrder(\n productFromApi.ID\n ); // null\n await loadProductDeliveries(productFromApi, orderItemFromApi.ID);\n loadProductProofUrl(productFromApi, orderItemFromApi.ID);\n await loadProductProperties(\n orderItemFromApi,\n orderItemFromApi.Quantity,\n productFromApi,\n fastPreviewEnabled\n );\n UStoreProvider.state.customState.setBulk({\n currentProductThumbnails: productThumbnailsFromApi,\n currentOrderItem: orderItemFromApi,\n lastOrder: lastOrderFromApi,\n });\n setPageState(State.initial);\n }\n };\n\n const onFormChange = useCallback(\n (...args) => {\n setPageState(State.loading);\n handleFormChange(...args);\n },\n [handleFormChange]\n );\n\n const loadProductDataCallbackRef = useRef(loadProductData);\n useEffect(() => {\n loadProductDataCallbackRef.current = loadProductData;\n });\n\n useEffect(() => {\n const loadProductDataCallback = (e) =>\n loadProductDataCallbackRef.current(e);\n\n const onResize = (event) => {\n setIsMobile(\n document.body.clientWidth < parseInt(theme.md.replace(\"px\", \"\"))\n );\n };\n\n window.addEventListener(\"beforeunload\", cleanCustomState, true);\n window.addEventListener(\"resize\", onResize, true);\n stickyConnect();\n onResize();\n loadProductDataCallback();\n\n return () => {\n stickyDisconnect();\n cleanCustomState();\n window.removeEventListener(\"beforeunload\", cleanCustomState, true);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setExcelPricingEnabled(\n product.Attributes.find(\n (attribute) => attribute.Name === \"PartialPriceCalculationEnabled\"\n ).Value === \"true\"\n );\n }, [product]);\n\n useEffect(() => {\n const demiState = { ...properties.formData };\n\n window.triggerFormPropertyChange = (propertyId, propertyValue) => {\n if (\n propertyValue &&\n propertyValue.includes &&\n propertyValue.includes(\"__GENERIC_HTML_ACCUMULATOR_VALUE__\")\n ) {\n const formValues =\n JSON.parse(propertyValue)[\"__GENERIC_HTML_ACCUMULATOR_VALUE__\"];\n onFormChange(null, null, null, formValues);\n } else {\n if (propertiesObject[propertyId]) demiState[propertyId] = propertyValue;\n clearTimeout(htmlDataUpdateTimeout);\n const newHtmlUpdateTimeout = setTimeout(() => {\n onFormChange(null, null, null, demiState);\n }, 500);\n setHtmlDataUpdateTimeout(newHtmlUpdateTimeout);\n }\n };\n return () => {\n window.triggerFormPropertyChange = undefined;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [properties, propertiesObject, errors]);\n\n useEffect(() => {\n if (\n pageState !== State.loading &&\n pageState !== State.calculatingPrice &&\n postLoadingProcedures\n ) {\n if (!forceAddToCartButtonPopper) {\n if (priceError === \"invalid\") {\n setPopperError(\"GET_PRICE\");\n } else if (priceError === \"can not recalculate\") {\n setPopperError(\"PRICE_CAN_NOT_BE_UPDATED\");\n } else if (priceError === null) {\n setPopperError(null);\n }\n }\n setPostLoadingProcedures(false);\n }\n }, [\n priceError,\n quantityError,\n pageState,\n excelPricingEnabled,\n postLoadingProcedures,\n forceAddToCartButtonPopper,\n price,\n ]);\n\n useEffect(() => {\n if (pageState !== State.loading && pageState !== State.calculatingPrice)\n setPostLoadingProcedures(true);\n else setPostLoadingProcedures(false);\n }, [pageState]);\n\n const fetchArticleData = async (manuscriptID) => {\n /*\n Fetch data from api and return it\n */\n const article = await fetch(\n \"https://xmpiedirector.cierant.com/acsapi/api/sku/search/\" + manuscriptID\n )\n .then((response, data) => response.json())\n .then((data) => {\n if (data.length > 0) {\n return [data[0].articleName, manuscriptID, data[0].pageCount];\n } else {\n return [];\n }\n })\n .catch(function (err) {\n // There was an error\n console.warn(\"Something went wrong.\", err);\n });\n\n return article;\n };\n\n const getInitialData = async () => {\n let { currentItems } = UStoreProvider.state.customState.get();\n // get manuscript ID from Router\n const manuscriptID = searchParams.get(\"manuscriptid\");\n let articleData;\n\n // if manuscript fetch data if not use state data\n if (manuscriptID) {\n if (Object.keys(properties).length > 0) {\n setLoadingData(true);\n articleData = await fetchArticleData(manuscriptID).then((data) => data);\n }\n } else {\n let {\n currentItems: { Article, Pagecount, ArticleName },\n } = UStoreProvider.state.customState.get();\n\n let articleName = \"\";\n let count = 0;\n let title = \"\";\n\n if (Article) {\n articleName = Article;\n count = Pagecount;\n title = ArticleName;\n } else {\n articleName = currentItems[0].value;\n count = currentItems[1].value;\n title = currentItems[2].value;\n }\n //\n articleData = [title, articleName, count];\n }\n\n if (Object.keys(properties).length > 0 && !inputDataLoaded) {\n Object.entries(properties.formData).forEach((key, index) => {\n onFormChange(key[0], articleData[index]);\n });\n setInputDataLoaded(true);\n }\n };\n\n // charge values into the inputs\n useEffect(() => {\n if (!inputDataLoaded && !loadingData) {\n getInitialData();\n }\n }, [properties]);\n\n const cleanCustomState = () => {\n [\n \"currentProduct\",\n \"currentOrderItem\",\n \"currentOrderItemId\",\n \"currentOrderItemPriceModel\",\n \"lastOrder\",\n \"currentProductThumbnails\",\n \"currentDeliveryServices\",\n \"CurrentProductDucErrors\",\n \"ducData\",\n \"currentProductProperties\",\n \"isLoadingData\",\n ].forEach((property) => {\n UStoreProvider.state.customState.delete(property);\n });\n };\n\n const setPricingError = (error) => {\n if (error.ErrorCode && error.ErrorCode === \"ExcelCalculation\") {\n const updatedPrice = {\n IsMinimumPrice: true,\n MailingFee: 0,\n Price: { Price: -1, Tax: 0 },\n ProductPrice: 0,\n };\n setPrice(updatedPrice);\n UStoreProvider.state.customState.set(\n \"currentOrderItemPriceModel\",\n updatedPrice\n );\n setPriceError(\"invalid\");\n setPostLoadingProcedures(true);\n }\n };\n\n const loadProductDeliveries = async (productFromApi, orderItemId) => {\n if (productFromApi.Configuration.Delivery.Mailing.Enabled) {\n const deliveriesFromApi =\n await UStoreProvider.api.orders.getDeliveryServices(orderItemId);\n setProductDeliveries(deliveriesFromApi);\n UStoreProvider.state.customState.set(\n \"currentProductDeliveries\",\n deliveriesFromApi\n );\n }\n };\n\n const loadProductProperties = async (\n updatedOrderItem,\n initialQuantity,\n product,\n fastPreviewEnabled\n ) => {\n try {\n const propertiesFromApi = await UStoreProvider.api.orders.getProperties(\n updatedOrderItem.ID\n );\n const updatedPropertiesObject =\n convertPropertiesFromApiToPropertiesObject(\n propertiesFromApi,\n getDependenciesObject(propertiesFromApi, excelPricingEnabled)\n ? getDependenciesObject(propertiesFromApi, excelPricingEnabled)\n .dependenciesObject\n : null\n );\n\n setProperties(propertiesFromApi);\n setPropertiesObject(updatedPropertiesObject);\n if (product.Type === productTypes.DYNAMIC) {\n if (searchParams.get(\"OrderItemId\")) {\n setTimeout(\n () =>\n createPreview(\n updatedPropertiesObject,\n searchParams.get(\"OrderItemId\"),\n propertiesFromApi\n ),\n 0\n );\n } else if (!fastPreviewEnabled) {\n setTimeout(\n () =>\n createPreview(\n updatedPropertiesObject,\n updatedOrderItem.ID,\n propertiesFromApi\n ),\n 0\n );\n }\n }\n\n UStoreProvider.state.customState.set(\"currentProductProperties\", {\n ...propertiesFromApi,\n });\n const updatedErrors = await processErrorsOnApiResponse(\n propertiesFromApi,\n null\n );\n\n if (!checkIfThereAreVisiblePropertyErrors(updatedErrors)) {\n await calculateProperties(\n initialQuantity,\n updatedOrderItem,\n propertiesFromApi,\n updatedErrors\n );\n } else {\n setPricingError({\n ErrorCode: \"ExcelCalculation\",\n });\n }\n } catch (e) {\n console.error(e);\n // Excel template V15.0 error\n setPricingError(e);\n }\n };\n\n const loadProductProofUrl = (productFromApi, orderItemId) => {\n setProofUrl(\n productFromApi.Proof\n ? `${productFromApi.Proof.Url}&OrderItemID=${orderItemId}`\n : null\n );\n };\n\n const reRouteToCart = (storeType, cartUrl) => {\n if (storeType === 3 && cartUrl) {\n const decoded = decodeURIComponent(cartUrl);\n window.location.href = `${decoded}${\n decoded.includes(\"?\") ? \"&\" : \"?\"\n }OrderProductId=${orderItem.FriendlyID}`;\n } else {\n navigate(urlGenerator.get({ page: \"cart\" }));\n }\n };\n\n const reRouteToNewOrder = (productId, productName, newOrderId) => {\n setSearchParams({ OrderItemId: newOrderId, reorder: true });\n navigate(0);\n };\n\n const handleQuantityChange = async (newQuantity, error) => {\n try {\n if (error) {\n setQuantityError(\"invalid\");\n if (newQuantity === \"\") setQuantity(\"\");\n return;\n } else {\n setQuantityError(null);\n }\n\n if (checkIfThereArePropertyErrors() && !excelPricingEnabled) {\n if (checkIfThereAreVisiblePropertyErrors()) {\n return;\n } else {\n setPriceError(\"can not recalculate\");\n setPostLoadingProcedures(true);\n return;\n }\n }\n\n if (pageState !== State.loading) {\n await updateProperties([\"quantity\"], null, newQuantity);\n setPageState(State.initial);\n setPopperError(null);\n }\n } catch (e) {\n setPageState(State.initial);\n console.error(e);\n setPricingError(e);\n } finally {\n setQuantity(newQuantity);\n if (!isNaN(parseInt(newQuantity))) {\n setOrderItem({\n ...orderItem,\n Quantity: newQuantity,\n });\n }\n }\n };\n\n const addToCartOrSave = async (skipPropertiesPush = false) => {\n // If product is out of stock - save it for later\n const productStockQuantity =\n product.Inventory && product.Inventory.Quantity;\n const minQuantity =\n product.Configuration &&\n product.Configuration.Quantity &&\n product.Configuration.Quantity.Minimum\n ? product.Configuration.Quantity.Minimum\n : 0;\n const allowOutOfStockPurchase =\n product.Inventory && product.Inventory.AllowOutOfStockPurchase;\n if (\n product.Inventory &&\n isOutOfStock(productStockQuantity, minQuantity, allowOutOfStockPurchase)\n ) {\n await pushSavedForLater(orderItem.ID);\n } else {\n if (!skipPropertiesPush) {\n if (properties && Object.keys(properties).length) {\n await pushProperties(\n orderItem.ID,\n convertProductPropertiesFormIntoArray(\n properties,\n excelPricingEnabled\n )\n );\n }\n await pushOrderItem(orderItem.ID, {\n ...orderItem,\n Properties:\n properties && Object.keys(properties).length\n ? convertProductPropertiesFormIntoArray(\n properties,\n excelPricingEnabled\n )\n : null,\n });\n if (product.Type === productTypes.DYNAMIC) {\n await window.UStoreProvider.api.products.createProof(orderItem.ID);\n if (\n window.proofPreview &&\n window.proofPreview[orderItem.ID]?.length > 1\n ) {\n window.proofPreview[orderItem.ID] = [\n window.proofPreview[orderItem.ID][\n window.proofPreview[orderItem.ID].length - 1\n ],\n ];\n }\n }\n }\n await pushCart(orderItem.ID);\n }\n reRouteToCart(StoreType, themeContext.get(\"cartUrl\"));\n };\n\n const handleAddToCartButtonClick = async () => {\n if (pageState !== State.initial) return;\n // Error checking\n if (quantityError) {\n setForceAddToCartButtonPopper(true);\n setPopperError(\"VALIDATION_ERROR\");\n setPostLoadingProcedures(true);\n return;\n } else if (\n (priceError === \"invalid\" &&\n !((price.Price && price.Price.Price === -1) || price.IsMinimumPrice)) ||\n excelPricingError\n ) {\n setForceAddToCartButtonPopper(true);\n setPopperError(\"SOMETHING_WENT_WRONG\");\n setPostLoadingProcedures(true);\n return;\n } else if (\n priceError === \"invalid\" &&\n ((price.Price && price.Price.Price === -1) || price.IsMinimumPrice)\n ) {\n setForceAddToCartButtonPopper(true);\n setPopperError(\"GET_PRICE\");\n setPostLoadingProcedures(true);\n return;\n } else if (checkIfThereArePropertyErrors()) {\n setForceAddToCartButtonPopper(true);\n setPostLoadingProcedures(true);\n showAllErrors();\n if (\n product.Type === productTypes.DYNAMIC &&\n checkIfThereAreSectionErrors()\n ) {\n const distinctSections = [\n ...new Set(\n Object.values(propertiesObject).reduce(\n (acc, current) => [\n ...acc,\n current.uiSchema[\"ui:options\"].section,\n ],\n []\n )\n ),\n ];\n\n if (distinctSections.length > 1) {\n const sectionsAffectedByErrors = [\n ...new Set(\n Object.values(errors).reduce(\n (acc, current) =>\n current.show && current.section\n ? [...acc, current.section]\n : [...acc],\n []\n )\n ),\n ].sort(\n (a, b) => distinctSections.indexOf(a) - distinctSections.indexOf(b)\n );\n const sectionsAffectedByErrorsWithIndexes =\n sectionsAffectedByErrors.map((section) =>\n distinctSections.includes(section)\n ? `${distinctSections.indexOf(section) + 1}. ${\n section === \"xmpie_product_properties\"\n ? t(\"xmpie_product_properties\")\n : section\n }`\n : \"\"\n );\n // numbers lower than -2 are special values to signal dynamic form to open the first section with errors\n setSectionToOpen(-2 - Date.now());\n setPopperAffectedSections(sectionsAffectedByErrorsWithIndexes);\n setPopperError(\"SECTION_ERROR\");\n return;\n }\n }\n setPopperError(\"VALIDATION_ERROR\");\n return;\n }\n const updatedProperties = await updateProperties(\n Object.keys(propertiesObject)\n );\n if (priceError) {\n setForceAddToCartButtonPopper(true);\n setPopperError(\"SOMETHING_WENT_WRONG\");\n setPostLoadingProcedures(true);\n return;\n }\n const updatedErrors = await processErrorsOnAddToCart(\n updatedProperties.updatedPropertiesFromApi\n );\n if (checkIfThereArePropertyErrors(updatedErrors)) {\n setForceAddToCartButtonPopper(true);\n setPopperError(\"VALIDATION_ERROR\");\n setPostLoadingProcedures(true);\n return;\n }\n setPageState(State.loading);\n // If product requires proof approval, open form approval modal and exit\n if (\n product.Configuration.Proof &&\n product.Configuration.Proof.RequireProofApproval\n ) {\n if (price && price.Price)\n await calculateProperties(\n quantity,\n null,\n updatedProperties.updatedPropertiesFromApi,\n updatedErrors\n );\n setApprovalModalOpen(true);\n setPageState(State.initial);\n return;\n }\n\n await addToCartOrSave();\n };\n\n const handleDeliveryChange = async (\n newDeliveryMethod,\n newDeliveryServiceId\n ) => {\n setDeliveryMethod(newDeliveryMethod);\n setDeliveryService(newDeliveryServiceId);\n const updatedOrderItem = {\n ...orderItem,\n DeliveryMethod: newDeliveryMethod,\n DeliveryServiceID: newDeliveryServiceId,\n };\n setOrderItem(updatedOrderItem);\n UStoreProvider.state.customState.set(\"currentOrderItem\", updatedOrderItem);\n if (Object.keys(price).length && price.Price)\n calculateProperties(quantity, updatedOrderItem);\n };\n\n const handlePropertyBlur = (propertyId) => {\n const updatedErrors = processErrorsOnFormChange(\n propertyId,\n null,\n properties\n );\n processErrorsOnApiResponse(properties, updatedErrors, [propertyId]);\n };\n\n const handleReorder = async () => {\n const { lastOrder } = UStoreProvider.state.customState.get();\n setPageState(State.loading);\n const newOrder = await getReorder(lastOrder.OrderItemID);\n reRouteToNewOrder(product.FriendlyID, product.Name, newOrder.ID);\n };\n\n const getContinueButtonText = (proofModal = false) => {\n if (\n product.Configuration.Proof &&\n product.Configuration.Proof.RequireProofApproval &&\n !proofModal\n )\n return t(\"product.review_approve\");\n if (\n product &&\n product.Inventory &&\n Object.keys(product.Inventory).includes(\"Quantity\") &&\n Object.keys(product.Inventory).includes(\"AllowOutOfStockPurchase\") &&\n isOutOfStock(\n product.Inventory.Quantity,\n product.Configuration.Quantity.Minimum,\n product.Inventory.AllowOutOfStockPurchase\n )\n )\n return t(\"product.save_for_later\");\n return t(\"product.add_to_cart\");\n };\n\n const resetPopperError = () => {\n setPopperError(null);\n setForceAddToCartButtonPopper(false);\n };\n\n const onProofPreviewClick = async () => await createPreview(propertiesObject);\n\n return (\n <ProductLayout\n className=\"product-instance\"\n dynamic={product.Type === productTypes.DYNAMIC}\n >\n <left is=\"custom\">\n <div className=\"left-container\">\n <PreviewErrorBalloon {...{ poofPreviewError }} />\n <ImageCarousel\n showTitle\n images={productThumbnails.Thumbnails}\n showLoaderDots={showLoaderDots && !isMobile}\n isStretched={product.Type === productTypes.DYNAMIC}\n />\n {product.Proof && (\n <Proof\n currentProduct={product}\n isMobile={false}\n hasThumbnails\n hideLink={false}\n orderItemId={orderItem.ID}\n onToggle={() => setProofModalOpen(!proofModalOpen)}\n />\n )}\n <RefreshPreviewButton\n {...{\n showRefreshPreview,\n onProofPreviewClick,\n disabled: disabledRefreshPreviewButton,\n }}\n />\n </div>\n </left>\n <right is=\"custom\">\n <Slot name=\"static_product_top\" />\n <ProductDetails\n className=\"product-instance\"\n productModel={product}\n minimumQuantity={\n product.Configuration\n ? product.Configuration.Quantity.Minimum\n : null\n }\n reorderModel={\n !searchParams.get(\"reorder\")\n ? UStoreProvider.state.customState.get(\"lastOrder\")\n : null\n }\n onReorder={handleReorder}\n showInStock\n langCode={themeContext.get(\"languageCode\")}\n />\n {isMobile && (\n <>\n <PreviewErrorBalloon {...{ PreviewErrorBalloon }} />\n <div className=\"image-carousel-mobile\">\n <ImageCarousel\n zoomAllowed={false}\n images={productThumbnails.Thumbnails}\n isStretched={true}\n />\n <Proof\n currentProduct={product}\n isMobile\n hasThumbnails={\n productThumbnails.Thumbnails &&\n productThumbnails.Thumbnails.length > 1\n }\n orderItemId={orderItem.ID}\n onToggle={() => setProofModalOpen(!proofModalOpen)}\n />\n </div>\n <RefreshPreviewButton\n {...{\n showRefreshPreview,\n onProofPreviewClick,\n disabled: disabledRefreshPreviewButton,\n }}\n />\n </>\n )}\n <Price\n ref={topPriceRef}\n isPriceCalculating={\n pageState === State.calculatingPrice || pageState === State.loading\n }\n price={price}\n showMinimumPrice={!!price.IsMinimumPrice}\n />\n <div ref={topMarkerRef} className=\"price-top-marker\"></div>\n <div className=\"product-instance-wizard\">\n <div\n id=\"form-container\"\n className=\"product-instance-properties product-properties\"\n >\n <Slot name=\"static_product_above_quantity\" />\n <div className=\"quantity\">\n <span className=\"quantity-label\">{t(\"product.quantity\")}</span>\n {orderItem?.Quantity && (\n <ProductQuantity\n supportsInventory\n productModel={product}\n orderModel={orderItem}\n onQuantityChange={handleQuantityChange}\n />\n )}\n </div>\n <Slot name=\"static_product_below_quantity\" />\n <DynamicForm\n errors={errors}\n excelPricingEnabled={excelPricingEnabled}\n formData={properties.formData}\n onBlur={handlePropertyBlur}\n onChange={onFormChange}\n properties={propertiesObject}\n sectionToOpen={sectionToOpen}\n />\n </div>\n </div>\n <ProductDeliveryMethod\n className=\"static-delivery-method\"\n productModel={product}\n onDeliveryChange={handleDeliveryChange}\n currentDeliveryMethod={deliveryMethod}\n currentDeliveryServiceID={deliveryService}\n deliveryServices={productDeliveries}\n />\n <ProductOrderSummary\n ref={bottomPriceRef}\n currency={currentCurrency?.Code}\n deliveryMethod={deliveryMethod}\n className=\"static-order-summary\"\n productModel={product}\n quantity={quantity}\n taxFormatType={TaxFormatType}\n priceModel={Object.keys(price).length ? price : null}\n isPriceCalculating={\n pageState === State.calculatingPrice || pageState === State.loading\n }\n />\n <div ref={bottomMarkerRef} className=\"price-bottom-marker\"></div>\n <ProductProof\n onAddToCartClick={handleAddToCartButtonClick}\n isModalOpen={proofModalOpen}\n modalClassName=\"product-instance-proof-modal\"\n src={proofUrl}\n type={\n product.Proof && product.Proof.MimeType\n ? product.Proof.MimeType\n : \"\"\n }\n onCloseModal={() => setProofModalOpen(!proofModalOpen)}\n isMobile={isMobile}\n />\n {product.Type === productTypes.DYNAMIC ? (\n <DynamicProductApproval\n properties={properties}\n proofType={product?.Proof?.MimeType}\n onAddToCartClick={() => addToCartOrSave(true)}\n orderItem={orderItem}\n thumbnails={productThumbnails.Thumbnails}\n isModalOpen={approvalModalOpen}\n onCloseModal={() => setApprovalModalOpen(!approvalModalOpen)}\n addToCartBtnText={getContinueButtonText(true)}\n checkboxText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalText\n ? product.Configuration.Proof.ProofApprovalText\n : null\n }\n errorText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalValidationMessage\n ? product.Configuration.Proof.ProofApprovalValidationMessage\n : null\n }\n />\n ) : (\n <ProductApproval\n isModalOpen={approvalModalOpen}\n src={proofUrl}\n type={\n product.Proof && product.Proof.MimeType\n ? product.Proof.MimeType\n : \"\"\n }\n onCloseModal={() => setApprovalModalOpen(!approvalModalOpen)}\n onAddToCartClick={() => addToCartOrSave()}\n addToCartBtnText={getContinueButtonText(true)}\n checkboxText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalText\n ? product.Configuration.Proof.ProofApprovalText\n : null\n }\n errorText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalValidationMessage\n ? product.Configuration.Proof.ProofApprovalValidationMessage\n : null\n }\n excelPricingEnabled={excelPricingEnabled}\n />\n )}\n <div className=\"add-to-cart-button-wrapper\">\n <Slot name=\"static_product_above_add_to_cart\" />\n <div\n className=\"button button-primary add-to-cart-button\"\n id=\"add-to-cart-button\"\n onClick={handleAddToCartButtonClick}\n tabIndex=\"0\"\n >\n {pageState === State.loading ||\n pageState === State.calculatingPrice ? (\n <LoadingDots />\n ) : (\n getContinueButtonText()\n )}\n </div>\n <Slot name=\"static_product_below_add_to_cart\" />\n </div>\n <Popper\n bottomPriceRef={bottomPriceRef}\n topPriceRef={topPriceRef}\n stickPriceRef={stickyPriceRef}\n errorCode={popperError}\n forceAddToCartButton={forceAddToCartButtonPopper}\n resetError={resetPopperError}\n popperAffectedSections={popperAffectedSections}\n />\n <Slot name=\"static_product_bottom\" />\n {product.Type === productTypes.DYNAMIC && (\n <ProductThumbnailsPreview\n isModalOpen={thumbnailModalOpen}\n onCloseModal={() => setThumbnailModalOpen(false)}\n productThumbnails={\n product.Type === productTypes.DYNAMIC && productThumbnails\n ? productThumbnails\n : null\n }\n modalClassName=\"thumbnails-preview\"\n onImageChange={(id) => setLastViewImageId(id)}\n poofPreviewError={poofPreviewError}\n />\n )}\n {showStickyPrice && (\n <ProductStickyPrice\n longPrice={TaxFormatType === 3}\n onClick={handleAddToCartButtonClick}\n addToCartBtnText={getContinueButtonText()}\n priceModel={price}\n isPriceLoading={\n pageState === State.loading ||\n pageState === State.calculatingPrice\n }\n disabled={\n pageState === State.loading ||\n pageState === State.calculatingPrice\n }\n showMinimumPrice={!!price.IsMinimumPrice}\n productThumbnails={\n product.Type === productTypes.DYNAMIC && productThumbnails\n ? productThumbnails\n : null\n }\n onImageClick={() => setThumbnailModalOpen(true)}\n lastViewImageId={lastViewImageId}\n ref={stickyPriceRef}\n />\n )}\n </right>\n </ProductLayout>\n );\n};\n\nexport default StaticProduct;\n","import React, { Component } from 'react'\n\nimport { UStoreProvider } from '@ustore/core'\nimport LoadingDots from '$core-components/LoadingDots'\nimport { t } from '$themelocalization'\nimport themeContext from '$ustoreinternal/services/themeContext'\n\nimport KitProduct from '../components/products/kit/KitProduct'\nimport StaticProduct from '../components/products/static/StaticProduct'\nimport Layout from '../components/layout'\n\nimport { productTypes, getIsNGProduct } from '../services/utils'\nimport './Products.scss'\n\nclass Products extends Component {\n renderLoader () {\n return (\n <div>\n <div className={'product-loading'}>\n <LoadingDots />\n {t('product.loading-msg')}\n </div>\n </div>\n )\n }\n\n render () {\n if (!this.props.state || !this.props.customState) {\n return <Layout {...this.props}>\n {this.renderLoader()}\n </Layout>\n }\n\n const { customState: { currentProduct } } = this.props\n if (!currentProduct) {\n return <Layout {...this.props}>\n {this.renderLoader()}\n </Layout>\n }\n\n // check type of product to decide which component to render.\n switch (currentProduct.Type) {\n case productTypes.KIT:\n return <Layout {...this.props}>\n <KitProduct key={currentProduct.ID} {...this.props} />\n </Layout>\n case productTypes.STATIC:\n case productTypes.DYNAMIC:\n return <Layout {...this.props}>\n <StaticProduct key={currentProduct.ID} {...this.props} />\n </Layout>\n default:\n return null\n }\n }\n}\n\nconst checkRedirectToLegacyProduct = (ctx, product) => {\n if (getIsNGProduct(product) === false) {\n if (ctx && ctx.res) {\n ctx.res.writeHead(301, {\n Location: themeContext.context['assetPrefix'] + ctx.req.path.replace('/products/', '/product/').substring(1)\n })\n ctx.res.end()\n }\n }\n}\n\nProducts.getInitialProps = async function (ctx) {\n const { query: { id: productFriendlyID, OrderItemId: orderItemID } } = ctx\n\n if (!productFriendlyID) return {}\n\n const { currentProduct } = UStoreProvider.state.customState.get()\n if (currentProduct && currentProduct.FriendlyID === parseInt(productFriendlyID)) {\n checkRedirectToLegacyProduct(ctx, currentProduct)\n return { currentOrderItemId: orderItemID || null }\n }\n\n const productID = await UStoreProvider.api.products.getProductIDByFriendlyID(productFriendlyID)\n const productDetails = await UStoreProvider.api.products.getProductsByIDs([productID])\n checkRedirectToLegacyProduct(ctx, productDetails[0])\n\n if (productDetails && productDetails.length === 1) {\n return { currentProduct: productDetails[0], currentOrderItemId: orderItemID }\n }\n\n return {}\n}\n\nexport default Products\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class OrderFinalStep extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class Addresses extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","const niceErrors = {\n 0: `Invalid value for configuration 'enforceActions', expected 'never', 'always' or 'observed'`,\n 1(annotationType, key: PropertyKey) {\n return `Cannot apply '${annotationType}' to '${key.toString()}': Field not found.`\n },\n /*\n 2(prop) {\n return `invalid decorator for '${prop.toString()}'`\n },\n 3(prop) {\n return `Cannot decorate '${prop.toString()}': action can only be used on properties with a function value.`\n },\n 4(prop) {\n return `Cannot decorate '${prop.toString()}': computed can only be used on getter properties.`\n },\n */\n 5: \"'keys()' can only be used on observable objects, arrays, sets and maps\",\n 6: \"'values()' can only be used on observable objects, arrays, sets and maps\",\n 7: \"'entries()' can only be used on observable objects, arrays and maps\",\n 8: \"'set()' can only be used on observable objects, arrays and maps\",\n 9: \"'remove()' can only be used on observable objects, arrays and maps\",\n 10: \"'has()' can only be used on observable objects, arrays and maps\",\n 11: \"'get()' can only be used on observable objects, arrays and maps\",\n 12: `Invalid annotation`,\n 13: `Dynamic observable objects cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)`,\n 14: \"Intercept handlers should return nothing or a change object\",\n 15: `Observable arrays cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)`,\n 16: `Modification exception: the internal structure of an observable array was changed.`,\n 17(index, length) {\n return `[mobx.array] Index out of bounds, ${index} is larger than ${length}`\n },\n 18: \"mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js\",\n 19(other) {\n return \"Cannot initialize from classes that inherit from Map: \" + other.constructor.name\n },\n 20(other) {\n return \"Cannot initialize map from \" + other\n },\n 21(dataStructure) {\n return `Cannot convert to map from '${dataStructure}'`\n },\n 22: \"mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js\",\n 23: \"It is not possible to get index atoms from arrays\",\n 24(thing) {\n return \"Cannot obtain administration from \" + thing\n },\n 25(property, name) {\n return `the entry '${property}' does not exist in the observable map '${name}'`\n },\n 26: \"please specify a property\",\n 27(property, name) {\n return `no observable property '${property.toString()}' found on the observable object '${name}'`\n },\n 28(thing) {\n return \"Cannot obtain atom from \" + thing\n },\n 29: \"Expecting some object\",\n 30: \"invalid action stack. did you forget to finish an action?\",\n 31: \"missing option for computed: get\",\n 32(name, derivation) {\n return `Cycle detected in computation ${name}: ${derivation}`\n },\n 33(name) {\n return `The setter of computed value '${name}' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?`\n },\n 34(name) {\n return `[ComputedValue '${name}'] It is not possible to assign a new value to a computed value.`\n },\n 35: \"There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`\",\n 36: \"isolateGlobalState should be called before MobX is running any reactions\",\n 37(method) {\n return `[mobx] \\`observableArray.${method}()\\` mutates the array in-place, which is not allowed inside a derivation. Use \\`array.slice().${method}()\\` instead`\n },\n 38: \"'ownKeys()' can only be used on observable objects\",\n 39: \"'defineProperty()' can only be used on observable objects\"\n} as const\n\nconst errors: typeof niceErrors = __DEV__ ? niceErrors : ({} as any)\n\nexport function die(error: string | keyof typeof errors, ...args: any[]): never {\n if (__DEV__) {\n let e: any = typeof error === \"string\" ? error : errors[error]\n if (typeof e === \"function\") e = e.apply(null, args as any)\n throw new Error(`[MobX] ${e}`)\n }\n throw new Error(\n typeof error === \"number\"\n ? `[MobX] minified error nr: ${error}${\n args.length ? \" \" + args.map(String).join(\",\") : \"\"\n }. Find the full error at: https://github.com/mobxjs/mobx/blob/main/packages/mobx/src/errors.ts`\n : `[MobX] ${error}`\n )\n}\n","declare const window: any\ndeclare const self: any\n\nconst mockGlobal = {}\n\nexport function getGlobal() {\n if (typeof globalThis !== \"undefined\") {\n return globalThis\n }\n if (typeof window !== \"undefined\") {\n return window\n }\n if (typeof global !== \"undefined\") {\n return global\n }\n if (typeof self !== \"undefined\") {\n return self\n }\n return mockGlobal\n}\n","import { globalState, die } from \"../internal\"\n\n// We shorten anything used > 5 times\nexport const assign = Object.assign\nexport const getDescriptor = Object.getOwnPropertyDescriptor\nexport const defineProperty = Object.defineProperty\nexport const objectPrototype = Object.prototype\n\nexport const EMPTY_ARRAY = []\nObject.freeze(EMPTY_ARRAY)\n\nexport const EMPTY_OBJECT = {}\nObject.freeze(EMPTY_OBJECT)\n\nexport interface Lambda {\n (): void\n name?: string\n}\n\nconst hasProxy = typeof Proxy !== \"undefined\"\nconst plainObjectString = Object.toString()\n\nexport function assertProxies() {\n if (!hasProxy) {\n die(\n __DEV__\n ? \"`Proxy` objects are not available in the current environment. Please configure MobX to enable a fallback implementation.`\"\n : \"Proxy not available\"\n )\n }\n}\n\nexport function warnAboutProxyRequirement(msg: string) {\n if (__DEV__ && globalState.verifyProxies) {\n die(\n \"MobX is currently configured to be able to run in ES5 mode, but in ES5 MobX won't be able to \" +\n msg\n )\n }\n}\n\nexport function getNextId() {\n return ++globalState.mobxGuid\n}\n\n/**\n * Makes sure that the provided function is invoked at most once.\n */\nexport function once(func: Lambda): Lambda {\n let invoked = false\n return function () {\n if (invoked) {\n return\n }\n invoked = true\n return (func as any).apply(this, arguments)\n }\n}\n\nexport const noop = () => {}\n\nexport function isFunction(fn: any): fn is Function {\n return typeof fn === \"function\"\n}\n\nexport function isString(value: any): value is string {\n return typeof value === \"string\"\n}\n\nexport function isStringish(value: any): value is string | number | symbol {\n const t = typeof value\n switch (t) {\n case \"string\":\n case \"symbol\":\n case \"number\":\n return true\n }\n return false\n}\n\nexport function isObject(value: any): value is Object {\n return value !== null && typeof value === \"object\"\n}\n\nexport function isPlainObject(value: any) {\n if (!isObject(value)) {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n if (proto == null) {\n return true\n }\n const protoConstructor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n return (\n typeof protoConstructor === \"function\" && protoConstructor.toString() === plainObjectString\n )\n}\n\n// https://stackoverflow.com/a/37865170\nexport function isGenerator(obj: any): boolean {\n const constructor = obj?.constructor\n if (!constructor) {\n return false\n }\n if (\n \"GeneratorFunction\" === constructor.name ||\n \"GeneratorFunction\" === constructor.displayName\n ) {\n return true\n }\n return false\n}\n\nexport function addHiddenProp(object: any, propName: PropertyKey, value: any) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: true,\n configurable: true,\n value\n })\n}\n\nexport function addHiddenFinalProp(object: any, propName: PropertyKey, value: any) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: false,\n configurable: true,\n value\n })\n}\n\nexport function createInstanceofPredicate<T>(\n name: string,\n theClass: new (...args: any[]) => T\n): (x: any) => x is T {\n const propName = \"isMobX\" + name\n theClass.prototype[propName] = true\n return function (x) {\n return isObject(x) && x[propName] === true\n } as any\n}\n\nexport function isES6Map(thing: any): thing is Map<any, any> {\n return thing instanceof Map\n}\n\nexport function isES6Set(thing: any): thing is Set<any> {\n return thing instanceof Set\n}\n\nconst hasGetOwnPropertySymbols = typeof Object.getOwnPropertySymbols !== \"undefined\"\n\n/**\n * Returns the following: own enumerable keys and symbols.\n */\nexport function getPlainObjectKeys(object: any) {\n const keys = Object.keys(object)\n // Not supported in IE, so there are not going to be symbol props anyway...\n if (!hasGetOwnPropertySymbols) {\n return keys\n }\n const symbols = Object.getOwnPropertySymbols(object)\n if (!symbols.length) {\n return keys\n }\n return [...keys, ...symbols.filter(s => objectPrototype.propertyIsEnumerable.call(object, s))]\n}\n\n// From Immer utils\n// Returns all own keys, including non-enumerable and symbolic\nexport const ownKeys: (target: any) => Array<string | symbol> =\n typeof Reflect !== \"undefined\" && Reflect.ownKeys\n ? Reflect.ownKeys\n : hasGetOwnPropertySymbols\n ? obj => Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj) as any)\n : /* istanbul ignore next */ Object.getOwnPropertyNames\n\nexport function stringifyKey(key: any): string {\n if (typeof key === \"string\") {\n return key\n }\n if (typeof key === \"symbol\") {\n return key.toString()\n }\n return new String(key).toString()\n}\n\nexport function toPrimitive(value: any) {\n return value === null ? null : typeof value === \"object\" ? \"\" + value : value\n}\n\nexport function hasProp(target: Object, prop: PropertyKey): boolean {\n return objectPrototype.hasOwnProperty.call(target, prop)\n}\n\n// From Immer utils\nexport const getOwnPropertyDescriptors =\n Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(target: any) {\n // Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n const res: any = {}\n // Note: without polyfill for ownKeys, symbols won't be picked up\n ownKeys(target).forEach(key => {\n res[key] = getDescriptor(target, key)\n })\n return res\n }\n","import { Annotation, addHiddenProp, AnnotationsMap, hasProp, die, isOverride } from \"../internal\"\n\nimport type { Decorator } from \"../types/decorator_fills\"\n\nexport const storedAnnotationsSymbol = Symbol(\"mobx-stored-annotations\")\n\n/**\n * Creates a function that acts as\n * - decorator\n * - annotation object\n */\nexport function createDecoratorAnnotation<D extends Decorator = Decorator>(\n annotation: Annotation\n): PropertyDecorator & Annotation & D {\n function decorator(target, property) {\n if (is20223Decorator(property)) {\n return annotation.decorate_20223_(target, property)\n } else {\n storeAnnotation(target, property, annotation)\n }\n }\n return Object.assign(decorator, annotation) as any\n}\n\n/**\n * Stores annotation to prototype,\n * so it can be inspected later by `makeObservable` called from constructor\n */\nexport function storeAnnotation(prototype: any, key: PropertyKey, annotation: Annotation) {\n if (!hasProp(prototype, storedAnnotationsSymbol)) {\n addHiddenProp(prototype, storedAnnotationsSymbol, {\n // Inherit annotations\n ...prototype[storedAnnotationsSymbol]\n })\n }\n // @override must override something\n if (__DEV__ && isOverride(annotation) && !hasProp(prototype[storedAnnotationsSymbol], key)) {\n const fieldName = `${prototype.constructor.name}.prototype.${key.toString()}`\n die(\n `'${fieldName}' is decorated with 'override', ` +\n `but no such decorated member was found on prototype.`\n )\n }\n // Cannot re-decorate\n assertNotDecorated(prototype, annotation, key)\n\n // Ignore override\n if (!isOverride(annotation)) {\n prototype[storedAnnotationsSymbol][key] = annotation\n }\n}\n\nfunction assertNotDecorated(prototype: object, annotation: Annotation, key: PropertyKey) {\n if (__DEV__ && !isOverride(annotation) && hasProp(prototype[storedAnnotationsSymbol], key)) {\n const fieldName = `${prototype.constructor.name}.prototype.${key.toString()}`\n const currentAnnotationType = prototype[storedAnnotationsSymbol][key].annotationType_\n const requestedAnnotationType = annotation.annotationType_\n die(\n `Cannot apply '@${requestedAnnotationType}' to '${fieldName}':` +\n `\\nThe field is already decorated with '@${currentAnnotationType}'.` +\n `\\nRe-decorating fields is not allowed.` +\n `\\nUse '@override' decorator for methods overridden by subclass.`\n )\n }\n}\n\n/**\n * Collects annotations from prototypes and stores them on target (instance)\n */\nexport function collectStoredAnnotations(target): AnnotationsMap<any, any> {\n if (!hasProp(target, storedAnnotationsSymbol)) {\n // if (__DEV__ && !target[storedAnnotationsSymbol]) {\n // die(\n // `No annotations were passed to makeObservable, but no decorated members have been found either`\n // )\n // }\n // We need a copy as we will remove annotation from the list once it's applied.\n addHiddenProp(target, storedAnnotationsSymbol, { ...target[storedAnnotationsSymbol] })\n }\n return target[storedAnnotationsSymbol]\n}\n\nexport function is20223Decorator(context): context is DecoratorContext {\n return typeof context == \"object\" && typeof context[\"kind\"] == \"string\"\n}\n\nexport function assert20223DecoratorType(\n context: DecoratorContext,\n types: DecoratorContext[\"kind\"][]\n) {\n if (__DEV__ && !types.includes(context.kind)) {\n die(\n `The decorator applied to '${String(context.name)}' cannot be used on a ${\n context.kind\n } element`\n )\n }\n}\n","import {\n die,\n Annotation,\n hasProp,\n createDecoratorAnnotation,\n ObservableObjectAdministration,\n MakeResult\n} from \"../internal\"\n\nimport type { ClassMethodDecorator } from \"./decorator_fills\"\n\nconst OVERRIDE = \"override\"\n\nexport const override: Annotation & PropertyDecorator & ClassMethodDecorator =\n createDecoratorAnnotation({\n annotationType_: OVERRIDE,\n make_,\n extend_,\n decorate_20223_\n })\n\nexport function isOverride(annotation: Annotation): boolean {\n return annotation.annotationType_ === OVERRIDE\n}\n\nfunction make_(this: Annotation, adm: ObservableObjectAdministration, key): MakeResult {\n // Must not be plain object\n if (__DEV__ && adm.isPlainObject_) {\n die(\n `Cannot apply '${this.annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${this.annotationType_}' cannot be used on plain objects.`\n )\n }\n // Must override something\n if (__DEV__ && !hasProp(adm.appliedAnnotations_!, key)) {\n die(\n `'${adm.name_}.${key.toString()}' is annotated with '${this.annotationType_}', ` +\n `but no such annotated member was found on prototype.`\n )\n }\n return MakeResult.Cancel\n}\n\nfunction extend_(this: Annotation, adm, key, descriptor, proxyTrap): boolean {\n die(`'${this.annotationType_}' can only be used with 'makeObservable'`)\n}\n\nfunction decorate_20223_(this: Annotation, desc, context: DecoratorContext) {\n console.warn(`'${this.annotationType_}' cannot be used with decorators - this is a no-op`)\n}\n","import {\n IDerivationState_,\n IObservable,\n IDerivation,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n noop,\n onBecomeObserved,\n onBecomeUnobserved,\n propagateChanged,\n reportObserved,\n startBatch,\n Lambda\n} from \"../internal\"\n\nexport const $mobx = Symbol(\"mobx administration\")\n\nexport interface IAtom extends IObservable {\n reportObserved(): boolean\n reportChanged(): void\n}\n\nexport class Atom implements IAtom {\n isPendingUnobservation_ = false // for effective unobserving. BaseAtom has true, for extra optimization, so its onBecomeUnobserved never gets called, because it's not needed\n isBeingObserved_ = false\n observers_ = new Set<IDerivation>()\n\n diffValue_ = 0\n lastAccessedBy_ = 0\n lowestObserverState_ = IDerivationState_.NOT_TRACKING_\n /**\n * Create a new atom. For debugging purposes it is recommended to give it a name.\n * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management.\n */\n constructor(public name_ = __DEV__ ? \"Atom@\" + getNextId() : \"Atom\") {}\n\n // onBecomeObservedListeners\n public onBOL: Set<Lambda> | undefined\n // onBecomeUnobservedListeners\n public onBUOL: Set<Lambda> | undefined\n\n public onBO() {\n if (this.onBOL) {\n this.onBOL.forEach(listener => listener())\n }\n }\n\n public onBUO() {\n if (this.onBUOL) {\n this.onBUOL.forEach(listener => listener())\n }\n }\n\n /**\n * Invoke this method to notify mobx that your atom has been used somehow.\n * Returns true if there is currently a reactive context.\n */\n public reportObserved(): boolean {\n return reportObserved(this)\n }\n\n /**\n * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate.\n */\n public reportChanged() {\n startBatch()\n propagateChanged(this)\n endBatch()\n }\n\n toString() {\n return this.name_\n }\n}\n\nexport const isAtom = createInstanceofPredicate(\"Atom\", Atom)\n\nexport function createAtom(\n name: string,\n onBecomeObservedHandler: () => void = noop,\n onBecomeUnobservedHandler: () => void = noop\n): IAtom {\n const atom = new Atom(name)\n // default `noop` listener will not initialize the hook Set\n if (onBecomeObservedHandler !== noop) {\n onBecomeObserved(atom, onBecomeObservedHandler)\n }\n\n if (onBecomeUnobservedHandler !== noop) {\n onBecomeUnobserved(atom, onBecomeUnobservedHandler)\n }\n return atom\n}\n","import {\n IComputedValue,\n IObservable,\n IObservableArray,\n Lambda,\n ObservableMap,\n getAtom,\n ObservableSet,\n isFunction,\n IObservableValue\n} from \"../internal\"\n\nconst ON_BECOME_OBSERVED = \"onBO\"\nconst ON_BECOME_UNOBSERVED = \"onBUO\"\n\nexport function onBecomeObserved(\n value:\n | IObservable\n | IComputedValue<any>\n | IObservableArray<any>\n | ObservableMap<any, any>\n | ObservableSet<any>\n | IObservableValue<any>,\n listener: Lambda\n): Lambda\nexport function onBecomeObserved<K, V = any>(\n value: ObservableMap<K, V> | Object,\n property: K,\n listener: Lambda\n): Lambda\nexport function onBecomeObserved(thing, arg2, arg3?): Lambda {\n return interceptHook(ON_BECOME_OBSERVED, thing, arg2, arg3)\n}\n\nexport function onBecomeUnobserved(\n value:\n | IObservable\n | IComputedValue<any>\n | IObservableArray<any>\n | ObservableMap<any, any>\n | ObservableSet<any>\n | IObservableValue<any>,\n listener: Lambda\n): Lambda\nexport function onBecomeUnobserved<K, V = any>(\n value: ObservableMap<K, V> | Object,\n property: K,\n listener: Lambda\n): Lambda\nexport function onBecomeUnobserved(thing, arg2, arg3?): Lambda {\n return interceptHook(ON_BECOME_UNOBSERVED, thing, arg2, arg3)\n}\n\nfunction interceptHook(hook: \"onBO\" | \"onBUO\", thing, arg2, arg3) {\n const atom: IObservable =\n typeof arg3 === \"function\" ? getAtom(thing, arg2) : (getAtom(thing) as any)\n const cb = isFunction(arg3) ? arg3 : arg2\n const listenersKey = `${hook}L` as \"onBOL\" | \"onBUOL\"\n\n if (atom[listenersKey]) {\n atom[listenersKey]!.add(cb)\n } else {\n atom[listenersKey] = new Set<Lambda>([cb])\n }\n\n return function () {\n const hookListeners = atom[listenersKey]\n if (hookListeners) {\n hookListeners.delete(cb)\n if (hookListeners.size === 0) {\n delete atom[listenersKey]\n }\n }\n }\n}\n","import { deepEqual } from \"../internal\"\n\nexport interface IEqualsComparer<T> {\n (a: T, b: T): boolean\n}\n\nfunction identityComparer(a: any, b: any): boolean {\n return a === b\n}\n\nfunction structuralComparer(a: any, b: any): boolean {\n return deepEqual(a, b)\n}\n\nfunction shallowComparer(a: any, b: any): boolean {\n return deepEqual(a, b, 1)\n}\n\nfunction defaultComparer(a: any, b: any): boolean {\n if (Object.is) {\n return Object.is(a, b)\n }\n\n return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b\n}\n\nexport const comparer = {\n identity: identityComparer,\n structural: structuralComparer,\n default: defaultComparer,\n shallow: shallowComparer\n}\n","import {\n deepEqual,\n isES6Map,\n isES6Set,\n isObservable,\n isObservableArray,\n isObservableMap,\n isObservableSet,\n isObservableObject,\n isPlainObject,\n observable,\n die,\n isAction,\n autoAction,\n flow,\n isFlow,\n isGenerator\n} from \"../internal\"\n\nexport interface IEnhancer<T> {\n (newValue: T, oldValue: T | undefined, name: string): T\n}\n\nexport function deepEnhancer(v, _, name) {\n // it is an observable already, done\n if (isObservable(v)) {\n return v\n }\n\n // something that can be converted and mutated?\n if (Array.isArray(v)) {\n return observable.array(v, { name })\n }\n if (isPlainObject(v)) {\n return observable.object(v, undefined, { name })\n }\n if (isES6Map(v)) {\n return observable.map(v, { name })\n }\n if (isES6Set(v)) {\n return observable.set(v, { name })\n }\n if (typeof v === \"function\" && !isAction(v) && !isFlow(v)) {\n if (isGenerator(v)) {\n return flow(v)\n } else {\n return autoAction(name, v)\n }\n }\n return v\n}\n\nexport function shallowEnhancer(v, _, name): any {\n if (v === undefined || v === null) {\n return v\n }\n if (isObservableObject(v) || isObservableArray(v) || isObservableMap(v) || isObservableSet(v)) {\n return v\n }\n if (Array.isArray(v)) {\n return observable.array(v, { name, deep: false })\n }\n if (isPlainObject(v)) {\n return observable.object(v, undefined, { name, deep: false })\n }\n if (isES6Map(v)) {\n return observable.map(v, { name, deep: false })\n }\n if (isES6Set(v)) {\n return observable.set(v, { name, deep: false })\n }\n\n if (__DEV__) {\n die(\n \"The shallow modifier / decorator can only used in combination with arrays, objects, maps and sets\"\n )\n }\n}\n\nexport function referenceEnhancer(newValue?) {\n // never turn into an observable\n return newValue\n}\n\nexport function refStructEnhancer(v, oldValue): any {\n if (__DEV__ && isObservable(v)) {\n die(`observable.struct should not be used with observable values`)\n }\n if (deepEqual(v, oldValue)) {\n return oldValue\n }\n return v\n}\n","import {\n ObservableObjectAdministration,\n createAction,\n isAction,\n defineProperty,\n die,\n isFunction,\n Annotation,\n globalState,\n MakeResult,\n assert20223DecoratorType,\n storeAnnotation\n} from \"../internal\"\n\nexport function createActionAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n source: object\n): MakeResult {\n // bound\n if (this.options_?.bound) {\n return this.extend_(adm, key, descriptor, false) === null\n ? MakeResult.Cancel\n : MakeResult.Break\n }\n // own\n if (source === adm.target_) {\n return this.extend_(adm, key, descriptor, false) === null\n ? MakeResult.Cancel\n : MakeResult.Continue\n }\n // prototype\n if (isAction(descriptor.value)) {\n // A prototype could have been annotated already by other constructor,\n // rest of the proto chain must be annotated already\n return MakeResult.Break\n }\n const actionDescriptor = createActionDescriptor(adm, this, key, descriptor, false)\n defineProperty(source, key, actionDescriptor)\n return MakeResult.Continue\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n const actionDescriptor = createActionDescriptor(adm, this, key, descriptor)\n return adm.defineProperty_(key, actionDescriptor, proxyTrap)\n}\n\nfunction decorate_20223_(this: Annotation, mthd, context: DecoratorContext) {\n if (__DEV__) {\n assert20223DecoratorType(context, [\"method\", \"field\"])\n }\n const { kind, name, addInitializer } = context\n const ann = this\n\n const _createAction = m =>\n createAction(ann.options_?.name ?? name!.toString(), m, ann.options_?.autoAction ?? false)\n\n // Backwards/Legacy behavior, expects makeObservable(this)\n if (kind == \"field\") {\n addInitializer(function () {\n storeAnnotation(this, name, ann)\n })\n return\n }\n\n if (kind == \"method\") {\n if (!isAction(mthd)) {\n mthd = _createAction(mthd)\n }\n\n if (this.options_?.bound) {\n addInitializer(function () {\n const self = this as any\n const bound = self[name].bind(self)\n bound.isMobxAction = true\n self[name] = bound\n })\n }\n\n return mthd\n }\n\n die(\n `Cannot apply '${ann.annotationType_}' to '${String(name)}' (kind: ${kind}):` +\n `\\n'${ann.annotationType_}' can only be used on properties with a function value.`\n )\n}\n\nfunction assertActionDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n { value }: PropertyDescriptor\n) {\n if (__DEV__ && !isFunction(value)) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' can only be used on properties with a function value.`\n )\n }\n}\n\nexport function createActionDescriptor(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n // provides ability to disable safeDescriptors for prototypes\n safeDescriptors: boolean = globalState.safeDescriptors\n) {\n assertActionDescriptor(adm, annotation, key, descriptor)\n let { value } = descriptor\n if (annotation.options_?.bound) {\n value = value.bind(adm.proxy_ ?? adm.target_)\n }\n return {\n value: createAction(\n annotation.options_?.name ?? key.toString(),\n value,\n annotation.options_?.autoAction ?? false,\n // https://github.com/mobxjs/mobx/discussions/3140\n annotation.options_?.bound ? adm.proxy_ ?? adm.target_ : undefined\n ),\n // Non-configurable for classes\n // prevents accidental field redefinition in subclass\n configurable: safeDescriptors ? adm.isPlainObject_ : true,\n // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n enumerable: false,\n // Non-obsevable, therefore non-writable\n // Also prevents rewriting in subclass constructor\n writable: safeDescriptors ? false : true\n }\n}\n","import {\n ObservableObjectAdministration,\n Annotation,\n defineProperty,\n die,\n flow,\n isFlow,\n isFunction,\n globalState,\n MakeResult,\n hasProp,\n assert20223DecoratorType\n} from \"../internal\"\n\nexport function createFlowAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n source: object\n): MakeResult {\n // own\n if (source === adm.target_) {\n return this.extend_(adm, key, descriptor, false) === null\n ? MakeResult.Cancel\n : MakeResult.Continue\n }\n // prototype\n // bound - must annotate protos to support super.flow()\n if (this.options_?.bound && (!hasProp(adm.target_, key) || !isFlow(adm.target_[key]))) {\n if (this.extend_(adm, key, descriptor, false) === null) {\n return MakeResult.Cancel\n }\n }\n if (isFlow(descriptor.value)) {\n // A prototype could have been annotated already by other constructor,\n // rest of the proto chain must be annotated already\n return MakeResult.Break\n }\n const flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, false, false)\n defineProperty(source, key, flowDescriptor)\n return MakeResult.Continue\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n const flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, this.options_?.bound)\n return adm.defineProperty_(key, flowDescriptor, proxyTrap)\n}\n\nfunction decorate_20223_(this: Annotation, mthd, context: ClassMethodDecoratorContext) {\n if (__DEV__) {\n assert20223DecoratorType(context, [\"method\"])\n }\n const { name, addInitializer } = context\n\n if (!isFlow(mthd)) {\n mthd = flow(mthd)\n }\n\n if (this.options_?.bound) {\n addInitializer(function () {\n const self = this as any\n const bound = self[name].bind(self)\n bound.isMobXFlow = true\n self[name] = bound\n })\n }\n\n return mthd\n}\n\nfunction assertFlowDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n { value }: PropertyDescriptor\n) {\n if (__DEV__ && !isFunction(value)) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' can only be used on properties with a generator function value.`\n )\n }\n}\n\nfunction createFlowDescriptor(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n bound: boolean,\n // provides ability to disable safeDescriptors for prototypes\n safeDescriptors: boolean = globalState.safeDescriptors\n): PropertyDescriptor {\n assertFlowDescriptor(adm, annotation, key, descriptor)\n let { value } = descriptor\n // In case of flow.bound, the descriptor can be from already annotated prototype\n if (!isFlow(value)) {\n value = flow(value)\n }\n if (bound) {\n // We do not keep original function around, so we bind the existing flow\n value = value.bind(adm.proxy_ ?? adm.target_)\n // This is normally set by `flow`, but `bind` returns new function...\n value.isMobXFlow = true\n }\n return {\n value,\n // Non-configurable for classes\n // prevents accidental field redefinition in subclass\n configurable: safeDescriptors ? adm.isPlainObject_ : true,\n // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n enumerable: false,\n // Non-obsevable, therefore non-writable\n // Also prevents rewriting in subclass constructor\n writable: safeDescriptors ? false : true\n }\n}\n","import {\n ObservableObjectAdministration,\n die,\n Annotation,\n MakeResult,\n assert20223DecoratorType,\n $mobx,\n asObservableObject,\n ComputedValue\n} from \"../internal\"\n\nexport function createComputedAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n): MakeResult {\n return this.extend_(adm, key, descriptor, false) === null ? MakeResult.Cancel : MakeResult.Break\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n assertComputedDescriptor(adm, this, key, descriptor)\n return adm.defineComputedProperty_(\n key,\n {\n ...this.options_,\n get: descriptor.get,\n set: descriptor.set\n },\n proxyTrap\n )\n}\n\nfunction decorate_20223_(this: Annotation, get, context: ClassGetterDecoratorContext) {\n if (__DEV__) {\n assert20223DecoratorType(context, [\"getter\"])\n }\n const ann = this\n const { name: key, addInitializer } = context\n\n addInitializer(function () {\n const adm: ObservableObjectAdministration = asObservableObject(this)[$mobx]\n const options = {\n ...ann.options_,\n get,\n context: this\n }\n options.name ||= __DEV__\n ? `${adm.name_}.${key.toString()}`\n : `ObservableObject.${key.toString()}`\n adm.values_.set(key, new ComputedValue(options))\n })\n\n return function () {\n return this[$mobx].getObservablePropValue_(key)\n }\n}\n\nfunction assertComputedDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n { get }: PropertyDescriptor\n) {\n if (__DEV__ && !get) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' can only be used on getter(+setter) properties.`\n )\n }\n}\n","import {\n ObservableObjectAdministration,\n deepEnhancer,\n die,\n Annotation,\n MakeResult,\n assert20223DecoratorType,\n ObservableValue,\n asObservableObject,\n $mobx\n} from \"../internal\"\n\nexport function createObservableAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n): MakeResult {\n return this.extend_(adm, key, descriptor, false) === null ? MakeResult.Cancel : MakeResult.Break\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n assertObservableDescriptor(adm, this, key, descriptor)\n return adm.defineObservableProperty_(\n key,\n descriptor.value,\n this.options_?.enhancer ?? deepEnhancer,\n proxyTrap\n )\n}\n\nfunction decorate_20223_(\n this: Annotation,\n desc,\n context: ClassAccessorDecoratorContext | ClassFieldDecoratorContext\n) {\n if (__DEV__) {\n if (context.kind === \"field\") {\n throw die(\n `Please use \\`@observable accessor ${String(\n context.name\n )}\\` instead of \\`@observable ${String(context.name)}\\``\n )\n }\n assert20223DecoratorType(context, [\"accessor\"])\n }\n\n const ann = this\n const { kind, name } = context\n\n // The laziness here is not ideal... It's a workaround to how 2022.3 Decorators are implemented:\n // `addInitializer` callbacks are executed _before_ any accessors are defined (instead of the ideal-for-us right after each).\n // This means that, if we were to do our stuff in an `addInitializer`, we'd attempt to read a private slot\n // before it has been initialized. The runtime doesn't like that and throws a `Cannot read private member\n // from an object whose class did not declare it` error.\n // TODO: it seems that this will not be required anymore in the final version of the spec\n // See TODO: link\n const initializedObjects = new WeakSet()\n\n function initializeObservable(target, value) {\n const adm: ObservableObjectAdministration = asObservableObject(target)[$mobx]\n const observable = new ObservableValue(\n value,\n ann.options_?.enhancer ?? deepEnhancer,\n __DEV__ ? `${adm.name_}.${name.toString()}` : `ObservableObject.${name.toString()}`,\n false\n )\n adm.values_.set(name, observable)\n initializedObjects.add(target)\n }\n\n if (kind == \"accessor\") {\n return {\n get() {\n if (!initializedObjects.has(this)) {\n initializeObservable(this, desc.get.call(this))\n }\n return this[$mobx].getObservablePropValue_(name)\n },\n set(value) {\n if (!initializedObjects.has(this)) {\n initializeObservable(this, value)\n }\n return this[$mobx].setObservablePropValue_(name, value)\n },\n init(value) {\n if (!initializedObjects.has(this)) {\n initializeObservable(this, value)\n }\n return value\n }\n }\n }\n\n return\n}\n\nfunction assertObservableDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n) {\n if (__DEV__ && !(\"value\" in descriptor)) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' cannot be used on getter/setter properties`\n )\n }\n}\n","import {\n ObservableObjectAdministration,\n observable,\n Annotation,\n defineProperty,\n createAction,\n globalState,\n flow,\n computed,\n autoAction,\n isGenerator,\n MakeResult,\n die\n} from \"../internal\"\n\nconst AUTO = \"true\"\n\nexport const autoAnnotation: Annotation = createAutoAnnotation()\n\nexport function createAutoAnnotation(options?: object): Annotation {\n return {\n annotationType_: AUTO,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n source: object\n): MakeResult {\n // getter -> computed\n if (descriptor.get) {\n return computed.make_(adm, key, descriptor, source)\n }\n // lone setter -> action setter\n if (descriptor.set) {\n // TODO make action applicable to setter and delegate to action.make_\n const set = createAction(key.toString(), descriptor.set) as (v: any) => void\n // own\n if (source === adm.target_) {\n return adm.defineProperty_(key, {\n configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n set\n }) === null\n ? MakeResult.Cancel\n : MakeResult.Continue\n }\n // proto\n defineProperty(source, key, {\n configurable: true,\n set\n })\n return MakeResult.Continue\n }\n // function on proto -> autoAction/flow\n if (source !== adm.target_ && typeof descriptor.value === \"function\") {\n if (isGenerator(descriptor.value)) {\n const flowAnnotation = this.options_?.autoBind ? flow.bound : flow\n return flowAnnotation.make_(adm, key, descriptor, source)\n }\n const actionAnnotation = this.options_?.autoBind ? autoAction.bound : autoAction\n return actionAnnotation.make_(adm, key, descriptor, source)\n }\n // other -> observable\n // Copy props from proto as well, see test:\n // \"decorate should work with Object.create\"\n let observableAnnotation = this.options_?.deep === false ? observable.ref : observable\n // if function respect autoBind option\n if (typeof descriptor.value === \"function\" && this.options_?.autoBind) {\n descriptor.value = descriptor.value.bind(adm.proxy_ ?? adm.target_)\n }\n return observableAnnotation.make_(adm, key, descriptor, source)\n}\n\nfunction extend_(\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n // getter -> computed\n if (descriptor.get) {\n return computed.extend_(adm, key, descriptor, proxyTrap)\n }\n // lone setter -> action setter\n if (descriptor.set) {\n // TODO make action applicable to setter and delegate to action.extend_\n return adm.defineProperty_(\n key,\n {\n configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n set: createAction(key.toString(), descriptor.set) as (v: any) => void\n },\n proxyTrap\n )\n }\n // other -> observable\n // if function respect autoBind option\n if (typeof descriptor.value === \"function\" && this.options_?.autoBind) {\n descriptor.value = descriptor.value.bind(adm.proxy_ ?? adm.target_)\n }\n let observableAnnotation = this.options_?.deep === false ? observable.ref : observable\n return observableAnnotation.extend_(adm, key, descriptor, proxyTrap)\n}\n\nfunction decorate_20223_(this: Annotation, desc, context: ClassGetterDecoratorContext) {\n die(`'${this.annotationType_}' cannot be used as a decorator`)\n}\n","import {\n IEnhancer,\n IEqualsComparer,\n IObservableArray,\n IObservableMapInitialValues,\n IObservableSetInitialValues,\n IObservableValue,\n ObservableMap,\n ObservableSet,\n ObservableValue,\n asDynamicObservableObject,\n createObservableArray,\n deepEnhancer,\n extendObservable,\n isES6Map,\n isES6Set,\n isObservable,\n isPlainObject,\n referenceEnhancer,\n Annotation,\n shallowEnhancer,\n refStructEnhancer,\n AnnotationsMap,\n asObservableObject,\n storeAnnotation,\n createDecoratorAnnotation,\n createLegacyArray,\n globalState,\n assign,\n isStringish,\n createObservableAnnotation,\n createAutoAnnotation,\n is20223Decorator,\n initObservable\n} from \"../internal\"\n\nimport type { ClassAccessorDecorator, ClassFieldDecorator } from \"../types/decorator_fills\"\n\nexport const OBSERVABLE = \"observable\"\nexport const OBSERVABLE_REF = \"observable.ref\"\nexport const OBSERVABLE_SHALLOW = \"observable.shallow\"\nexport const OBSERVABLE_STRUCT = \"observable.struct\"\n\nexport type CreateObservableOptions = {\n name?: string\n equals?: IEqualsComparer<any>\n deep?: boolean\n defaultDecorator?: Annotation\n proxy?: boolean\n autoBind?: boolean\n}\n\n// Predefined bags of create observable options, to avoid allocating temporarily option objects\n// in the majority of cases\nexport const defaultCreateObservableOptions: CreateObservableOptions = {\n deep: true,\n name: undefined,\n defaultDecorator: undefined,\n proxy: true\n}\nObject.freeze(defaultCreateObservableOptions)\n\nexport function asCreateObservableOptions(thing: any): CreateObservableOptions {\n return thing || defaultCreateObservableOptions\n}\n\nconst observableAnnotation = createObservableAnnotation(OBSERVABLE)\nconst observableRefAnnotation = createObservableAnnotation(OBSERVABLE_REF, {\n enhancer: referenceEnhancer\n})\nconst observableShallowAnnotation = createObservableAnnotation(OBSERVABLE_SHALLOW, {\n enhancer: shallowEnhancer\n})\nconst observableStructAnnotation = createObservableAnnotation(OBSERVABLE_STRUCT, {\n enhancer: refStructEnhancer\n})\nconst observableDecoratorAnnotation =\n createDecoratorAnnotation<ClassAccessorDecorator>(observableAnnotation)\n\nexport function getEnhancerFromOptions(options: CreateObservableOptions): IEnhancer<any> {\n return options.deep === true\n ? deepEnhancer\n : options.deep === false\n ? referenceEnhancer\n : getEnhancerFromAnnotation(options.defaultDecorator)\n}\n\nexport function getAnnotationFromOptions(\n options?: CreateObservableOptions\n): Annotation | undefined {\n return options ? options.defaultDecorator ?? createAutoAnnotation(options) : undefined\n}\n\nexport function getEnhancerFromAnnotation(annotation?: Annotation): IEnhancer<any> {\n return !annotation ? deepEnhancer : annotation.options_?.enhancer ?? deepEnhancer\n}\n\n/**\n * Turns an object, array or function into a reactive structure.\n * @param v the value which should become observable.\n */\nfunction createObservable(v: any, arg2?: any, arg3?: any) {\n // @observable someProp; (2022.3 Decorators)\n if (is20223Decorator(arg2)) {\n return observableAnnotation.decorate_20223_(v, arg2)\n }\n\n // @observable someProp;\n if (isStringish(arg2)) {\n storeAnnotation(v, arg2, observableAnnotation)\n return\n }\n\n // already observable - ignore\n if (isObservable(v)) {\n return v\n }\n\n // plain object\n if (isPlainObject(v)) {\n return observable.object(v, arg2, arg3)\n }\n\n // Array\n if (Array.isArray(v)) {\n return observable.array(v, arg2)\n }\n\n // Map\n if (isES6Map(v)) {\n return observable.map(v, arg2)\n }\n\n // Set\n if (isES6Set(v)) {\n return observable.set(v, arg2)\n }\n\n // other object - ignore\n if (typeof v === \"object\" && v !== null) {\n return v\n }\n\n // anything else\n return observable.box(v, arg2)\n}\nassign(createObservable, observableDecoratorAnnotation)\n\nexport interface IObservableValueFactory {\n <T>(value: T, options?: CreateObservableOptions): IObservableValue<T>\n <T>(value?: T, options?: CreateObservableOptions): IObservableValue<T | undefined>\n}\n\nexport interface IObservableFactory\n extends Annotation,\n PropertyDecorator,\n ClassAccessorDecorator,\n ClassFieldDecorator {\n // TODO: remove ClassFieldDecorator, this is only temporarily support for legacy decorators\n <T = any>(value: T[], options?: CreateObservableOptions): IObservableArray<T>\n <T = any>(value: Set<T>, options?: CreateObservableOptions): ObservableSet<T>\n <K = any, V = any>(value: Map<K, V>, options?: CreateObservableOptions): ObservableMap<K, V>\n <T extends object>(\n value: T,\n decorators?: AnnotationsMap<T, never>,\n options?: CreateObservableOptions\n ): T\n\n box: IObservableValueFactory\n array: <T = any>(initialValues?: T[], options?: CreateObservableOptions) => IObservableArray<T>\n set: <T = any>(\n initialValues?: IObservableSetInitialValues<T>,\n options?: CreateObservableOptions\n ) => ObservableSet<T>\n map: <K = any, V = any>(\n initialValues?: IObservableMapInitialValues<K, V>,\n options?: CreateObservableOptions\n ) => ObservableMap<K, V>\n object: <T = any>(\n props: T,\n decorators?: AnnotationsMap<T, never>,\n options?: CreateObservableOptions\n ) => T\n\n /**\n * Decorator that creates an observable that only observes the references, but doesn't try to turn the assigned value into an observable.ts.\n */\n ref: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n /**\n * Decorator that creates an observable converts its value (objects, maps or arrays) into a shallow observable structure\n */\n shallow: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n deep: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n struct: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n}\n\nconst observableFactories: IObservableFactory = {\n box<T = any>(value: T, options?: CreateObservableOptions): IObservableValue<T> {\n const o = asCreateObservableOptions(options)\n return new ObservableValue(value, getEnhancerFromOptions(o), o.name, true, o.equals)\n },\n array<T = any>(initialValues?: T[], options?: CreateObservableOptions): IObservableArray<T> {\n const o = asCreateObservableOptions(options)\n return (\n globalState.useProxies === false || o.proxy === false\n ? createLegacyArray\n : createObservableArray\n )(initialValues, getEnhancerFromOptions(o), o.name)\n },\n map<K = any, V = any>(\n initialValues?: IObservableMapInitialValues<K, V>,\n options?: CreateObservableOptions\n ): ObservableMap<K, V> {\n const o = asCreateObservableOptions(options)\n return new ObservableMap<K, V>(initialValues, getEnhancerFromOptions(o), o.name)\n },\n set<T = any>(\n initialValues?: IObservableSetInitialValues<T>,\n options?: CreateObservableOptions\n ): ObservableSet<T> {\n const o = asCreateObservableOptions(options)\n return new ObservableSet<T>(initialValues, getEnhancerFromOptions(o), o.name)\n },\n object<T extends object = any>(\n props: T,\n decorators?: AnnotationsMap<T, never>,\n options?: CreateObservableOptions\n ): T {\n return initObservable(() =>\n extendObservable(\n globalState.useProxies === false || options?.proxy === false\n ? asObservableObject({}, options)\n : asDynamicObservableObject({}, options),\n props,\n decorators\n )\n )\n },\n ref: createDecoratorAnnotation(observableRefAnnotation),\n shallow: createDecoratorAnnotation(observableShallowAnnotation),\n deep: observableDecoratorAnnotation,\n struct: createDecoratorAnnotation(observableStructAnnotation)\n} as any\n\n// eslint-disable-next-line\nexport var observable: IObservableFactory = assign(createObservable, observableFactories)\n","import {\n $mobx,\n IIsObservableObject,\n ObservableObjectAdministration,\n warnAboutProxyRequirement,\n assertProxies,\n die,\n isStringish,\n globalState,\n CreateObservableOptions,\n asObservableObject\n} from \"../internal\"\n\nfunction getAdm(target): ObservableObjectAdministration {\n return target[$mobx]\n}\n\n// Optimization: we don't need the intermediate objects and could have a completely custom administration for DynamicObjects,\n// and skip either the internal values map, or the base object with its property descriptors!\nconst objectProxyTraps: ProxyHandler<any> = {\n has(target: IIsObservableObject, name: PropertyKey): boolean {\n if (__DEV__ && globalState.trackingDerivation) {\n warnAboutProxyRequirement(\n \"detect new properties using the 'in' operator. Use 'has' from 'mobx' instead.\"\n )\n }\n return getAdm(target).has_(name)\n },\n get(target: IIsObservableObject, name: PropertyKey): any {\n return getAdm(target).get_(name)\n },\n set(target: IIsObservableObject, name: PropertyKey, value: any): boolean {\n if (!isStringish(name)) {\n return false\n }\n if (__DEV__ && !getAdm(target).values_.has(name)) {\n warnAboutProxyRequirement(\n \"add a new observable property through direct assignment. Use 'set' from 'mobx' instead.\"\n )\n }\n // null (intercepted) -> true (success)\n return getAdm(target).set_(name, value, true) ?? true\n },\n deleteProperty(target: IIsObservableObject, name: PropertyKey): boolean {\n if (__DEV__) {\n warnAboutProxyRequirement(\n \"delete properties from an observable object. Use 'remove' from 'mobx' instead.\"\n )\n }\n if (!isStringish(name)) {\n return false\n }\n // null (intercepted) -> true (success)\n return getAdm(target).delete_(name, true) ?? true\n },\n defineProperty(\n target: IIsObservableObject,\n name: PropertyKey,\n descriptor: PropertyDescriptor\n ): boolean {\n if (__DEV__) {\n warnAboutProxyRequirement(\n \"define property on an observable object. Use 'defineProperty' from 'mobx' instead.\"\n )\n }\n // null (intercepted) -> true (success)\n return getAdm(target).defineProperty_(name, descriptor) ?? true\n },\n ownKeys(target: IIsObservableObject): ArrayLike<string | symbol> {\n if (__DEV__ && globalState.trackingDerivation) {\n warnAboutProxyRequirement(\n \"iterate keys to detect added / removed properties. Use 'keys' from 'mobx' instead.\"\n )\n }\n return getAdm(target).ownKeys_()\n },\n preventExtensions(target) {\n die(13)\n }\n}\n\nexport function asDynamicObservableObject(\n target: any,\n options?: CreateObservableOptions\n): IIsObservableObject {\n assertProxies()\n target = asObservableObject(target, options)\n return (target[$mobx].proxy_ ??= new Proxy(target, objectProxyTraps))\n}\n","import {\n ComputedValue,\n IComputedValueOptions,\n Annotation,\n storeAnnotation,\n createDecoratorAnnotation,\n isStringish,\n isPlainObject,\n isFunction,\n die,\n IComputedValue,\n createComputedAnnotation,\n comparer,\n is20223Decorator\n} from \"../internal\"\n\nimport type { ClassGetterDecorator } from \"../types/decorator_fills\"\n\nexport const COMPUTED = \"computed\"\nexport const COMPUTED_STRUCT = \"computed.struct\"\n\nexport interface IComputedFactory extends Annotation, PropertyDecorator, ClassGetterDecorator {\n // @computed(opts)\n <T>(options: IComputedValueOptions<T>): Annotation & PropertyDecorator & ClassGetterDecorator\n // computed(fn, opts)\n <T>(func: () => T, options?: IComputedValueOptions<T>): IComputedValue<T>\n\n struct: Annotation & PropertyDecorator & ClassGetterDecorator\n}\n\nconst computedAnnotation = createComputedAnnotation(COMPUTED)\nconst computedStructAnnotation = createComputedAnnotation(COMPUTED_STRUCT, {\n equals: comparer.structural\n})\n\n/**\n * Decorator for class properties: @computed get value() { return expr; }.\n * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`;\n */\nexport const computed: IComputedFactory = function computed(arg1, arg2) {\n if (is20223Decorator(arg2)) {\n // @computed (2022.3 Decorators)\n return computedAnnotation.decorate_20223_(arg1, arg2)\n }\n if (isStringish(arg2)) {\n // @computed\n return storeAnnotation(arg1, arg2, computedAnnotation)\n }\n if (isPlainObject(arg1)) {\n // @computed({ options })\n return createDecoratorAnnotation(createComputedAnnotation(COMPUTED, arg1))\n }\n\n // computed(expr, options?)\n if (__DEV__) {\n if (!isFunction(arg1)) {\n die(\"First argument to `computed` should be an expression.\")\n }\n if (isFunction(arg2)) {\n die(\n \"A setter as second argument is no longer supported, use `{ set: fn }` option instead\"\n )\n }\n }\n const opts: IComputedValueOptions<any> = isPlainObject(arg2) ? arg2 : {}\n opts.get = arg1\n opts.name ||= arg1.name || \"\" /* for generated name */\n\n return new ComputedValue(opts)\n} as any\n\nObject.assign(computed, computedAnnotation)\n\ncomputed.struct = createDecoratorAnnotation(computedStructAnnotation)\n","import {\n IDerivation,\n endBatch,\n globalState,\n isSpyEnabled,\n spyReportEnd,\n spyReportStart,\n startBatch,\n untrackedEnd,\n untrackedStart,\n isFunction,\n allowStateReadsStart,\n allowStateReadsEnd,\n ACTION,\n EMPTY_ARRAY,\n die,\n getDescriptor,\n defineProperty\n} from \"../internal\"\n\n// we don't use globalState for these in order to avoid possible issues with multiple\n// mobx versions\nlet currentActionId = 0\nlet nextActionId = 1\nconst isFunctionNameConfigurable = getDescriptor(() => {}, \"name\")?.configurable ?? false\n\n// we can safely recycle this object\nconst tmpNameDescriptor: PropertyDescriptor = {\n value: \"action\",\n configurable: true,\n writable: false,\n enumerable: false\n}\n\nexport function createAction(\n actionName: string,\n fn: Function,\n autoAction: boolean = false,\n ref?: Object\n): Function {\n if (__DEV__) {\n if (!isFunction(fn)) {\n die(\"`action` can only be invoked on functions\")\n }\n if (typeof actionName !== \"string\" || !actionName) {\n die(`actions should have valid names, got: '${actionName}'`)\n }\n }\n function res() {\n return executeAction(actionName, autoAction, fn, ref || this, arguments)\n }\n res.isMobxAction = true\n res.toString = () => fn.toString()\n if (isFunctionNameConfigurable) {\n tmpNameDescriptor.value = actionName\n defineProperty(res, \"name\", tmpNameDescriptor)\n }\n return res\n}\n\nexport function executeAction(\n actionName: string,\n canRunAsDerivation: boolean,\n fn: Function,\n scope?: any,\n args?: IArguments\n) {\n const runInfo = _startAction(actionName, canRunAsDerivation, scope, args)\n try {\n return fn.apply(scope, args)\n } catch (err) {\n runInfo.error_ = err\n throw err\n } finally {\n _endAction(runInfo)\n }\n}\n\nexport interface IActionRunInfo {\n prevDerivation_: IDerivation | null\n prevAllowStateChanges_: boolean\n prevAllowStateReads_: boolean\n notifySpy_: boolean\n startTime_: number\n error_?: any\n parentActionId_: number\n actionId_: number\n runAsAction_?: boolean\n}\n\nexport function _startAction(\n actionName: string,\n canRunAsDerivation: boolean, // true for autoAction\n scope: any,\n args?: IArguments\n): IActionRunInfo {\n const notifySpy_ = __DEV__ && isSpyEnabled() && !!actionName\n let startTime_: number = 0\n if (__DEV__ && notifySpy_) {\n startTime_ = Date.now()\n const flattenedArgs = args ? Array.from(args) : EMPTY_ARRAY\n spyReportStart({\n type: ACTION,\n name: actionName,\n object: scope,\n arguments: flattenedArgs\n })\n }\n const prevDerivation_ = globalState.trackingDerivation\n const runAsAction = !canRunAsDerivation || !prevDerivation_\n startBatch()\n let prevAllowStateChanges_ = globalState.allowStateChanges // by default preserve previous allow\n if (runAsAction) {\n untrackedStart()\n prevAllowStateChanges_ = allowStateChangesStart(true)\n }\n const prevAllowStateReads_ = allowStateReadsStart(true)\n const runInfo = {\n runAsAction_: runAsAction,\n prevDerivation_,\n prevAllowStateChanges_,\n prevAllowStateReads_,\n notifySpy_,\n startTime_,\n actionId_: nextActionId++,\n parentActionId_: currentActionId\n }\n currentActionId = runInfo.actionId_\n return runInfo\n}\n\nexport function _endAction(runInfo: IActionRunInfo) {\n if (currentActionId !== runInfo.actionId_) {\n die(30)\n }\n currentActionId = runInfo.parentActionId_\n\n if (runInfo.error_ !== undefined) {\n globalState.suppressReactionErrors = true\n }\n allowStateChangesEnd(runInfo.prevAllowStateChanges_)\n allowStateReadsEnd(runInfo.prevAllowStateReads_)\n endBatch()\n if (runInfo.runAsAction_) {\n untrackedEnd(runInfo.prevDerivation_)\n }\n if (__DEV__ && runInfo.notifySpy_) {\n spyReportEnd({ time: Date.now() - runInfo.startTime_ })\n }\n globalState.suppressReactionErrors = false\n}\n\nexport function allowStateChanges<T>(allowStateChanges: boolean, func: () => T): T {\n const prev = allowStateChangesStart(allowStateChanges)\n try {\n return func()\n } finally {\n allowStateChangesEnd(prev)\n }\n}\n\nexport function allowStateChangesStart(allowStateChanges: boolean) {\n const prev = globalState.allowStateChanges\n globalState.allowStateChanges = allowStateChanges\n return prev\n}\n\nexport function allowStateChangesEnd(prev: boolean) {\n globalState.allowStateChanges = prev\n}\n","import {\n Atom,\n IEnhancer,\n IInterceptable,\n IEqualsComparer,\n IInterceptor,\n IListenable,\n Lambda,\n checkIfStateModificationsAreAllowed,\n comparer,\n createInstanceofPredicate,\n getNextId,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isSpyEnabled,\n notifyListeners,\n registerInterceptor,\n registerListener,\n spyReport,\n spyReportEnd,\n spyReportStart,\n toPrimitive,\n globalState,\n IUNCHANGED,\n UPDATE\n} from \"../internal\"\n\nexport interface IValueWillChange<T> {\n object: IObservableValue<T>\n type: \"update\"\n newValue: T\n}\n\nexport type IValueDidChange<T = any> = {\n type: \"update\"\n observableKind: \"value\"\n object: IObservableValue<T>\n debugObjectName: string\n newValue: T\n oldValue: T | undefined\n}\nexport type IBoxDidChange<T = any> =\n | {\n type: \"create\"\n observableKind: \"value\"\n object: IObservableValue<T>\n debugObjectName: string\n newValue: T\n }\n | IValueDidChange<T>\n\nexport interface IObservableValue<T> {\n get(): T\n set(value: T): void\n}\n\nconst CREATE = \"create\"\n\nexport class ObservableValue<T>\n extends Atom\n implements IObservableValue<T>, IInterceptable<IValueWillChange<T>>, IListenable\n{\n hasUnreportedChange_ = false\n interceptors_\n changeListeners_\n value_\n dehancer: any\n\n constructor(\n value: T,\n public enhancer: IEnhancer<T>,\n public name_ = __DEV__ ? \"ObservableValue@\" + getNextId() : \"ObservableValue\",\n notifySpy = true,\n private equals: IEqualsComparer<any> = comparer.default\n ) {\n super(name_)\n this.value_ = enhancer(value, undefined, name_)\n if (__DEV__ && notifySpy && isSpyEnabled()) {\n // only notify spy if this is a stand-alone observable\n spyReport({\n type: CREATE,\n object: this,\n observableKind: \"value\",\n debugObjectName: this.name_,\n newValue: \"\" + this.value_\n })\n }\n }\n\n private dehanceValue(value: T): T {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n public set(newValue: T) {\n const oldValue = this.value_\n newValue = this.prepareNewValue_(newValue) as any\n if (newValue !== globalState.UNCHANGED) {\n const notifySpy = isSpyEnabled()\n if (__DEV__ && notifySpy) {\n spyReportStart({\n type: UPDATE,\n object: this,\n observableKind: \"value\",\n debugObjectName: this.name_,\n newValue,\n oldValue\n })\n }\n this.setNewValue_(newValue)\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n }\n\n private prepareNewValue_(newValue): T | IUNCHANGED {\n checkIfStateModificationsAreAllowed(this)\n if (hasInterceptors(this)) {\n const change = interceptChange<IValueWillChange<T>>(this, {\n object: this,\n type: UPDATE,\n newValue\n })\n if (!change) {\n return globalState.UNCHANGED\n }\n newValue = change.newValue\n }\n // apply modifier\n newValue = this.enhancer(newValue, this.value_, this.name_)\n return this.equals(this.value_, newValue) ? globalState.UNCHANGED : newValue\n }\n\n setNewValue_(newValue: T) {\n const oldValue = this.value_\n this.value_ = newValue\n this.reportChanged()\n if (hasListeners(this)) {\n notifyListeners(this, {\n type: UPDATE,\n object: this,\n newValue,\n oldValue\n })\n }\n }\n\n public get(): T {\n this.reportObserved()\n return this.dehanceValue(this.value_)\n }\n\n intercept_(handler: IInterceptor<IValueWillChange<T>>): Lambda {\n return registerInterceptor(this, handler)\n }\n\n observe_(listener: (change: IValueDidChange<T>) => void, fireImmediately?: boolean): Lambda {\n if (fireImmediately) {\n listener({\n observableKind: \"value\",\n debugObjectName: this.name_,\n object: this,\n type: UPDATE,\n newValue: this.value_,\n oldValue: undefined\n })\n }\n return registerListener(this, listener)\n }\n\n raw() {\n // used by MST ot get undehanced value\n return this.value_\n }\n\n toJSON() {\n return this.get()\n }\n\n toString() {\n return `${this.name_}[${this.value_}]`\n }\n\n valueOf(): T {\n return toPrimitive(this.get())\n }\n\n [Symbol.toPrimitive]() {\n return this.valueOf()\n }\n}\n\nexport const isObservableValue = createInstanceofPredicate(\"ObservableValue\", ObservableValue) as (\n x: any\n) => x is IObservableValue<any>\n","import {\n CaughtException,\n IDerivation,\n IDerivationState_,\n IEqualsComparer,\n IObservable,\n Lambda,\n TraceMode,\n autorun,\n clearObserving,\n comparer,\n createAction,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n globalState,\n isCaughtException,\n isSpyEnabled,\n propagateChangeConfirmed,\n propagateMaybeChanged,\n reportObserved,\n shouldCompute,\n spyReport,\n startBatch,\n toPrimitive,\n trackDerivedFunction,\n untrackedEnd,\n untrackedStart,\n UPDATE,\n die,\n allowStateChangesStart,\n allowStateChangesEnd\n} from \"../internal\"\n\nexport interface IComputedValue<T> {\n get(): T\n set(value: T): void\n}\n\nexport interface IComputedValueOptions<T> {\n get?: () => T\n set?: (value: T) => void\n name?: string\n equals?: IEqualsComparer<T>\n context?: any\n requiresReaction?: boolean\n keepAlive?: boolean\n}\n\nexport type IComputedDidChange<T = any> = {\n type: \"update\"\n observableKind: \"computed\"\n object: unknown\n debugObjectName: string\n newValue: T\n oldValue: T | undefined\n}\n\n/**\n * A node in the state dependency root that observes other nodes, and can be observed itself.\n *\n * ComputedValue will remember the result of the computation for the duration of the batch, or\n * while being observed.\n *\n * During this time it will recompute only when one of its direct dependencies changed,\n * but only when it is being accessed with `ComputedValue.get()`.\n *\n * Implementation description:\n * 1. First time it's being accessed it will compute and remember result\n * give back remembered result until 2. happens\n * 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3.\n * 3. When it's being accessed, recompute if any shallow dependency changed.\n * if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step.\n * go to step 2. either way\n *\n * If at any point it's outside batch and it isn't observed: reset everything and go to 1.\n */\nexport class ComputedValue<T> implements IObservable, IComputedValue<T>, IDerivation {\n dependenciesState_ = IDerivationState_.NOT_TRACKING_\n observing_: IObservable[] = [] // nodes we are looking at. Our value depends on these nodes\n newObserving_ = null // during tracking it's an array with new observed observers\n isBeingObserved_ = false\n isPendingUnobservation_: boolean = false\n observers_ = new Set<IDerivation>()\n diffValue_ = 0\n runId_ = 0\n lastAccessedBy_ = 0\n lowestObserverState_ = IDerivationState_.UP_TO_DATE_\n unboundDepsCount_ = 0\n protected value_: T | undefined | CaughtException = new CaughtException(null)\n name_: string\n triggeredBy_?: string\n isComputing_: boolean = false // to check for cycles\n isRunningSetter_: boolean = false\n derivation: () => T // N.B: unminified as it is used by MST\n setter_?: (value: T) => void\n isTracing_: TraceMode = TraceMode.NONE\n scope_: Object | undefined\n private equals_: IEqualsComparer<any>\n private requiresReaction_: boolean | undefined\n keepAlive_: boolean\n\n /**\n * Create a new computed value based on a function expression.\n *\n * The `name` property is for debug purposes only.\n *\n * The `equals` property specifies the comparer function to use to determine if a newly produced\n * value differs from the previous value. Two comparers are provided in the library; `defaultComparer`\n * compares based on identity comparison (===), and `structuralComparer` deeply compares the structure.\n * Structural comparison can be convenient if you always produce a new aggregated object and\n * don't want to notify observers if it is structurally the same.\n * This is useful for working with vectors, mouse coordinates etc.\n */\n constructor(options: IComputedValueOptions<T>) {\n if (!options.get) {\n die(31)\n }\n this.derivation = options.get!\n this.name_ = options.name || (__DEV__ ? \"ComputedValue@\" + getNextId() : \"ComputedValue\")\n if (options.set) {\n this.setter_ = createAction(\n __DEV__ ? this.name_ + \"-setter\" : \"ComputedValue-setter\",\n options.set\n ) as any\n }\n this.equals_ =\n options.equals ||\n ((options as any).compareStructural || (options as any).struct\n ? comparer.structural\n : comparer.default)\n this.scope_ = options.context\n this.requiresReaction_ = options.requiresReaction\n this.keepAlive_ = !!options.keepAlive\n }\n\n onBecomeStale_() {\n propagateMaybeChanged(this)\n }\n\n public onBOL: Set<Lambda> | undefined\n public onBUOL: Set<Lambda> | undefined\n\n public onBO() {\n if (this.onBOL) {\n this.onBOL.forEach(listener => listener())\n }\n }\n\n public onBUO() {\n if (this.onBUOL) {\n this.onBUOL.forEach(listener => listener())\n }\n }\n\n /**\n * Returns the current value of this computed value.\n * Will evaluate its computation first if needed.\n */\n public get(): T {\n if (this.isComputing_) {\n die(32, this.name_, this.derivation)\n }\n if (\n globalState.inBatch === 0 &&\n // !globalState.trackingDerivatpion &&\n this.observers_.size === 0 &&\n !this.keepAlive_\n ) {\n if (shouldCompute(this)) {\n this.warnAboutUntrackedRead_()\n startBatch() // See perf test 'computed memoization'\n this.value_ = this.computeValue_(false)\n endBatch()\n }\n } else {\n reportObserved(this)\n if (shouldCompute(this)) {\n let prevTrackingContext = globalState.trackingContext\n if (this.keepAlive_ && !prevTrackingContext) {\n globalState.trackingContext = this\n }\n if (this.trackAndCompute()) {\n propagateChangeConfirmed(this)\n }\n globalState.trackingContext = prevTrackingContext\n }\n }\n const result = this.value_!\n\n if (isCaughtException(result)) {\n throw result.cause\n }\n return result\n }\n\n public set(value: T) {\n if (this.setter_) {\n if (this.isRunningSetter_) {\n die(33, this.name_)\n }\n this.isRunningSetter_ = true\n try {\n this.setter_.call(this.scope_, value)\n } finally {\n this.isRunningSetter_ = false\n }\n } else {\n die(34, this.name_)\n }\n }\n\n trackAndCompute(): boolean {\n // N.B: unminified as it is used by MST\n const oldValue = this.value_\n const wasSuspended =\n /* see #1208 */ this.dependenciesState_ === IDerivationState_.NOT_TRACKING_\n const newValue = this.computeValue_(true)\n\n const changed =\n wasSuspended ||\n isCaughtException(oldValue) ||\n isCaughtException(newValue) ||\n !this.equals_(oldValue, newValue)\n\n if (changed) {\n this.value_ = newValue\n\n if (__DEV__ && isSpyEnabled()) {\n spyReport({\n observableKind: \"computed\",\n debugObjectName: this.name_,\n object: this.scope_,\n type: \"update\",\n oldValue,\n newValue\n } as IComputedDidChange)\n }\n }\n\n return changed\n }\n\n computeValue_(track: boolean) {\n this.isComputing_ = true\n // don't allow state changes during computation\n const prev = allowStateChangesStart(false)\n let res: T | CaughtException\n if (track) {\n res = trackDerivedFunction(this, this.derivation, this.scope_)\n } else {\n if (globalState.disableErrorBoundaries === true) {\n res = this.derivation.call(this.scope_)\n } else {\n try {\n res = this.derivation.call(this.scope_)\n } catch (e) {\n res = new CaughtException(e)\n }\n }\n }\n allowStateChangesEnd(prev)\n this.isComputing_ = false\n return res\n }\n\n suspend_() {\n if (!this.keepAlive_) {\n clearObserving(this)\n this.value_ = undefined // don't hold on to computed value!\n if (__DEV__ && this.isTracing_ !== TraceMode.NONE) {\n console.log(\n `[mobx.trace] Computed value '${this.name_}' was suspended and it will recompute on the next access.`\n )\n }\n }\n }\n\n observe_(listener: (change: IComputedDidChange<T>) => void, fireImmediately?: boolean): Lambda {\n let firstTime = true\n let prevValue: T | undefined = undefined\n return autorun(() => {\n // TODO: why is this in a different place than the spyReport() function? in all other observables it's called in the same place\n let newValue = this.get()\n if (!firstTime || fireImmediately) {\n const prevU = untrackedStart()\n listener({\n observableKind: \"computed\",\n debugObjectName: this.name_,\n type: UPDATE,\n object: this,\n newValue,\n oldValue: prevValue\n })\n untrackedEnd(prevU)\n }\n firstTime = false\n prevValue = newValue\n })\n }\n\n warnAboutUntrackedRead_() {\n if (!__DEV__) {\n return\n }\n if (this.isTracing_ !== TraceMode.NONE) {\n console.log(\n `[mobx.trace] Computed value '${this.name_}' is being read outside a reactive context. Doing a full recompute.`\n )\n }\n if (\n typeof this.requiresReaction_ === \"boolean\"\n ? this.requiresReaction_\n : globalState.computedRequiresReaction\n ) {\n console.warn(\n `[mobx] Computed value '${this.name_}' is being read outside a reactive context. Doing a full recompute.`\n )\n }\n }\n\n toString() {\n return `${this.name_}[${this.derivation.toString()}]`\n }\n\n valueOf(): T {\n return toPrimitive(this.get())\n }\n\n [Symbol.toPrimitive]() {\n return this.valueOf()\n }\n}\n\nexport const isComputedValue = createInstanceofPredicate(\"ComputedValue\", ComputedValue)\n","import {\n IAtom,\n IDepTreeNode,\n IObservable,\n addObserver,\n globalState,\n isComputedValue,\n removeObserver\n} from \"../internal\"\n\nexport enum IDerivationState_ {\n // before being run or (outside batch and not being observed)\n // at this point derivation is not holding any data about dependency tree\n NOT_TRACKING_ = -1,\n // no shallow dependency changed since last computation\n // won't recalculate derivation\n // this is what makes mobx fast\n UP_TO_DATE_ = 0,\n // some deep dependency changed, but don't know if shallow dependency changed\n // will require to check first if UP_TO_DATE or POSSIBLY_STALE\n // currently only ComputedValue will propagate POSSIBLY_STALE\n //\n // having this state is second big optimization:\n // don't have to recompute on every dependency change, but only when it's needed\n POSSIBLY_STALE_ = 1,\n // A shallow dependency has changed since last computation and the derivation\n // will need to recompute when it's needed next.\n STALE_ = 2\n}\n\nexport enum TraceMode {\n NONE,\n LOG,\n BREAK\n}\n\n/**\n * A derivation is everything that can be derived from the state (all the atoms) in a pure manner.\n * See https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\n */\nexport interface IDerivation extends IDepTreeNode {\n observing_: IObservable[]\n newObserving_: null | IObservable[]\n dependenciesState_: IDerivationState_\n /**\n * Id of the current run of a derivation. Each time the derivation is tracked\n * this number is increased by one. This number is globally unique\n */\n runId_: number\n /**\n * amount of dependencies used by the derivation in this run, which has not been bound yet.\n */\n unboundDepsCount_: number\n onBecomeStale_(): void\n isTracing_: TraceMode\n\n /**\n * warn if the derivation has no dependencies after creation/update\n */\n requiresObservable_?: boolean\n}\n\nexport class CaughtException {\n constructor(public cause: any) {\n // Empty\n }\n}\n\nexport function isCaughtException(e: any): e is CaughtException {\n return e instanceof CaughtException\n}\n\n/**\n * Finds out whether any dependency of the derivation has actually changed.\n * If dependenciesState is 1 then it will recalculate dependencies,\n * if any dependency changed it will propagate it by changing dependenciesState to 2.\n *\n * By iterating over the dependencies in the same order that they were reported and\n * stopping on the first change, all the recalculations are only called for ComputedValues\n * that will be tracked by derivation. That is because we assume that if the first x\n * dependencies of the derivation doesn't change then the derivation should run the same way\n * up until accessing x-th dependency.\n */\nexport function shouldCompute(derivation: IDerivation): boolean {\n switch (derivation.dependenciesState_) {\n case IDerivationState_.UP_TO_DATE_:\n return false\n case IDerivationState_.NOT_TRACKING_:\n case IDerivationState_.STALE_:\n return true\n case IDerivationState_.POSSIBLY_STALE_: {\n // state propagation can occur outside of action/reactive context #2195\n const prevAllowStateReads = allowStateReadsStart(true)\n const prevUntracked = untrackedStart() // no need for those computeds to be reported, they will be picked up in trackDerivedFunction.\n const obs = derivation.observing_,\n l = obs.length\n for (let i = 0; i < l; i++) {\n const obj = obs[i]\n if (isComputedValue(obj)) {\n if (globalState.disableErrorBoundaries) {\n obj.get()\n } else {\n try {\n obj.get()\n } catch (e) {\n // we are not interested in the value *or* exception at this moment, but if there is one, notify all\n untrackedEnd(prevUntracked)\n allowStateReadsEnd(prevAllowStateReads)\n return true\n }\n }\n // if ComputedValue `obj` actually changed it will be computed and propagated to its observers.\n // and `derivation` is an observer of `obj`\n // invariantShouldCompute(derivation)\n if ((derivation.dependenciesState_ as any) === IDerivationState_.STALE_) {\n untrackedEnd(prevUntracked)\n allowStateReadsEnd(prevAllowStateReads)\n return true\n }\n }\n }\n changeDependenciesStateTo0(derivation)\n untrackedEnd(prevUntracked)\n allowStateReadsEnd(prevAllowStateReads)\n return false\n }\n }\n}\n\nexport function isComputingDerivation() {\n return globalState.trackingDerivation !== null // filter out actions inside computations\n}\n\nexport function checkIfStateModificationsAreAllowed(atom: IAtom) {\n if (!__DEV__) {\n return\n }\n const hasObservers = atom.observers_.size > 0\n // Should not be possible to change observed state outside strict mode, except during initialization, see #563\n if (\n !globalState.allowStateChanges &&\n (hasObservers || globalState.enforceActions === \"always\")\n ) {\n console.warn(\n \"[MobX] \" +\n (globalState.enforceActions\n ? \"Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: \"\n : \"Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, a computed value or the render function of a React component? You can wrap side effects in 'runInAction' (or decorate functions with 'action') if needed. Tried to modify: \") +\n atom.name_\n )\n }\n}\n\nexport function checkIfStateReadsAreAllowed(observable: IObservable) {\n if (__DEV__ && !globalState.allowStateReads && globalState.observableRequiresReaction) {\n console.warn(\n `[mobx] Observable '${observable.name_}' being read outside a reactive context.`\n )\n }\n}\n\n/**\n * Executes the provided function `f` and tracks which observables are being accessed.\n * The tracking information is stored on the `derivation` object and the derivation is registered\n * as observer of any of the accessed observables.\n */\nexport function trackDerivedFunction<T>(derivation: IDerivation, f: () => T, context: any) {\n const prevAllowStateReads = allowStateReadsStart(true)\n // pre allocate array allocation + room for variation in deps\n // array will be trimmed by bindDependencies\n changeDependenciesStateTo0(derivation)\n derivation.newObserving_ = new Array(derivation.observing_.length + 100)\n derivation.unboundDepsCount_ = 0\n derivation.runId_ = ++globalState.runId\n const prevTracking = globalState.trackingDerivation\n globalState.trackingDerivation = derivation\n globalState.inBatch++\n let result\n if (globalState.disableErrorBoundaries === true) {\n result = f.call(context)\n } else {\n try {\n result = f.call(context)\n } catch (e) {\n result = new CaughtException(e)\n }\n }\n globalState.inBatch--\n globalState.trackingDerivation = prevTracking\n bindDependencies(derivation)\n\n warnAboutDerivationWithoutDependencies(derivation)\n allowStateReadsEnd(prevAllowStateReads)\n return result\n}\n\nfunction warnAboutDerivationWithoutDependencies(derivation: IDerivation) {\n if (!__DEV__) {\n return\n }\n\n if (derivation.observing_.length !== 0) {\n return\n }\n\n if (\n typeof derivation.requiresObservable_ === \"boolean\"\n ? derivation.requiresObservable_\n : globalState.reactionRequiresObservable\n ) {\n console.warn(\n `[mobx] Derivation '${derivation.name_}' is created/updated without reading any observable value.`\n )\n }\n}\n\n/**\n * diffs newObserving with observing.\n * update observing to be newObserving with unique observables\n * notify observers that become observed/unobserved\n */\nfunction bindDependencies(derivation: IDerivation) {\n // invariant(derivation.dependenciesState !== IDerivationState.NOT_TRACKING, \"INTERNAL ERROR bindDependencies expects derivation.dependenciesState !== -1\");\n const prevObserving = derivation.observing_\n const observing = (derivation.observing_ = derivation.newObserving_!)\n let lowestNewObservingDerivationState = IDerivationState_.UP_TO_DATE_\n\n // Go through all new observables and check diffValue: (this list can contain duplicates):\n // 0: first occurrence, change to 1 and keep it\n // 1: extra occurrence, drop it\n let i0 = 0,\n l = derivation.unboundDepsCount_\n for (let i = 0; i < l; i++) {\n const dep = observing[i]\n if (dep.diffValue_ === 0) {\n dep.diffValue_ = 1\n if (i0 !== i) {\n observing[i0] = dep\n }\n i0++\n }\n\n // Upcast is 'safe' here, because if dep is IObservable, `dependenciesState` will be undefined,\n // not hitting the condition\n if ((dep as any as IDerivation).dependenciesState_ > lowestNewObservingDerivationState) {\n lowestNewObservingDerivationState = (dep as any as IDerivation).dependenciesState_\n }\n }\n observing.length = i0\n\n derivation.newObserving_ = null // newObserving shouldn't be needed outside tracking (statement moved down to work around FF bug, see #614)\n\n // Go through all old observables and check diffValue: (it is unique after last bindDependencies)\n // 0: it's not in new observables, unobserve it\n // 1: it keeps being observed, don't want to notify it. change to 0\n l = prevObserving.length\n while (l--) {\n const dep = prevObserving[l]\n if (dep.diffValue_ === 0) {\n removeObserver(dep, derivation)\n }\n dep.diffValue_ = 0\n }\n\n // Go through all new observables and check diffValue: (now it should be unique)\n // 0: it was set to 0 in last loop. don't need to do anything.\n // 1: it wasn't observed, let's observe it. set back to 0\n while (i0--) {\n const dep = observing[i0]\n if (dep.diffValue_ === 1) {\n dep.diffValue_ = 0\n addObserver(dep, derivation)\n }\n }\n\n // Some new observed derivations may become stale during this derivation computation\n // so they have had no chance to propagate staleness (#916)\n if (lowestNewObservingDerivationState !== IDerivationState_.UP_TO_DATE_) {\n derivation.dependenciesState_ = lowestNewObservingDerivationState\n derivation.onBecomeStale_()\n }\n}\n\nexport function clearObserving(derivation: IDerivation) {\n // invariant(globalState.inBatch > 0, \"INTERNAL ERROR clearObserving should be called only inside batch\");\n const obs = derivation.observing_\n derivation.observing_ = []\n let i = obs.length\n while (i--) {\n removeObserver(obs[i], derivation)\n }\n\n derivation.dependenciesState_ = IDerivationState_.NOT_TRACKING_\n}\n\nexport function untracked<T>(action: () => T): T {\n const prev = untrackedStart()\n try {\n return action()\n } finally {\n untrackedEnd(prev)\n }\n}\n\nexport function untrackedStart(): IDerivation | null {\n const prev = globalState.trackingDerivation\n globalState.trackingDerivation = null\n return prev\n}\n\nexport function untrackedEnd(prev: IDerivation | null) {\n globalState.trackingDerivation = prev\n}\n\nexport function allowStateReadsStart(allowStateReads: boolean) {\n const prev = globalState.allowStateReads\n globalState.allowStateReads = allowStateReads\n return prev\n}\n\nexport function allowStateReadsEnd(prev: boolean) {\n globalState.allowStateReads = prev\n}\n\n/**\n * needed to keep `lowestObserverState` correct. when changing from (2 or 1) to 0\n *\n */\nexport function changeDependenciesStateTo0(derivation: IDerivation) {\n if (derivation.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n return\n }\n derivation.dependenciesState_ = IDerivationState_.UP_TO_DATE_\n\n const obs = derivation.observing_\n let i = obs.length\n while (i--) {\n obs[i].lowestObserverState_ = IDerivationState_.UP_TO_DATE_\n }\n}\n","import {\n Lambda,\n ComputedValue,\n IDependencyTree,\n IDerivation,\n IDerivationState_,\n TraceMode,\n getDependencyTree,\n globalState,\n runReactions,\n checkIfStateReadsAreAllowed\n} from \"../internal\"\n\nexport interface IDepTreeNode {\n name_: string\n observing_?: IObservable[]\n}\n\nexport interface IObservable extends IDepTreeNode {\n diffValue_: number\n /**\n * Id of the derivation *run* that last accessed this observable.\n * If this id equals the *run* id of the current derivation,\n * the dependency is already established\n */\n lastAccessedBy_: number\n isBeingObserved_: boolean\n\n lowestObserverState_: IDerivationState_ // Used to avoid redundant propagations\n isPendingUnobservation_: boolean // Used to push itself to global.pendingUnobservations at most once per batch.\n\n observers_: Set<IDerivation>\n\n onBUO(): void\n onBO(): void\n\n onBUOL: Set<Lambda> | undefined\n onBOL: Set<Lambda> | undefined\n}\n\nexport function hasObservers(observable: IObservable): boolean {\n return observable.observers_ && observable.observers_.size > 0\n}\n\nexport function getObservers(observable: IObservable): Set<IDerivation> {\n return observable.observers_\n}\n\n// function invariantObservers(observable: IObservable) {\n// const list = observable.observers\n// const map = observable.observersIndexes\n// const l = list.length\n// for (let i = 0; i < l; i++) {\n// const id = list[i].__mapid\n// if (i) {\n// invariant(map[id] === i, \"INTERNAL ERROR maps derivation.__mapid to index in list\") // for performance\n// } else {\n// invariant(!(id in map), \"INTERNAL ERROR observer on index 0 shouldn't be held in map.\") // for performance\n// }\n// }\n// invariant(\n// list.length === 0 || Object.keys(map).length === list.length - 1,\n// \"INTERNAL ERROR there is no junk in map\"\n// )\n// }\nexport function addObserver(observable: IObservable, node: IDerivation) {\n // invariant(node.dependenciesState !== -1, \"INTERNAL ERROR, can add only dependenciesState !== -1\");\n // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR add already added node\");\n // invariantObservers(observable);\n\n observable.observers_.add(node)\n if (observable.lowestObserverState_ > node.dependenciesState_) {\n observable.lowestObserverState_ = node.dependenciesState_\n }\n\n // invariantObservers(observable);\n // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR didn't add node\");\n}\n\nexport function removeObserver(observable: IObservable, node: IDerivation) {\n // invariant(globalState.inBatch > 0, \"INTERNAL ERROR, remove should be called only inside batch\");\n // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR remove already removed node\");\n // invariantObservers(observable);\n observable.observers_.delete(node)\n if (observable.observers_.size === 0) {\n // deleting last observer\n queueForUnobservation(observable)\n }\n // invariantObservers(observable);\n // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR remove already removed node2\");\n}\n\nexport function queueForUnobservation(observable: IObservable) {\n if (observable.isPendingUnobservation_ === false) {\n // invariant(observable._observers.length === 0, \"INTERNAL ERROR, should only queue for unobservation unobserved observables\");\n observable.isPendingUnobservation_ = true\n globalState.pendingUnobservations.push(observable)\n }\n}\n\n/**\n * Batch starts a transaction, at least for purposes of memoizing ComputedValues when nothing else does.\n * During a batch `onBecomeUnobserved` will be called at most once per observable.\n * Avoids unnecessary recalculations.\n */\nexport function startBatch() {\n globalState.inBatch++\n}\n\nexport function endBatch() {\n if (--globalState.inBatch === 0) {\n runReactions()\n // the batch is actually about to finish, all unobserving should happen here.\n const list = globalState.pendingUnobservations\n for (let i = 0; i < list.length; i++) {\n const observable = list[i]\n observable.isPendingUnobservation_ = false\n if (observable.observers_.size === 0) {\n if (observable.isBeingObserved_) {\n // if this observable had reactive observers, trigger the hooks\n observable.isBeingObserved_ = false\n observable.onBUO()\n }\n if (observable instanceof ComputedValue) {\n // computed values are automatically teared down when the last observer leaves\n // this process happens recursively, this computed might be the last observabe of another, etc..\n observable.suspend_()\n }\n }\n }\n globalState.pendingUnobservations = []\n }\n}\n\nexport function reportObserved(observable: IObservable): boolean {\n checkIfStateReadsAreAllowed(observable)\n\n const derivation = globalState.trackingDerivation\n if (derivation !== null) {\n /**\n * Simple optimization, give each derivation run an unique id (runId)\n * Check if last time this observable was accessed the same runId is used\n * if this is the case, the relation is already known\n */\n if (derivation.runId_ !== observable.lastAccessedBy_) {\n observable.lastAccessedBy_ = derivation.runId_\n // Tried storing newObserving, or observing, or both as Set, but performance didn't come close...\n derivation.newObserving_![derivation.unboundDepsCount_++] = observable\n if (!observable.isBeingObserved_ && globalState.trackingContext) {\n observable.isBeingObserved_ = true\n observable.onBO()\n }\n }\n return observable.isBeingObserved_\n } else if (observable.observers_.size === 0 && globalState.inBatch > 0) {\n queueForUnobservation(observable)\n }\n\n return false\n}\n\n// function invariantLOS(observable: IObservable, msg: string) {\n// // it's expensive so better not run it in produciton. but temporarily helpful for testing\n// const min = getObservers(observable).reduce((a, b) => Math.min(a, b.dependenciesState), 2)\n// if (min >= observable.lowestObserverState) return // <- the only assumption about `lowestObserverState`\n// throw new Error(\n// \"lowestObserverState is wrong for \" +\n// msg +\n// \" because \" +\n// min +\n// \" < \" +\n// observable.lowestObserverState\n// )\n// }\n\n/**\n * NOTE: current propagation mechanism will in case of self reruning autoruns behave unexpectedly\n * It will propagate changes to observers from previous run\n * It's hard or maybe impossible (with reasonable perf) to get it right with current approach\n * Hopefully self reruning autoruns aren't a feature people should depend on\n * Also most basic use cases should be ok\n */\n\n// Called by Atom when its value changes\nexport function propagateChanged(observable: IObservable) {\n // invariantLOS(observable, \"changed start\");\n if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n return\n }\n observable.lowestObserverState_ = IDerivationState_.STALE_\n\n // Ideally we use for..of here, but the downcompiled version is really slow...\n observable.observers_.forEach(d => {\n if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n if (__DEV__ && d.isTracing_ !== TraceMode.NONE) {\n logTraceInfo(d, observable)\n }\n d.onBecomeStale_()\n }\n d.dependenciesState_ = IDerivationState_.STALE_\n })\n // invariantLOS(observable, \"changed end\");\n}\n\n// Called by ComputedValue when it recalculate and its value changed\nexport function propagateChangeConfirmed(observable: IObservable) {\n // invariantLOS(observable, \"confirmed start\");\n if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n return\n }\n observable.lowestObserverState_ = IDerivationState_.STALE_\n\n observable.observers_.forEach(d => {\n if (d.dependenciesState_ === IDerivationState_.POSSIBLY_STALE_) {\n d.dependenciesState_ = IDerivationState_.STALE_\n if (__DEV__ && d.isTracing_ !== TraceMode.NONE) {\n logTraceInfo(d, observable)\n }\n } else if (\n d.dependenciesState_ === IDerivationState_.UP_TO_DATE_ // this happens during computing of `d`, just keep lowestObserverState up to date.\n ) {\n observable.lowestObserverState_ = IDerivationState_.UP_TO_DATE_\n }\n })\n // invariantLOS(observable, \"confirmed end\");\n}\n\n// Used by computed when its dependency changed, but we don't wan't to immediately recompute.\nexport function propagateMaybeChanged(observable: IObservable) {\n // invariantLOS(observable, \"maybe start\");\n if (observable.lowestObserverState_ !== IDerivationState_.UP_TO_DATE_) {\n return\n }\n observable.lowestObserverState_ = IDerivationState_.POSSIBLY_STALE_\n\n observable.observers_.forEach(d => {\n if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n d.dependenciesState_ = IDerivationState_.POSSIBLY_STALE_\n d.onBecomeStale_()\n }\n })\n // invariantLOS(observable, \"maybe end\");\n}\n\nfunction logTraceInfo(derivation: IDerivation, observable: IObservable) {\n console.log(\n `[mobx.trace] '${derivation.name_}' is invalidated due to a change in: '${observable.name_}'`\n )\n if (derivation.isTracing_ === TraceMode.BREAK) {\n const lines = []\n printDepTree(getDependencyTree(derivation), lines, 1)\n\n // prettier-ignore\n new Function(\n`debugger;\n/*\nTracing '${derivation.name_}'\n\nYou are entering this break point because derivation '${derivation.name_}' is being traced and '${observable.name_}' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n${derivation instanceof ComputedValue ? derivation.derivation.toString().replace(/[*]\\//g, \"/\") : \"\"}\n\nThe dependencies for this derivation are:\n\n${lines.join(\"\\n\")}\n*/\n `)()\n }\n}\n\nfunction printDepTree(tree: IDependencyTree, lines: string[], depth: number) {\n if (lines.length >= 1000) {\n lines.push(\"(and many more)\")\n return\n }\n lines.push(`${\"\\t\".repeat(depth - 1)}${tree.name}`)\n if (tree.dependencies) {\n tree.dependencies.forEach(child => printDepTree(child, lines, depth + 1))\n }\n}\n","import { IDerivation, IObservable, Reaction, die, getGlobal } from \"../internal\"\nimport { ComputedValue } from \"./computedvalue\"\n\n/**\n * These values will persist if global state is reset\n */\nconst persistentKeys: (keyof MobXGlobals)[] = [\n \"mobxGuid\",\n \"spyListeners\",\n \"enforceActions\",\n \"computedRequiresReaction\",\n \"reactionRequiresObservable\",\n \"observableRequiresReaction\",\n \"allowStateReads\",\n \"disableErrorBoundaries\",\n \"runId\",\n \"UNCHANGED\",\n \"useProxies\"\n]\n\nexport type IUNCHANGED = {}\n\nexport class MobXGlobals {\n /**\n * MobXGlobals version.\n * MobX compatiblity with other versions loaded in memory as long as this version matches.\n * It indicates that the global state still stores similar information\n *\n * N.B: this version is unrelated to the package version of MobX, and is only the version of the\n * internal state storage of MobX, and can be the same across many different package versions\n */\n version = 6\n\n /**\n * globally unique token to signal unchanged\n */\n UNCHANGED: IUNCHANGED = {}\n\n /**\n * Currently running derivation\n */\n trackingDerivation: IDerivation | null = null\n\n /**\n * Currently running reaction. This determines if we currently have a reactive context.\n * (Tracking derivation is also set for temporal tracking of computed values inside actions,\n * but trackingReaction can only be set by a form of Reaction)\n */\n trackingContext: Reaction | ComputedValue<any> | null = null\n\n /**\n * Each time a derivation is tracked, it is assigned a unique run-id\n */\n runId = 0\n\n /**\n * 'guid' for general purpose. Will be persisted amongst resets.\n */\n mobxGuid = 0\n\n /**\n * Are we in a batch block? (and how many of them)\n */\n inBatch: number = 0\n\n /**\n * Observables that don't have observers anymore, and are about to be\n * suspended, unless somebody else accesses it in the same batch\n *\n * @type {IObservable[]}\n */\n pendingUnobservations: IObservable[] = []\n\n /**\n * List of scheduled, not yet executed, reactions.\n */\n pendingReactions: Reaction[] = []\n\n /**\n * Are we currently processing reactions?\n */\n isRunningReactions = false\n\n /**\n * Is it allowed to change observables at this point?\n * In general, MobX doesn't allow that when running computations and React.render.\n * To ensure that those functions stay pure.\n */\n allowStateChanges = false\n\n /**\n * Is it allowed to read observables at this point?\n * Used to hold the state needed for `observableRequiresReaction`\n */\n allowStateReads = true\n\n /**\n * If strict mode is enabled, state changes are by default not allowed\n */\n enforceActions: boolean | \"always\" = true\n\n /**\n * Spy callbacks\n */\n spyListeners: { (change: any): void }[] = []\n\n /**\n * Globally attached error handlers that react specifically to errors in reactions\n */\n globalReactionErrorHandlers: ((error: any, derivation: IDerivation) => void)[] = []\n\n /**\n * Warn if computed values are accessed outside a reactive context\n */\n computedRequiresReaction = false\n\n /**\n * (Experimental)\n * Warn if you try to create to derivation / reactive context without accessing any observable.\n */\n reactionRequiresObservable = false\n\n /**\n * (Experimental)\n * Warn if observables are accessed outside a reactive context\n */\n observableRequiresReaction = false\n\n /*\n * Don't catch and rethrow exceptions. This is useful for inspecting the state of\n * the stack when an exception occurs while debugging.\n */\n disableErrorBoundaries = false\n\n /*\n * If true, we are already handling an exception in an action. Any errors in reactions should be suppressed, as\n * they are not the cause, see: https://github.com/mobxjs/mobx/issues/1836\n */\n suppressReactionErrors = false\n\n useProxies = true\n /*\n * print warnings about code that would fail if proxies weren't available\n */\n verifyProxies = false\n\n /**\n * False forces all object's descriptors to\n * writable: true\n * configurable: true\n */\n safeDescriptors = true\n}\n\nlet canMergeGlobalState = true\nlet isolateCalled = false\n\nexport let globalState: MobXGlobals = (function () {\n let global = getGlobal()\n if (global.__mobxInstanceCount > 0 && !global.__mobxGlobals) {\n canMergeGlobalState = false\n }\n if (global.__mobxGlobals && global.__mobxGlobals.version !== new MobXGlobals().version) {\n canMergeGlobalState = false\n }\n\n if (!canMergeGlobalState) {\n // Because this is a IIFE we need to let isolateCalled a chance to change\n // so we run it after the event loop completed at least 1 iteration\n setTimeout(() => {\n if (!isolateCalled) {\n die(35)\n }\n }, 1)\n return new MobXGlobals()\n } else if (global.__mobxGlobals) {\n global.__mobxInstanceCount += 1\n if (!global.__mobxGlobals.UNCHANGED) {\n global.__mobxGlobals.UNCHANGED = {}\n } // make merge backward compatible\n return global.__mobxGlobals\n } else {\n global.__mobxInstanceCount = 1\n return (global.__mobxGlobals = new MobXGlobals())\n }\n})()\n\nexport function isolateGlobalState() {\n if (\n globalState.pendingReactions.length ||\n globalState.inBatch ||\n globalState.isRunningReactions\n ) {\n die(36)\n }\n isolateCalled = true\n if (canMergeGlobalState) {\n let global = getGlobal()\n if (--global.__mobxInstanceCount === 0) {\n global.__mobxGlobals = undefined\n }\n globalState = new MobXGlobals()\n }\n}\n\nexport function getGlobalState(): any {\n return globalState\n}\n\n/**\n * For testing purposes only; this will break the internal state of existing observables,\n * but can be used to get back at a stable state after throwing errors\n */\nexport function resetGlobalState() {\n const defaultGlobals = new MobXGlobals()\n for (let key in defaultGlobals) {\n if (persistentKeys.indexOf(key as any) === -1) {\n globalState[key] = defaultGlobals[key]\n }\n }\n globalState.allowStateChanges = !globalState.enforceActions\n}\n","import {\n $mobx,\n IDerivation,\n IDerivationState_,\n IObservable,\n Lambda,\n TraceMode,\n clearObserving,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n globalState,\n isCaughtException,\n isSpyEnabled,\n shouldCompute,\n spyReport,\n spyReportEnd,\n spyReportStart,\n startBatch,\n trace,\n trackDerivedFunction, GenericAbortSignal\n} from \"../internal\"\n\n/**\n * Reactions are a special kind of derivations. Several things distinguishes them from normal reactive computations\n *\n * 1) They will always run, whether they are used by other computations or not.\n * This means that they are very suitable for triggering side effects like logging, updating the DOM and making network requests.\n * 2) They are not observable themselves\n * 3) They will always run after any 'normal' derivations\n * 4) They are allowed to change the state and thereby triggering themselves again, as long as they make sure the state propagates to a stable state in a reasonable amount of iterations.\n *\n * The state machine of a Reaction is as follows:\n *\n * 1) after creating, the reaction should be started by calling `runReaction` or by scheduling it (see also `autorun`)\n * 2) the `onInvalidate` handler should somehow result in a call to `this.track(someFunction)`\n * 3) all observables accessed in `someFunction` will be observed by this reaction.\n * 4) as soon as some of the dependencies has changed the Reaction will be rescheduled for another run (after the current mutation or transaction). `isScheduled` will yield true once a dependency is stale and during this period\n * 5) `onInvalidate` will be called, and we are back at step 1.\n *\n */\n\nexport interface IReactionPublic {\n dispose(): void\n trace(enterBreakPoint?: boolean): void\n}\n\nexport interface IReactionDisposer {\n (): void\n $mobx: Reaction\n}\n\nexport class Reaction implements IDerivation, IReactionPublic {\n observing_: IObservable[] = [] // nodes we are looking at. Our value depends on these nodes\n newObserving_: IObservable[] = []\n dependenciesState_ = IDerivationState_.NOT_TRACKING_\n diffValue_ = 0\n runId_ = 0\n unboundDepsCount_ = 0\n isDisposed_ = false\n isScheduled_ = false\n isTrackPending_ = false\n isRunning_ = false\n isTracing_: TraceMode = TraceMode.NONE\n\n constructor(\n public name_: string = __DEV__ ? \"Reaction@\" + getNextId() : \"Reaction\",\n private onInvalidate_: () => void,\n private errorHandler_?: (error: any, derivation: IDerivation) => void,\n public requiresObservable_?\n ) {}\n\n onBecomeStale_() {\n this.schedule_()\n }\n\n schedule_() {\n if (!this.isScheduled_) {\n this.isScheduled_ = true\n globalState.pendingReactions.push(this)\n runReactions()\n }\n }\n\n isScheduled() {\n return this.isScheduled_\n }\n\n /**\n * internal, use schedule() if you intend to kick off a reaction\n */\n runReaction_() {\n if (!this.isDisposed_) {\n startBatch()\n this.isScheduled_ = false\n const prev = globalState.trackingContext\n globalState.trackingContext = this\n if (shouldCompute(this)) {\n this.isTrackPending_ = true\n\n try {\n this.onInvalidate_()\n if (__DEV__ && this.isTrackPending_ && isSpyEnabled()) {\n // onInvalidate didn't trigger track right away..\n spyReport({\n name: this.name_,\n type: \"scheduled-reaction\"\n })\n }\n } catch (e) {\n this.reportExceptionInDerivation_(e)\n }\n }\n globalState.trackingContext = prev\n endBatch()\n }\n }\n\n track(fn: () => void) {\n if (this.isDisposed_) {\n return\n // console.warn(\"Reaction already disposed\") // Note: Not a warning / error in mobx 4 either\n }\n startBatch()\n const notify = isSpyEnabled()\n let startTime\n if (__DEV__ && notify) {\n startTime = Date.now()\n spyReportStart({\n name: this.name_,\n type: \"reaction\"\n })\n }\n this.isRunning_ = true\n const prevReaction = globalState.trackingContext // reactions could create reactions...\n globalState.trackingContext = this\n const result = trackDerivedFunction(this, fn, undefined)\n globalState.trackingContext = prevReaction\n this.isRunning_ = false\n this.isTrackPending_ = false\n if (this.isDisposed_) {\n // disposed during last run. Clean up everything that was bound after the dispose call.\n clearObserving(this)\n }\n if (isCaughtException(result)) {\n this.reportExceptionInDerivation_(result.cause)\n }\n if (__DEV__ && notify) {\n spyReportEnd({\n time: Date.now() - startTime\n })\n }\n endBatch()\n }\n\n reportExceptionInDerivation_(error: any) {\n if (this.errorHandler_) {\n this.errorHandler_(error, this)\n return\n }\n\n if (globalState.disableErrorBoundaries) {\n throw error\n }\n\n const message = __DEV__\n ? `[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '${this}'`\n : `[mobx] uncaught error in '${this}'`\n if (!globalState.suppressReactionErrors) {\n console.error(message, error)\n /** If debugging brought you here, please, read the above message :-). Tnx! */\n } else if (__DEV__) { console.warn(`[mobx] (error in reaction '${this.name_}' suppressed, fix error of causing action below)`) } // prettier-ignore\n\n if (__DEV__ && isSpyEnabled()) {\n spyReport({\n type: \"error\",\n name: this.name_,\n message,\n error: \"\" + error\n })\n }\n\n globalState.globalReactionErrorHandlers.forEach(f => f(error, this))\n }\n\n dispose() {\n if (!this.isDisposed_) {\n this.isDisposed_ = true\n if (!this.isRunning_) {\n // if disposed while running, clean up later. Maybe not optimal, but rare case\n startBatch()\n clearObserving(this)\n endBatch()\n }\n }\n }\n\n getDisposer_(abortSignal?: GenericAbortSignal): IReactionDisposer {\n const dispose = (() => {\n this.dispose()\n abortSignal?.removeEventListener?.(\"abort\", dispose)\n }) as IReactionDisposer\n abortSignal?.addEventListener?.(\"abort\", dispose)\n dispose[$mobx] = this\n\n return dispose\n }\n\n toString() {\n return `Reaction[${this.name_}]`\n }\n\n trace(enterBreakPoint: boolean = false) {\n trace(this, enterBreakPoint)\n }\n}\n\nexport function onReactionError(handler: (error: any, derivation: IDerivation) => void): Lambda {\n globalState.globalReactionErrorHandlers.push(handler)\n return () => {\n const idx = globalState.globalReactionErrorHandlers.indexOf(handler)\n if (idx >= 0) {\n globalState.globalReactionErrorHandlers.splice(idx, 1)\n }\n }\n}\n\n/**\n * Magic number alert!\n * Defines within how many times a reaction is allowed to re-trigger itself\n * until it is assumed that this is gonna be a never ending loop...\n */\nconst MAX_REACTION_ITERATIONS = 100\n\nlet reactionScheduler: (fn: () => void) => void = f => f()\n\nexport function runReactions() {\n // Trampolining, if runReactions are already running, new reactions will be picked up\n if (globalState.inBatch > 0 || globalState.isRunningReactions) {\n return\n }\n reactionScheduler(runReactionsHelper)\n}\n\nfunction runReactionsHelper() {\n globalState.isRunningReactions = true\n const allReactions = globalState.pendingReactions\n let iterations = 0\n\n // While running reactions, new reactions might be triggered.\n // Hence we work with two variables and check whether\n // we converge to no remaining reactions after a while.\n while (allReactions.length > 0) {\n if (++iterations === MAX_REACTION_ITERATIONS) {\n console.error(\n __DEV__\n ? `Reaction doesn't converge to a stable state after ${MAX_REACTION_ITERATIONS} iterations.` +\n ` Probably there is a cycle in the reactive function: ${allReactions[0]}`\n : `[mobx] cycle in reaction: ${allReactions[0]}`\n )\n allReactions.splice(0) // clear reactions\n }\n let remainingReactions = allReactions.splice(0)\n for (let i = 0, l = remainingReactions.length; i < l; i++) {\n remainingReactions[i].runReaction_()\n }\n }\n globalState.isRunningReactions = false\n}\n\nexport const isReaction = createInstanceofPredicate(\"Reaction\", Reaction)\n\nexport function setReactionScheduler(fn: (f: () => void) => void) {\n const baseScheduler = reactionScheduler\n reactionScheduler = f => fn(() => baseScheduler(f))\n}\n","import {\n createAction,\n executeAction,\n Annotation,\n storeAnnotation,\n die,\n isFunction,\n isStringish,\n createDecoratorAnnotation,\n createActionAnnotation,\n is20223Decorator\n} from \"../internal\"\n\nimport type { ClassFieldDecorator, ClassMethodDecorator } from \"../types/decorator_fills\"\n\nexport const ACTION = \"action\"\nexport const ACTION_BOUND = \"action.bound\"\nexport const AUTOACTION = \"autoAction\"\nexport const AUTOACTION_BOUND = \"autoAction.bound\"\n\nconst DEFAULT_ACTION_NAME = \"<unnamed action>\"\n\nconst actionAnnotation = createActionAnnotation(ACTION)\nconst actionBoundAnnotation = createActionAnnotation(ACTION_BOUND, {\n bound: true\n})\nconst autoActionAnnotation = createActionAnnotation(AUTOACTION, {\n autoAction: true\n})\nconst autoActionBoundAnnotation = createActionAnnotation(AUTOACTION_BOUND, {\n autoAction: true,\n bound: true\n})\n\nexport interface IActionFactory\n extends Annotation,\n PropertyDecorator,\n ClassMethodDecorator,\n ClassFieldDecorator {\n // nameless actions\n <T extends Function | undefined | null>(fn: T): T\n // named actions\n <T extends Function | undefined | null>(name: string, fn: T): T\n\n // named decorator\n (customName: string): PropertyDecorator &\n Annotation &\n ClassMethodDecorator &\n ClassFieldDecorator\n\n // decorator (name no longer supported)\n bound: Annotation & PropertyDecorator & ClassMethodDecorator & ClassFieldDecorator\n}\n\nfunction createActionFactory(autoAction: boolean): IActionFactory {\n const res: IActionFactory = function action(arg1, arg2?): any {\n // action(fn() {})\n if (isFunction(arg1)) {\n return createAction(arg1.name || DEFAULT_ACTION_NAME, arg1, autoAction)\n }\n // action(\"name\", fn() {})\n if (isFunction(arg2)) {\n return createAction(arg1, arg2, autoAction)\n }\n // @action (2022.3 Decorators)\n if (is20223Decorator(arg2)) {\n return (autoAction ? autoActionAnnotation : actionAnnotation).decorate_20223_(\n arg1,\n arg2\n )\n }\n // @action\n if (isStringish(arg2)) {\n return storeAnnotation(arg1, arg2, autoAction ? autoActionAnnotation : actionAnnotation)\n }\n // action(\"name\") & @action(\"name\")\n if (isStringish(arg1)) {\n return createDecoratorAnnotation(\n createActionAnnotation(autoAction ? AUTOACTION : ACTION, {\n name: arg1,\n autoAction\n })\n )\n }\n\n if (__DEV__) {\n die(\"Invalid arguments for `action`\")\n }\n } as IActionFactory\n return res\n}\n\nexport const action: IActionFactory = createActionFactory(false)\nObject.assign(action, actionAnnotation)\nexport const autoAction: IActionFactory = createActionFactory(true)\nObject.assign(autoAction, autoActionAnnotation)\n\naction.bound = createDecoratorAnnotation(actionBoundAnnotation)\nautoAction.bound = createDecoratorAnnotation(autoActionBoundAnnotation)\n\nexport function runInAction<T>(fn: () => T): T {\n return executeAction(fn.name || DEFAULT_ACTION_NAME, false, fn, this, undefined)\n}\n\nexport function isAction(thing: any) {\n return isFunction(thing) && thing.isMobxAction === true\n}\n","import {\n EMPTY_OBJECT,\n IEqualsComparer,\n IReactionDisposer,\n IReactionPublic,\n Lambda,\n Reaction,\n action,\n comparer,\n getNextId,\n isAction,\n isFunction,\n isPlainObject,\n die,\n allowStateChanges,\n GenericAbortSignal\n} from \"../internal\"\n\nexport interface IAutorunOptions {\n delay?: number\n name?: string\n /**\n * Experimental.\n * Warns if the view doesn't track observables\n */\n requiresObservable?: boolean\n scheduler?: (callback: () => void) => any\n onError?: (error: any) => void\n signal?: GenericAbortSignal\n}\n\n/**\n * Creates a named reactive view and keeps it alive, so that the view is always\n * updated if one of the dependencies changes, even when the view is not further used by something else.\n * @param view The reactive view\n * @returns disposer function, which can be used to stop the view from being updated in the future.\n */\nexport function autorun(\n view: (r: IReactionPublic) => any,\n opts: IAutorunOptions = EMPTY_OBJECT\n): IReactionDisposer {\n if (__DEV__) {\n if (!isFunction(view)) {\n die(\"Autorun expects a function as first argument\")\n }\n if (isAction(view)) {\n die(\"Autorun does not accept actions since actions are untrackable\")\n }\n }\n\n const name: string =\n opts?.name ?? (__DEV__ ? (view as any).name || \"Autorun@\" + getNextId() : \"Autorun\")\n const runSync = !opts.scheduler && !opts.delay\n let reaction: Reaction\n\n if (runSync) {\n // normal autorun\n reaction = new Reaction(\n name,\n function (this: Reaction) {\n this.track(reactionRunner)\n },\n opts.onError,\n opts.requiresObservable\n )\n } else {\n const scheduler = createSchedulerFromOptions(opts)\n // debounced autorun\n let isScheduled = false\n\n reaction = new Reaction(\n name,\n () => {\n if (!isScheduled) {\n isScheduled = true\n scheduler(() => {\n isScheduled = false\n if (!reaction.isDisposed_) {\n reaction.track(reactionRunner)\n }\n })\n }\n },\n opts.onError,\n opts.requiresObservable\n )\n }\n\n function reactionRunner() {\n view(reaction)\n }\n\n if(!opts?.signal?.aborted) {\n reaction.schedule_()\n }\n return reaction.getDisposer_(opts?.signal)\n}\n\nexport type IReactionOptions<T, FireImmediately extends boolean> = IAutorunOptions & {\n fireImmediately?: FireImmediately\n equals?: IEqualsComparer<T>\n}\n\nconst run = (f: Lambda) => f()\n\nfunction createSchedulerFromOptions(opts: IAutorunOptions) {\n return opts.scheduler\n ? opts.scheduler\n : opts.delay\n ? (f: Lambda) => setTimeout(f, opts.delay!)\n : run\n}\n\nexport function reaction<T, FireImmediately extends boolean = false>(\n expression: (r: IReactionPublic) => T,\n effect: (\n arg: T,\n prev: FireImmediately extends true ? T | undefined : T,\n r: IReactionPublic\n ) => void,\n opts: IReactionOptions<T, FireImmediately> = EMPTY_OBJECT\n): IReactionDisposer {\n if (__DEV__) {\n if (!isFunction(expression) || !isFunction(effect)) {\n die(\"First and second argument to reaction should be functions\")\n }\n if (!isPlainObject(opts)) {\n die(\"Third argument of reactions should be an object\")\n }\n }\n const name = opts.name ?? (__DEV__ ? \"Reaction@\" + getNextId() : \"Reaction\")\n const effectAction = action(\n name,\n opts.onError ? wrapErrorHandler(opts.onError, effect) : effect\n )\n const runSync = !opts.scheduler && !opts.delay\n const scheduler = createSchedulerFromOptions(opts)\n\n let firstTime = true\n let isScheduled = false\n let value: T\n let oldValue: T | undefined\n\n const equals: IEqualsComparer<T> = (opts as any).compareStructural\n ? comparer.structural\n : opts.equals || comparer.default\n\n const r = new Reaction(\n name,\n () => {\n if (firstTime || runSync) {\n reactionRunner()\n } else if (!isScheduled) {\n isScheduled = true\n scheduler!(reactionRunner)\n }\n },\n opts.onError,\n opts.requiresObservable\n )\n\n function reactionRunner() {\n isScheduled = false\n if (r.isDisposed_) {\n return\n }\n let changed: boolean = false\n r.track(() => {\n const nextValue = allowStateChanges(false, () => expression(r))\n changed = firstTime || !equals(value, nextValue)\n oldValue = value\n value = nextValue\n })\n\n // This casting is nesessary as TS cannot infer proper type in current funciton implementation\n type OldValue = FireImmediately extends true ? T | undefined : T\n if (firstTime && opts.fireImmediately!) {\n effectAction(value, oldValue as OldValue, r)\n } else if (!firstTime && changed) {\n effectAction(value, oldValue as OldValue, r)\n }\n firstTime = false\n }\n\n if(!opts?.signal?.aborted) {\n r.schedule_()\n }\n return r.getDisposer_(opts?.signal)\n}\n\nfunction wrapErrorHandler(errorHandler, baseFn) {\n return function () {\n try {\n return baseFn.apply(this, arguments)\n } catch (e) {\n errorHandler.call(this, e)\n }\n }\n}\n","import { globalState, isolateGlobalState, setReactionScheduler } from \"../internal\"\n\nconst NEVER = \"never\"\nconst ALWAYS = \"always\"\nconst OBSERVED = \"observed\"\n// const IF_AVAILABLE = \"ifavailable\"\n\nexport function configure(options: {\n enforceActions?: \"never\" | \"always\" | \"observed\"\n computedRequiresReaction?: boolean\n /**\n * Warn if you try to create to derivation / reactive context without accessing any observable.\n */\n reactionRequiresObservable?: boolean\n /**\n * Warn if observables are accessed outside a reactive context\n */\n observableRequiresReaction?: boolean\n isolateGlobalState?: boolean\n disableErrorBoundaries?: boolean\n safeDescriptors?: boolean\n reactionScheduler?: (f: () => void) => void\n useProxies?: \"always\" | \"never\" | \"ifavailable\"\n}): void {\n if (options.isolateGlobalState === true) {\n isolateGlobalState()\n }\n const { useProxies, enforceActions } = options\n if (useProxies !== undefined) {\n globalState.useProxies =\n useProxies === ALWAYS\n ? true\n : useProxies === NEVER\n ? false\n : typeof Proxy !== \"undefined\"\n }\n if (useProxies === \"ifavailable\") {\n globalState.verifyProxies = true\n }\n if (enforceActions !== undefined) {\n const ea = enforceActions === ALWAYS ? ALWAYS : enforceActions === OBSERVED\n globalState.enforceActions = ea\n globalState.allowStateChanges = ea === true || ea === ALWAYS ? false : true\n }\n ;[\n \"computedRequiresReaction\",\n \"reactionRequiresObservable\",\n \"observableRequiresReaction\",\n \"disableErrorBoundaries\",\n \"safeDescriptors\"\n ].forEach(key => {\n if (key in options) {\n globalState[key] = !!options[key]\n }\n })\n globalState.allowStateReads = !globalState.observableRequiresReaction\n if (__DEV__ && globalState.disableErrorBoundaries === true) {\n console.warn(\n \"WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled.\"\n )\n }\n if (options.reactionScheduler) {\n setReactionScheduler(options.reactionScheduler)\n }\n}\n","import {\n CreateObservableOptions,\n isObservableMap,\n AnnotationsMap,\n asObservableObject,\n isPlainObject,\n ObservableObjectAdministration,\n isObservable,\n die,\n getOwnPropertyDescriptors,\n $mobx,\n ownKeys,\n initObservable\n} from \"../internal\"\n\nexport function extendObservable<A extends Object, B extends Object>(\n target: A,\n properties: B,\n annotations?: AnnotationsMap<B, never>,\n options?: CreateObservableOptions\n): A & B {\n if (__DEV__) {\n if (arguments.length > 4) {\n die(\"'extendObservable' expected 2-4 arguments\")\n }\n if (typeof target !== \"object\") {\n die(\"'extendObservable' expects an object as first argument\")\n }\n if (isObservableMap(target)) {\n die(\"'extendObservable' should not be used on maps, use map.merge instead\")\n }\n if (!isPlainObject(properties)) {\n die(`'extendObservable' only accepts plain objects as second argument`)\n }\n if (isObservable(properties) || isObservable(annotations)) {\n die(`Extending an object with another observable (object) is not supported`)\n }\n }\n // Pull descriptors first, so we don't have to deal with props added by administration ($mobx)\n const descriptors = getOwnPropertyDescriptors(properties)\n\n initObservable(() => {\n const adm: ObservableObjectAdministration = asObservableObject(target, options)[$mobx]\n ownKeys(descriptors).forEach(key => {\n adm.extend_(\n key,\n descriptors[key as any],\n // must pass \"undefined\" for { key: undefined }\n !annotations ? true : key in annotations ? annotations[key] : true\n )\n })\n })\n\n return target as any\n}\n","import { IDepTreeNode, getAtom, getObservers, hasObservers } from \"../internal\"\n\nexport interface IDependencyTree {\n name: string\n dependencies?: IDependencyTree[]\n}\n\nexport interface IObserverTree {\n name: string\n observers?: IObserverTree[]\n}\n\nexport function getDependencyTree(thing: any, property?: string): IDependencyTree {\n return nodeToDependencyTree(getAtom(thing, property))\n}\n\nfunction nodeToDependencyTree(node: IDepTreeNode): IDependencyTree {\n const result: IDependencyTree = {\n name: node.name_\n }\n if (node.observing_ && node.observing_.length > 0) {\n result.dependencies = unique(node.observing_).map(nodeToDependencyTree)\n }\n return result\n}\n\nexport function getObserverTree(thing: any, property?: string): IObserverTree {\n return nodeToObserverTree(getAtom(thing, property))\n}\n\nfunction nodeToObserverTree(node: IDepTreeNode): IObserverTree {\n const result: IObserverTree = {\n name: node.name_\n }\n if (hasObservers(node as any)) {\n result.observers = Array.from(<any>getObservers(node as any)).map(<any>nodeToObserverTree)\n }\n return result\n}\n\nfunction unique<T>(list: T[]): T[] {\n return Array.from(new Set(list))\n}\n","import {\n action,\n noop,\n die,\n isFunction,\n Annotation,\n isStringish,\n storeAnnotation,\n createFlowAnnotation,\n createDecoratorAnnotation,\n is20223Decorator\n} from \"../internal\"\n\nimport type { ClassMethodDecorator } from \"../types/decorator_fills\"\n\nexport const FLOW = \"flow\"\n\nlet generatorId = 0\n\nexport function FlowCancellationError() {\n this.message = \"FLOW_CANCELLED\"\n}\nFlowCancellationError.prototype = Object.create(Error.prototype)\n\nexport function isFlowCancellationError(error: Error) {\n return error instanceof FlowCancellationError\n}\n\nexport type CancellablePromise<T> = Promise<T> & { cancel(): void }\n\ninterface Flow extends Annotation, PropertyDecorator, ClassMethodDecorator {\n <R, Args extends any[]>(\n generator: (...args: Args) => Generator<any, R, any> | AsyncGenerator<any, R, any>\n ): (...args: Args) => CancellablePromise<R>\n bound: Annotation & PropertyDecorator & ClassMethodDecorator\n}\n\nconst flowAnnotation = createFlowAnnotation(\"flow\")\nconst flowBoundAnnotation = createFlowAnnotation(\"flow.bound\", { bound: true })\n\nexport const flow: Flow = Object.assign(\n function flow(arg1, arg2?) {\n // @flow (2022.3 Decorators)\n if (is20223Decorator(arg2)) {\n return flowAnnotation.decorate_20223_(arg1, arg2)\n }\n // @flow\n if (isStringish(arg2)) {\n return storeAnnotation(arg1, arg2, flowAnnotation)\n }\n // flow(fn)\n if (__DEV__ && arguments.length !== 1) {\n die(`Flow expects single argument with generator function`)\n }\n const generator = arg1\n const name = generator.name || \"<unnamed flow>\"\n\n // Implementation based on https://github.com/tj/co/blob/master/index.js\n const res = function () {\n const ctx = this\n const args = arguments\n const runId = ++generatorId\n const gen = action(`${name} - runid: ${runId} - init`, generator).apply(ctx, args)\n let rejector: (error: any) => void\n let pendingPromise: CancellablePromise<any> | undefined = undefined\n\n const promise = new Promise(function (resolve, reject) {\n let stepId = 0\n rejector = reject\n\n function onFulfilled(res: any) {\n pendingPromise = undefined\n let ret\n try {\n ret = action(\n `${name} - runid: ${runId} - yield ${stepId++}`,\n gen.next\n ).call(gen, res)\n } catch (e) {\n return reject(e)\n }\n\n next(ret)\n }\n\n function onRejected(err: any) {\n pendingPromise = undefined\n let ret\n try {\n ret = action(\n `${name} - runid: ${runId} - yield ${stepId++}`,\n gen.throw!\n ).call(gen, err)\n } catch (e) {\n return reject(e)\n }\n next(ret)\n }\n\n function next(ret: any) {\n if (isFunction(ret?.then)) {\n // an async iterator\n ret.then(next, reject)\n return\n }\n if (ret.done) {\n return resolve(ret.value)\n }\n pendingPromise = Promise.resolve(ret.value) as any\n return pendingPromise!.then(onFulfilled, onRejected)\n }\n\n onFulfilled(undefined) // kick off the process\n }) as any\n\n promise.cancel = action(`${name} - runid: ${runId} - cancel`, function () {\n try {\n if (pendingPromise) {\n cancelPromise(pendingPromise)\n }\n // Finally block can return (or yield) stuff..\n const res = gen.return!(undefined as any)\n // eat anything that promise would do, it's cancelled!\n const yieldedPromise = Promise.resolve(res.value)\n yieldedPromise.then(noop, noop)\n cancelPromise(yieldedPromise) // maybe it can be cancelled :)\n // reject our original promise\n rejector(new FlowCancellationError())\n } catch (e) {\n rejector(e) // there could be a throwing finally block\n }\n })\n return promise\n }\n res.isMobXFlow = true\n return res\n } as any,\n flowAnnotation\n)\n\nflow.bound = createDecoratorAnnotation(flowBoundAnnotation)\n\nfunction cancelPromise(promise) {\n if (isFunction(promise.cancel)) {\n promise.cancel()\n }\n}\n\nexport function flowResult<T>(\n result: T\n): T extends Generator<any, infer R, any>\n ? CancellablePromise<R>\n : T extends CancellablePromise<any>\n ? T\n : never {\n return result as any // just tricking TypeScript :)\n}\n\nexport function isFlow(fn: any): boolean {\n return fn?.isMobXFlow === true\n}\n","import {\n $mobx,\n isAtom,\n isComputedValue,\n isObservableArray,\n isObservableMap,\n isObservableObject,\n isReaction,\n die,\n isStringish\n} from \"../internal\"\n\nfunction _isObservable(value, property?: PropertyKey): boolean {\n if (!value) {\n return false\n }\n if (property !== undefined) {\n if (__DEV__ && (isObservableMap(value) || isObservableArray(value))) {\n return die(\n \"isObservable(object, propertyName) is not supported for arrays and maps. Use map.has or array.length instead.\"\n )\n }\n if (isObservableObject(value)) {\n return value[$mobx].values_.has(property)\n }\n return false\n }\n // For first check, see #701\n return (\n isObservableObject(value) ||\n !!value[$mobx] ||\n isAtom(value) ||\n isReaction(value) ||\n isComputedValue(value)\n )\n}\n\nexport function isObservable(value: any): boolean {\n if (__DEV__ && arguments.length !== 1) {\n die(\n `isObservable expects only 1 argument. Use isObservableProp to inspect the observability of a property`\n )\n }\n return _isObservable(value)\n}\n\nexport function isObservableProp(value: any, propName: PropertyKey): boolean {\n if (__DEV__ && !isStringish(propName)) {\n return die(`expected a property name as second argument`)\n }\n return _isObservable(value, propName)\n}\n","import { endBatch, startBatch } from \"../internal\"\n\n/**\n * During a transaction no views are updated until the end of the transaction.\n * The transaction will be run synchronously nonetheless.\n *\n * @param action a function that updates some reactive state\n * @returns any value that was returned by the 'action' parameter.\n */\nexport function transaction<T>(action: () => T, thisArg = undefined): T {\n startBatch()\n try {\n return action.apply(thisArg)\n } finally {\n endBatch()\n }\n}\n","import { Lambda, once, untrackedEnd, untrackedStart, die } from \"../internal\"\n\nexport type IInterceptor<T> = (change: T) => T | null\n\nexport interface IInterceptable<T> {\n interceptors_: IInterceptor<T>[] | undefined\n}\n\nexport function hasInterceptors(interceptable: IInterceptable<any>) {\n return interceptable.interceptors_ !== undefined && interceptable.interceptors_.length > 0\n}\n\nexport function registerInterceptor<T>(\n interceptable: IInterceptable<T>,\n handler: IInterceptor<T>\n): Lambda {\n const interceptors = interceptable.interceptors_ || (interceptable.interceptors_ = [])\n interceptors.push(handler)\n return once(() => {\n const idx = interceptors.indexOf(handler)\n if (idx !== -1) {\n interceptors.splice(idx, 1)\n }\n })\n}\n\nexport function interceptChange<T>(\n interceptable: IInterceptable<T | null>,\n change: T | null\n): T | null {\n const prevU = untrackedStart()\n try {\n // Interceptor can modify the array, copy it to avoid concurrent modification, see #1950\n const interceptors = [...(interceptable.interceptors_ || [])]\n for (let i = 0, l = interceptors.length; i < l; i++) {\n change = interceptors[i](change)\n if (change && !(change as any).type) {\n die(14)\n }\n if (!change) {\n break\n }\n }\n return change\n } finally {\n untrackedEnd(prevU)\n }\n}\n","import { Lambda, once, untrackedEnd, untrackedStart } from \"../internal\"\n\nexport interface IListenable {\n changeListeners_: Function[] | undefined\n}\n\nexport function hasListeners(listenable: IListenable) {\n return listenable.changeListeners_ !== undefined && listenable.changeListeners_.length > 0\n}\n\nexport function registerListener(listenable: IListenable, handler: Function): Lambda {\n const listeners = listenable.changeListeners_ || (listenable.changeListeners_ = [])\n listeners.push(handler)\n return once(() => {\n const idx = listeners.indexOf(handler)\n if (idx !== -1) {\n listeners.splice(idx, 1)\n }\n })\n}\n\nexport function notifyListeners<T>(listenable: IListenable, change: T) {\n const prevU = untrackedStart()\n let listeners = listenable.changeListeners_\n if (!listeners) {\n return\n }\n listeners = listeners.slice()\n for (let i = 0, l = listeners.length; i < l; i++) {\n listeners[i](change)\n }\n untrackedEnd(prevU)\n}\n","import {\n $mobx,\n asObservableObject,\n AnnotationsMap,\n CreateObservableOptions,\n ObservableObjectAdministration,\n collectStoredAnnotations,\n isPlainObject,\n isObservableObject,\n die,\n ownKeys,\n extendObservable,\n addHiddenProp,\n storedAnnotationsSymbol,\n initObservable\n} from \"../internal\"\n\n// Hack based on https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-322267089\n// We need this, because otherwise, AdditionalKeys is going to be inferred to be any\n// set of superfluous keys. But, we rather want to get a compile error unless AdditionalKeys is\n// _explicity_ passed as generic argument\n// Fixes: https://github.com/mobxjs/mobx/issues/2325#issuecomment-691070022\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\ntype MakeObservableOptions = Omit<CreateObservableOptions, \"proxy\">\n\nexport function makeObservable<T extends object, AdditionalKeys extends PropertyKey = never>(\n target: T,\n annotations?: AnnotationsMap<T, NoInfer<AdditionalKeys>>,\n options?: MakeObservableOptions\n): T {\n initObservable(() => {\n const adm: ObservableObjectAdministration = asObservableObject(target, options)[$mobx]\n if (__DEV__ && annotations && target[storedAnnotationsSymbol]) {\n die(\n `makeObservable second arg must be nullish when using decorators. Mixing @decorator syntax with annotations is not supported.`\n )\n }\n // Default to decorators\n annotations ??= collectStoredAnnotations(target)\n\n // Annotate\n ownKeys(annotations).forEach(key => adm.make_(key, annotations![key]))\n })\n return target\n}\n\n// proto[keysSymbol] = new Set<PropertyKey>()\nconst keysSymbol = Symbol(\"mobx-keys\")\n\nexport function makeAutoObservable<T extends object, AdditionalKeys extends PropertyKey = never>(\n target: T,\n overrides?: AnnotationsMap<T, NoInfer<AdditionalKeys>>,\n options?: MakeObservableOptions\n): T {\n if (__DEV__) {\n if (!isPlainObject(target) && !isPlainObject(Object.getPrototypeOf(target))) {\n die(`'makeAutoObservable' can only be used for classes that don't have a superclass`)\n }\n if (isObservableObject(target)) {\n die(`makeAutoObservable can only be used on objects not already made observable`)\n }\n }\n\n // Optimization: avoid visiting protos\n // Assumes that annotation.make_/.extend_ works the same for plain objects\n if (isPlainObject(target)) {\n return extendObservable(target, target, overrides, options)\n }\n\n initObservable(() => {\n const adm: ObservableObjectAdministration = asObservableObject(target, options)[$mobx]\n\n // Optimization: cache keys on proto\n // Assumes makeAutoObservable can be called only once per object and can't be used in subclass\n if (!target[keysSymbol]) {\n const proto = Object.getPrototypeOf(target)\n const keys = new Set([...ownKeys(target), ...ownKeys(proto)])\n keys.delete(\"constructor\")\n keys.delete($mobx)\n addHiddenProp(proto, keysSymbol, keys)\n }\n\n target[keysSymbol].forEach(key =>\n adm.make_(\n key,\n // must pass \"undefined\" for { key: undefined }\n !overrides ? true : key in overrides ? overrides[key] : true\n )\n )\n })\n\n return target\n}\n","import {\n $mobx,\n Atom,\n EMPTY_ARRAY,\n IAtom,\n IEnhancer,\n IInterceptable,\n IInterceptor,\n IListenable,\n Lambda,\n addHiddenFinalProp,\n checkIfStateModificationsAreAllowed,\n createInstanceofPredicate,\n getNextId,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isObject,\n isSpyEnabled,\n notifyListeners,\n registerInterceptor,\n registerListener,\n spyReportEnd,\n spyReportStart,\n assertProxies,\n reserveArrayBuffer,\n hasProp,\n die,\n globalState,\n initObservable\n} from \"../internal\"\n\nconst SPLICE = \"splice\"\nexport const UPDATE = \"update\"\nexport const MAX_SPLICE_SIZE = 10000 // See e.g. https://github.com/mobxjs/mobx/issues/859\n\nexport interface IObservableArray<T = any> extends Array<T> {\n spliceWithArray(index: number, deleteCount?: number, newItems?: T[]): T[]\n clear(): T[]\n replace(newItems: T[]): T[]\n remove(value: T): boolean\n toJSON(): T[]\n}\n\ninterface IArrayBaseChange<T> {\n object: IObservableArray<T>\n observableKind: \"array\"\n debugObjectName: string\n index: number\n}\n\nexport type IArrayDidChange<T = any> = IArrayUpdate<T> | IArraySplice<T>\n\nexport interface IArrayUpdate<T = any> extends IArrayBaseChange<T> {\n type: \"update\"\n newValue: T\n oldValue: T\n}\n\nexport interface IArraySplice<T = any> extends IArrayBaseChange<T> {\n type: \"splice\"\n added: T[]\n addedCount: number\n removed: T[]\n removedCount: number\n}\n\nexport interface IArrayWillChange<T = any> {\n object: IObservableArray<T>\n index: number\n type: \"update\"\n newValue: T\n}\n\nexport interface IArrayWillSplice<T = any> {\n object: IObservableArray<T>\n index: number\n type: \"splice\"\n added: T[]\n removedCount: number\n}\n\nconst arrayTraps = {\n get(target, name) {\n const adm: ObservableArrayAdministration = target[$mobx]\n if (name === $mobx) {\n return adm\n }\n if (name === \"length\") {\n return adm.getArrayLength_()\n }\n if (typeof name === \"string\" && !isNaN(name as any)) {\n return adm.get_(parseInt(name))\n }\n if (hasProp(arrayExtensions, name)) {\n return arrayExtensions[name]\n }\n return target[name]\n },\n set(target, name, value): boolean {\n const adm: ObservableArrayAdministration = target[$mobx]\n if (name === \"length\") {\n adm.setArrayLength_(value)\n }\n if (typeof name === \"symbol\" || isNaN(name)) {\n target[name] = value\n } else {\n // numeric string\n adm.set_(parseInt(name), value)\n }\n return true\n },\n preventExtensions() {\n die(15)\n }\n}\n\nexport class ObservableArrayAdministration\n implements IInterceptable<IArrayWillChange<any> | IArrayWillSplice<any>>, IListenable\n{\n atom_: IAtom\n readonly values_: any[] = [] // this is the prop that gets proxied, so can't replace it!\n interceptors_\n changeListeners_\n enhancer_: (newV: any, oldV: any | undefined) => any\n dehancer: any\n proxy_!: IObservableArray<any>\n lastKnownLength_ = 0\n\n constructor(\n name = __DEV__ ? \"ObservableArray@\" + getNextId() : \"ObservableArray\",\n enhancer: IEnhancer<any>,\n public owned_: boolean,\n public legacyMode_: boolean\n ) {\n this.atom_ = new Atom(name)\n this.enhancer_ = (newV, oldV) =>\n enhancer(newV, oldV, __DEV__ ? name + \"[..]\" : \"ObservableArray[..]\")\n }\n\n dehanceValue_(value: any): any {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n dehanceValues_(values: any[]): any[] {\n if (this.dehancer !== undefined && values.length > 0) {\n return values.map(this.dehancer) as any\n }\n return values\n }\n\n intercept_(handler: IInterceptor<IArrayWillChange<any> | IArrayWillSplice<any>>): Lambda {\n return registerInterceptor<IArrayWillChange<any> | IArrayWillSplice<any>>(this, handler)\n }\n\n observe_(\n listener: (changeData: IArrayDidChange<any>) => void,\n fireImmediately = false\n ): Lambda {\n if (fireImmediately) {\n listener(<IArraySplice<any>>{\n observableKind: \"array\",\n object: this.proxy_ as any,\n debugObjectName: this.atom_.name_,\n type: \"splice\",\n index: 0,\n added: this.values_.slice(),\n addedCount: this.values_.length,\n removed: [],\n removedCount: 0\n })\n }\n return registerListener(this, listener)\n }\n\n getArrayLength_(): number {\n this.atom_.reportObserved()\n return this.values_.length\n }\n\n setArrayLength_(newLength: number) {\n if (typeof newLength !== \"number\" || isNaN(newLength) || newLength < 0) {\n die(\"Out of range: \" + newLength)\n }\n let currentLength = this.values_.length\n if (newLength === currentLength) {\n return\n } else if (newLength > currentLength) {\n const newItems = new Array(newLength - currentLength)\n for (let i = 0; i < newLength - currentLength; i++) {\n newItems[i] = undefined\n } // No Array.fill everywhere...\n this.spliceWithArray_(currentLength, 0, newItems)\n } else {\n this.spliceWithArray_(newLength, currentLength - newLength)\n }\n }\n\n updateArrayLength_(oldLength: number, delta: number) {\n if (oldLength !== this.lastKnownLength_) {\n die(16)\n }\n this.lastKnownLength_ += delta\n if (this.legacyMode_ && delta > 0) {\n reserveArrayBuffer(oldLength + delta + 1)\n }\n }\n\n spliceWithArray_(index: number, deleteCount?: number, newItems?: any[]): any[] {\n checkIfStateModificationsAreAllowed(this.atom_)\n const length = this.values_.length\n\n if (index === undefined) {\n index = 0\n } else if (index > length) {\n index = length\n } else if (index < 0) {\n index = Math.max(0, length + index)\n }\n\n if (arguments.length === 1) {\n deleteCount = length - index\n } else if (deleteCount === undefined || deleteCount === null) {\n deleteCount = 0\n } else {\n deleteCount = Math.max(0, Math.min(deleteCount, length - index))\n }\n\n if (newItems === undefined) {\n newItems = EMPTY_ARRAY\n }\n\n if (hasInterceptors(this)) {\n const change = interceptChange<IArrayWillSplice<any>>(this as any, {\n object: this.proxy_ as any,\n type: SPLICE,\n index,\n removedCount: deleteCount,\n added: newItems\n })\n if (!change) {\n return EMPTY_ARRAY\n }\n deleteCount = change.removedCount\n newItems = change.added\n }\n\n newItems =\n newItems.length === 0 ? newItems : newItems.map(v => this.enhancer_(v, undefined))\n if (this.legacyMode_ || __DEV__) {\n const lengthDelta = newItems.length - deleteCount\n this.updateArrayLength_(length, lengthDelta) // checks if internal array wasn't modified\n }\n const res = this.spliceItemsIntoValues_(index, deleteCount, newItems)\n\n if (deleteCount !== 0 || newItems.length !== 0) {\n this.notifyArraySplice_(index, newItems, res)\n }\n return this.dehanceValues_(res)\n }\n\n spliceItemsIntoValues_(index: number, deleteCount: number, newItems: any[]): any[] {\n if (newItems.length < MAX_SPLICE_SIZE) {\n return this.values_.splice(index, deleteCount, ...newItems)\n } else {\n // The items removed by the splice\n const res = this.values_.slice(index, index + deleteCount)\n // The items that that should remain at the end of the array\n let oldItems = this.values_.slice(index + deleteCount)\n // New length is the previous length + addition count - deletion count\n this.values_.length += newItems.length - deleteCount\n for (let i = 0; i < newItems.length; i++) {\n this.values_[index + i] = newItems[i]\n }\n for (let i = 0; i < oldItems.length; i++) {\n this.values_[index + newItems.length + i] = oldItems[i]\n }\n return res\n }\n }\n\n notifyArrayChildUpdate_(index: number, newValue: any, oldValue: any) {\n const notifySpy = !this.owned_ && isSpyEnabled()\n const notify = hasListeners(this)\n const change: IArrayDidChange | null =\n notify || notifySpy\n ? ({\n observableKind: \"array\",\n object: this.proxy_,\n type: UPDATE,\n debugObjectName: this.atom_.name_,\n index,\n newValue,\n oldValue\n } as const)\n : null\n\n // The reason why this is on right hand side here (and not above), is this way the uglifier will drop it, but it won't\n // cause any runtime overhead in development mode without NODE_ENV set, unless spying is enabled\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n this.atom_.reportChanged()\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n notifyArraySplice_(index: number, added: any[], removed: any[]) {\n const notifySpy = !this.owned_ && isSpyEnabled()\n const notify = hasListeners(this)\n const change: IArraySplice | null =\n notify || notifySpy\n ? ({\n observableKind: \"array\",\n object: this.proxy_,\n debugObjectName: this.atom_.name_,\n type: SPLICE,\n index,\n removed,\n added,\n removedCount: removed.length,\n addedCount: added.length\n } as const)\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n this.atom_.reportChanged()\n // conform: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n get_(index: number): any | undefined {\n if (this.legacyMode_ && index >= this.values_.length) {\n console.warn(\n __DEV__\n ? `[mobx.array] Attempt to read an array index (${index}) that is out of bounds (${this.values_.length}). Please check length first. Out of bound indices will not be tracked by MobX`\n : `[mobx] Out of bounds read: ${index}`\n )\n return undefined\n }\n this.atom_.reportObserved()\n return this.dehanceValue_(this.values_[index])\n }\n\n set_(index: number, newValue: any) {\n const values = this.values_\n if (this.legacyMode_ && index > values.length) {\n // out of bounds\n die(17, index, values.length)\n }\n if (index < values.length) {\n // update at index in range\n checkIfStateModificationsAreAllowed(this.atom_)\n const oldValue = values[index]\n if (hasInterceptors(this)) {\n const change = interceptChange<IArrayWillChange<any>>(this as any, {\n type: UPDATE,\n object: this.proxy_ as any, // since \"this\" is the real array we need to pass its proxy\n index,\n newValue\n })\n if (!change) {\n return\n }\n newValue = change.newValue\n }\n newValue = this.enhancer_(newValue, oldValue)\n const changed = newValue !== oldValue\n if (changed) {\n values[index] = newValue\n this.notifyArrayChildUpdate_(index, newValue, oldValue)\n }\n } else {\n // For out of bound index, we don't create an actual sparse array,\n // but rather fill the holes with undefined (same as setArrayLength_).\n // This could be considered a bug.\n const newItems = new Array(index + 1 - values.length)\n for (let i = 0; i < newItems.length - 1; i++) {\n newItems[i] = undefined\n } // No Array.fill everywhere...\n newItems[newItems.length - 1] = newValue\n this.spliceWithArray_(values.length, 0, newItems)\n }\n }\n}\n\nexport function createObservableArray<T>(\n initialValues: T[] | undefined,\n enhancer: IEnhancer<T>,\n name = __DEV__ ? \"ObservableArray@\" + getNextId() : \"ObservableArray\",\n owned = false\n): IObservableArray<T> {\n assertProxies()\n return initObservable(() => {\n const adm = new ObservableArrayAdministration(name, enhancer, owned, false)\n addHiddenFinalProp(adm.values_, $mobx, adm)\n const proxy = new Proxy(adm.values_, arrayTraps) as any\n adm.proxy_ = proxy\n if (initialValues && initialValues.length) {\n adm.spliceWithArray_(0, 0, initialValues)\n }\n return proxy\n })\n}\n\n// eslint-disable-next-line\nexport var arrayExtensions = {\n clear(): any[] {\n return this.splice(0)\n },\n\n replace(newItems: any[]) {\n const adm: ObservableArrayAdministration = this[$mobx]\n return adm.spliceWithArray_(0, adm.values_.length, newItems)\n },\n\n // Used by JSON.stringify\n toJSON(): any[] {\n return this.slice()\n },\n\n /*\n * functions that do alter the internal structure of the array, (based on lib.es6.d.ts)\n * since these functions alter the inner structure of the array, the have side effects.\n * Because the have side effects, they should not be used in computed function,\n * and for that reason the do not call dependencyState.notifyObserved\n */\n splice(index: number, deleteCount?: number, ...newItems: any[]): any[] {\n const adm: ObservableArrayAdministration = this[$mobx]\n switch (arguments.length) {\n case 0:\n return []\n case 1:\n return adm.spliceWithArray_(index)\n case 2:\n return adm.spliceWithArray_(index, deleteCount)\n }\n return adm.spliceWithArray_(index, deleteCount, newItems)\n },\n\n spliceWithArray(index: number, deleteCount?: number, newItems?: any[]): any[] {\n return (this[$mobx] as ObservableArrayAdministration).spliceWithArray_(\n index,\n deleteCount,\n newItems\n )\n },\n\n push(...items: any[]): number {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.spliceWithArray_(adm.values_.length, 0, items)\n return adm.values_.length\n },\n\n pop() {\n return this.splice(Math.max(this[$mobx].values_.length - 1, 0), 1)[0]\n },\n\n shift() {\n return this.splice(0, 1)[0]\n },\n\n unshift(...items: any[]): number {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.spliceWithArray_(0, 0, items)\n return adm.values_.length\n },\n\n reverse(): any[] {\n // reverse by default mutates in place before returning the result\n // which makes it both a 'derivation' and a 'mutation'.\n if (globalState.trackingDerivation) {\n die(37, \"reverse\")\n }\n this.replace(this.slice().reverse())\n return this\n },\n\n sort(): any[] {\n // sort by default mutates in place before returning the result\n // which goes against all good practices. Let's not change the array in place!\n if (globalState.trackingDerivation) {\n die(37, \"sort\")\n }\n const copy = this.slice()\n copy.sort.apply(copy, arguments)\n this.replace(copy)\n return this\n },\n\n remove(value: any): boolean {\n const adm: ObservableArrayAdministration = this[$mobx]\n const idx = adm.dehanceValues_(adm.values_).indexOf(value)\n if (idx > -1) {\n this.splice(idx, 1)\n return true\n }\n return false\n }\n}\n\n/**\n * Wrap function from prototype\n * Without this, everything works as well, but this works\n * faster as everything works on unproxied values\n */\naddArrayExtension(\"at\", simpleFunc)\naddArrayExtension(\"concat\", simpleFunc)\naddArrayExtension(\"flat\", simpleFunc)\naddArrayExtension(\"includes\", simpleFunc)\naddArrayExtension(\"indexOf\", simpleFunc)\naddArrayExtension(\"join\", simpleFunc)\naddArrayExtension(\"lastIndexOf\", simpleFunc)\naddArrayExtension(\"slice\", simpleFunc)\naddArrayExtension(\"toString\", simpleFunc)\naddArrayExtension(\"toLocaleString\", simpleFunc)\naddArrayExtension(\"toSorted\", simpleFunc)\naddArrayExtension(\"toSpliced\", simpleFunc)\naddArrayExtension(\"with\", simpleFunc)\n// map\naddArrayExtension(\"every\", mapLikeFunc)\naddArrayExtension(\"filter\", mapLikeFunc)\naddArrayExtension(\"find\", mapLikeFunc)\naddArrayExtension(\"findIndex\", mapLikeFunc)\naddArrayExtension(\"findLast\", mapLikeFunc)\naddArrayExtension(\"findLastIndex\", mapLikeFunc)\naddArrayExtension(\"flatMap\", mapLikeFunc)\naddArrayExtension(\"forEach\", mapLikeFunc)\naddArrayExtension(\"map\", mapLikeFunc)\naddArrayExtension(\"some\", mapLikeFunc)\naddArrayExtension(\"toReversed\", mapLikeFunc)\n// reduce\naddArrayExtension(\"reduce\", reduceLikeFunc)\naddArrayExtension(\"reduceRight\", reduceLikeFunc)\n\nfunction addArrayExtension(funcName, funcFactory) {\n if (typeof Array.prototype[funcName] === \"function\") {\n arrayExtensions[funcName] = funcFactory(funcName)\n }\n}\n\n// Report and delegate to dehanced array\nfunction simpleFunc(funcName) {\n return function () {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.atom_.reportObserved()\n const dehancedValues = adm.dehanceValues_(adm.values_)\n return dehancedValues[funcName].apply(dehancedValues, arguments)\n }\n}\n\n// Make sure callbacks recieve correct array arg #2326\nfunction mapLikeFunc(funcName) {\n return function (callback, thisArg) {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.atom_.reportObserved()\n const dehancedValues = adm.dehanceValues_(adm.values_)\n return dehancedValues[funcName]((element, index) => {\n return callback.call(thisArg, element, index, this)\n })\n }\n}\n\n// Make sure callbacks recieve correct array arg #2326\nfunction reduceLikeFunc(funcName) {\n return function () {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.atom_.reportObserved()\n const dehancedValues = adm.dehanceValues_(adm.values_)\n // #2432 - reduce behavior depends on arguments.length\n const callback = arguments[0]\n arguments[0] = (accumulator, currentValue, index) => {\n return callback(accumulator, currentValue, index, this)\n }\n return dehancedValues[funcName].apply(dehancedValues, arguments)\n }\n}\n\nconst isObservableArrayAdministration = createInstanceofPredicate(\n \"ObservableArrayAdministration\",\n ObservableArrayAdministration\n)\n\nexport function isObservableArray(thing): thing is IObservableArray<any> {\n return isObject(thing) && isObservableArrayAdministration(thing[$mobx])\n}\n","import { IComputedDidChange } from \"./computedvalue\"\nimport { IValueDidChange, IBoxDidChange } from \"./../types/observablevalue\"\nimport { IObjectDidChange } from \"./../types/observableobject\"\nimport { IArrayDidChange } from \"./../types/observablearray\"\nimport { Lambda, globalState, once, ISetDidChange, IMapDidChange } from \"../internal\"\n\nexport function isSpyEnabled() {\n return __DEV__ && !!globalState.spyListeners.length\n}\n\nexport type PureSpyEvent =\n | { type: \"action\"; name: string; object: unknown; arguments: unknown[] }\n | { type: \"scheduled-reaction\"; name: string }\n | { type: \"reaction\"; name: string }\n | { type: \"error\"; name: string; message: string; error: string }\n | IComputedDidChange<unknown>\n | IObjectDidChange<unknown>\n | IArrayDidChange<unknown>\n | IMapDidChange<unknown, unknown>\n | ISetDidChange<unknown>\n | IValueDidChange<unknown>\n | IBoxDidChange<unknown>\n | { type: \"report-end\"; spyReportEnd: true; time?: number }\n\ntype SpyEvent = PureSpyEvent & { spyReportStart?: true }\n\nexport function spyReport(event: SpyEvent) {\n if (!__DEV__) {\n return\n } // dead code elimination can do the rest\n if (!globalState.spyListeners.length) {\n return\n }\n const listeners = globalState.spyListeners\n for (let i = 0, l = listeners.length; i < l; i++) {\n listeners[i](event)\n }\n}\n\nexport function spyReportStart(event: PureSpyEvent) {\n if (!__DEV__) {\n return\n }\n const change = { ...event, spyReportStart: true as const }\n spyReport(change)\n}\n\nconst END_EVENT: SpyEvent = { type: \"report-end\", spyReportEnd: true }\n\nexport function spyReportEnd(change?: { time?: number }) {\n if (!__DEV__) {\n return\n }\n if (change) {\n spyReport({ ...change, type: \"report-end\", spyReportEnd: true })\n } else {\n spyReport(END_EVENT)\n }\n}\n\nexport function spy(listener: (change: SpyEvent) => void): Lambda {\n if (!__DEV__) {\n console.warn(`[mobx.spy] Is a no-op in production builds`)\n return function () {}\n } else {\n globalState.spyListeners.push(listener)\n return once(() => {\n globalState.spyListeners = globalState.spyListeners.filter(l => l !== listener)\n })\n }\n}\n","import {\n $mobx,\n IEnhancer,\n IInterceptable,\n IInterceptor,\n IListenable,\n Lambda,\n ObservableValue,\n checkIfStateModificationsAreAllowed,\n createAtom,\n createInstanceofPredicate,\n deepEnhancer,\n getNextId,\n getPlainObjectKeys,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isES6Map,\n isPlainObject,\n isSpyEnabled,\n makeIterable,\n notifyListeners,\n referenceEnhancer,\n registerInterceptor,\n registerListener,\n spyReportEnd,\n spyReportStart,\n stringifyKey,\n transaction,\n untracked,\n onBecomeUnobserved,\n globalState,\n die,\n isFunction,\n UPDATE,\n IAtom,\n PureSpyEvent,\n initObservable\n} from \"../internal\"\n\nexport interface IKeyValueMap<V = any> {\n [key: string]: V\n}\n\nexport type IMapEntry<K = any, V = any> = [K, V]\nexport type IReadonlyMapEntry<K = any, V = any> = readonly [K, V]\nexport type IMapEntries<K = any, V = any> = IMapEntry<K, V>[]\nexport type IReadonlyMapEntries<K = any, V = any> = IReadonlyMapEntry<K, V>[]\n\nexport type IMapDidChange<K = any, V = any> = { observableKind: \"map\"; debugObjectName: string } & (\n | {\n object: ObservableMap<K, V>\n name: K // actual the key or index, but this is based on the ancient .observe proposal for consistency\n type: \"update\"\n newValue: V\n oldValue: V\n }\n | {\n object: ObservableMap<K, V>\n name: K\n type: \"add\"\n newValue: V\n }\n | {\n object: ObservableMap<K, V>\n name: K\n type: \"delete\"\n oldValue: V\n }\n)\n\nexport interface IMapWillChange<K = any, V = any> {\n object: ObservableMap<K, V>\n type: \"update\" | \"add\" | \"delete\"\n name: K\n newValue?: V\n}\n\nconst ObservableMapMarker = {}\n\nexport const ADD = \"add\"\nexport const DELETE = \"delete\"\n\nexport type IObservableMapInitialValues<K = any, V = any> =\n | IMapEntries<K, V>\n | IReadonlyMapEntries<K, V>\n | IKeyValueMap<V>\n | Map<K, V>\n\n// just extend Map? See also https://gist.github.com/nestharus/13b4d74f2ef4a2f4357dbd3fc23c1e54\n// But: https://github.com/mobxjs/mobx/issues/1556\nexport class ObservableMap<K = any, V = any>\n implements Map<K, V>, IInterceptable<IMapWillChange<K, V>>, IListenable\n{\n [$mobx] = ObservableMapMarker\n data_!: Map<K, ObservableValue<V>>\n hasMap_!: Map<K, ObservableValue<boolean>> // hasMap, not hashMap >-).\n keysAtom_!: IAtom\n interceptors_\n changeListeners_\n dehancer: any\n\n constructor(\n initialData?: IObservableMapInitialValues<K, V>,\n public enhancer_: IEnhancer<V> = deepEnhancer,\n public name_ = __DEV__ ? \"ObservableMap@\" + getNextId() : \"ObservableMap\"\n ) {\n if (!isFunction(Map)) {\n die(18)\n }\n initObservable(() => {\n this.keysAtom_ = createAtom(__DEV__ ? `${this.name_}.keys()` : \"ObservableMap.keys()\")\n this.data_ = new Map()\n this.hasMap_ = new Map()\n if (initialData) {\n this.merge(initialData)\n }\n })\n }\n\n private has_(key: K): boolean {\n return this.data_.has(key)\n }\n\n has(key: K): boolean {\n if (!globalState.trackingDerivation) {\n return this.has_(key)\n }\n\n let entry = this.hasMap_.get(key)\n if (!entry) {\n const newEntry = (entry = new ObservableValue(\n this.has_(key),\n referenceEnhancer,\n __DEV__ ? `${this.name_}.${stringifyKey(key)}?` : \"ObservableMap.key?\",\n false\n ))\n this.hasMap_.set(key, newEntry)\n onBecomeUnobserved(newEntry, () => this.hasMap_.delete(key))\n }\n\n return entry.get()\n }\n\n set(key: K, value: V) {\n const hasKey = this.has_(key)\n if (hasInterceptors(this)) {\n const change = interceptChange<IMapWillChange<K, V>>(this, {\n type: hasKey ? UPDATE : ADD,\n object: this,\n newValue: value,\n name: key\n })\n if (!change) {\n return this\n }\n value = change.newValue!\n }\n if (hasKey) {\n this.updateValue_(key, value)\n } else {\n this.addValue_(key, value)\n }\n return this\n }\n\n delete(key: K): boolean {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n if (hasInterceptors(this)) {\n const change = interceptChange<IMapWillChange<K, V>>(this, {\n type: DELETE,\n object: this,\n name: key\n })\n if (!change) {\n return false\n }\n }\n if (this.has_(key)) {\n const notifySpy = isSpyEnabled()\n const notify = hasListeners(this)\n const change: IMapDidChange<K, V> | null =\n notify || notifySpy\n ? {\n observableKind: \"map\",\n debugObjectName: this.name_,\n type: DELETE,\n object: this,\n oldValue: (<any>this.data_.get(key)).value_,\n name: key\n }\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change! as PureSpyEvent)\n } // TODO fix type\n transaction(() => {\n this.keysAtom_.reportChanged()\n this.hasMap_.get(key)?.setNewValue_(false)\n const observable = this.data_.get(key)!\n observable.setNewValue_(undefined as any)\n this.data_.delete(key)\n })\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n return true\n }\n return false\n }\n\n private updateValue_(key: K, newValue: V | undefined) {\n const observable = this.data_.get(key)!\n newValue = (observable as any).prepareNewValue_(newValue) as V\n if (newValue !== globalState.UNCHANGED) {\n const notifySpy = isSpyEnabled()\n const notify = hasListeners(this)\n const change: IMapDidChange<K, V> | null =\n notify || notifySpy\n ? {\n observableKind: \"map\",\n debugObjectName: this.name_,\n type: UPDATE,\n object: this,\n oldValue: (observable as any).value_,\n name: key,\n newValue\n }\n : null\n if (__DEV__ && notifySpy) {\n spyReportStart(change! as PureSpyEvent)\n } // TODO fix type\n observable.setNewValue_(newValue as V)\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n }\n\n private addValue_(key: K, newValue: V) {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n transaction(() => {\n const observable = new ObservableValue(\n newValue,\n this.enhancer_,\n __DEV__ ? `${this.name_}.${stringifyKey(key)}` : \"ObservableMap.key\",\n false\n )\n this.data_.set(key, observable)\n newValue = (observable as any).value_ // value might have been changed\n this.hasMap_.get(key)?.setNewValue_(true)\n this.keysAtom_.reportChanged()\n })\n const notifySpy = isSpyEnabled()\n const notify = hasListeners(this)\n const change: IMapDidChange<K, V> | null =\n notify || notifySpy\n ? {\n observableKind: \"map\",\n debugObjectName: this.name_,\n type: ADD,\n object: this,\n name: key,\n newValue\n }\n : null\n if (__DEV__ && notifySpy) {\n spyReportStart(change! as PureSpyEvent)\n } // TODO fix type\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n get(key: K): V | undefined {\n if (this.has(key)) {\n return this.dehanceValue_(this.data_.get(key)!.get())\n }\n return this.dehanceValue_(undefined)\n }\n\n private dehanceValue_<X extends V | undefined>(value: X): X {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n keys(): IterableIterator<K> {\n this.keysAtom_.reportObserved()\n return this.data_.keys()\n }\n\n values(): IterableIterator<V> {\n const self = this\n const keys = this.keys()\n return makeIterable({\n next() {\n const { done, value } = keys.next()\n return {\n done,\n value: done ? (undefined as any) : self.get(value)\n }\n }\n })\n }\n\n entries(): IterableIterator<IMapEntry<K, V>> {\n const self = this\n const keys = this.keys()\n return makeIterable({\n next() {\n const { done, value } = keys.next()\n return {\n done,\n value: done ? (undefined as any) : ([value, self.get(value)!] as [K, V])\n }\n }\n })\n }\n\n [Symbol.iterator]() {\n return this.entries()\n }\n\n forEach(callback: (value: V, key: K, object: Map<K, V>) => void, thisArg?) {\n for (const [key, value] of this) {\n callback.call(thisArg, value, key, this)\n }\n }\n\n /** Merge another object into this object, returns this. */\n merge(other?: IObservableMapInitialValues<K, V>): ObservableMap<K, V> {\n if (isObservableMap(other)) {\n other = new Map(other)\n }\n transaction(() => {\n if (isPlainObject(other)) {\n getPlainObjectKeys(other).forEach((key: any) =>\n this.set(key as K, (other as IKeyValueMap)[key])\n )\n } else if (Array.isArray(other)) {\n other.forEach(([key, value]) => this.set(key, value))\n } else if (isES6Map(other)) {\n if (other.constructor !== Map) {\n die(19, other)\n }\n other.forEach((value, key) => this.set(key, value))\n } else if (other !== null && other !== undefined) {\n die(20, other)\n }\n })\n return this\n }\n\n clear() {\n transaction(() => {\n untracked(() => {\n for (const key of this.keys()) {\n this.delete(key)\n }\n })\n })\n }\n\n replace(values: IObservableMapInitialValues<K, V>): ObservableMap<K, V> {\n // Implementation requirements:\n // - respect ordering of replacement map\n // - allow interceptors to run and potentially prevent individual operations\n // - don't recreate observables that already exist in original map (so we don't destroy existing subscriptions)\n // - don't _keysAtom.reportChanged if the keys of resulting map are indentical (order matters!)\n // - note that result map may differ from replacement map due to the interceptors\n transaction(() => {\n // Convert to map so we can do quick key lookups\n const replacementMap = convertToMap(values)\n const orderedData = new Map()\n // Used for optimization\n let keysReportChangedCalled = false\n // Delete keys that don't exist in replacement map\n // if the key deletion is prevented by interceptor\n // add entry at the beginning of the result map\n for (const key of this.data_.keys()) {\n // Concurrently iterating/deleting keys\n // iterator should handle this correctly\n if (!replacementMap.has(key)) {\n const deleted = this.delete(key)\n // Was the key removed?\n if (deleted) {\n // _keysAtom.reportChanged() was already called\n keysReportChangedCalled = true\n } else {\n // Delete prevented by interceptor\n const value = this.data_.get(key)\n orderedData.set(key, value)\n }\n }\n }\n // Merge entries\n for (const [key, value] of replacementMap.entries()) {\n // We will want to know whether a new key is added\n const keyExisted = this.data_.has(key)\n // Add or update value\n this.set(key, value)\n // The addition could have been prevent by interceptor\n if (this.data_.has(key)) {\n // The update could have been prevented by interceptor\n // and also we want to preserve existing values\n // so use value from _data map (instead of replacement map)\n const value = this.data_.get(key)\n orderedData.set(key, value)\n // Was a new key added?\n if (!keyExisted) {\n // _keysAtom.reportChanged() was already called\n keysReportChangedCalled = true\n }\n }\n }\n // Check for possible key order change\n if (!keysReportChangedCalled) {\n if (this.data_.size !== orderedData.size) {\n // If size differs, keys are definitely modified\n this.keysAtom_.reportChanged()\n } else {\n const iter1 = this.data_.keys()\n const iter2 = orderedData.keys()\n let next1 = iter1.next()\n let next2 = iter2.next()\n while (!next1.done) {\n if (next1.value !== next2.value) {\n this.keysAtom_.reportChanged()\n break\n }\n next1 = iter1.next()\n next2 = iter2.next()\n }\n }\n }\n // Use correctly ordered map\n this.data_ = orderedData\n })\n return this\n }\n\n get size(): number {\n this.keysAtom_.reportObserved()\n return this.data_.size\n }\n\n toString(): string {\n return \"[object ObservableMap]\"\n }\n\n toJSON(): [K, V][] {\n return Array.from(this)\n }\n\n get [Symbol.toStringTag]() {\n return \"Map\"\n }\n\n /**\n * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n * for callback details\n */\n observe_(listener: (changes: IMapDidChange<K, V>) => void, fireImmediately?: boolean): Lambda {\n if (__DEV__ && fireImmediately === true) {\n die(\"`observe` doesn't support fireImmediately=true in combination with maps.\")\n }\n return registerListener(this, listener)\n }\n\n intercept_(handler: IInterceptor<IMapWillChange<K, V>>): Lambda {\n return registerInterceptor(this, handler)\n }\n}\n\n// eslint-disable-next-line\nexport var isObservableMap = createInstanceofPredicate(\"ObservableMap\", ObservableMap) as (\n thing: any\n) => thing is ObservableMap<any, any>\n\nfunction convertToMap(dataStructure: any): Map<any, any> {\n if (isES6Map(dataStructure) || isObservableMap(dataStructure)) {\n return dataStructure\n } else if (Array.isArray(dataStructure)) {\n return new Map(dataStructure)\n } else if (isPlainObject(dataStructure)) {\n const map = new Map()\n for (const key in dataStructure) {\n map.set(key, dataStructure[key])\n }\n return map\n } else {\n return die(21, dataStructure)\n }\n}\n","import {\n $mobx,\n createAtom,\n deepEnhancer,\n getNextId,\n IEnhancer,\n isSpyEnabled,\n hasListeners,\n IListenable,\n registerListener,\n Lambda,\n spyReportStart,\n notifyListeners,\n spyReportEnd,\n createInstanceofPredicate,\n hasInterceptors,\n interceptChange,\n IInterceptable,\n IInterceptor,\n registerInterceptor,\n checkIfStateModificationsAreAllowed,\n untracked,\n makeIterable,\n transaction,\n isES6Set,\n IAtom,\n DELETE,\n ADD,\n die,\n isFunction,\n initObservable\n} from \"../internal\"\n\nconst ObservableSetMarker = {}\n\nexport type IObservableSetInitialValues<T> = Set<T> | readonly T[]\n\nexport type ISetDidChange<T = any> =\n | {\n object: ObservableSet<T>\n observableKind: \"set\"\n debugObjectName: string\n type: \"add\"\n newValue: T\n }\n | {\n object: ObservableSet<T>\n observableKind: \"set\"\n debugObjectName: string\n type: \"delete\"\n oldValue: T\n }\n\nexport type ISetWillChange<T = any> =\n | {\n type: \"delete\"\n object: ObservableSet<T>\n oldValue: T\n }\n | {\n type: \"add\"\n object: ObservableSet<T>\n newValue: T\n }\n\nexport class ObservableSet<T = any> implements Set<T>, IInterceptable<ISetWillChange>, IListenable {\n [$mobx] = ObservableSetMarker\n private data_: Set<any> = new Set()\n atom_!: IAtom\n changeListeners_\n interceptors_\n dehancer: any\n enhancer_: (newV: any, oldV: any | undefined) => any\n\n constructor(\n initialData?: IObservableSetInitialValues<T>,\n enhancer: IEnhancer<T> = deepEnhancer,\n public name_ = __DEV__ ? \"ObservableSet@\" + getNextId() : \"ObservableSet\"\n ) {\n if (!isFunction(Set)) {\n die(22)\n }\n this.enhancer_ = (newV, oldV) => enhancer(newV, oldV, name_)\n initObservable(() => {\n this.atom_ = createAtom(this.name_)\n if (initialData) {\n this.replace(initialData)\n }\n })\n }\n\n private dehanceValue_<X extends T | undefined>(value: X): X {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n clear() {\n transaction(() => {\n untracked(() => {\n for (const value of this.data_.values()) {\n this.delete(value)\n }\n })\n })\n }\n\n forEach(callbackFn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any) {\n for (const value of this) {\n callbackFn.call(thisArg, value, value, this)\n }\n }\n\n get size() {\n this.atom_.reportObserved()\n return this.data_.size\n }\n\n add(value: T) {\n checkIfStateModificationsAreAllowed(this.atom_)\n if (hasInterceptors(this)) {\n const change = interceptChange<ISetWillChange<T>>(this, {\n type: ADD,\n object: this,\n newValue: value\n })\n if (!change) {\n return this\n }\n // ideally, value = change.value would be done here, so that values can be\n // changed by interceptor. Same applies for other Set and Map api's.\n }\n if (!this.has(value)) {\n transaction(() => {\n this.data_.add(this.enhancer_(value, undefined))\n this.atom_.reportChanged()\n })\n const notifySpy = __DEV__ && isSpyEnabled()\n const notify = hasListeners(this)\n const change =\n notify || notifySpy\n ? <ISetDidChange<T>>{\n observableKind: \"set\",\n debugObjectName: this.name_,\n type: ADD,\n object: this,\n newValue: value\n }\n : null\n if (notifySpy && __DEV__) {\n spyReportStart(change!)\n }\n if (notify) {\n notifyListeners(this, change)\n }\n if (notifySpy && __DEV__) {\n spyReportEnd()\n }\n }\n\n return this\n }\n\n delete(value: T) {\n if (hasInterceptors(this)) {\n const change = interceptChange<ISetWillChange<T>>(this, {\n type: DELETE,\n object: this,\n oldValue: value\n })\n if (!change) {\n return false\n }\n }\n if (this.has(value)) {\n const notifySpy = __DEV__ && isSpyEnabled()\n const notify = hasListeners(this)\n const change =\n notify || notifySpy\n ? <ISetDidChange<T>>{\n observableKind: \"set\",\n debugObjectName: this.name_,\n type: DELETE,\n object: this,\n oldValue: value\n }\n : null\n\n if (notifySpy && __DEV__) {\n spyReportStart(change!)\n }\n transaction(() => {\n this.atom_.reportChanged()\n this.data_.delete(value)\n })\n if (notify) {\n notifyListeners(this, change)\n }\n if (notifySpy && __DEV__) {\n spyReportEnd()\n }\n return true\n }\n return false\n }\n\n has(value: T) {\n this.atom_.reportObserved()\n return this.data_.has(this.dehanceValue_(value))\n }\n\n entries() {\n let nextIndex = 0\n const keys = Array.from(this.keys())\n const values = Array.from(this.values())\n return makeIterable<[T, T]>({\n next() {\n const index = nextIndex\n nextIndex += 1\n return index < values.length\n ? { value: [keys[index], values[index]], done: false }\n : { done: true }\n }\n } as any)\n }\n\n keys(): IterableIterator<T> {\n return this.values()\n }\n\n values(): IterableIterator<T> {\n this.atom_.reportObserved()\n const self = this\n let nextIndex = 0\n const observableValues = Array.from(this.data_.values())\n return makeIterable<T>({\n next() {\n return nextIndex < observableValues.length\n ? { value: self.dehanceValue_(observableValues[nextIndex++]), done: false }\n : { done: true }\n }\n } as any)\n }\n\n replace(other: ObservableSet<T> | IObservableSetInitialValues<T>): ObservableSet<T> {\n if (isObservableSet(other)) {\n other = new Set(other)\n }\n\n transaction(() => {\n if (Array.isArray(other)) {\n this.clear()\n other.forEach(value => this.add(value))\n } else if (isES6Set(other)) {\n this.clear()\n other.forEach(value => this.add(value))\n } else if (other !== null && other !== undefined) {\n die(\"Cannot initialize set from \" + other)\n }\n })\n\n return this\n }\n observe_(listener: (changes: ISetDidChange<T>) => void, fireImmediately?: boolean): Lambda {\n // ... 'fireImmediately' could also be true?\n if (__DEV__ && fireImmediately === true) {\n die(\"`observe` doesn't support fireImmediately=true in combination with sets.\")\n }\n return registerListener(this, listener)\n }\n\n intercept_(handler: IInterceptor<ISetWillChange<T>>): Lambda {\n return registerInterceptor(this, handler)\n }\n\n toJSON(): T[] {\n return Array.from(this)\n }\n\n toString(): string {\n return \"[object ObservableSet]\"\n }\n\n [Symbol.iterator]() {\n return this.values()\n }\n\n get [Symbol.toStringTag]() {\n return \"Set\"\n }\n}\n\n// eslint-disable-next-line\nexport var isObservableSet = createInstanceofPredicate(\"ObservableSet\", ObservableSet) as (\n thing: any\n) => thing is ObservableSet<any>\n","import {\n CreateObservableOptions,\n getAnnotationFromOptions,\n propagateChanged,\n isAnnotation,\n $mobx,\n Atom,\n Annotation,\n ComputedValue,\n IAtom,\n IComputedValueOptions,\n IEnhancer,\n IInterceptable,\n IListenable,\n Lambda,\n ObservableValue,\n addHiddenProp,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isObject,\n isPlainObject,\n isSpyEnabled,\n notifyListeners,\n referenceEnhancer,\n registerInterceptor,\n registerListener,\n spyReportEnd,\n spyReportStart,\n startBatch,\n stringifyKey,\n globalState,\n ADD,\n UPDATE,\n die,\n hasProp,\n getDescriptor,\n storedAnnotationsSymbol,\n ownKeys,\n isOverride,\n defineProperty,\n autoAnnotation,\n getAdministration,\n getDebugName,\n objectPrototype,\n MakeResult,\n checkIfStateModificationsAreAllowed\n} from \"../internal\"\n\nconst descriptorCache = Object.create(null)\n\nexport type IObjectDidChange<T = any> = {\n observableKind: \"object\"\n name: PropertyKey\n object: T\n debugObjectName: string\n} & (\n | {\n type: \"add\"\n newValue: any\n }\n | {\n type: \"update\"\n oldValue: any\n newValue: any\n }\n | {\n type: \"remove\"\n oldValue: any\n }\n)\n\nexport type IObjectWillChange<T = any> =\n | {\n object: T\n type: \"update\" | \"add\"\n name: PropertyKey\n newValue: any\n }\n | {\n object: T\n type: \"remove\"\n name: PropertyKey\n }\n\nconst REMOVE = \"remove\"\n\nexport class ObservableObjectAdministration\n implements IInterceptable<IObjectWillChange>, IListenable\n{\n keysAtom_: IAtom\n changeListeners_\n interceptors_\n proxy_: any\n isPlainObject_: boolean\n appliedAnnotations_?: object\n private pendingKeys_: undefined | Map<PropertyKey, ObservableValue<boolean>>\n\n constructor(\n public target_: any,\n public values_ = new Map<PropertyKey, ObservableValue<any> | ComputedValue<any>>(),\n public name_: string,\n // Used anytime annotation is not explicitely provided\n public defaultAnnotation_: Annotation = autoAnnotation\n ) {\n this.keysAtom_ = new Atom(__DEV__ ? `${this.name_}.keys` : \"ObservableObject.keys\")\n // Optimization: we use this frequently\n this.isPlainObject_ = isPlainObject(this.target_)\n if (__DEV__ && !isAnnotation(this.defaultAnnotation_)) {\n die(`defaultAnnotation must be valid annotation`)\n }\n if (__DEV__) {\n // Prepare structure for tracking which fields were already annotated\n this.appliedAnnotations_ = {}\n }\n }\n\n getObservablePropValue_(key: PropertyKey): any {\n return this.values_.get(key)!.get()\n }\n\n setObservablePropValue_(key: PropertyKey, newValue): boolean | null {\n const observable = this.values_.get(key)\n if (observable instanceof ComputedValue) {\n observable.set(newValue)\n return true\n }\n\n // intercept\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n type: UPDATE,\n object: this.proxy_ || this.target_,\n name: key,\n newValue\n })\n if (!change) {\n return null\n }\n newValue = (change as any).newValue\n }\n newValue = (observable as any).prepareNewValue_(newValue)\n\n // notify spy & observers\n if (newValue !== globalState.UNCHANGED) {\n const notify = hasListeners(this)\n const notifySpy = __DEV__ && isSpyEnabled()\n const change: IObjectDidChange | null =\n notify || notifySpy\n ? {\n type: UPDATE,\n observableKind: \"object\",\n debugObjectName: this.name_,\n object: this.proxy_ || this.target_,\n oldValue: (observable as any).value_,\n name: key,\n newValue\n }\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n ;(observable as ObservableValue<any>).setNewValue_(newValue)\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n return true\n }\n\n get_(key: PropertyKey): any {\n if (globalState.trackingDerivation && !hasProp(this.target_, key)) {\n // Key doesn't exist yet, subscribe for it in case it's added later\n this.has_(key)\n }\n return this.target_[key]\n }\n\n /**\n * @param {PropertyKey} key\n * @param {any} value\n * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n set_(key: PropertyKey, value: any, proxyTrap: boolean = false): boolean | null {\n // Don't use .has(key) - we care about own\n if (hasProp(this.target_, key)) {\n // Existing prop\n if (this.values_.has(key)) {\n // Observable (can be intercepted)\n return this.setObservablePropValue_(key, value)\n } else if (proxyTrap) {\n // Non-observable - proxy\n return Reflect.set(this.target_, key, value)\n } else {\n // Non-observable\n this.target_[key] = value\n return true\n }\n } else {\n // New prop\n return this.extend_(\n key,\n { value, enumerable: true, writable: true, configurable: true },\n this.defaultAnnotation_,\n proxyTrap\n )\n }\n }\n\n // Trap for \"in\"\n has_(key: PropertyKey): boolean {\n if (!globalState.trackingDerivation) {\n // Skip key subscription outside derivation\n return key in this.target_\n }\n this.pendingKeys_ ||= new Map()\n let entry = this.pendingKeys_.get(key)\n if (!entry) {\n entry = new ObservableValue(\n key in this.target_,\n referenceEnhancer,\n __DEV__ ? `${this.name_}.${stringifyKey(key)}?` : \"ObservableObject.key?\",\n false\n )\n this.pendingKeys_.set(key, entry)\n }\n return entry.get()\n }\n\n /**\n * @param {PropertyKey} key\n * @param {Annotation|boolean} annotation true - use default annotation, false - ignore prop\n */\n make_(key: PropertyKey, annotation: Annotation | boolean): void {\n if (annotation === true) {\n annotation = this.defaultAnnotation_\n }\n if (annotation === false) {\n return\n }\n assertAnnotable(this, annotation, key)\n if (!(key in this.target_)) {\n // Throw on missing key, except for decorators:\n // Decorator annotations are collected from whole prototype chain.\n // When called from super() some props may not exist yet.\n // However we don't have to worry about missing prop,\n // because the decorator must have been applied to something.\n if (this.target_[storedAnnotationsSymbol]?.[key]) {\n return // will be annotated by subclass constructor\n } else {\n die(1, annotation.annotationType_, `${this.name_}.${key.toString()}`)\n }\n }\n let source = this.target_\n while (source && source !== objectPrototype) {\n const descriptor = getDescriptor(source, key)\n if (descriptor) {\n const outcome = annotation.make_(this, key, descriptor, source)\n if (outcome === MakeResult.Cancel) {\n return\n }\n if (outcome === MakeResult.Break) {\n break\n }\n }\n source = Object.getPrototypeOf(source)\n }\n recordAnnotationApplied(this, annotation, key)\n }\n\n /**\n * @param {PropertyKey} key\n * @param {PropertyDescriptor} descriptor\n * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n extend_(\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n annotation: Annotation | boolean,\n proxyTrap: boolean = false\n ): boolean | null {\n if (annotation === true) {\n annotation = this.defaultAnnotation_\n }\n if (annotation === false) {\n return this.defineProperty_(key, descriptor, proxyTrap)\n }\n assertAnnotable(this, annotation, key)\n const outcome = annotation.extend_(this, key, descriptor, proxyTrap)\n if (outcome) {\n recordAnnotationApplied(this, annotation, key)\n }\n return outcome\n }\n\n /**\n * @param {PropertyKey} key\n * @param {PropertyDescriptor} descriptor\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n defineProperty_(\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean = false\n ): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n try {\n startBatch()\n\n // Delete\n const deleteOutcome = this.delete_(key)\n if (!deleteOutcome) {\n // Failure or intercepted\n return deleteOutcome\n }\n\n // ADD interceptor\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: ADD,\n newValue: descriptor.value\n })\n if (!change) {\n return null\n }\n const { newValue } = change as any\n if (descriptor.value !== newValue) {\n descriptor = {\n ...descriptor,\n value: newValue\n }\n }\n }\n\n // Define\n if (proxyTrap) {\n if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n return false\n }\n } else {\n defineProperty(this.target_, key, descriptor)\n }\n\n // Notify\n this.notifyPropertyAddition_(key, descriptor.value)\n } finally {\n endBatch()\n }\n return true\n }\n\n // If original descriptor becomes relevant, move this to annotation directly\n defineObservableProperty_(\n key: PropertyKey,\n value: any,\n enhancer: IEnhancer<any>,\n proxyTrap: boolean = false\n ): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n try {\n startBatch()\n\n // Delete\n const deleteOutcome = this.delete_(key)\n if (!deleteOutcome) {\n // Failure or intercepted\n return deleteOutcome\n }\n\n // ADD interceptor\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: ADD,\n newValue: value\n })\n if (!change) {\n return null\n }\n value = (change as any).newValue\n }\n\n const cachedDescriptor = getCachedObservablePropDescriptor(key)\n const descriptor = {\n configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n enumerable: true,\n get: cachedDescriptor.get,\n set: cachedDescriptor.set\n }\n\n // Define\n if (proxyTrap) {\n if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n return false\n }\n } else {\n defineProperty(this.target_, key, descriptor)\n }\n\n const observable = new ObservableValue(\n value,\n enhancer,\n __DEV__ ? `${this.name_}.${key.toString()}` : \"ObservableObject.key\",\n false\n )\n\n this.values_.set(key, observable)\n\n // Notify (value possibly changed by ObservableValue)\n this.notifyPropertyAddition_(key, observable.value_)\n } finally {\n endBatch()\n }\n return true\n }\n\n // If original descriptor becomes relevant, move this to annotation directly\n defineComputedProperty_(\n key: PropertyKey,\n options: IComputedValueOptions<any>,\n proxyTrap: boolean = false\n ): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n try {\n startBatch()\n\n // Delete\n const deleteOutcome = this.delete_(key)\n if (!deleteOutcome) {\n // Failure or intercepted\n return deleteOutcome\n }\n\n // ADD interceptor\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: ADD,\n newValue: undefined\n })\n if (!change) {\n return null\n }\n }\n options.name ||= __DEV__ ? `${this.name_}.${key.toString()}` : \"ObservableObject.key\"\n options.context = this.proxy_ || this.target_\n const cachedDescriptor = getCachedObservablePropDescriptor(key)\n const descriptor = {\n configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n enumerable: false,\n get: cachedDescriptor.get,\n set: cachedDescriptor.set\n }\n\n // Define\n if (proxyTrap) {\n if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n return false\n }\n } else {\n defineProperty(this.target_, key, descriptor)\n }\n\n this.values_.set(key, new ComputedValue(options))\n\n // Notify\n this.notifyPropertyAddition_(key, undefined)\n } finally {\n endBatch()\n }\n return true\n }\n\n /**\n * @param {PropertyKey} key\n * @param {PropertyDescriptor} descriptor\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n delete_(key: PropertyKey, proxyTrap: boolean = false): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n // No such prop\n if (!hasProp(this.target_, key)) {\n return true\n }\n\n // Intercept\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: REMOVE\n })\n // Cancelled\n if (!change) {\n return null\n }\n }\n\n // Delete\n try {\n startBatch()\n const notify = hasListeners(this)\n const notifySpy = __DEV__ && isSpyEnabled()\n const observable = this.values_.get(key)\n // Value needed for spies/listeners\n let value = undefined\n // Optimization: don't pull the value unless we will need it\n if (!observable && (notify || notifySpy)) {\n value = getDescriptor(this.target_, key)?.value\n }\n // delete prop (do first, may fail)\n if (proxyTrap) {\n if (!Reflect.deleteProperty(this.target_, key)) {\n return false\n }\n } else {\n delete this.target_[key]\n }\n // Allow re-annotating this field\n if (__DEV__) {\n delete this.appliedAnnotations_![key]\n }\n // Clear observable\n if (observable) {\n this.values_.delete(key)\n // for computed, value is undefined\n if (observable instanceof ObservableValue) {\n value = observable.value_\n }\n // Notify: autorun(() => obj[key]), see #1796\n propagateChanged(observable)\n }\n // Notify \"keys/entries/values\" observers\n this.keysAtom_.reportChanged()\n\n // Notify \"has\" observers\n // \"in\" as it may still exist in proto\n this.pendingKeys_?.get(key)?.set(key in this.target_)\n\n // Notify spies/listeners\n if (notify || notifySpy) {\n const change: IObjectDidChange = {\n type: REMOVE,\n observableKind: \"object\",\n object: this.proxy_ || this.target_,\n debugObjectName: this.name_,\n oldValue: value,\n name: key\n }\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n } finally {\n endBatch()\n }\n return true\n }\n\n /**\n * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n * for callback details\n */\n observe_(callback: (changes: IObjectDidChange) => void, fireImmediately?: boolean): Lambda {\n if (__DEV__ && fireImmediately === true) {\n die(\"`observe` doesn't support the fire immediately property for observable objects.\")\n }\n return registerListener(this, callback)\n }\n\n intercept_(handler): Lambda {\n return registerInterceptor(this, handler)\n }\n\n notifyPropertyAddition_(key: PropertyKey, value: any) {\n const notify = hasListeners(this)\n const notifySpy = __DEV__ && isSpyEnabled()\n if (notify || notifySpy) {\n const change: IObjectDidChange | null =\n notify || notifySpy\n ? ({\n type: ADD,\n observableKind: \"object\",\n debugObjectName: this.name_,\n object: this.proxy_ || this.target_,\n name: key,\n newValue: value\n } as const)\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n this.pendingKeys_?.get(key)?.set(true)\n\n // Notify \"keys/entries/values\" observers\n this.keysAtom_.reportChanged()\n }\n\n ownKeys_(): ArrayLike<string | symbol> {\n this.keysAtom_.reportObserved()\n return ownKeys(this.target_)\n }\n\n keys_(): PropertyKey[] {\n // Returns enumerable && own, but unfortunately keysAtom will report on ANY key change.\n // There is no way to distinguish between Object.keys(object) and Reflect.ownKeys(object) - both are handled by ownKeys trap.\n // We can either over-report in Object.keys(object) or under-report in Reflect.ownKeys(object)\n // We choose to over-report in Object.keys(object), because:\n // - typically it's used with simple data objects\n // - when symbolic/non-enumerable keys are relevant Reflect.ownKeys works as expected\n this.keysAtom_.reportObserved()\n return Object.keys(this.target_)\n }\n}\n\nexport interface IIsObservableObject {\n $mobx: ObservableObjectAdministration\n}\n\nexport function asObservableObject(\n target: any,\n options?: CreateObservableOptions\n): IIsObservableObject {\n if (__DEV__ && options && isObservableObject(target)) {\n die(`Options can't be provided for already observable objects.`)\n }\n\n if (hasProp(target, $mobx)) {\n if (__DEV__ && !(getAdministration(target) instanceof ObservableObjectAdministration)) {\n die(\n `Cannot convert '${getDebugName(target)}' into observable object:` +\n `\\nThe target is already observable of different type.` +\n `\\nExtending builtins is not supported.`\n )\n }\n return target\n }\n\n if (__DEV__ && !Object.isExtensible(target)) {\n die(\"Cannot make the designated object observable; it is not extensible\")\n }\n\n const name =\n options?.name ??\n (__DEV__\n ? `${\n isPlainObject(target) ? \"ObservableObject\" : target.constructor.name\n }@${getNextId()}`\n : \"ObservableObject\")\n\n const adm = new ObservableObjectAdministration(\n target,\n new Map(),\n String(name),\n getAnnotationFromOptions(options)\n )\n\n addHiddenProp(target, $mobx, adm)\n\n return target\n}\n\nconst isObservableObjectAdministration = createInstanceofPredicate(\n \"ObservableObjectAdministration\",\n ObservableObjectAdministration\n)\n\nfunction getCachedObservablePropDescriptor(key) {\n return (\n descriptorCache[key] ||\n (descriptorCache[key] = {\n get() {\n return this[$mobx].getObservablePropValue_(key)\n },\n set(value) {\n return this[$mobx].setObservablePropValue_(key, value)\n }\n })\n )\n}\n\nexport function isObservableObject(thing: any): boolean {\n if (isObject(thing)) {\n return isObservableObjectAdministration((thing as any)[$mobx])\n }\n return false\n}\n\nexport function recordAnnotationApplied(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey\n) {\n if (__DEV__) {\n adm.appliedAnnotations_![key] = annotation\n }\n // Remove applied decorator annotation so we don't try to apply it again in subclass constructor\n delete adm.target_[storedAnnotationsSymbol]?.[key]\n}\n\nfunction assertAnnotable(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey\n) {\n // Valid annotation\n if (__DEV__ && !isAnnotation(annotation)) {\n die(`Cannot annotate '${adm.name_}.${key.toString()}': Invalid annotation.`)\n }\n\n /*\n // Configurable, not sealed, not frozen\n // Possibly not needed, just a little better error then the one thrown by engine.\n // Cases where this would be useful the most (subclass field initializer) are not interceptable by this.\n if (__DEV__) {\n const configurable = getDescriptor(adm.target_, key)?.configurable\n const frozen = Object.isFrozen(adm.target_)\n const sealed = Object.isSealed(adm.target_)\n if (!configurable || frozen || sealed) {\n const fieldName = `${adm.name_}.${key.toString()}`\n const requestedAnnotationType = annotation.annotationType_\n let error = `Cannot apply '${requestedAnnotationType}' to '${fieldName}':`\n if (frozen) {\n error += `\\nObject is frozen.`\n }\n if (sealed) {\n error += `\\nObject is sealed.`\n }\n if (!configurable) {\n error += `\\nproperty is not configurable.`\n // Mention only if caused by us to avoid confusion\n if (hasProp(adm.appliedAnnotations!, key)) {\n error += `\\nTo prevent accidental re-definition of a field by a subclass, `\n error += `all annotated fields of non-plain objects (classes) are not configurable.`\n }\n }\n die(error)\n }\n }\n */\n\n // Not annotated\n if (__DEV__ && !isOverride(annotation) && hasProp(adm.appliedAnnotations_!, key)) {\n const fieldName = `${adm.name_}.${key.toString()}`\n const currentAnnotationType = adm.appliedAnnotations_![key].annotationType_\n const requestedAnnotationType = annotation.annotationType_\n die(\n `Cannot apply '${requestedAnnotationType}' to '${fieldName}':` +\n `\\nThe field is already annotated with '${currentAnnotationType}'.` +\n `\\nRe-annotating fields is not allowed.` +\n `\\nUse 'override' annotation for methods overridden by subclass.`\n )\n }\n}\n","import {\n getNextId,\n addHiddenFinalProp,\n makeIterable,\n addHiddenProp,\n ObservableArrayAdministration,\n $mobx,\n arrayExtensions,\n IEnhancer,\n isObservableArray,\n IObservableArray,\n defineProperty,\n initObservable\n} from \"../internal\"\n\n// Bug in safari 9.* (or iOS 9 safari mobile). See #364\nconst ENTRY_0 = createArrayEntryDescriptor(0)\n\nconst safariPrototypeSetterInheritanceBug = (() => {\n let v = false\n const p = {}\n Object.defineProperty(p, \"0\", {\n set: () => {\n v = true\n }\n })\n Object.create(p)[\"0\"] = 1\n return v === false\n})()\n\n/**\n * This array buffer contains two lists of properties, so that all arrays\n * can recycle their property definitions, which significantly improves performance of creating\n * properties on the fly.\n */\nlet OBSERVABLE_ARRAY_BUFFER_SIZE = 0\n\n// Typescript workaround to make sure ObservableArray extends Array\nclass StubArray {}\nfunction inherit(ctor, proto) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(ctor.prototype, proto)\n } else if (ctor.prototype.__proto__ !== undefined) {\n ctor.prototype.__proto__ = proto\n } else {\n ctor.prototype = proto\n }\n}\ninherit(StubArray, Array.prototype)\n\n// Weex proto freeze protection was here,\n// but it is unclear why the hack is need as MobX never changed the prototype\n// anyway, so removed it in V6\n\nexport class LegacyObservableArray<T> extends StubArray {\n constructor(\n initialValues: T[] | undefined,\n enhancer: IEnhancer<T>,\n name = __DEV__ ? \"ObservableArray@\" + getNextId() : \"ObservableArray\",\n owned = false\n ) {\n super()\n initObservable(() => {\n const adm = new ObservableArrayAdministration(name, enhancer, owned, true)\n adm.proxy_ = this as any\n addHiddenFinalProp(this, $mobx, adm)\n\n if (initialValues && initialValues.length) {\n // @ts-ignore\n this.spliceWithArray(0, 0, initialValues)\n }\n\n if (safariPrototypeSetterInheritanceBug) {\n // Seems that Safari won't use numeric prototype setter untill any * numeric property is\n // defined on the instance. After that it works fine, even if this property is deleted.\n Object.defineProperty(this, \"0\", ENTRY_0)\n }\n })\n }\n\n concat(...arrays: T[][]): T[] {\n ;(this[$mobx] as ObservableArrayAdministration).atom_.reportObserved()\n return Array.prototype.concat.apply(\n (this as any).slice(),\n //@ts-ignore\n arrays.map(a => (isObservableArray(a) ? a.slice() : a))\n )\n }\n\n get length(): number {\n return (this[$mobx] as ObservableArrayAdministration).getArrayLength_()\n }\n\n set length(newLength: number) {\n ;(this[$mobx] as ObservableArrayAdministration).setArrayLength_(newLength)\n }\n\n get [Symbol.toStringTag]() {\n return \"Array\"\n }\n\n [Symbol.iterator]() {\n const self = this\n let nextIndex = 0\n return makeIterable({\n next() {\n return nextIndex < self.length\n ? { value: self[nextIndex++], done: false }\n : { done: true, value: undefined }\n }\n })\n }\n}\n\nObject.entries(arrayExtensions).forEach(([prop, fn]) => {\n if (prop !== \"concat\") {\n addHiddenProp(LegacyObservableArray.prototype, prop, fn)\n }\n})\n\nfunction createArrayEntryDescriptor(index: number) {\n return {\n enumerable: false,\n configurable: true,\n get: function () {\n return this[$mobx].get_(index)\n },\n set: function (value) {\n this[$mobx].set_(index, value)\n }\n }\n}\n\nfunction createArrayBufferItem(index: number) {\n defineProperty(LegacyObservableArray.prototype, \"\" + index, createArrayEntryDescriptor(index))\n}\n\nexport function reserveArrayBuffer(max: number) {\n if (max > OBSERVABLE_ARRAY_BUFFER_SIZE) {\n for (let index = OBSERVABLE_ARRAY_BUFFER_SIZE; index < max + 100; index++) {\n createArrayBufferItem(index)\n }\n OBSERVABLE_ARRAY_BUFFER_SIZE = max\n }\n}\n\nreserveArrayBuffer(1000)\n\nexport function createLegacyArray<T>(\n initialValues: T[] | undefined,\n enhancer: IEnhancer<T>,\n name?: string\n): IObservableArray<T> {\n return new LegacyObservableArray(initialValues, enhancer, name) as any\n}\n","import { isAction } from \"../api/action\"\nimport {\n $mobx,\n IDepTreeNode,\n isAtom,\n isComputedValue,\n isObservableArray,\n isObservableMap,\n isObservableObject,\n isReaction,\n isObservableSet,\n die,\n isFunction,\n allowStateChangesStart,\n untrackedStart,\n allowStateChangesEnd,\n untrackedEnd,\n startBatch,\n endBatch\n} from \"../internal\"\n\nexport function getAtom(thing: any, property?: PropertyKey): IDepTreeNode {\n if (typeof thing === \"object\" && thing !== null) {\n if (isObservableArray(thing)) {\n if (property !== undefined) {\n die(23)\n }\n return (thing as any)[$mobx].atom_\n }\n if (isObservableSet(thing)) {\n return thing.atom_\n }\n if (isObservableMap(thing)) {\n if (property === undefined) {\n return thing.keysAtom_\n }\n const observable = thing.data_.get(property) || thing.hasMap_.get(property)\n if (!observable) {\n die(25, property, getDebugName(thing))\n }\n return observable\n }\n if (property && !thing[$mobx]) {\n thing[property]\n } // See #1072\n if (isObservableObject(thing)) {\n if (!property) {\n return die(26)\n }\n const observable = (thing as any)[$mobx].values_.get(property)\n if (!observable) {\n die(27, property, getDebugName(thing))\n }\n return observable\n }\n if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n return thing\n }\n } else if (isFunction(thing)) {\n if (isReaction(thing[$mobx])) {\n // disposer function\n return thing[$mobx]\n }\n }\n die(28)\n}\n\nexport function getAdministration(thing: any, property?: string) {\n if (!thing) {\n die(29)\n }\n if (property !== undefined) {\n return getAdministration(getAtom(thing, property))\n }\n if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n return thing\n }\n if (isObservableMap(thing) || isObservableSet(thing)) {\n return thing\n }\n if (thing[$mobx]) {\n return thing[$mobx]\n }\n die(24, thing)\n}\n\nexport function getDebugName(thing: any, property?: string): string {\n let named\n if (property !== undefined) {\n named = getAtom(thing, property)\n } else if (isAction(thing)) {\n return thing.name\n } else if (isObservableObject(thing) || isObservableMap(thing) || isObservableSet(thing)) {\n named = getAdministration(thing)\n } else {\n // valid for arrays as well\n named = getAtom(thing)\n }\n return named.name_\n}\n\n/**\n * Helper function for initializing observable structures, it applies:\n * 1. allowStateChanges so we don't violate enforceActions.\n * 2. untracked so we don't accidentaly subscribe to anything observable accessed during init in case the observable is created inside derivation.\n * 3. batch to avoid state version updates\n */\nexport function initObservable<T>(cb: () => T): T {\n const derivation = untrackedStart()\n const allowStateChanges = allowStateChangesStart(true)\n startBatch()\n try {\n return cb()\n } finally {\n endBatch()\n allowStateChangesEnd(allowStateChanges)\n untrackedEnd(derivation)\n }\n}\n","import {\n isES6Map,\n isObservableArray,\n isObservableMap,\n isES6Set,\n isObservableSet,\n hasProp,\n isFunction,\n objectPrototype\n} from \"../internal\"\n\ndeclare const Symbol\nconst toString = objectPrototype.toString\n\nexport function deepEqual(a: any, b: any, depth: number = -1): boolean {\n return eq(a, b, depth)\n}\n\n// Copied from https://github.com/jashkenas/underscore/blob/5c237a7c682fb68fd5378203f0bf22dce1624854/underscore.js#L1186-L1289\n// Internal recursive comparison function for `isEqual`.\nfunction eq(a: any, b: any, depth: number, aStack?: any[], bStack?: any[]) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) {\n return a !== 0 || 1 / a === 1 / b\n }\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) {\n return false\n }\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) {\n return b !== b\n }\n // Exhaust primitive checks\n const type = typeof a\n if (type !== \"function\" && type !== \"object\" && typeof b != \"object\") {\n return false\n }\n\n // Compare `[[Class]]` names.\n const className = toString.call(a)\n if (className !== toString.call(b)) {\n return false\n }\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case \"[object RegExp]\":\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case \"[object String]\":\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return \"\" + a === \"\" + b\n case \"[object Number]\":\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) {\n return +b !== +b\n }\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b\n case \"[object Date]\":\n case \"[object Boolean]\":\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b\n case \"[object Symbol]\":\n return (\n typeof Symbol !== \"undefined\" && Symbol.valueOf.call(a) === Symbol.valueOf.call(b)\n )\n case \"[object Map]\":\n case \"[object Set]\":\n // Maps and Sets are unwrapped to arrays of entry-pairs, adding an incidental level.\n // Hide this extra level by increasing the depth.\n if (depth >= 0) {\n depth++\n }\n break\n }\n // Unwrap any wrapped objects.\n a = unwrap(a)\n b = unwrap(b)\n\n const areArrays = className === \"[object Array]\"\n if (!areArrays) {\n if (typeof a != \"object\" || typeof b != \"object\") {\n return false\n }\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n const aCtor = a.constructor,\n bCtor = b.constructor\n if (\n aCtor !== bCtor &&\n !(\n isFunction(aCtor) &&\n aCtor instanceof aCtor &&\n isFunction(bCtor) &&\n bCtor instanceof bCtor\n ) &&\n \"constructor\" in a &&\n \"constructor\" in b\n ) {\n return false\n }\n }\n\n if (depth === 0) {\n return false\n } else if (depth < 0) {\n depth = -1\n }\n\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || []\n bStack = bStack || []\n let length = aStack.length\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) {\n return bStack[length] === b\n }\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a)\n bStack.push(b)\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length\n if (length !== b.length) {\n return false\n }\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], depth - 1, aStack, bStack)) {\n return false\n }\n }\n } else {\n // Deep compare objects.\n const keys = Object.keys(a)\n let key\n length = keys.length\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (Object.keys(b).length !== length) {\n return false\n }\n while (length--) {\n // Deep compare each member\n key = keys[length]\n if (!(hasProp(b, key) && eq(a[key], b[key], depth - 1, aStack, bStack))) {\n return false\n }\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop()\n bStack.pop()\n return true\n}\n\nfunction unwrap(a: any) {\n if (isObservableArray(a)) {\n return a.slice()\n }\n if (isES6Map(a) || isObservableMap(a)) {\n return Array.from(a.entries())\n }\n if (isES6Set(a) || isObservableSet(a)) {\n return Array.from(a.entries())\n }\n return a\n}\n","export function makeIterable<T>(iterator: Iterator<T>): IterableIterator<T> {\n iterator[Symbol.iterator] = getSelf\n return iterator as any\n}\n\nfunction getSelf() {\n return this\n}\n","/**\n * (c) Michel Weststrate 2015 - 2020\n * MIT Licensed\n *\n * Welcome to the mobx sources! To get a global overview of how MobX internally works,\n * this is a good place to start:\n * https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\n *\n * Source folders:\n * ===============\n *\n * - api/ Most of the public static methods exposed by the module can be found here.\n * - core/ Implementation of the MobX algorithm; atoms, derivations, reactions, dependency trees, optimizations. Cool stuff can be found here.\n * - types/ All the magic that is need to have observable objects, arrays and values is in this folder. Including the modifiers like `asFlat`.\n * - utils/ Utility stuff.\n *\n */\nimport { die } from \"./errors\"\nimport { getGlobal } from \"./utils/global\"\n;[\"Symbol\", \"Map\", \"Set\"].forEach(m => {\n let g = getGlobal()\n if (typeof g[m] === \"undefined\") {\n die(`MobX requires global '${m}' to be available or polyfilled`)\n }\n})\n\nimport { spy, getDebugName, $mobx } from \"./internal\"\n\nexport {\n IObservable,\n IDepTreeNode,\n Reaction,\n IReactionPublic,\n IReactionDisposer,\n untracked,\n IAtom,\n createAtom,\n spy,\n IComputedValue,\n IEqualsComparer,\n comparer,\n IEnhancer,\n IInterceptable,\n IInterceptor,\n IListenable,\n IObjectWillChange,\n IObjectDidChange,\n isObservableObject,\n IValueDidChange,\n IValueWillChange,\n IObservableValue,\n isObservableValue as isBoxedObservable,\n IObservableArray,\n IArrayWillChange,\n IArrayWillSplice,\n IArraySplice,\n IArrayUpdate,\n IArrayDidChange,\n isObservableArray,\n IKeyValueMap,\n ObservableMap,\n IMapEntries,\n IMapEntry,\n IMapWillChange,\n IMapDidChange,\n isObservableMap,\n IObservableMapInitialValues,\n ObservableSet,\n isObservableSet,\n ISetDidChange,\n ISetWillChange,\n IObservableSetInitialValues,\n transaction,\n observable,\n IObservableFactory,\n CreateObservableOptions,\n computed,\n IComputedFactory,\n isObservable,\n isObservableProp,\n isComputed,\n isComputedProp,\n extendObservable,\n observe,\n intercept,\n autorun,\n IAutorunOptions,\n reaction,\n IReactionOptions,\n when,\n IWhenOptions,\n action,\n isAction,\n runInAction,\n IActionFactory,\n keys,\n values,\n entries,\n set,\n remove,\n has,\n get,\n apiOwnKeys as ownKeys,\n apiDefineProperty as defineProperty,\n configure,\n onBecomeObserved,\n onBecomeUnobserved,\n flow,\n isFlow,\n flowResult,\n FlowCancellationError,\n isFlowCancellationError,\n toJS,\n trace,\n IObserverTree,\n IDependencyTree,\n getDependencyTree,\n getObserverTree,\n resetGlobalState as _resetGlobalState,\n getGlobalState as _getGlobalState,\n getDebugName,\n getAtom,\n getAdministration as _getAdministration,\n allowStateChanges as _allowStateChanges,\n runInAction as _allowStateChangesInsideComputed, // This has become the default behavior in Mobx 6\n Lambda,\n $mobx,\n isComputingDerivation as _isComputingDerivation,\n onReactionError,\n interceptReads as _interceptReads,\n IComputedValueOptions,\n IActionRunInfo,\n _startAction,\n _endAction,\n allowStateReadsStart as _allowStateReadsStart,\n allowStateReadsEnd as _allowStateReadsEnd,\n makeObservable,\n makeAutoObservable,\n autoAction as _autoAction,\n AnnotationsMap,\n AnnotationMapEntry,\n override\n} from \"./internal\"\n\n// Devtools support\ndeclare const __MOBX_DEVTOOLS_GLOBAL_HOOK__: { injectMobx: (any) => void }\nif (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"object\") {\n // See: https://github.com/andykog/mobx-devtools/\n __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({\n spy,\n extras: {\n getDebugName\n },\n $mobx\n })\n}\n","import {\n action,\n computed,\n makeObservable,\n observable\n} from 'mobx'\nimport moment from 'moment'\n\nclass CartListModel {\n static CART_LIST_TYPES = {\n DEFAULT: 'default',\n ORDER_EDIT: 'orderEdit',\n WISH_LIST: 'wishList',\n ORDER_APPROVAL: 'orderApproval',\n UNASSIGNED: 'unassigned',\n }\n\n constructor ({\n id,\n cartModel,\n title,\n emptyAllText,\n affectPricing = true,\n originalOrderFriendlyId = null,\n itemsCount = null,\n exportedList = null,\n skipLoading = false,\n orderApproval = null,\n sortingDate = null,\n modificationDate = null,\n }) {\n this._cartModel = cartModel\n this._itemsCount = itemsCount\n this.loading = !skipLoading\n this.id = id\n this.title = title\n this.emptyAllText = emptyAllText\n this.affectPricing = affectPricing\n this.orderApproval = orderApproval\n this.originalOrderFriendlyId = originalOrderFriendlyId || orderApproval?.originalOrderFriendlyId\n this.exportSuccess = exportedList ? {justLoaded: false, ...exportedList} : null\n this.exportError = false\n this.exportSuccessMessage = false\n this.sortingDate = sortingDate\n this.modificationDate = modificationDate\n // this flag is used to determine if the list was modified after export\n // it is to solve a time dilation issue between the client and the server\n this.isModified = false\n makeObservable(this, {\n _cartModel: observable,\n _itemsCount: observable,\n loading: observable,\n id: observable,\n title: observable,\n emptyAllText: observable,\n affectPricing: observable,\n originalOrderFriendlyId: observable,\n exportSuccess: observable,\n exportError: observable,\n exportSuccessMessage: observable,\n sortingDate: observable,\n modificationDate: observable,\n isModified: observable,\n items: computed,\n selected: computed,\n noPricing: computed,\n isOpen: computed,\n itemsCount: computed,\n isDefault: computed,\n isUnassigned: computed,\n isWishList: computed,\n isModifiedAfterExport: computed,\n isExported: computed,\n isOrderEdit: computed,\n isOrderApproval: computed,\n isEmpty: computed,\n toggleSelectAll: action,\n emptyList: action,\n reAssign: action,\n reAssignToNew: action,\n deleteList: action,\n updateListFromApi: action,\n export: action,\n clearExportError: action,\n clearExportSuccessMessage: action,\n touchSortingDate: action,\n })\n }\n\n get items () {\n return this._cartModel.items\n .filter(\n (item) => this.originalOrderFriendlyId\n ? item.originalOrderFriendlyId === this.originalOrderFriendlyId && item.listId === this.id\n : item.listId === this.id\n )\n .sort((a, b) => a.displayOrder - b.displayOrder)\n }\n\n get selected () {\n return this.items.filter(item => item.checked).map(item => item.orderItemId)\n }\n\n get noPricing () {\n return this.affectPricing && this.items.some(item => item.price.subtotal == null && item.checked && item.hasPricing)\n }\n\n get isOpen () {\n return this._cartModel.openedList?.id === this.id\n }\n\n get itemsCount () {\n if (this._cartModel.listOpening) {\n return this._itemsCount\n }\n if (this.isOpen) {\n this._itemsCount = this.items.length\n return this._itemsCount\n }\n if (this._itemsCount == null || typeof(this._itemsCount) === 'undefined') {\n this._itemsCount = this.items.length\n }\n\n return this._itemsCount\n }\n\n get isDefault () {\n return this.id === CartListModel.CART_LIST_TYPES.DEFAULT\n }\n\n get isUnassigned () {\n return this.id === CartListModel.CART_LIST_TYPES.UNASSIGNED\n }\n\n get isWishList () {\n return this.id === CartListModel.CART_LIST_TYPES.WISH_LIST\n }\n\n get isOrderEdit() {\n return this.id === CartListModel.CART_LIST_TYPES.ORDER_EDIT\n }\n\n get isOrderApproval() {\n return this.id === CartListModel.CART_LIST_TYPES.ORDER_APPROVAL\n }\n\n get isExported () {\n return !!this.exportSuccess\n }\n\n get isEmpty() {\n return this.items.length === 0\n }\n\n get isModifiedAfterExport () {\n if (!this.exportSuccess) {\n return false\n }\n if (this.isModified) {\n return true\n }\n const { ExportDate } = this.exportSuccess\n if (ExportDate && this.modificationDate) {\n return moment(this.modificationDate).isAfter(moment(ExportDate))\n }\n return !ExportDate\n }\n\n async toggleSelectAll () {\n try {\n const checked = this.items.every(item => item.checked)\n await this._cartModel._cartActionsModel.toggleSelectList(this.items.map((item) => item.orderItemId), !checked)\n this.items.forEach(item => {\n item.checked = !checked\n })\n await this._cartModel.updateCart()\n } catch (error) {\n console.error(error)\n }\n }\n\n async emptyList () {\n try {\n const orderItemIds = this.items.map(item => item.orderItemId)\n if (this.id === CartListModel.CART_LIST_TYPES.WISH_LIST\n || (this.id === CartListModel.CART_LIST_TYPES.DEFAULT && this._cartModel.affectPricingLists.length === 1)\n ) {\n await this._cartModel._cartActionsModel.emptyList(this.id, null)\n } else {\n await this._cartModel._cartActionsModel.emptyList(this.id, orderItemIds)\n }\n this._cartModel.removeItems(orderItemIds)\n this._itemsCount = 0\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssign (listId, checkedOnly = false) {\n try {\n await this._cartModel._cartActionsModel.reAssignList(this.id, listId, checkedOnly)\n const currentList = this._cartModel.lists.find(list => list.id === listId)\n currentList.touchSortingDate()\n this._itemsCount = this.items.filter((item) => !item.checked).length\n this.items\n .filter(item => checkedOnly ? item.checked : true)\n .forEach(item => item.updateListId(listId))\n const targetList = this._cartModel.lists.find(list => list.id === listId)\n if (targetList) {\n const { Items } = await this._cartModel._uStoreProvider.api.orders.getCartInfo(listId)\n targetList.updateListFromApi({ ItemsCount: Items.length })\n targetList.touchSortingDate()\n targetList.touchModificationDate()\n this._cartModel.openList(targetList.id)\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssignToNew (title, checkedOnly = false) {\n try {\n const { ID } = await this._cartModel._cartActionsModel.addList(title,\n this.items.filter(item => checkedOnly ? item.checked : true))\n const newList = this._cartModel.addList({ listId: ID, title, emptyAllText: null, itemsCount: 0, modificationDate: moment().utc().toISOString() })\n this.items\n .filter(item => checkedOnly ? item.checked : true)\n .forEach(item => item.updateListId(ID))\n newList.updateListFromApi({ ItemsCount: this._itemsCount })\n this._itemsCount = 0\n newList.loading = false\n await this._cartModel.updateCart({ listId: ID })\n this._cartModel.openList(ID)\n } catch (error) {\n console.error(error)\n }\n }\n\n async deleteList () {\n try {\n if (this.isUnassigned) {\n await this._cartModel._cartActionsModel.emptyList(this.id)\n this._cartModel.removeItems(this.items.map(item => item.orderItemId))\n } else {\n await this._cartModel._cartActionsModel.deleteList(this.id)\n this._cartModel.removeItems(this.items.map(item => item.orderItemId))\n this._cartModel.deleteList(this.id)\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async export () {\n try {\n const res = await this._cartModel._cartActionsModel.exportList(this.id)\n if (res) {\n this.exportSuccess = res\n this.exportSuccessMessage = true\n this.exportError = false\n this.isModified = false\n if (res.RedirectUrl) {\n window.location.href = res.RedirectUrl\n }\n } else {\n this.exportSuccess = null\n this.exportError = true\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n updateListFromApi (list) {\n this._itemsCount = list.ItemsCount\n }\n\n clearExportError () {\n this.exportError = false\n }\n\n clearExportSuccessMessage () {\n this.exportSuccessMessage = false\n }\n\n touchSortingDate () {\n if (!this.isUnassigned) {\n this.sortingDate = moment().utc().toISOString()\n this._cartModel.touchLists()\n }\n }\n\n touchModificationDate () {\n if (!this.isUnassigned) {\n this.isModified = true\n this.modificationDate = moment().utc().toISOString()\n this._cartModel.touchLists()\n }\n }\n}\n\nexport default CartListModel\n","import {\n computed,\n makeObservable,\n observable\n} from 'mobx'\nimport CartListModel from './CartListModel'\n\nclass CartSummaryModel {\n constructor({\n cartModel,\n }) {\n this._cartModel = cartModel\n this.loading = true\n makeObservable(this, {\n _cartModel: observable,\n loading: observable,\n totalItemsCount: computed,\n selectedItemsCount: computed,\n totalWishListItemsCount: computed,\n showTax: computed,\n hasErrors: computed,\n hasWarnings: computed,\n subtotal: computed,\n tax: computed,\n total: computed,\n presentablePrices: computed,\n exportSuccess: computed,\n })\n }\n\n get exportSuccess() {\n return this._cartModel.openedList?.exportSuccess\n }\n\n get totalItemsCount() {\n return this._cartModel.items.filter((item) => item.affectsPricing).length ?? 0\n }\n\n get selectedItemsCount() {\n if (this._cartModel.isListsMode && this._cartModel.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return this._cartModel.openedListItems?.length ?? 0\n } else if (this._cartModel.isListsMode && this._cartModel.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return this._cartModel[CartListModel.CART_LIST_TYPES.UNASSIGNED].items.filter((item) => item.affectsPricing && item.checked).length ?? 0\n } else if (this._cartModel.isSingleListMode) {\n return this._cartModel.items.length ?? 0\n }\n\n return this._cartModel.items.filter((item) => item.affectsPricing && item.checked).length ?? 0\n }\n\n get totalWishListItemsCount() {\n return this._cartModel[CartListModel.CART_LIST_TYPES.WISHLIST]?.items?.length ?? 0\n }\n\n get showTax() {\n return !this._cartModel.affectPricingLists.every((list) => list.items?.every?.(item => item.price.tax == null))\n }\n\n get hasErrors() {\n if (this._cartModel.isListsMode) {\n return this._cartModel.openedList?.items?.some(item => item.errors.length > 0 && (this._cartModel.openedList.isUnassigned ? item.checked : true))\n }\n return this._cartModel.affectPricingLists.some((list) => list.items.some(item => item.errors.length > 0 && item.checked))\n }\n\n get hasWarnings() {\n if (this._cartModel.isListsMode) {\n return this._cartModel.openedList?.items?.some(item => item.warnings.length > 0 && (this._cartModel.openedList.isUnassigned ? item.checked : true))\n }\n return !this.hasErrors && this._cartModel.affectPricingLists.some((list) => list.items.some(item => item.warnings.length > 0 && item.checked))\n }\n\n get subtotal() {\n if (this._cartModel.isListsMode && this._cartModel.openedList?.isUnassigned) {\n return this._cartModel.openedList?.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.subtotal : total, 0)\n } else if (this._cartModel.isListsMode || this._cartModel.isSingleListMode) {\n return this._cartModel.openedList?.items?.reduce((total, item) => total + item.price.subtotal, 0)\n }\n return this._cartModel.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.subtotal : total, 0)\n }\n\n get tax() {\n if (this._cartModel.isListsMode && this._cartModel.openedList?.isUnassigned) {\n return this._cartModel.openedList?.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.tax : total, 0)\n } else if (this._cartModel.isListsMode || this._cartModel.isSingleListMode) {\n return this._cartModel.openedList?.items?.reduce((total, item) => total + item.price.tax, 0)\n }\n return this._cartModel.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.tax : total, 0)\n }\n\n get total() {\n return this.subtotal + this.tax\n }\n\n get presentablePrices() {\n return {\n subtotal: this.subtotal?.toFixed(2),\n tax: this.tax?.toFixed(2),\n total: this.total?.toFixed(2),\n }\n }\n}\n\nexport default CartSummaryModel\n","import { makeObservable, observable } from 'mobx'\n\nclass CartErrorModel {\n static CART_ERROR_LEVELS = {\n WARNING: 1,\n ERROR: 2,\n }\n\n static CART_ERROR_TYPES = {\n InventoryExceeded: 1,\n InventoryOutOfStock: 2,\n InventoryDelayed: 3,\n ProductNotAvailable: 4,\n ProductComponentNotAvailable: 5,\n MaxUnitsExceeded: 6,\n MinUnitsNotReached: 7,\n ProductUnitChanged: 8,\n MaxUnitsExceededForOrder: 9,\n RecipientListModelInvalid: 10,\n DeliveryMethodInvalid: 11,\n GdprFilesDeleted: 12,\n ProductOptionsChanged: 13,\n // ---- Local errors ----\n ProductPriceChanged: 101,\n }\n\n constructor({\n errorLevel,\n message,\n errorType,\n }) {\n this.errorLevel = errorLevel\n this.message = message\n this.errorType = errorType\n makeObservable(this, {\n errorLevel: observable,\n message: observable,\n errorType: observable,\n })\n }\n}\n\nexport default CartErrorModel\n","import {\n action,\n computed,\n makeObservable,\n observable,\n} from 'mobx'\nimport { t } from '$themelocalization'\nimport CartErrorModel from './CartErrorModel'\n\nexport default class CartItemPriceModel {\n constructor({\n itemModel = null,\n isChanged = null,\n isValid = null,\n orderItemId = null,\n subtotal = null,\n tax = null,\n }) {\n this._itemModel = itemModel\n this.isChanged = isChanged\n this.isValid = isValid\n this.orderItemId = orderItemId\n this.subtotal = subtotal\n this.tax = tax\n this.errors = []\n makeObservable(this, {\n isChanged: observable,\n isValid: observable,\n orderItemId: observable,\n subtotal: observable,\n tax: observable,\n errors: observable,\n total: computed,\n updateFromApi: action,\n setIsChangedWarning: action,\n })\n\n this.setIsChangedWarning()\n }\n\n get total() {\n return this.subtotal + this.tax\n }\n\n updateFromApi(priceItem) {\n if (!priceItem) return\n this.isChanged = priceItem.IsChanged ?? null\n this.isValid = priceItem.IsValid ?? null\n this.subtotal = priceItem.Price ?? null\n this.tax = priceItem.Tax ?? null\n\n this.setIsChangedWarning()\n }\n\n setIsChangedWarning() {\n if (this.isChanged) {\n this._itemModel.warnings.push(new CartErrorModel({\n errorLevel: CartErrorModel.CART_ERROR_LEVELS.WARNING,\n message: t('Cart.WarningPriceChanged'),\n errorType: CartErrorModel.CART_ERROR_TYPES.ProductPriceChanged,\n }))\n }\n }\n}\n","import {\n action,\n computed,\n makeObservable,\n observable,\n runInAction,\n} from 'mobx'\nimport CartErrorModel from './CartErrorModel'\nimport CartItemPriceModel from './CartItemPriceModel'\nimport CartListModel from './CartListModel'\nimport moment from 'moment/moment'\n\nclass CartItemModel {\n constructor ({\n cartModel,\n listModel,\n orderItemId,\n originalOrderFriendlyId = null,\n listId,\n checked,\n quantity,\n thumbnailUrl,\n editUrl,\n nickname,\n quantityPerRecipient,\n numRecipients,\n catalogNumber,\n defaultQuantity,\n product,\n properties = [],\n displayOrder = 0,\n }) {\n this._cartModel = cartModel\n this._listModel = listModel\n this.displayOrder = displayOrder\n this.orderItemId = orderItemId\n this.originalOrderFriendlyId = originalOrderFriendlyId\n this.listId = listId\n this.checked = checked\n this.quantity = quantity\n this.thumbnailUrl = thumbnailUrl\n this.editUrl = editUrl\n this.nickname = nickname\n this.quantityPerRecipient = quantityPerRecipient\n this.numRecipients = numRecipients\n this.catalogNumber = catalogNumber\n this.defaultQuantity = defaultQuantity\n this.product = product\n this.properties = properties\n this.errors = []\n this.warnings = []\n this.price = new CartItemPriceModel({ itemModel: this })\n makeObservable(this, {\n _listModel: observable,\n orderItemId: observable,\n originalOrderFriendlyId: observable,\n listId: observable,\n checked: observable,\n quantity: observable,\n thumbnailUrl: observable,\n editUrl: observable,\n nickname: observable,\n quantityPerRecipient: observable,\n numRecipients: observable,\n catalogNumber: observable,\n defaultQuantity: observable,\n product: observable,\n properties: observable,\n price: observable,\n errors: observable,\n warnings: observable,\n addValidation: action,\n updateListId: action,\n toggleSelect: action,\n delete: action,\n moveItemToWishlist: action,\n moveItemToCart: action,\n reAssign: action,\n reAssignToNew: action,\n updateNickname: action,\n updateValidations: action,\n affectsPricing: computed,\n hasPricing: computed,\n })\n }\n\n addValidation (validation) {\n if (validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.ERROR) {\n this.errors.push(new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n }))\n }\n if (validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.WARNING) {\n this.warnings.push(new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n }))\n }\n }\n\n updateListId (listId) {\n this.listId = listId\n }\n\n async toggleSelect () {\n try {\n await this._cartModel._cartActionsModel.updateItem(this.orderItemId, {checked: !this.checked})\n\n runInAction(() => {\n this.checked = !this.checked\n })\n\n } catch (error) {\n console.error(error)\n }\n }\n\n async delete () {\n try {\n await this._cartModel._cartActionsModel.deleteItem(this.orderItemId)\n this._cartModel.removeItems([this.orderItemId])\n this._listModel.updateListFromApi({ ItemsCount: this._listModel.itemsCount - 1 })\n this._listModel.touchSortingDate()\n this._listModel.touchModificationDate()\n if (this.checked) {\n await this._cartModel.updateCart()\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async moveItemToWishlist () {\n try {\n await this._cartModel._cartActionsModel.moveItemToWishlist(this.orderItemId, this.checked)\n this._cartModel.moveItemToWishList(this)\n await this._cartModel.updateCart()\n } catch (error) {\n console.error(error)\n }\n }\n\n async moveItemToCart () {\n try {\n await this._cartModel._cartActionsModel.moveItemToCart(this.orderItemId)\n this.checked = true\n\n this._cartModel.moveItemToCart(this)\n await this._cartModel.updateCart()\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssign (listId) {\n try {\n const listIdOrNull = listId === CartListModel.CART_LIST_TYPES.UNASSIGNED ? null : listId\n await this._cartModel._cartActionsModel.reAssignItemToList(this.orderItemId, listIdOrNull)\n this.listId = listId\n this._listModel.updateListFromApi({ ItemsCount: this._listModel.itemsCount - 1 })\n this._listModel.touchSortingDate()\n this._listModel.touchModificationDate()\n const targetList = this._cartModel.lists.find(list => list.id === listId)\n if (targetList) {\n const { Items } = await this._cartModel._uStoreProvider.api.orders.getCartInfo(listIdOrNull)\n targetList._itemsCount = Items.length\n targetList.touchSortingDate()\n targetList.touchModificationDate()\n }\n this._cartModel.openList(listId)\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssignToNew (title) {\n try {\n const { ID } = await this._cartModel._cartActionsModel.reAssignItemToNewList(this.orderItemId, title)\n this.listId = ID\n this._listModel.touchModificationDate()\n this._cartModel.addList({\n listId: ID,\n title,\n itemsCount: 0,\n skipLoading: true,\n sortingDate: moment().utc().toISOString(),\n modificationDate: moment().utc().toISOString(),\n })\n this._cartModel.openList(ID)\n } catch (error) {\n console.error(error)\n }\n }\n\n edit () {\n this._cartModel._storeData.navigate(this.editUrl)\n }\n\n async updateNickname (nickname) {\n try {\n const listId = this._listModel.isUnassigned || this._listModel.isDefault || this._listModel.isWishList ? null : this._listModel.id\n await this._cartModel._cartActionsModel.updateItem(this.orderItemId, { nickname, listId} )\n this.nickname = nickname\n } catch (e) {\n console.error(e)\n }\n }\n\n updateValidations (validations) {\n this.errors =\n validations\n .filter((validation) => validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.ERROR)\n .map(validation => new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n }))\n const priceChangedWarning = this.warnings.filter(warning => warning.errorType === CartErrorModel.CART_ERROR_TYPES.ProductPriceChanged)\n const newValidations = validations\n .filter((validation) => validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.WARNING)\n .map(validation => new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n }))\n this.warnings = [...priceChangedWarning, ...newValidations]\n }\n\n get affectsPricing () {\n return this._listModel.affectPricing\n }\n\n get hasPricing () {\n return this.product.hasPricing\n }\n}\n\nexport default CartItemModel\n","class CartProductModel {\n constructor({\n productId,\n name,\n catalogNumber,\n unit,\n hasPricing = true,\n }) {\n this.productId = productId\n this.name = name\n this.catalogNumber = catalogNumber\n this.unit = unit\n this.hasPricing = hasPricing\n }\n}\n\nexport default CartProductModel\n","class CartProductUnitModel {\n constructor({\n quantity,\n singular,\n plural,\n packSingular,\n packPlural,\n }) {\n this.quantity = quantity\n this.singular = singular\n this.plural = plural\n this.packSingular = packSingular\n this.packPlural = packPlural\n }\n}\n\nexport default CartProductUnitModel\n","import { action, makeObservable, observable } from 'mobx'\nimport { UStoreProvider } from '@ustore/core'\nimport CartListModel from './CartListModel'\n\nclass CartActionsModel {\n constructor({\n cartModel,\n }) {\n this._cartModel = cartModel\n this.intervalId = null\n this.apiCallEmitted = false\n makeObservable(this, {\n _cartModel: observable,\n apiCallEmitted: observable,\n startTimer: action,\n emitApiCall: action,\n endApiCall: action,\n })\n }\n\n startTimer() {\n if (!this.intervalId) {\n this.intervalId = setInterval(() => {\n this._cartModel.loading = !!this.apiCallEmitted;\n }, 2000)\n }\n }\n\n stopTimer() {\n if (this.intervalId) {\n clearInterval(this.intervalId)\n this.intervalId = null\n }\n }\n\n emitApiCall() {\n this._cartModel.summary.loading = true\n this.apiCallEmitted = true\n this.startTimer()\n return Date.now()\n }\n\n async endApiCall(now) {\n this._cartModel.loading = false\n this._cartModel.summary.loading = false\n this._cartModel.affectPricingLists.forEach((list) => {\n list.loading = false\n })\n this.apiCallEmitted = false\n this.stopTimer()\n if (Date.now() - now < 3000) {\n await new Promise(resolve => setTimeout(() => {\n resolve()\n }, 3000 - (Date.now() - now)))\n }\n }\n\n async toggleSelectList(orderItemIds, checked) {\n try {\n this.emitApiCall()\n await Promise.all(orderItemIds.map(async orderItemId => {\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n IsChecked: checked,\n Nickname: null\n }\n )\n }))\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async updateItem(orderItemId, {checked = null, nickname = null, listId = null } ) {\n try {\n this.emitApiCall()\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n ListID: listId || undefined,\n IsChecked: checked || undefined,\n Nickname: nickname || undefined,\n }\n )\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async emptyList(listId, itemsIds = null) {\n try {\n this.emitApiCall()\n if (listId === CartListModel.CART_LIST_TYPES.WISH_LIST) {\n await this._cartModel._uStoreProvider.api.orders.clearWishlist(itemsIds)\n } else if (listId === CartListModel.CART_LIST_TYPES.DEFAULT){\n await this._cartModel._uStoreProvider.api.orders.clearCart(itemsIds)\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } else {\n if (!itemsIds || itemsIds.length === 0) {\n const { Items } = await this._cartModel._uStoreProvider.api.orders.getCartInfo(listId)\n itemsIds = Items.map(item => item.OrderItemID)\n }\n if (itemsIds.length > 0) {\n await this._cartModel._uStoreProvider.api.orders.clearCart(itemsIds, listId)\n }\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n }\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async deleteItem(orderItemId) {\n const now = this.emitApiCall()\n try {\n await this._cartModel._uStoreProvider.api.orders.deleteCartItem(orderItemId)\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } catch (error) {\n console.error(error)\n } finally {\n await this.endApiCall(now)\n }\n }\n\n async moveItemToWishlist(orderItemId, checked) {\n const now = this.emitApiCall()\n try {\n await UStoreProvider.api.orders.saveForLater(orderItemId)\n if (checked) {\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n }\n } catch (error) {\n console.error(error)\n } finally {\n await this.endApiCall(now)\n }\n }\n\n async moveItemToCart(orderItemId) {\n const now = this.emitApiCall()\n try {\n await UStoreProvider.api.orders.addToCart(orderItemId)\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } catch (error) {\n console.error(error)\n } finally {\n await this.endApiCall(now)\n }\n }\n\n async updateCart(selectedOnly = true) {\n try {\n this.emitApiCall()\n const cartItemsFromApi = await this._cartModel._uStoreProvider.api.orders.getCartInfo()\n const wishlistItemsFromApi = await this._cartModel._uStoreProvider.api.orders.getWishListInfo()\n let items = [...cartItemsFromApi.Items, ...wishlistItemsFromApi.Items]\n if (selectedOnly) {\n items = items.filter(item => item.checked)\n }\n this._cartModel.updateCartItems(items)\n this._cartModel[CartListModel.CART_LIST_TYPES.DEFAULT].updateListFromApi(cartItemsFromApi)\n this._cartModel[CartListModel.CART_LIST_TYPES.WISH_LIST].updateListFromApi(wishlistItemsFromApi)\n const cartPricing = await this._cartModel._uStoreProvider.api.orders.getCartPricingInfo(true)\n const wishlistPricing = await this._cartModel._uStoreProvider.api.orders.getWishListPricingInfo(true)\n\n let pricingItems = []\n if (selectedOnly) {\n pricingItems = [...cartPricing.Items, ...wishlistPricing.Items]\n } else {\n const cartPricingUnchecked = await this._cartModel._uStoreProvider.api.orders.getCartPricingInfo(false)\n const wishlistPricingUnchecked = await this._cartModel._uStoreProvider.api.orders.getWishListPricingInfo(false)\n pricingItems = [\n ...cartPricing.Items,\n ...wishlistPricing.Items,\n ...cartPricingUnchecked.Items,\n ...wishlistPricingUnchecked.Items\n ]\n }\n this._cartModel.updateCartPricing(pricingItems)\n\n const cartValidation = await this._cartModel._uStoreProvider.api.orders.validateCart(true)\n const wishlistValidation = await this._cartModel._uStoreProvider.api.orders.validateWishList(true)\n let validationItems = []\n if (selectedOnly) {\n validationItems = [...cartValidation, ...wishlistValidation]\n } else {\n const cartValidationUnchecked = await this._cartModel._uStoreProvider.api.orders.validateCart(false)\n const wishlistValidationUnchecked = await this._cartModel._uStoreProvider.api.orders.validateWishList(false)\n validationItems = [\n ...cartValidation,\n ...wishlistValidation,\n ...cartValidationUnchecked,\n ...wishlistValidationUnchecked\n ]\n }\n\n this._cartModel.updateCartValidation(validationItems)\n\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async reAssignList(oldListId, targetListId, checkedOnly = false) {\n try {\n this.emitApiCall()\n const orderItems = this._cartModel.lists\n .find((list) => list.id === oldListId)?.items\n ?.filter((item) => checkedOnly ? item.checked : true)\n ?.map((item) => ({\n OrderItemID: item.orderItemId,\n ListID: targetListId,\n Nickname: null,\n }))\n await this._cartModel._uStoreProvider.api.orders.updateCart({\n Items: orderItems,\n updateLists: true,\n })\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async deleteList(listId) {\n try {\n this.emitApiCall()\n await this._cartModel._uStoreProvider.api.orders.deleteList(listId)\n this._cartModel.removeItems(this._cartModel.lists.find(list => list.id === listId).items.map(item => item.orderItemId))\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async addList(title, items) {\n try {\n this.emitApiCall()\n const { ID } = await this._cartModel._uStoreProvider.api.orders.createCartList(title)\n await this._cartModel._uStoreProvider.api.orders.updateCart({\n Items: items.map((item) => ({\n OrderItemID: item.orderItemId,\n ListID: ID,\n }))\n })\n return { ID }\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async reAssignItemToList(orderItemId, targetListId) {\n try {\n this.emitApiCall()\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n ListID: targetListId,\n }\n )\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async reAssignItemToNewList(orderItemId, title) {\n try {\n this.emitApiCall()\n const { ID } = await this._cartModel._uStoreProvider.api.orders.createCartList(title)\n const selectedItem = this._cartModel.items.find(item => item.orderItemId === orderItemId)\n if (selectedItem?.listId) {\n const currentList = this._cartModel.lists.find(list => list.id === selectedItem.listId)\n currentList?.touchSortingDate()\n }\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n ListID: ID,\n }\n )\n return { ID }\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async exportList(listId) {\n try {\n this.emitApiCall()\n return await this._cartModel._uStoreProvider.api.orders.exportList(listId)\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n}\n\nexport default CartActionsModel\n","export default class CartOrderApprovalModel {\n constructor({\n originalOrderFriendlyId,\n originalOrderId\n }) {\n this.originalOrderFriendlyId = originalOrderFriendlyId;\n this.originalOrderId = originalOrderId;\n }\n}","import {\n action,\n computed,\n makeObservable,\n observable\n} from 'mobx'\nimport moment from 'moment'\nimport { t } from '$themelocalization'\nimport { UStoreProvider } from '@ustore/core'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport CartSummaryModel from './CartSummaryModel'\nimport CartItemModel from './CartItemModel'\nimport CartProductModel from './CartProductModel'\nimport CartListModel from './CartListModel'\nimport CartItemPriceModel from './CartItemPriceModel'\nimport CartErrorModel from './CartErrorModel'\nimport CartProductUnitModel from './CartProductUnitModel'\nimport CartActionsModel from './CartActionsModel'\nimport CartOrderApprovalModel from './CartOrderApprovalModel'\nimport { CART_MODE } from '../../../services/utils'\n\nclass CartModel {\n static CART_ACTIONS = {\n INIT: 'init',\n TOGGLE_SELECT_ALL: 'toggleSelectAll',\n TOGGLE_SELECT_ITEM: 'toggleSelectItem',\n EMPTY_LIST: 'emptyList',\n MOVE_ITEM_TO_WISH_LIST: 'moveItemToWishlist',\n MOVE_ITEM_TO_CART: 'moveItemToCart',\n DELETE_ITEM_FROM_CART: 'deleteItemFromCart',\n EDIT_CART_ITEM: 'editCartItem',\n CHANGE_NICKNAME: 'changeNickname',\n }\n\n static CART_MODELS = {\n CART: 'cart',\n WISH_LIST: 'wishList',\n CART_VALIDATION: 'cartValidation',\n WISH_LIST_VALIDATION: 'wishListValidation',\n PRICING: 'pricing',\n PRICING_NO_API: 'pricingNoApi',\n }\n\n constructor ({\n cartMode = CART_MODE.Aspx,\n UStoreProvider,\n storeBaseUrl,\n storeLanguageCode,\n storeApiUrl,\n navigate,\n }) {\n this._uStoreProvider = UStoreProvider\n this._cartActionsModel = new CartActionsModel({\n cartModel: this,\n })\n this._storeData = {\n navigate,\n storeBaseUrl,\n storeLanguageCode,\n storeApiUrl,\n }\n this._cartMode = cartMode\n this._openedListId = CartListModel.CART_LIST_TYPES.UNASSIGNED\n this._lists = []\n this.shoppingCartText = ''\n this.checkoutUrl = ''\n this.items = []\n this.summary = new CartSummaryModel({\n cartModel: this,\n })\n this.initiated = false\n this.loading = false\n this.errors = []\n this.listOpening = false\n\n makeObservable(this, {\n _uStoreProvider: observable,\n _openedListId: observable,\n initiated: observable,\n _lists: observable,\n shoppingCartText: observable,\n checkoutUrl: observable,\n items: observable,\n summary: observable,\n loading: observable,\n errors: observable,\n listOpening: observable,\n initialLoadItemsFromApi: action,\n loadListsItemsFromApi: action,\n loadSingleListItemsFromApi: action,\n loadCartItemsFromApi: action,\n updateListItemsFromApi: action,\n updateLists: action,\n createCartList: action,\n loadPricingFromApi: action,\n loadWishListItemsFromApi: action,\n updateCartItems: action,\n updateCartPricing: action,\n updateCartValidation: action,\n addList: action,\n addCartError: action,\n removeItems: action,\n moveItemToCart: action,\n touchLists:action,\n openList: action,\n deleteList: action,\n revertModifications: action,\n lists: computed,\n selected: computed,\n storeBaseUrl: computed,\n languageCode: computed,\n storeApiUrl: computed,\n noPricing: computed,\n hasEditOrApproval: computed,\n affectPricingItems: computed,\n isListsMode: computed,\n isWishListMode: computed,\n isSingleListMode: computed,\n openedListItems: computed,\n openedList: computed,\n listsItemsCount: computed,\n [CartListModel.CART_LIST_TYPES.DEFAULT]: computed,\n [CartListModel.CART_LIST_TYPES.WISH_LIST]: computed,\n [CartListModel.CART_LIST_TYPES.UNASSIGNED]: computed,\n })\n }\n\n async init () {\n // Load cart items count - doesn't need to wait for it\n UStoreProvider.state.store.loadCartItemsCount()\n\n if (this.isWishListMode) {\n // Load cart items\n await this.initialLoadCartModeWishList()\n\n // Load cart items pricing\n const cartPricingFromApiChecked = await this._uStoreProvider.api.orders.getCartPricingInfo(true, null)\n this.loadPricingFromApi(cartPricingFromApiChecked)\n const cartPricingFromApiUnchecked = await this._uStoreProvider.api.orders.getCartPricingInfo(false, null)\n this.loadPricingFromApi(cartPricingFromApiUnchecked)\n\n // Load cart items validation\n const cartValidationFromApiChecked = await this._uStoreProvider.api.orders.validateCart(true, null)\n this.loadValidationFromApi(cartValidationFromApiChecked)\n const cartValidationFromApiUnchecked = await this._uStoreProvider.api.orders.validateCart(false, null)\n this.loadValidationFromApi(cartValidationFromApiUnchecked)\n } else if (this.isListsMode) {\n // Load unassigned items\n await this.initialLoadCartModeLists()\n\n // Load unassigned items pricing\n const cartPricingFromApiChecked = await this._uStoreProvider.api.orders.getCartPricingInfo(null, null)\n this.loadPricingFromApi(cartPricingFromApiChecked)\n\n // Load unassigned items validation\n const cartValidationFromApiChecked = await this._uStoreProvider.api.orders.validateCart(null, null)\n this.loadValidationFromApi(cartValidationFromApiChecked)\n } else if (this.isSingleListMode) {\n // Load single list items\n await this.initialLoadCartModeSingleList()\n\n // Load single list items pricing\n const cartPricingFromApiChecked = await this._uStoreProvider.api.orders.getCartPricingInfo(null, null)\n this.loadPricingFromApi(cartPricingFromApiChecked)\n\n // Load single list items validation\n const cartValidationFromApiChecked = await this._uStoreProvider.api.orders.validateCart(null, null)\n this.loadValidationFromApi(cartValidationFromApiChecked)\n }\n\n this._lists.forEach(list => {\n list.loading = false\n })\n this.summary.loading = false\n\n // Load wishlist\n if (this.isWishListMode) {\n await this.initialLoadWishlist()\n }\n\n this.initiated = true\n }\n\n async initialLoadCartModeLists () {\n // load unassigned items\n await this.loadListsItemsFromApi()\n }\n\n async initialLoadCartModeSingleList () {\n // load single list items\n await this.loadSingleListItemsFromApi()\n }\n\n async initialLoadCartModeWishList () {\n // load cart items\n await this.loadCartItemsFromApi()\n }\n\n async initialLoadWishlist () {\n // Load wish list items\n await this.loadWishListItemsFromApi()\n\n // Load wish list validation\n const wishListValidationFromApi = await this._uStoreProvider.api.orders.validateWishList()\n this.loadValidationFromApi(wishListValidationFromApi)\n\n // Load wish list pricing\n const wishListPricingFromApi = await this._uStoreProvider.api.orders.getWishListPricingInfo()\n this.loadPricingFromApi(wishListPricingFromApi)\n }\n\n async initialLoadItemsFromApi () {\n if (this._cartMode === CART_MODE.Lists) {\n await this.initialLoadCartModeLists()\n } else if (this._cartMode === CART_MODE.WishList) {\n await this.initialLoadCartModeWishList()\n }\n }\n\n async loadListsItemsFromApi () {\n const lists = await this._uStoreProvider.api.orders.getLists()\n lists.forEach((list) => this.addList({\n listId: list.ID || CartListModel.CART_LIST_TYPES.UNASSIGNED,\n title: list.Name || t('Cart.UnassignedItemsListTitle'),\n emptyAllText: null,\n originalOrderFriendlyId: list.OriginalOrderFriendlyID,\n itemsCount: list.ItemsCount || 0,\n sortingDate: list?.SortingDate,\n modificationDate: list?.ModificationDate,\n exportedList: list.ExportDate ? {\n ExternalUrl: list.ExternalUrl,\n ExportDate: list.ExportDate\n } : null\n }))\n this.listOpening = true\n const openListId = lists.reduce((acc, list) => {\n return moment(list.SortingDate).isAfter(moment(acc.sortingDate)) ?\n {id: list.ID || CartListModel.CART_LIST_TYPES.UNASSIGNED, sortingDate: list.SortingDate} : acc\n }, {id: CartListModel.CART_LIST_TYPES.UNASSIGNED, sortingDate: moment({y: 1970, month:1, d:1})}).id\n this.openList(openListId)\n }\n\n async loadSingleListItemsFromApi () {\n const { Items } = await this._uStoreProvider.api.orders.getCartInfo()\n const list = (await this._uStoreProvider.api.orders.getLists())[0]\n this._openedListId = list.ID\n const singleList = this.addList({\n listId: list.ID,\n title: list.Name,\n emptyAllText: null,\n originalOrderFriendlyId: list.OriginalOrderFriendlyID,\n itemsCount: list.ItemsCount,\n sortingDate: list.SortingDate,\n modificationDate: list.ModificationDate,\n exportedList: list.ExportDate ? {\n ExternalUrl: list.ExternalUrl,\n ExportDate: list.ExportDate\n } : null\n })\n this.items = this.convertItemsToCartItemsObject(Items, [singleList], list.ID)\n }\n\n async loadCartItemsFromApi () {\n let { Items, Description, CheckoutUrl, OrderApproval } = await this._uStoreProvider.api.orders.getCartInfo()\n this.shoppingCartText = Description\n if (CheckoutUrl) {\n const qs = CheckoutUrl.split('?')[1]\n this.checkoutUrl = `${urlGenerator.get({ page: 'checkout-final' })}?${qs}`\n }\n const orderApproval = OrderApproval\n ? new CartOrderApprovalModel({\n originalOrderFriendlyId: OrderApproval.OriginalOrderFriendlyID,\n originalOrderId: OrderApproval.OriginalOrderID,\n })\n : null\n if (orderApproval) {\n Items = Items.map(item => ({ ...item, OriginalOrderFriendlyID: orderApproval.originalOrderFriendlyId }))\n }\n const editSections = new Set(Items.filter(item => {\n if (orderApproval?.originalOrderFriendlyId) {\n return item.OriginalOrderFriendlyID != null && item.OriginalOrderFriendlyID !== orderApproval?.originalOrderFriendlyId\n }\n return item.OriginalOrderFriendlyID != null\n }).map(item => item.OriginalOrderFriendlyID || orderApproval?.originalOrderFriendlyId))\n const cartList = this.createCartList([...editSections], orderApproval)\n this.items = this.convertItemsToCartItemsObject(Items, cartList, null)\n }\n\n async updateListItemsFromApi (listId) {\n const listIdOrNull = listId === CartListModel.CART_LIST_TYPES.UNASSIGNED ? null : listId\n const { Items } = await this._uStoreProvider.api.orders.getCartInfo(listIdOrNull)\n const selectedListItems = Items.reduce((acc, item) => ({ ...acc, [item.OrderItemID]: item }), {})\n const itemsNotInList = this.items.filter(item => !selectedListItems[item.orderItemId])\n this.items = [...itemsNotInList, ...this.convertItemsToCartItemsObject(Items, this._lists, listIdOrNull)]\n const { Items: pricingInfo } = await this._uStoreProvider.api.orders.getCartPricingInfo(null, listIdOrNull)\n this.updateCartPricing(pricingInfo, true)\n const validationInfo = await this._uStoreProvider.api.orders.validateCart(null, listIdOrNull)\n this.updateCartValidation(validationInfo)\n }\n\n async updateLists () {\n const lists = await this._uStoreProvider.api.orders.getLists()\n if (lists.length === 0) {\n this._lists = []\n return\n }\n this._lists.forEach((list) => {\n const updatedList = lists.find((updatedList) => updatedList.ID === list.id)\n if (updatedList) {\n list.updateListFromApi(updatedList)\n }\n })\n }\n\n createCartList (editSections, orderApproval) {\n const cartList = [\n this.addList({\n listId: CartListModel.CART_LIST_TYPES.DEFAULT,\n title: t('Cart.SelectAllLabel'),\n emptyAllText: t('Cart.EmptyCartButton'),\n })\n ]\n if (orderApproval) {\n cartList.push(this.addList(\n {\n listId: CartListModel.CART_LIST_TYPES.ORDER_APPROVAL,\n title: t('Cart.OrderApprovalSectionTitle', { orderNumber: orderApproval.originalOrderFriendlyId }),\n emptyAllText: t('Cart.OrderApprovalEmptyCartTitle'),\n orderApproval\n }))\n }\n if (editSections) {\n editSections.forEach(originalOrderFriendlyId => {\n cartList.push(this.addList({\n listId: CartListModel.CART_LIST_TYPES.ORDER_EDIT,\n title: t('Cart.EditOrderSectionTitle', { orderNumber: originalOrderFriendlyId }),\n emptyAllText: '',\n originalOrderFriendlyId\n }))\n })\n }\n return cartList\n }\n\n loadPricingFromApi (pricingItems) {\n pricingItems.Items.forEach(priceItem => {\n const cartItem = this.items.find(cartItem => cartItem.orderItemId === priceItem.OrderItemID)\n if (cartItem) {\n cartItem.price = new CartItemPriceModel({\n itemModel: cartItem,\n isChanged: priceItem.IsChanged,\n isValid: priceItem.IsValid,\n orderItemId: priceItem.OrderItemID,\n subtotal: priceItem.Price,\n tax: priceItem.Tax,\n })\n }\n })\n }\n\n loadValidationFromApi (validation) {\n validation.forEach(validationItem => {\n const item = this.items.find(item => item.orderItemId === validationItem.OrderItemID)\n // In case orderItemId in error response is null, the error is a cart-level error\n if (item instanceof CartItemModel) {\n item.addValidation(validationItem)\n } else if (item === undefined) {\n this.addCartError(validationItem)\n }\n })\n }\n\n convertItemToCartItemObject (item, list, displayOrder = 0) {\n return new CartItemModel({\n cartModel: this,\n listModel: list,\n displayOrder,\n orderItemId: item.OrderItemID,\n originalOrderFriendlyId: item.OriginalOrderFriendlyID,\n listId: item.ListID ?? list.id,\n checked: item.Checked,\n quantity: item.Quantity,\n thumbnailUrl: item.Thumbnail?.Url ? `${this._storeData.storeApiUrl}/${item.Thumbnail.Url}` : null,\n editUrl: urlGenerator.get({ page: 'products' }).replace('/products', item.EditUrl),\n nickname: item.Nickname,\n quantityPerRecipient: item.QuantityPerRecipient,\n numRecipients: item.NumRecipients,\n product: new CartProductModel({\n productId: item.ProductID,\n name: item.Product.Name,\n catalogNumber: item.Product.CatalogNumber,\n unit: new CartProductUnitModel({\n quantity: item.Product.Unit.ItemQuantity,\n singular: item.Product.Unit.ItemType.Name,\n plural: item.Product.Unit.ItemType.PluralName,\n packSingular: item.Product.Unit.PackType?.Name,\n packPlural: item.Product.Unit.PackType?.PluralName,\n }),\n hasPricing: item.Product.HasPricing,\n }),\n properties: item.Properties.map(property => ({\n name: property.Name,\n value: property.Value,\n }))\n })\n }\n\n convertItemsToCartItemsObject (items, lists, listId = null) {\n return items.map((item, index) => {\n // Set default list or if listId provided - will be overridden later if needed\n const defaultList = this.isWishListMode ? CartListModel.CART_LIST_TYPES.DEFAULT : CartListModel.CART_LIST_TYPES.UNASSIGNED\n let list = listId ? lists.find(list => list.id === listId) : lists.find(list => list.id === defaultList)\n if (item.OriginalOrderFriendlyID) {\n // If there is an originalOrderFriendlyId, the item is in an edit/approval section\n list = lists.find(list => list.originalOrderFriendlyId === item.OriginalOrderFriendlyID)\n }\n\n return this.convertItemToCartItemObject(item, list, index)\n })\n }\n\n convertItemsToWishlistItemsObject (items, list) {\n return items.map(item => this.convertItemToCartItemObject(item, list))\n }\n\n async loadWishListItemsFromApi () {\n const { Items } = await this._uStoreProvider.api.orders.getWishListInfo()\n const wishList = this.addList({\n listId: CartListModel.CART_LIST_TYPES.WISH_LIST,\n title: t('Cart.Wishlist.WishListTitle'),\n emptyAllText: t('Cart.EmptyCartButton'),\n affectPricing: false,\n })\n const wishListItems = this.convertItemsToWishlistItemsObject(Items, wishList)\n\n this.items.push(...wishListItems)\n }\n\n /**\n * Wishlist mode - Update cart should be called in the following events:\n * 1. Before checkout - selected only\n * 2. Selecting/unselecting items - selected only\n * 3. Moving and item to/from wish list - selected only\n * 4. Deleting an item/emptying the cart - selected only\n *\n * Lists mode - update cart should be called in the following events:\n * 1. Selecting/unselecting items - unassigned only\n * 2. Moving an item to another list/to a new list\n * 3. Deleting an item\n */\n async updateCart ({ selectedOnly, listId , updateLists } = {selectedOnly :true, listId : null, updateLists: false}) {\n try {\n if (this.isWishListMode) {\n await this._cartActionsModel.updateCart(selectedOnly)\n } else if (this.isListsMode) {\n await this.updateListItemsFromApi(listId || this.openedList?.id)\n updateLists && await this.updateLists()\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n updateCartItems (itemsFromApi) {\n this.items = this.items.map((item) => {\n const itemFromApi = itemsFromApi.find(itemFromApi => itemFromApi.OrderItemID === item.orderItemId)\n return itemFromApi ? this.convertItemToCartItemObject(itemFromApi, this[CartListModel.CART_LIST_TYPES.DEFAULT]) : item\n })\n }\n\n updateCartPricing (priceItems) {\n this.items.forEach(item => {\n const priceItem = priceItems.find(priceItem => priceItem.OrderItemID === item.orderItemId)\n priceItem && item.price.updateFromApi(priceItem)\n })\n }\n\n updateCartValidation (validations) {\n this.errors = []\n const cartValidations = validations.filter(validation => validation.OrderItemId == null)\n cartValidations.forEach(validation => this.addCartError(validation))\n\n this.items.forEach(item => {\n const itemValidations = validations.filter(validation => validation.OrderItemID === item.orderItemId)\n itemValidations && item.updateValidations(itemValidations)\n })\n }\n\n addList ({\n listId, title, emptyAllText, affectPricing = true, originalOrderFriendlyId = null, itemsCount = null,\n exportedList = null, skipLoading = false, orderApproval = null, sortingDate = null, modificationDate = null\n }) {\n const list = new CartListModel({\n cartModel: this,\n id: listId,\n title,\n emptyAllText,\n affectPricing,\n originalOrderFriendlyId,\n itemsCount,\n exportedList,\n skipLoading,\n orderApproval,\n sortingDate,\n modificationDate\n })\n const unassignedListIndex = this._lists.findIndex(list => list.id === CartListModel.CART_LIST_TYPES.UNASSIGNED)\n if (this.isListsMode && unassignedListIndex > -1) {\n this._lists.splice(unassignedListIndex + 1, 0, list)\n } else {\n this._lists.unshift(list)\n }\n return list\n }\n\n addCartError (error) {\n if (this.errors.some(err => err.errorType === error.Error.Type)) return\n this.errors.push(new CartErrorModel({\n errorLevel: error.Error.Level,\n message: error.Error.Message,\n errorType: error.Error.Type,\n }))\n }\n\n removeItems (orderItemIds) {\n this.items = this.items.filter(item => !orderItemIds.includes(item.orderItemId))\n }\n\n moveItemToCart (item) {\n const cartList = this[CartListModel.CART_LIST_TYPES.DEFAULT]\n cartList.items.forEach(cartItem => cartItem.displayOrder++)\n\n const list =\n item.originalOrderFriendlyId\n ? this._lists.find(list => list.originalOrderFriendlyId === item.originalOrderFriendlyId)\n : cartList\n item.listId = list.id\n item._listModel = list\n item.displayOrder = 0\n }\n\n moveItemToWishList (item) {\n const wishList = this[CartListModel.CART_LIST_TYPES.WISH_LIST]\n wishList.items.forEach(cartItem => cartItem.displayOrder++)\n item.updateValidations([])\n item.listId = wishList.id\n item._listModel = wishList\n item.displayOrder = 0\n }\n\n deleteList (listId) {\n this._lists = this._lists.filter(list => list.id !== listId)\n }\n\n async openList (listId) {\n try {\n this.listOpening = true\n this._openedListId = listId\n if (listId !== null) {\n await this.updateListItemsFromApi(listId)\n }\n } catch (e) {\n console.error(e)\n } finally {\n this.listOpening = false\n }\n }\n\n get lists () {\n if (!this.isListsMode) {\n return this._lists\n }\n const sorted = [...this._lists].sort((a, b) => {\n if (a.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return -1\n } else if (b.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return 1\n }\n return moment(b.sortingDate).toDate().valueOf() - moment(a.sortingDate).toDate().valueOf()\n }\n )\n\n return sorted\n }\n\n get selected () {\n return this.items.filter(item => item.checked)\n }\n\n get storeBaseUrl () {\n return this._storeData.storeBaseUrl\n }\n\n get languageCode () {\n return this._storeData.storeLanguageCode\n }\n\n get storeApiUrl () {\n return this._storeData.storeApiUrl\n }\n\n get noPricing () {\n return this.affectPricingLists.some((list) => list.noPricing)\n }\n\n get hasEditOrApproval () {\n return this._lists.some(list => list.originalOrderFriendlyId != null)\n }\n\n get affectPricingItems () {\n return this.items.filter(item => item.affectsPricing)\n }\n\n get affectPricingLists () {\n return this.lists.filter(list => list?.affectPricing)\n }\n\n get isListsMode () {\n return this._cartMode === CART_MODE.Lists || localStorage.getItem('features.CartLists') === 'true'\n }\n\n get isWishListMode () {\n return this._cartMode === CART_MODE.WishList\n }\n\n get isSingleListMode () {\n return this._cartMode === CART_MODE.SingleList\n }\n\n get openedListItems () {\n if (this._openedListId === null) return null\n return this.items.filter(item => item.listId === this._openedListId)\n }\n\n get openedList () {\n return this._lists.find(list => list.id === this._openedListId) ?? null\n }\n\n get listsItemsCount () {\n return this._lists.reduce((total, list) => total + list.itemsCount, 0)\n }\n\n get [CartListModel.CART_LIST_TYPES.DEFAULT] () {\n return this._lists.find(list => list.id === CartListModel.CART_LIST_TYPES.DEFAULT) ?? null\n }\n\n get [CartListModel.CART_LIST_TYPES.WISH_LIST] () {\n return this._lists.find(list => list.id === CartListModel.CART_LIST_TYPES.WISH_LIST) ?? null\n }\n\n get [CartListModel.CART_LIST_TYPES.UNASSIGNED] () {\n return this._lists.find(list => list.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) ?? null\n }\n\n async checkout () {\n await this.updateCart()\n if (this.summary.hasErrors) {\n return\n }\n this._storeData.navigate(this.checkoutUrl)\n }\n\n async revertModifications () {\n await this._uStoreProvider.api.orders.revertModifications()\n this.items = this.items.filter(item => item._listModel.id !== CartListModel.CART_LIST_TYPES.ORDER_APPROVAL)\n this._uStoreProvider.state.store.loadCartItemsCount()\n this._lists = this._lists.filter(list => list.id !== CartListModel.CART_LIST_TYPES.ORDER_APPROVAL)\n }\n\n async touchLists() {\n this._lists = [...this._lists]\n }\n}\n\nexport default CartModel\n","import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n if (!reactionScheduler) {\n reactionScheduler = defaultNoopBatch\n if (\"production\" !== process.env.NODE_ENV) {\n console.warn(\n \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n )\n }\n }\n configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n if (\"production\" !== process.env.NODE_ENV) {\n console.warn(\"[MobX] Deprecated\")\n }\n\n return true\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n return getDependencyTree(v)\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n return globalIsUsingStaticRendering\n}\n","export declare class FinalizationRegistryType<T> {\n constructor(finalize: (value: T) => void)\n register(target: object, value: T, token?: object): void\n unregister(token: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nexport const REGISTRY_FINALIZE_AFTER = 10_000\nexport const REGISTRY_SWEEP_INTERVAL = 10_000\n\nexport class TimerBasedFinalizationRegistry<T> implements FinalizationRegistryType<T> {\n private registrations: Map<unknown, { value: T; registeredAt: number }> = new Map()\n private sweepTimeout: ReturnType<typeof setTimeout> | undefined\n\n constructor(private readonly finalize: (value: T) => void) {}\n\n // Token is actually required with this impl\n register(target: object, value: T, token?: object) {\n this.registrations.set(token, {\n value,\n registeredAt: Date.now()\n })\n this.scheduleSweep()\n }\n\n unregister(token: unknown) {\n this.registrations.delete(token)\n }\n\n // Bound so it can be used directly as setTimeout callback.\n sweep = (maxAge = REGISTRY_FINALIZE_AFTER) => {\n // cancel timeout so we can force sweep anytime\n clearTimeout(this.sweepTimeout)\n this.sweepTimeout = undefined\n\n const now = Date.now()\n this.registrations.forEach((registration, token) => {\n if (now - registration.registeredAt >= maxAge) {\n this.finalize(registration.value)\n this.registrations.delete(token)\n }\n })\n\n if (this.registrations.size > 0) {\n this.scheduleSweep()\n }\n }\n\n // Bound so it can be exported directly as clearTimers test utility.\n finalizeAllImmediately = () => {\n this.sweep(0)\n }\n\n private scheduleSweep() {\n if (this.sweepTimeout === undefined) {\n this.sweepTimeout = setTimeout(this.sweep, REGISTRY_SWEEP_INTERVAL)\n }\n }\n}\n\nexport const UniversalFinalizationRegistry =\n typeof FinalizationRegistry !== \"undefined\"\n ? FinalizationRegistry\n : TimerBasedFinalizationRegistry\n","import { Reaction } from \"mobx\"\nimport { UniversalFinalizationRegistry } from \"./UniversalFinalizationRegistry\"\n\nexport const observerFinalizationRegistry = new UniversalFinalizationRegistry(\n (adm: { reaction: Reaction | null }) => {\n adm.reaction?.dispose()\n adm.reaction = null\n }\n)\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\"\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\"\n\n// Required by SSR when hydrating #3669\nconst getServerSnapshot = () => {}\n\n// Do not store `admRef` (even as part of a closure!) on this object,\n// otherwise it will prevent GC and therefore reaction disposal via FinalizationRegistry.\ntype ObserverAdministration = {\n reaction: Reaction | null // also serves as disposed flag\n onStoreChange: Function | null // also serves as mounted flag\n // BC: we will use local state version if global isn't available.\n // It should behave as previous implementation - tearing is still present,\n // because there is no cross component synchronization,\n // but we can use `useSyncExternalStore` API.\n stateVersion: any\n name: string\n // These don't depend on state/props, therefore we can keep them here instead of `useCallback`\n subscribe: Parameters<typeof React.useSyncExternalStore>[0]\n getSnapshot: Parameters<typeof React.useSyncExternalStore>[1]\n}\n\nfunction createReaction(adm: ObserverAdministration) {\n adm.reaction = new Reaction(`observer${adm.name}`, () => {\n adm.stateVersion = Symbol()\n // onStoreChange won't be available until the component \"mounts\".\n // If state changes in between initial render and mount,\n // `useSyncExternalStore` should handle that by checking the state version and issuing update.\n adm.onStoreChange?.()\n })\n}\n\nexport function useObserver<T>(render: () => T, baseComponentName: string = \"observed\"): T {\n if (isUsingStaticRendering()) {\n return render()\n }\n\n const admRef = React.useRef<ObserverAdministration | null>(null)\n\n if (!admRef.current) {\n // First render\n const adm: ObserverAdministration = {\n reaction: null,\n onStoreChange: null,\n stateVersion: Symbol(),\n name: baseComponentName,\n subscribe(onStoreChange: () => void) {\n // Do NOT access admRef here!\n observerFinalizationRegistry.unregister(adm)\n adm.onStoreChange = onStoreChange\n if (!adm.reaction) {\n // We've lost our reaction and therefore all subscriptions, occurs when:\n // 1. Timer based finalization registry disposed reaction before component mounted.\n // 2. React \"re-mounts\" same component without calling render in between (typically <StrictMode>).\n // We have to recreate reaction and schedule re-render to recreate subscriptions,\n // even if state did not change.\n createReaction(adm)\n // `onStoreChange` won't force update if subsequent `getSnapshot` returns same value.\n // So we make sure that is not the case\n adm.stateVersion = Symbol()\n }\n\n return () => {\n // Do NOT access admRef here!\n adm.onStoreChange = null\n adm.reaction?.dispose()\n adm.reaction = null\n }\n },\n getSnapshot() {\n // Do NOT access admRef here!\n return adm.stateVersion\n }\n }\n\n admRef.current = adm\n }\n\n const adm = admRef.current!\n\n if (!adm.reaction) {\n // First render or reaction was disposed by registry before subscribe\n createReaction(adm)\n // StrictMode/ConcurrentMode/Suspense may mean that our component is\n // rendered and abandoned multiple times, so we need to track leaked\n // Reactions.\n observerFinalizationRegistry.register(admRef, adm, adm)\n }\n\n React.useDebugValue(adm.reaction!, printDebugValue)\n\n useSyncExternalStore(\n // Both of these must be stable, otherwise it would keep resubscribing every render.\n adm.subscribe,\n adm.getSnapshot,\n getServerSnapshot\n )\n\n // render the original component, but have the\n // reaction track the observables, so that rendering\n // can be invalidated (see above) once a dependency changes\n let renderResult!: T\n let exception\n adm.reaction!.track(() => {\n try {\n renderResult = render()\n } catch (e) {\n exception = e\n }\n })\n\n if (exception) {\n throw exception // re-throw any exceptions caught during rendering\n }\n\n return renderResult\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nlet warnObserverOptionsDeprecated = true\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n ? Symbol.for(\"react.forward_ref\")\n : typeof forwardRef === \"function\" && forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n ? Symbol.for(\"react.memo\")\n : typeof memo === \"function\" && memo((props: any) => null)[\"$$typeof\"]\n\nexport interface IObserverOptions {\n readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n baseComponent: React.ForwardRefRenderFunction<TRef, P>,\n options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object, TRef = {}>(\n baseComponent: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n >\n): React.MemoExoticComponent<\n React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n baseComponent: React.FunctionComponent<P>,\n options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n C extends React.FunctionComponent<any> | React.ForwardRefRenderFunction<any>,\n Options extends IObserverOptions\n>(\n baseComponent: C,\n options?: Options\n): Options extends { forwardRef: true }\n ? C extends React.ForwardRefRenderFunction<infer TRef, infer P>\n ? C &\n React.MemoExoticComponent<\n React.ForwardRefExoticComponent<\n React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n >\n >\n : never /* forwardRef set for a non forwarding component */\n : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n baseComponent:\n | React.ForwardRefRenderFunction<TRef, P>\n | React.FunctionComponent<P>\n | React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>,\n // TODO remove in next major\n options?: IObserverOptions\n) {\n if (process.env.NODE_ENV !== \"production\" && warnObserverOptionsDeprecated && options) {\n warnObserverOptionsDeprecated = false\n console.warn(\n `[mobx-react-lite] \\`observer(fn, { forwardRef: true })\\` is deprecated, use \\`observer(React.forwardRef(fn))\\``\n )\n }\n\n if (ReactMemoSymbol && baseComponent[\"$$typeof\"] === ReactMemoSymbol) {\n throw new Error(\n `[mobx-react-lite] You are trying to use \\`observer\\` on a function component wrapped in either another \\`observer\\` or \\`React.memo\\`. The observer already applies 'React.memo' for you.`\n )\n }\n\n // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n if (isUsingStaticRendering()) {\n return baseComponent\n }\n\n let useForwardRef = options?.forwardRef ?? false\n let render = baseComponent\n\n const baseComponentName = baseComponent.displayName || baseComponent.name\n\n // If already wrapped with forwardRef, unwrap,\n // so we can patch render and apply memo\n if (ReactForwardRefSymbol && baseComponent[\"$$typeof\"] === ReactForwardRefSymbol) {\n useForwardRef = true\n render = baseComponent[\"render\"]\n if (typeof render !== \"function\") {\n throw new Error(\n `[mobx-react-lite] \\`render\\` property of ForwardRef was not a function`\n )\n }\n }\n\n let observerComponent = (props: any, ref: React.Ref<TRef>) => {\n return useObserver(() => render(props, ref), baseComponentName)\n }\n\n // Inherit original name and displayName, see #3438\n ;(observerComponent as React.FunctionComponent).displayName = baseComponent.displayName\n Object.defineProperty(observerComponent, \"name\", {\n value: baseComponent.name,\n writable: true,\n configurable: true\n })\n\n // Support legacy context: `contextTypes` must be applied before `memo`\n if ((baseComponent as any).contextTypes) {\n ;(observerComponent as React.FunctionComponent).contextTypes = (\n baseComponent as any\n ).contextTypes\n }\n\n if (useForwardRef) {\n // `forwardRef` must be applied prior `memo`\n // `forwardRef(observer(cmp))` throws:\n // \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))\"\n observerComponent = forwardRef(observerComponent)\n }\n\n // memo; we are not interested in deep updates\n // in props; we assume that if deep objects are changed,\n // this is in observables, which would have been tracked anyway\n observerComponent = memo(observerComponent)\n\n copyStaticProperties(baseComponent, observerComponent)\n\n if (\"production\" !== process.env.NODE_ENV) {\n Object.defineProperty(observerComponent, \"contextTypes\", {\n set() {\n throw new Error(\n `[mobx-react-lite] \\`${\n this.displayName || this.type?.displayName || this.type?.name || \"Component\"\n }.contextTypes\\` must be set before applying \\`observer\\`.`\n )\n }\n })\n }\n\n return observerComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n $$typeof: true,\n render: true,\n compare: true,\n type: true,\n // Don't redefine `displayName`,\n // it's defined as getter-setter pair on `memo` (see #3192).\n displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n Object.keys(base).forEach(key => {\n if (!hoistBlackList[key]) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n }\n })\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport { observerFinalizationRegistry as _observerFinalizationRegistry }\nexport const clearTimers = observerFinalizationRegistry[\"finalizeAllImmediately\"] ?? (() => {})\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n if (\"production\" !== process.env.NODE_ENV) {\n useDeprecated(\n \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n )\n }\n return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n if (\"production\" !== process.env.NODE_ENV) {\n console.warn(\n \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n )\n }\n enableStaticRendering(enable)\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport LoadingDots from '$core-components/LoadingDots'\nimport './CartSummaryPriceBlock.scss'\n\nconst CartSummaryPriceBlock = ({\n price,\n loading,\n currencyState,\n total,\n title,\n}) => {\n return (\n <div className={'cart-summary-block' + (\n total ? ' block-total' : ''\n )}>\n <div className=\"block-title\">{title}</div>\n <div className=\"block-value\">\n {loading ?\n <LoadingDots className=\"summary-price-loader\"/> : (\n <>\n {currencyState?.currencySymbol}\n {price}\n {currencyState?.showCurrencyCode && <span className=\"cart-ng-summary-currency-code\"> {currencyState?.currencyCode}</span>}\n </>\n )\n }\n </div>\n </div>\n )\n}\n\nexport default observer(CartSummaryPriceBlock)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport CartSummaryPriceBlock from './CartSummaryPriceBlock'\nimport Slot from '../../widgets/Slot'\nimport './CartSummaryContent.scss'\n\nconst SummaryTitle = observer(({ model }) => {\n const getSummaryTitle = () => {\n if (model?.isListsMode || model?.isSingleListMode) {\n if (model?.openedList?.id == null) {\n return (\n <div className=\"cart-summary-lists-subtitle\">\n {t('Cart.Summary.NoListSelected')}\n </div>\n )\n }\n return (\n <>\n <div className=\"cart-summary-lists-title\">\n {t('Cart.Summary.ListsTitle')}\n </div>\n <div className=\"cart-summary-lists-subtitle\">\n {model?.openedList?.title}\n </div>\n </>\n )\n } else if (model?.isWishListMode) {\n return t('Cart.Summary.Title')\n }\n }\n\n return (\n <div className=\"cart-summary-title\">{getSummaryTitle()}</div>\n )\n})\n\nconst CartSummaryContent = ({\n currencyState,\n model,\n loading\n}) => {\n const getSummaryTitle = () => {\n if (model?.summary?.totalItemsCount - model?.summary?.totalWishListItemsCount === 0) {\n return t('Cart.Summary.EmptyCartSummaryText')\n }\n if (model?.isWishListMode && model?.summary?.selectedItemsCount === 0) {\n return t('Cart.Summary.NoItemsSelected')\n }\n return t('Cart.Summary.Title')\n }\n\n return (\n model?.noPricing && !loading\n ? <div className=\"cart-summary-no-price\">{t('Cart.Summary.CountSelected', { count: model?.summary?.selectedItemsCount })}</div>\n : (\n <div className=\"cart-summary-content-container\">\n <SummaryTitle model={model} />\n <Slot name=\"cart_below_summary_title\" />\n {model?.isWishListMode && (model?.summary?.totalItemsCount === 0 || model?.summary?.selectedItemsCount === 0)\n ? <h4 className=\"no-items\">{getSummaryTitle()}</h4>\n : ((model?.isWishListMode && !model?.noPricing) || (model?.openedList != null && model.openedList.items.filter(item => item.checked).length > 0) ||\n (!model?.openedList?.isUnassigned && model?.openedList?.items.length > 0)) && (\n <>\n <CartSummaryPriceBlock\n price={model?.summary?.presentablePrices?.subtotal}\n loading={loading}\n currencyState={currencyState}\n title={t('Cart.Summary.Subtotal')}\n />\n {(model?.summary?.showTax ?? true) &&\n <>\n <CartSummaryPriceBlock\n price={model?.summary?.presentablePrices?.tax}\n loading={loading}\n currencyState={currencyState}\n title={t('Cart.Summary.Tax')}\n />\n <div className=\"cart-summary-block cart-summary-line\"/>\n <CartSummaryPriceBlock\n price={model?.summary?.presentablePrices?.total}\n loading={loading}\n currencyState={currencyState}\n title={`${t('Cart.Summary.Total')}${model?.summary?.showTax ? ` (${t('Cart.IncludingTax')})` : ''}`}\n total\n />\n </>\n }\n </>\n )\n }\n {model?.openedList?.items.filter(item => item.checked).length === 0 && model?.openedList?.isUnassigned && <div class=\"cart-summary-lists-no-items-selected\">{ t('Cart.Summary.NoItemsSelected')}</div>}\n </div>\n )\n )\n}\n\nexport default observer(CartSummaryContent)\n","import React from 'react'\nimport { ReactComponent as ErrorIcon } from '$assets/icons/error.svg'\nimport Icon from '$core-components/Icon'\nimport { t } from '$themelocalization'\nimport './CartTooltip.scss'\n\nconst CartTooltip = ({ type, show, onOk, onCancel, isListModel }) => show ? (\n <div className=\"cart-tooltip\">\n {type === 'error'\n ? (\n <div className=\"cart-tooltip-inner\">\n <button className=\"close\" onClick={() => onCancel()}>\n <Icon name=\"close_black.svg\" width=\"10px\" height=\"10px\"/>\n </button>\n <div className=\"cart-error-message\">\n <ErrorIcon width=\"15px\" height=\"15px\"/>\n {isListModel ? <span>{t('Cart.Summary.Warning.ExportErrorMessage')}</span> :\n <span>{t('Cart.Summary.Warning.ErrorMessage')}</span>}\n </div>\n </div>\n ) : (\n <div className=\"cart-tooltip-inner\">\n <div className=\"warn-message\">\n <span>{t('Cart.Summary.Warning.WarningMessage')}</span>\n <span> {t('Cart.Summary.Warning.ConfirmQuestion')}</span>\n </div>\n <div className=\"tooltip-btn-container\">\n <div className=\"tooltip-btn cancel-btn\" onClick={() => onCancel()}><span>{t('Cart.Summary.Warning.RejectMessage')}</span>\n </div>\n <div\n className=\"tooltip-btn continue-btn\"\n onClick={() => onOk()}>\n <span>{t('Cart.Summary.Warning.ConfirmMessage')}</span>\n </div>\n </div>\n </div>\n )\n }\n </div>\n) : null\n\nexport default CartTooltip\n","import React, { useEffect, useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport Button from '$core-components/Button'\nimport LoadingDots from '$core-components/LoadingDots'\nimport CartListModel from '../model/CartListModel'\nimport CartTooltip from './CartTooltip'\n\nconst CartSummaryButton = ({ model, loading, setShowAssignToListModal }) => {\n const [isWarningShown, setIsWarningShown] = useState(false)\n const [isErrorShown, setIsErrorShown] = useState(true)\n\n useEffect(() => {\n setIsErrorShown(model?.summary?.hasErrors)\n }, [model?.openedList, model?.summary?.hasErrors, model?.summary?.hasWarnings])\n\n const getCheckoutButtonText = () => {\n if (loading) {\n return <LoadingDots className=\"summary-checkout-loader\"/>\n }\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return t('Cart.Summary.ListsCheckoutButton', {count: model?.summary?.selectedItemsCount})\n }\n if ((model?.isListsMode || model?.isSingleListMode) && model?.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return t('Cart.Summary.ExportButton', { count: model?.summary?.selectedItemsCount })\n }\n return t('Cart.Summary.CheckoutButtonText', { count: model?.summary?.selectedItemsCount })\n }\n const disabledStatus = model?.summary?.selectedItemsCount === 0 ||\n model?.summary?.totalItemsCount === 0 ||\n model?.summary?.hasErrors ||\n (model?.isListsMode && !model?.openedList?.isUnassigned && !model?.openedList?.isModifiedAfterExport && model?.openedList?.isExported) ||\n (model?.isSingleListMode && !model?.openedList?.isModifiedAfterExport && model?.openedList?.isExported)\n\n return (\n <div className=\"summary-btn-container\">\n <Button\n className=\"button-primary checkout-btn\"\n disabled={disabledStatus}\n text={getCheckoutButtonText()}\n onClick={async () => {\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n setShowAssignToListModal(true)\n } else if ((model?.isListsMode || model?.isSingleListMode) && model?.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n if (model?.summary?.hasWarnings) {\n setIsWarningShown(true)\n return\n }\n await model.openedList.export()\n } else if (model?.isWishListMode) {\n if ((model?.summary?.selectedItemsCount === 0 || model?.summary?.hasErrors || model?.summary?.totalItemsCount === 0)) {\n return\n }\n if (model?.summary?.hasWarnings) {\n setIsWarningShown(true)\n return\n }\n if (!model?.summary?.hasErrors) {\n model.checkout()\n }\n }\n }}\n />\n <CartTooltip\n onOk={() => {\n if (model?.isListsMode && model?.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n setIsWarningShown(false)\n model.openedList.export()\n return\n }\n if (model?.summary?.hasWarnings) {\n model.checkout()\n }\n }}\n show={isWarningShown || isErrorShown}\n type={model?.summary?.hasErrors ? 'error' : 'warning'}\n onCancel={() => {\n setIsWarningShown(false)\n setIsErrorShown(false)\n }}\n isListModel= {model?.isListsMode}\n />\n </div>\n )\n}\n\nexport default observer(CartSummaryButton)\n","import React from 'react'\nimport Icon from '$core-components/Icon'\n\nexport const CartSummaryError = ({ message }) => {\n if (!message) return null\n\n return (\n <div className=\"cart-summary-payment-info\">\n <Icon name=\"info2.svg\" width=\"16px\" height=\"16px\" className=\"info-icon\"/>\n {message}\n </div>\n )\n}","function getLocaleDateString (lang) {\n const formats = {\n 'af': 'yyyy/MM/dd',\n 'af-za': 'yyyy/MM/dd',\n 'am': 'd/M/yyyy',\n 'am-et': 'd/M/yyyy',\n 'ar': 'dd/MM/yyyy',\n 'ar-ae': 'dd/MM/yyyy',\n 'ar-bh': 'dd/MM/yyyy',\n 'ar-dz': 'dd-MM-yyyy',\n 'ar-eg': 'dd/MM/yyyy',\n 'ar-iq': 'dd/MM/yyyy',\n 'ar-jo': 'dd/MM/yyyy',\n 'ar-kw': 'dd/MM/yyyy',\n 'ar-lb': 'dd/MM/yyyy',\n 'ar-ly': 'dd/MM/yyyy',\n 'ar-ma': 'dd-MM-yyyy',\n 'ar-om': 'dd/MM/yyyy',\n 'ar-qa': 'dd/MM/yyyy',\n 'ar-sa': 'dd/MM/yy',\n 'ar-sy': 'dd/MM/yyyy',\n 'ar-tn': 'dd-MM-yyyy',\n 'ar-ye': 'dd/MM/yyyy',\n 'arn': 'dd-MM-yyyy',\n 'arn-cl': 'dd-MM-yyyy',\n 'as': 'dd-MM-yyyy',\n 'as-in': 'dd-MM-yyyy',\n 'az': 'dd.MM.yyyy',\n 'az-cyrl-az': 'dd.MM.yyyy',\n 'az-latn-az': 'dd.MM.yyyy',\n 'ba': 'dd.MM.yy',\n 'ba-ru': 'dd.MM.yy',\n 'be': 'dd.MM.yyyy',\n 'be-by': 'dd.MM.yyyy',\n 'bg': 'dd.M.yyyy',\n 'bg-bg': 'dd.M.yyyy',\n 'bn': 'dd-MM-yy',\n 'bn-bd': 'dd-MM-yy',\n 'bn-in': 'dd-MM-yy',\n 'bo': 'yyyy/M/d',\n 'bo-cn': 'yyyy/M/d',\n 'br': 'dd/MM/yyyy',\n 'br-fr': 'dd/MM/yyyy',\n 'bs': 'd.M.yyyy',\n 'bs-cyrl-ba': 'd.M.yyyy',\n 'bs-latn-ba': 'd.M.yyyy',\n 'ca': 'dd/MM/yyyy',\n 'ca-es': 'dd/MM/yyyy',\n 'co': 'dd/MM/yyyy',\n 'co-fr': 'dd/MM/yyyy',\n 'cs': 'd.M.yyyy',\n 'cs-cz': 'd.M.yyyy',\n 'cy': 'dd/MM/yyyy',\n 'cy-gb': 'dd/MM/yyyy',\n 'da': 'dd-MM-yyyy',\n 'da-dk': 'dd-MM-yyyy',\n 'de': 'dd.MM.yyyy',\n 'de-at': 'dd.MM.yyyy',\n 'de-ch': 'dd.MM.yyyy',\n 'de-de': 'dd.MM.yyyy',\n 'de-li': 'dd.MM.yyyy',\n 'de-lu': 'dd.MM.yyyy',\n 'dsb': 'd. M. yyyy',\n 'dsb-de': 'd. M. yyyy',\n 'dv': 'dd/MM/yy',\n 'dv-mv': 'dd/MM/yy',\n 'el': 'd/M/yyyy',\n 'el-gr': 'd/M/yyyy',\n 'en': 'dd/MM/yyyy',\n 'en-029': 'MM/dd/yyyy',\n 'en-au': 'd/MM/yyyy',\n 'en-bz': 'dd/MM/yyyy',\n 'en-ca': 'yyyy-MM-dd',\n 'en-gb': 'dd/MM/yyyy',\n 'en-ie': 'dd/MM/yyyy',\n 'en-in': 'dd-MM-yyyy',\n 'en-jm': 'dd/MM/yyyy',\n 'en-my': 'd/M/yyyy',\n 'en-nz': 'd/MM/yyyy',\n 'en-ph': 'M/d/yyyy',\n 'en-sh': 'd/M/yyyy',\n 'en-tt': 'dd/MM/yyyy',\n 'en-us': 'M/d/yyyy',\n 'en-US': 'M/d/yyyy',\n 'en-za': 'yyyy/MM/dd',\n 'en-zw': 'M/d/yyyy',\n 'es': 'dd/MM/yyyy',\n 'es-ar': 'dd/MM/yyyy',\n 'es-bo': 'dd/MM/yyyy',\n 'es-cl': 'dd-MM-yyyy',\n 'es-co': 'dd/MM/yyyy',\n 'es-cr': 'dd/MM/yyyy',\n 'es-do': 'dd/MM/yyyy',\n 'es-ec': 'dd/MM/yyyy',\n 'es-es': 'dd/MM/yyyy',\n 'es-gt': 'dd/MM/yyyy',\n 'es-hn': 'dd/MM/yyyy',\n 'es-mx': 'dd/MM/yyyy',\n 'es-ni': 'dd/MM/yyyy',\n 'es-pa': 'MM/dd/yyyy',\n 'es-pe': 'dd/MM/yyyy',\n 'es-pr': 'dd/MM/yyyy',\n 'es-py': 'dd/MM/yyyy',\n 'es-sv': 'dd/MM/yyyy',\n 'es-us': 'M/d/yyyy',\n 'es-uy': 'dd/MM/yyyy',\n 'es-ve': 'dd/MM/yyyy',\n 'et': 'd.MM.yyyy',\n 'et-ee': 'd.MM.yyyy',\n 'eu': 'yyyy/MM/dd',\n 'eu-es': 'yyyy/MM/dd',\n 'fa': 'MM/dd/yyyy',\n 'fa-ir': 'MM/dd/yyyy',\n 'fi': 'd.M.yyyy',\n 'fi-fi': 'd.M.yyyy',\n 'fil': 'M/d/yyyy',\n 'fil-ph': 'M/d/yyyy',\n 'fo': 'dd-MM-yyyy',\n 'fo-fo': 'dd-MM-yyyy',\n 'fr': 'd/MM/yyyy',\n 'fr-be': 'd/MM/yyyy',\n 'fr-ca': 'yyyy-MM-dd',\n 'fr-ch': 'dd.MM.yyyy',\n 'fr-fr': 'dd/MM/yyyy',\n 'fr-lu': 'dd/MM/yyyy',\n 'fr-mc': 'dd/MM/yyyy',\n 'fy': 'd-M-yyyy',\n 'fy-nl': 'd-M-yyyy',\n 'ga': 'dd/MM/yyyy',\n 'ga-ie': 'dd/MM/yyyy',\n 'gd': 'dd/MM/yyyy',\n 'gd-gb': 'dd/MM/yyyy',\n 'gl': 'dd/MM/yy',\n 'gl-es': 'dd/MM/yy',\n 'gsw': 'dd/MM/yyyy',\n 'gsw-fr': 'dd/MM/yyyy',\n 'gu': 'dd-MM-yy',\n 'gu-in': 'dd-MM-yy',\n 'ha': 'd/M/yyyy',\n 'ha-latn-ng': 'd/M/yyyy',\n 'he': 'dd/MM/yyyy',\n 'he-il': 'dd/MM/yyyy',\n 'hi': 'dd-MM-yyyy',\n 'hi-in': 'dd-MM-yyyy',\n 'hr': 'd.M.yyyy.',\n 'hr-ba': 'd.M.yyyy.',\n 'hr-hr': 'd.M.yyyy',\n 'hsb': 'd. M. yyyy',\n 'hsb-de': 'd. M. yyyy',\n 'hu': 'yyyy. MM. dd.',\n 'hu-hu': 'yyyy. MM. dd.',\n 'hy': 'dd.MM.yyyy',\n 'hy-am': 'dd.MM.yyyy',\n 'id': 'dd/MM/yyyy',\n 'id-id': 'dd/MM/yyyy',\n 'ig': 'd/M/yyyy',\n 'ig-ng': 'd/M/yyyy',\n 'ii': 'yyyy/M/d',\n 'ii-cn': 'yyyy/M/d',\n 'is': 'd.M.yyyy',\n 'is-is': 'd.M.yyyy',\n 'it': 'dd.MM.yyyy',\n 'it-ch': 'dd.MM.yyyy',\n 'it-it': 'dd/MM/yyyy',\n 'iu': 'd/M/yyyy',\n 'iu-cans-ca': 'd/M/yyyy',\n 'iu-latn-ca': 'd/MM/yyyy',\n 'ja': 'yyyy/MM/dd',\n 'ja-jp': 'yyyy/MM/dd',\n 'ka': 'dd.MM.yyyy',\n 'ka-ge': 'dd.MM.yyyy',\n 'kk': 'dd.MM.yyyy',\n 'kk-kz': 'dd.MM.yyyy',\n 'kl': 'dd-MM-yyyy',\n 'kl-gl': 'dd-MM-yyyy',\n 'km': 'yyyy-MM-dd',\n 'km-kh': 'yyyy-MM-dd',\n 'kn': 'dd-MM-yy',\n 'kn-in': 'dd-MM-yy',\n 'ko': 'yyyy-MM-dd',\n 'ko-kr': 'yyyy-MM-dd',\n 'kok': 'dd-MM-yyyy',\n 'kok-in': 'dd-MM-yyyy',\n 'ky': 'dd.MM.yy',\n 'ky-kg': 'dd.MM.yy',\n 'lb': 'dd/MM/yyyy',\n 'lb-lu': 'dd/MM/yyyy',\n 'lo': 'dd/MM/yyyy',\n 'lo-la': 'dd/MM/yyyy',\n 'lt': 'yyyy.MM.dd',\n 'lt-lt': 'yyyy.MM.dd',\n 'lv': 'yyyy.MM.dd.',\n 'lv-lv': 'yyyy.MM.dd.',\n 'mi': 'dd/MM/yyyy',\n 'mi-nz': 'dd/MM/yyyy',\n 'mk': 'dd.MM.yyyy',\n 'mk-mk': 'dd.MM.yyyy',\n 'ml': 'dd-MM-yy',\n 'ml-in': 'dd-MM-yy',\n 'mn': 'yy.MM.dd',\n 'mn-mn': 'yy.MM.dd',\n 'mn-mong-cn': 'yyyy/M/d',\n 'moh': 'M/d/yyyy',\n 'moh-ca': 'M/d/yyyy',\n 'mr': 'dd-MM-yyyy',\n 'mr-in': 'dd-MM-yyyy',\n 'ms': 'dd/MM/yyyy',\n 'ms-bn': 'dd/MM/yyyy',\n 'ms-my': 'dd/MM/yyyy',\n 'mt': 'dd/MM/yyyy',\n 'mt-mt': 'dd/MM/yyyy',\n 'nb': 'dd.MM.yyyy',\n 'nb-no': 'dd.MM.yyyy',\n 'ne': 'M/d/yyyy',\n 'ne-np': 'M/d/yyyy',\n 'nl': 'dd-MM-yyyy',\n 'nl-be': 'dd-MM-yyyy',\n 'nl-nl': 'dd-MM-yyyy',\n 'nn': 'dd.MM.yyyy',\n 'nn-no': 'dd.MM.yyyy',\n 'nso': 'yyyy/MM/dd',\n 'nso-za': 'yyyy/MM/dd',\n 'oc': 'dd/MM/yyyy',\n 'oc-fr': 'dd/MM/yyyy',\n 'or': 'dd-MM-yy',\n 'or-in': 'dd-MM-yy',\n 'pa': 'dd-MM-yy',\n 'pa-in': 'dd-MM-yy',\n 'pl': 'yyyy-MM-dd',\n 'pl-pl': 'yyyy-MM-dd',\n 'prs': 'dd/MM/yy',\n 'prs-af': 'dd/MM/yy',\n 'ps': 'dd/MM/yy',\n 'ps-af': 'dd/MM/yy',\n 'pt': 'd/M/yyyy',\n 'pt-br': 'd/M/yyyy',\n 'pt-pt': 'dd-MM-yyyy',\n 'qut': 'dd/MM/yyyy',\n 'qut-gt': 'dd/MM/yyyy',\n 'quz': 'dd/MM/yyyy',\n 'quz-bo': 'dd/MM/yyyy',\n 'quz-ec': 'dd/MM/yyyy',\n 'quz-pe': 'dd/MM/yyyy',\n 'rm': 'dd/MM/yyyy',\n 'rm-ch': 'dd/MM/yyyy',\n 'ro': 'dd.MM.yyyy',\n 'ro-ro': 'dd.MM.yyyy',\n 'ru': 'dd.MM.yyyy',\n 'ru-ru': 'dd.MM.yyyy',\n 'rw': 'M/d/yyyy',\n 'rw-rw': 'M/d/yyyy',\n 'sa': 'dd-MM-yyyy',\n 'sa-in': 'dd-MM-yyyy',\n 'sah': 'MM.dd.yyyy',\n 'sah-ru': 'MM.dd.yyyy',\n 'se': 'd.M.yyyy',\n 'se-fi': 'd.M.yyyy',\n 'se-no': 'dd.MM.yyyy',\n 'se-se': 'yyyy-MM-dd',\n 'si': 'yyyy-MM-dd',\n 'si-lk': 'yyyy-MM-dd',\n 'sk': 'd. M. yyyy',\n 'sk-sk': 'd. M. yyyy',\n 'sl': 'd.M.yyyy',\n 'sl-si': 'd.M.yyyy',\n 'sma': 'dd.MM.yyyy',\n 'sma-no': 'dd.MM.yyyy',\n 'sma-se': 'yyyy-MM-dd',\n 'smj': 'dd.MM.yyyy',\n 'smj-no': 'dd.MM.yyyy',\n 'smj-se': 'yyyy-MM-dd',\n 'smn': 'd.M.yyyy',\n 'smn-fi': 'd.M.yyyy',\n 'sms': 'd.M.yyyy',\n 'sms-fi': 'd.M.yyyy',\n 'sq': 'yyyy-MM-dd',\n 'sq-al': 'yyyy-MM-dd',\n 'sr': 'd.M.yyyy',\n 'sr-cyrl-ba': 'd.M.yyyy',\n 'sr-cyrl-cs': 'd.M.yyyy',\n 'sr-cyrl-me': 'd.M.yyyy',\n 'sr-cyrl-rs': 'd.M.yyyy',\n 'sr-latn-ba': 'd.M.yyyy',\n 'sr-latn-cs': 'd.M.yyyy',\n 'sr-latn-me': 'd.M.yyyy',\n 'sr-latn-rs': 'd.M.yyyy',\n 'sv': 'yyyy-MM-dd',\n 'sv-fi': 'd.M.yyyy',\n 'sv-se': 'yyyy-MM-dd',\n 'sw': 'M/d/yyyy',\n 'sw-ke': 'M/d/yyyy',\n 'syr': 'dd/MM/yyyy',\n 'syr-sy': 'dd/MM/yyyy',\n 'ta': 'dd-MM-yyyy',\n 'ta-in': 'dd-MM-yyyy',\n 'te': 'dd-MM-yy',\n 'te-in': 'dd-MM-yy',\n 'tg': 'dd.MM.yy',\n 'tg-cyrl-tj': 'dd.MM.yy',\n 'th': 'd/M/yyyy',\n 'th-th': 'd/M/yyyy',\n 'tk': 'dd.MM.yy',\n 'tk-tm': 'dd.MM.yy',\n 'tn': 'yyyy/MM/dd',\n 'tn-za': 'yyyy/MM/dd',\n 'tr': 'dd.MM.yyyy',\n 'tr-tr': 'dd.MM.yyyy',\n 'tt': 'dd.MM.yyyy',\n 'tt-ru': 'dd.MM.yyyy',\n 'tzm': 'dd-MM-yyyy',\n 'tzm-lLatn-dz': 'dd-MM-yyyy',\n 'ug': 'yyyy-M-d',\n 'ug-cn': 'yyyy-M-d',\n 'uk': 'dd.MM.yyyy',\n 'uk-ua': 'dd.MM.yyyy',\n 'ur': 'dd/MM/yyyy',\n 'ur-pk': 'dd/MM/yyyy',\n 'uz': 'dd.MM.yyyy',\n 'uz-cyrl-uz': 'dd.MM.yyyy',\n 'uz-latn-uz': 'dd/MM yyyy',\n 'vi': 'dd/MM/yyyy',\n 'vi-vn': 'dd/MM/yyyy',\n 'wo': 'dd/MM/yyyy',\n 'wo-sn': 'dd/MM/yyyy',\n 'xh': 'yyyy/MM/dd',\n 'xh-za': 'yyyy/MM/dd',\n 'yo': 'd/M/yyyy',\n 'yo-ng': 'd/M/yyyy',\n 'zh': 'yyyy/M/d',\n 'zh-cn': 'yyyy/M/d',\n 'zh-cht': 'yyyy/M/d',\n 'zh-hk': 'd/M/yyyy',\n 'zh-mo': 'd/M/yyyy',\n 'zh-sg': 'd/M/yyyy',\n 'zh-tw': 'yyyy/M/d',\n 'zu': 'yyyy/MM/dd',\n 'zu-za': 'yyyy/MM/dd'\n }\n\n return lang ? formats[lang.toLowerCase()].toUpperCase() : 'DD/MM/YYYY'\n}\n\nconst getLocaleTimeString = (lang) => {\n const timeFormat = {\n 'af': 'HH:mm',\n 'ar-dz': 'HH:mm',\n 'ar-kw': 'HH:mm',\n 'ar-ly': 'HH:mm',\n 'ar-ma': 'HH:mm',\n 'ar-sa': 'HH:mm',\n 'ar-tn': 'HH:mm',\n 'ar': 'HH:mm',\n 'az': 'HH:mm',\n 'be': 'HH:mm',\n 'bg': 'H:mm',\n 'bm': 'HH:mm',\n 'bn-bd': 'A h:mm',\n 'bn': 'A h:mm',\n 'bo': 'A h:mm',\n 'br': 'HH:mm',\n 'bs': 'H:mm',\n 'ca': 'H:mm',\n 'cs': 'H:mm',\n 'cv': 'HH:mm',\n 'cy': 'HH:mm',\n 'da': 'HH:mm',\n 'de-at': 'HH:mm',\n 'de-ch': 'HH:mm',\n 'de': 'HH:mm',\n 'dv': 'HH:mm',\n 'el': 'h:mm A',\n 'en': 'h:mm A',\n 'en-us': 'h:mm A',\n 'en-au': 'h:mm A',\n 'en-ca': 'h:mm A',\n 'en-gb': 'HH:mm',\n 'en-ie': 'HH:mm',\n 'en-il': 'HH:mm',\n 'en-in': 'h:mm A',\n 'en-nz': 'h:mm A',\n 'en-sg': 'HH:mm',\n 'eo': 'HH:mm',\n 'es-do': 'h:mm A',\n 'es-mx': 'H:mm',\n 'es-us': 'h:mm A',\n 'es': 'H:mm',\n 'et': 'H:mm',\n 'eu': 'HH:mm',\n 'fa': 'HH:mm',\n 'fi': 'HH.mm',\n 'fil': 'h:mm A',\n 'fo': 'HH:mm',\n 'fr-ca': 'HH:mm',\n 'fr-ch': 'HH:mm',\n 'fr': 'HH:mm',\n 'fy': 'HH:mm',\n 'ga': 'HH:mm',\n 'gd': 'HH:mm',\n 'gl': 'H:mm',\n 'gom-deva': 'A h:mm',\n 'gom-latn': 'A h:mm',\n 'gu': 'A h:mm',\n 'he': 'HH:mm',\n 'hi': 'A h:mm',\n 'hr': 'H:mm',\n 'hu': 'H:mm',\n 'hy-am': 'HH:mm',\n 'id': 'HH.mm',\n 'is': 'H:mm',\n 'it-ch': 'HH:mm',\n 'it': 'HH:mm',\n 'ja': 'HH:mm',\n 'jv': 'HH.mm',\n 'ka': 'HH:mm',\n 'kk': 'HH:mm',\n 'km': 'HH:mm',\n 'kn': 'A h:mm',\n 'ko': 'A h:mm',\n 'ku': 'HH:mm',\n 'ky': 'HH:mm',\n 'lb': 'H:mm',\n 'lo': 'HH:mm',\n 'lt': 'HH:mm',\n 'lv': 'HH:mm',\n 'me': 'H:mm',\n 'mi': 'HH:mm',\n 'mk': 'H:mm',\n 'ml': 'A h:mm',\n 'mn': 'HH:mm',\n 'mr': 'A h:mm',\n 'ms-my': 'HH.mm',\n 'ms': 'HH.mm',\n 'mt': 'HH:mm',\n 'my': 'HH:mm',\n 'nb': 'HH:mm',\n 'ne': 'h:mm',\n 'nl-be': 'HH:mm',\n 'nl': 'HH:mm',\n 'nn': 'HH:mm',\n 'oc-lnc': 'H:mm',\n 'pa-in': 'A h:mm',\n 'pl': 'HH:mm',\n 'pt-br': 'HH:mm',\n 'pt': 'HH:mm',\n 'ro': 'H:mm',\n 'ru': 'H:mm',\n 'sd': 'HH:mm',\n 'se': 'HH:mm',\n 'si': 'a h:mm',\n 'sk': 'H:mm',\n 'sl': 'H:mm',\n 'sq': 'HH:mm',\n 'sr-cyrl': 'H:mm',\n 'sr': 'H:mm',\n 'ss': 'h:mm A',\n 'sv': 'HH:mm',\n 'sw': 'hh:mm A',\n 'ta': 'HH:mm',\n 'te': 'A h:mm',\n 'tet': 'HH:mm',\n 'tg': 'HH:mm',\n 'th': 'H:mm',\n 'tk': 'HH:mm',\n 'tl-ph': 'HH:mm',\n 'tlh': 'HH:mm',\n 'tr': 'HH:mm',\n 'tzl': 'HH.mm',\n 'tzm-latn': 'HH:mm',\n 'tzm': 'HH:mm',\n 'ug-cn': 'HH:mm',\n 'uk': 'HH:mm',\n 'ur': 'HH:mm',\n 'uz-latn': 'HH:mm',\n 'uz': 'HH:mm',\n 'vi': 'HH:mm',\n 'x-pseudo': 'HH:mm',\n 'yo': 'h:mm A',\n 'zh-cn': 'HH:mm',\n 'zh-hk': 'HH:mm',\n 'zh-mo': 'HH:mm',\n 'zh-tw': 'HH:mm',\n }\n\n return timeFormat[lang.toLowerCase()] || 'HH:mm'\n}\n\n\nexport { getLocaleDateString, getLocaleTimeString }\n","import React, { useEffect } from 'react'\nimport moment from 'moment'\nimport { observer } from 'mobx-react-lite'\nimport Icon from '$core-components/Icon'\nimport { t } from '$themelocalization'\nimport {getLocaleDateString, getLocaleTimeString} from '$ustoreinternal/services/locale'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport './CartSummaryExportSuccess.scss'\n\n\nconst formatDate = (dateStr) => {\n const locale = themeContext.get('languageCode')\n return dateStr ? moment(dateStr).format(`${getLocaleDateString(locale)} ${getLocaleTimeString(locale)}`): null\n}\n\nconst CartSummaryExportSuccess = observer(({list}) => {\n const exportSuccess = list?.exportSuccess\n const exportDate = formatDate(exportSuccess?.ExportDate)\n const modifiedDate = formatDate(list.modificationDate)\n\n useEffect(() => {\n setTimeout(() => {\n list?.clearExportSuccessMessage()\n }, 3000)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [list?.exportSuccessMessage])\n\n return (\n <>\n <div className=\"cart-summary-success-export-info\">\n {list.isModifiedAfterExport && <div className=\"cart-summary-success-export-modified-warn\">\n {t('Cart.Summary.ModificationWarning', {date: modifiedDate})}</div>}\n {exportDate && <div>{t('Cart.Summary.ExportedOn', {date: exportDate})}</div>}\n <a href={exportSuccess?.ExternalUrl} target=\"_blank\" rel=\"noopener noreferrer\">{t('Cart.ListBar.ViewExported')}</a>\n </div>\n {list?.exportSuccessMessage && <div className=\"cart-summary-success-export\">\n {t('Cart.Summary.SuccessExport')}\n <Icon name=\"checkmark_green.svg\" width=\"16px\" height=\"16px\" className=\"success-icon\"/>\n </div>}\n </>\n )\n})\n\nexport default CartSummaryExportSuccess\n","import React, {useEffect} from 'react'\nimport Icon from '$core-components/Icon'\nimport './CartSummaryExportError.scss'\n\n\nconst CartSummaryExportError = ({model, message }) => {\n useEffect(() => {\n setTimeout(() => {\n model?.openedList?.clearExportError()\n }, 5000)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n\n return (\n <div className=\"cart-summary-export-error\">\n <Icon name=\"warning.svg\" width=\"12px\" height=\"12px\"/>{message}\n </div>\n )\n}\n\nexport default CartSummaryExportError\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"type\", \"bsSize\", \"valid\", \"invalid\", \"tag\", \"addon\", \"plaintext\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint react/prefer-stateless-function: 0 */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, warnOnce, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n type: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n bsSize: PropTypes.string,\n valid: PropTypes.bool,\n invalid: PropTypes.bool,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n plaintext: PropTypes.bool,\n addon: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar Input = /*#__PURE__*/function (_React$Component) {\n _inherits(Input, _React$Component);\n var _super = _createSuper(Input);\n function Input(props) {\n var _this;\n _classCallCheck(this, Input);\n _this = _super.call(this, props);\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.focus = _this.focus.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(Input, [{\n key: \"getRef\",\n value: function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n }, {\n key: \"focus\",\n value: function focus() {\n if (this.ref) {\n this.ref.focus();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n _this$props$type = _this$props.type,\n type = _this$props$type === void 0 ? 'text' : _this$props$type,\n bsSize = _this$props.bsSize,\n valid = _this$props.valid,\n invalid = _this$props.invalid,\n tag = _this$props.tag,\n addon = _this$props.addon,\n plaintext = _this$props.plaintext,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutProperties(_this$props, _excluded);\n var checkInput = ['switch', 'radio', 'checkbox'].indexOf(type) > -1;\n var isNotaNumber = /\\D/g;\n var textareaInput = type === 'textarea';\n var selectInput = type === 'select';\n var rangeInput = type === 'range';\n var Tag = tag || (selectInput || textareaInput ? type : 'input');\n var formControlClass = 'form-control';\n if (plaintext) {\n formControlClass = \"\".concat(formControlClass, \"-plaintext\");\n Tag = tag || 'input';\n } else if (rangeInput) {\n formControlClass = 'form-range';\n } else if (selectInput) {\n formControlClass = 'form-select';\n } else if (checkInput) {\n if (addon) {\n formControlClass = null;\n } else {\n formControlClass = 'form-check-input';\n }\n }\n if (attributes.size && isNotaNumber.test(attributes.size)) {\n warnOnce('Please use the prop \"bsSize\" instead of the \"size\" to bootstrap\\'s input sizing.');\n bsSize = attributes.size;\n delete attributes.size;\n }\n var classes = mapToCssModules(classNames(className, invalid && 'is-invalid', valid && 'is-valid', bsSize ? selectInput ? \"form-select-\".concat(bsSize) : \"form-control-\".concat(bsSize) : false, formControlClass), cssModule);\n if (Tag === 'input' || tag && typeof tag === 'function') {\n attributes.type = type === 'switch' ? 'checkbox' : type;\n }\n if (attributes.children && !(plaintext || type === 'select' || typeof Tag !== 'string' || Tag === 'select')) {\n warnOnce(\"Input with a type of \\\"\".concat(type, \"\\\" cannot have children. Please use \\\"value\\\"/\\\"defaultValue\\\" instead.\"));\n delete attributes.children;\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes,\n \"aria-invalid\": invalid\n }));\n }\n }]);\n return Input;\n}(React.Component);\nInput.propTypes = propTypes;\nexport default Input;","import React, { useState } from 'react'\nimport {\n Dropdown,\n DropdownToggle,\n DropdownMenu,\n DropdownItem,\n Input,\n} from 'reactstrap'\nimport { t } from '$themelocalization'\nimport Icon from '$core-components/Icon'\nimport './DropDown.scss'\n\nconst SearchMenuItem = ({ onChange, placeholder }) => {\n const [searchValue, setSearchValue] = useState('')\n\n const onChangeHandler = (value) => {\n setSearchValue(value)\n onChange(value)\n }\n\n const onClearSearchHandler = () => {\n setSearchValue('')\n onChange('')\n }\n\n return <div className=\"drop-down-search-input-item\">\n <Input type=\"text\" value={searchValue} className=\"drop-down-search-input\" onChange={(e) => onChangeHandler(e.target.value)} placeholder={placeholder}/>\n <div className=\"drop-down-search-icon-container\">\n {searchValue ? <Icon name=\"close_black.svg\" wrapperClassName=\"drop-down-search-icon\" width=\"14px\" height=\"14px\" onClick={onClearSearchHandler}/> :\n <Icon name=\"search.svg\" wrapperClassName=\"drop-down-search-icon\" width=\"20px\" height=\"20px\"/>}\n </div>\n </div>\n}\n\nconst DropDown = ({ direction, items, selectedValue, onChange, searchable, dropDownToggle, searchPlaceholder, disabled, ...args }) => {\n const [dropdownOpen, setDropdownOpen] = useState(false)\n const toggle = () => setDropdownOpen((prevState) => !prevState)\n const [searchValue, setSearchValue] = useState('')\n\n const filteredItems = items.filter(item => searchValue === '' || item.name.toLowerCase().indexOf(searchValue) > -1)\n\n const Item = ({ item }) => {\n if (item.component) {\n return React.createElement(item.component)\n }\n return <div className=\"drop-down-item-container\">\n {item.icon && <Icon name={item.icon} className=\"drop-down-item-icon\" width={item.width ?? '20px'} height={item.height ?? '20px'}/>}\n {item.name}\n </div>\n }\n\n return (\n\n <Dropdown isOpen={dropdownOpen} toggle={toggle} direction={direction} className=\"drop-down\">\n {dropDownToggle ?\n (<DropdownToggle className=\"drop-down-toggle-overrides\" disabled={disabled}>{dropDownToggle}</DropdownToggle>) :\n (<DropdownToggle disabled={disabled} caret>{selectedValue?.name ? selectedValue.name : <span> </span>}</DropdownToggle>)\n }\n <DropdownMenu {...args} >\n {searchable && <SearchMenuItem onChange={setSearchValue} placeholder={searchPlaceholder}/> }\n {filteredItems.map((item, index) => {\n if (item.divider) {\n return <DropdownItem key={index} divider />\n }\n return <DropdownItem key={index}\n onKeyDown={() => onChange(item)}\n onClick={() => onChange(item)}\n active={selectedValue?.value === item.value}\n >\n <Item item={item}/>\n </DropdownItem>\n })}\n {filteredItems.length === 0 && <DropdownItem disabled>{t('DropDown.NoResultsFound')}</DropdownItem>}\n </DropdownMenu>\n </Dropdown>\n\n )\n}\n\nexport default DropDown\n","import React, { useEffect, useState } from 'react'\nimport { Input, Modal, ModalBody } from 'reactstrap'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport Icon from '$core-components/Icon'\nimport Button from '$core-components/Button'\nimport DropDown from '$core-components/DropDown'\n\nimport './AssignToListModal.scss'\n\nexport const ASSIGN_LIST_TYPE = {\n EXISTING: 'existing',\n NEW: 'new'\n}\n\nconst AssignToListModal = ({ onClose, onSave, model, list, count }) => {\n const [selectedListType, setSelectedListType] = useState(ASSIGN_LIST_TYPE.EXISTING)\n const [newValue, setNewValue] = useState('');\n const [selectedList, setSelectedList] = useState(null);\n\n useEffect(() => {\n if (model.lists.length === 1 && list.isUnassigned) {\n setSelectedListType(ASSIGN_LIST_TYPE.NEW)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model])\n\n useEffect(() => {\n if (model.lists.length > 0) {\n const firstValue = model.lists.filter((l) => l.id !== list.id && !l.isUnassigned)[0]\n if (firstValue) {\n setSelectedList({ name: firstValue.title, value: firstValue.id })\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const noCustomLists = model.lists.length === 1 && (!model.openedList || model.openedList?.isUnassigned)\n const moreThan100Error = model.lists.length > 100\n const sameNameError = model.lists.some((l) => l.title.trim().toLowerCase() === newValue.trim().toLowerCase())\n const assignToButtonDisabled = (!newValue && selectedListType === ASSIGN_LIST_TYPE.NEW) ||\n (!selectedList && selectedListType === ASSIGN_LIST_TYPE.EXISTING) ||\n sameNameError\n const onTypeChange = (e) => {\n setSelectedListType(e.target.value)\n setNewValue('')\n }\n\n return (\n <Modal isOpen={true} modalClassName=\"assign-to-list-dialog\">\n <div className=\"close-modal\">\n <p className=\"title\">{t('Cart.Dialog.AssignToList.Title',{count})}</p>\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n {noCustomLists\n ? <>\n <p className=\"label\">{t('Cart.Dialog.AssignToList.Label')}</p>\n <Input type=\"text\" value={newValue} onChange={(e) => setNewValue(e.target.value)}/>\n </>\n : <div className=\"radio-group\">\n <div className=\"assign-to-list-dialog-existing-list\">\n <label className=\"radio-button\">\n <input\n type=\"radio\"\n name=\"assign-to-list\"\n value={ASSIGN_LIST_TYPE.EXISTING}\n onChange={onTypeChange}\n checked={selectedListType === ASSIGN_LIST_TYPE.EXISTING}\n />\n {t('Cart.Dialog.AssignToList.ExistingList')}\n <span className='radio-checkmark' />\n </label>\n <DropDown\n items={\n model.lists\n .filter((l) => l.id !== list.id)\n .map((l) => ({ name: l.title, value: l.id }))\n }\n selectedValue={selectedList}\n onChange={setSelectedList}\n disabled={selectedListType !== ASSIGN_LIST_TYPE.EXISTING}\n searchable\n className=\"assign-to-list-dialog-existing-list-dropdown\"\n searchPlaceholder={t('Cart.Dialog.AssignToList.SearchPlaceholder')}\n />\n </div>\n <div className=\"assign-to-list-dialog-existing-new\">\n <label className=\"radio-button\">\n <input\n type=\"radio\"\n name=\"assign-to-list\"\n value={ASSIGN_LIST_TYPE.NEW}\n onChange={onTypeChange}\n checked={selectedListType === ASSIGN_LIST_TYPE.NEW}\n disabled={moreThan100Error}\n />\n {t('Cart.Dialog.AssignToList.NewList')}\n <span className='radio-checkmark' />\n </label>\n <Input\n type=\"text\"\n value={newValue}\n onChange={(e) => setNewValue(e.target.value)}\n disabled={selectedListType !== ASSIGN_LIST_TYPE.NEW}\n className={sameNameError || moreThan100Error ? 'assign-to-list-dialog-new-input-error' : ''}\n />\n {sameNameError && <div className=\"assign-to-list-dialog-new-error\">{t('Cart.Dialog.AssignToList.NameExistsError')}</div>}\n {moreThan100Error && <div className=\"assign-to-list-dialog-new-error\">{t('Cart.Dialog.AssignToList.NotMoreThan100Error')}</div>}\n </div>\n </div>\n }\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.AssignToList.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n <Button\n disabled={assignToButtonDisabled}\n text={t('Cart.Dialog.AssignToList.Assign')}\n className=\"button button-primary\"\n onClick={() => {\n onSave({listType: selectedListType, value: selectedListType === ASSIGN_LIST_TYPE.NEW ? newValue : selectedList.value})\n }}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default observer(AssignToListModal)\n","import React, { useEffect, useRef, useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport CartSummaryContent from './CartSummaryContent'\nimport CartSummaryButton from './CartSummaryButton'\nimport { CartSummaryError } from './CartSummaryError'\nimport CartSummaryExportSuccess from './CartSummaryExportSuccess'\nimport CartSummaryExportError from './CartSummaryExportError'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from '../CartList/AssignToListModal'\nimport Slot from '../../widgets/Slot'\nimport './index.scss'\nimport CartListModel from '../model/CartListModel'\n\n\n\nconst CartSummary = ({\n currencyState,\n model,\n loading,\n withSticky = false\n}) => {\n const summaryRef = useRef(null)\n const footerObserver = useRef(null)\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n\n const observeCallback = (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n summaryRef.current.style.position = 'relative'\n summaryRef.current.style.marginTop = document.querySelector('.header').getBoundingClientRect().height + 'px'\n } else {\n summaryRef.current.style.position = 'fixed'\n summaryRef.current.style.marginTop = ''\n }\n })\n }\n\n useEffect(() => {\n if (withSticky) {\n const footerElement = document.querySelector('.footer')\n footerObserver.current = new IntersectionObserver(observeCallback, {\n root: null,\n rootMargin: '0px',\n threshold: 0.3,\n })\n if (footerElement) {\n footerObserver.current?.observe(document.querySelector('.footer'))\n }\n }\n return () => {\n if (withSticky) {\n footerObserver.current?.disconnect()\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n\n const handleAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await model.openedList.reAssign(value.value, true)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await model.openedList.reAssignToNew(value.value, true)\n }\n }\n\n const isExportErrorClass = model?.openedList?.exportError ? 'cart-summary-button-export-error' : ''\n\n const assignToItemCount = () => {\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return model?.summary?.selectedItemsCount\n }\n return 0\n }\n\n return (\n <div className={`cart-summary ${isExportErrorClass}`} ref={summaryRef}>\n <CartSummaryContent\n currencyState={currencyState}\n model={model}\n loading={loading}\n />\n <Slot name=\"cart_above_checkout_button\"/>\n {model?.isListsMode && model?.openedList == null ? null : (\n <CartSummaryButton model={model} loading={loading} setShowAssignToListModal={setShowAssignToListModal}/>\n )}\n <Slot name=\"cart_below_checkout_button\"/>\n {model?.openedList?.exportSuccess\n && <CartSummaryExportSuccess list={model?.openedList}/>}\n {model?.openedList?.exportError &&\n <CartSummaryExportError model={model} message={t('Cart.Summary.ExportError')}/>}\n {currencyState.isSecondaryCurrency && <CartSummaryError message={t('Cart.Summary.Warning.PaymentInfo')}/>}\n {model?.isWishListMode && model?.errors.filter(error => error.errorType === 15).map((error) => {\n return <CartSummaryError key={error} message={error.message}/>\n })}\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={handleAssignToListSave}\n model={model}\n list={model?.openedList}\n count={assignToItemCount()}\n />\n }\n </div>\n )\n}\n\nexport default observer(CartSummary)\n","import React, { useState } from 'react'\nimport LoadingDots from '$core-components/LoadingDots'\nimport Icon from '$core-components/Icon'\nimport CartSummaryContent from './CartSummaryContent'\nimport CartSummaryButton from './CartSummaryButton'\nimport './CartSummaryStickyBlock.scss'\n\nconst CartSummaryStickyBlock = ({\n price,\n showCurrencyCode,\n currencyCode,\n currencySymbol,\n show,\n model,\n onAction,\n loading\n}) => {\n const [showAll, setShowAll] = useState(false)\n\n const toggleArrow = () => {\n setShowAll(!showAll)\n }\n\n return (\n <>\n <div className={`sticky-cart-summary${show ? '' : ' hide'}`}>\n <div className=\"cart-summary-sticky-block\">\n <div className={\"sticky-summary-more-part\" + (showAll ? \" open\" : \"\")}>\n {showAll &&\n <button className=\"close\" onClick={() => toggleArrow()}>\n <Icon name=\"close_black.svg\" width=\"10px\" height=\"10px\"/>\n </button>\n }\n <CartSummaryContent\n showCurrencyCode={showCurrencyCode}\n currencyCode={currencyCode}\n currencySymbol={currencySymbol}\n model={model}\n loading={loading}\n />\n <div className=\"bottom-line\"/>\n </div>\n <div className=\"sticky-summary-less-part\">\n <div className=\"sticky-total-price\">\n {loading ?\n <LoadingDots className=\"summary-price-loader sticky-price-loader\"/> : (\n <>\n {price}\n {showCurrencyCode && <span className=\"cart-ng-summary-currency-code\"> {currencyCode}</span>}\n <span onClick={toggleArrow}>\n <Icon name={showAll ? 'cart_view_more.svg' : 'cart_view_less.svg'} width=\"13px\" height=\"13px\"/>\n </span>\n </>\n )\n }\n </div>\n <CartSummaryButton loading={loading} model={model} onAction={onAction}/>\n </div>\n </div>\n </div>\n {showAll && <div className=\"sticky-output-layout\" onClick={toggleArrow}/>}\n </>\n\n )\n}\n\nexport default CartSummaryStickyBlock\n","import React, {\n useEffect,\n useRef,\n useState\n} from 'react'\nimport { observer } from 'mobx-react-lite'\nimport CartSummary from './index'\nimport CartSummaryStickyBlock from './CartSummaryStickyBlock'\nimport { useSticky } from '../../products/static/useSticky'\nimport './CartSummaryContainer.scss'\n\nconst CartSummaryContainer = ({\n currencyState,\n model,\n loading,\n withSticky = false\n}) => {\n const [showSticky, setShowSticky] = useState(false)\n const refContainer = useRef(null)\n const { showStickyPrice, stickyConnect, stickyDisconnect} = useSticky(refContainer)\n\n useEffect(() => {\n stickyConnect()\n\n return () => {\n stickyDisconnect()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setShowSticky(showStickyPrice)\n }, [showStickyPrice])\n\n return (\n <div className={`cart-summary-main-container ${model?.isListsMode ? 'cart-summary-lists-mode' : ''}`} ref={refContainer}>\n <div ref={refContainer}>\n <CartSummary\n model={model}\n loading={loading}\n currencyState={currencyState}\n withSticky={withSticky}\n />\n </div>\n <CartSummaryStickyBlock\n price={model?.summary?.presentablePrices?.total}\n currencyState={currencyState}\n show={showSticky}\n model={model}\n loading={loading}\n />\n </div>\n )\n}\n\nexport default observer(CartSummaryContainer)\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link, NavLink } from 'react-router-dom';\n\nlet hashFragment = '';\nlet observer = null;\nlet asyncTimerId = null;\nlet scrollFunction = null;\n\nfunction reset() {\n hashFragment = '';\n if (observer !== null) observer.disconnect();\n if (asyncTimerId !== null) {\n window.clearTimeout(asyncTimerId);\n asyncTimerId = null;\n }\n}\n\nfunction isInteractiveElement(element) {\n const formTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];\n const linkTags = ['A', 'AREA'];\n return (\n (formTags.includes(element.tagName) && !element.hasAttribute('disabled')) ||\n (linkTags.includes(element.tagName) && element.hasAttribute('href'))\n );\n}\n\nfunction getElAndScroll() {\n let element = null;\n if (hashFragment === '#') {\n // use document.body instead of document.documentElement because of a bug in smoothscroll-polyfill in safari\n // see https://github.com/iamdustan/smoothscroll/issues/138\n // while smoothscroll-polyfill is not included, it is the recommended way to implement smoothscroll\n // in browsers that don't natively support el.scrollIntoView({ behavior: 'smooth' })\n element = document.body;\n } else {\n // check for element with matching id before assume '#top' is the top of the document\n // see https://html.spec.whatwg.org/multipage/browsing-the-web.html#target-element\n const id = hashFragment.replace('#', '');\n element = document.getElementById(id);\n if (element === null && hashFragment === '#top') {\n // see above comment for why document.body instead of document.documentElement\n element = document.body;\n }\n }\n\n if (element !== null) {\n scrollFunction(element);\n\n // update focus to where the page is scrolled to\n // unfortunately this doesn't work in safari (desktop and iOS) when blur() is called\n let originalTabIndex = element.getAttribute('tabindex');\n if (originalTabIndex === null && !isInteractiveElement(element)) {\n element.setAttribute('tabindex', -1);\n }\n element.focus({ preventScroll: true });\n if (originalTabIndex === null && !isInteractiveElement(element)) {\n // for some reason calling blur() in safari resets the focus region to where it was previously,\n // if blur() is not called it works in safari, but then are stuck with default focus styles\n // on an element that otherwise might never had focus styles applied, so not an option\n element.blur();\n element.removeAttribute('tabindex');\n }\n\n reset();\n return true;\n }\n return false;\n}\n\nfunction hashLinkScroll(timeout) {\n // Push onto callback queue so it runs after the DOM is updated\n window.setTimeout(() => {\n if (getElAndScroll() === false) {\n if (observer === null) {\n observer = new MutationObserver(getElAndScroll);\n }\n observer.observe(document, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n // if the element doesn't show up in specified timeout or 10 seconds, stop checking\n asyncTimerId = window.setTimeout(() => {\n reset();\n }, timeout || 10000);\n }\n }, 0);\n}\n\nexport function genericHashLink(As) {\n return React.forwardRef((props, ref) => {\n let linkHash = '';\n if (typeof props.to === 'string' && props.to.includes('#')) {\n linkHash = `#${props.to.split('#').slice(1).join('#')}`;\n } else if (\n typeof props.to === 'object' &&\n typeof props.to.hash === 'string'\n ) {\n linkHash = props.to.hash;\n }\n\n const passDownProps = {};\n if (As === NavLink) {\n passDownProps.isActive = (match, location) =>\n match && match.isExact && location.hash === linkHash;\n }\n\n function handleClick(e) {\n reset();\n hashFragment = props.elementId ? `#${props.elementId}` : linkHash;\n if (props.onClick) props.onClick(e);\n if (\n hashFragment !== '' &&\n // ignore non-vanilla click events, same as react-router\n // below logic adapted from react-router: https://github.com/ReactTraining/react-router/blob/fc91700e08df8147bd2bb1be19a299cbb14dbcaa/packages/react-router-dom/modules/Link.js#L43-L48\n !e.defaultPrevented && // onClick prevented default\n e.button === 0 && // ignore everything but left clicks\n (!props.target || props.target === '_self') && // let browser handle \"target=_blank\" etc\n !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) // ignore clicks with modifier keys\n ) {\n scrollFunction =\n props.scroll ||\n ((el) =>\n props.smooth\n ? el.scrollIntoView({ behavior: 'smooth' })\n : el.scrollIntoView());\n hashLinkScroll(props.timeout);\n }\n }\n const { scroll, smooth, timeout, elementId, ...filteredProps } = props;\n return (\n <As {...passDownProps} {...filteredProps} onClick={handleClick} ref={ref}>\n {props.children}\n </As>\n );\n });\n}\n\nexport const HashLink = genericHashLink(Link);\n\nexport const NavHashLink = genericHashLink(NavLink);\n\nif (process.env.NODE_ENV !== 'production') {\n HashLink.displayName = 'HashLink';\n NavHashLink.displayName = 'NavHashLink';\n\n const propTypes = {\n onClick: PropTypes.func,\n children: PropTypes.node,\n scroll: PropTypes.func,\n timeout: PropTypes.number,\n elementId: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n };\n\n HashLink.propTypes = propTypes;\n NavHashLink.propTypes = propTypes;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport Icon from '$core-components/Icon'\nimport './CartCheckbox.scss'\n\nconst CartCheckbox = ({ name, id, checked, label, onSelect }) => (\n <div className=\"cart-ng-checkbox-container\">\n <input onClick={onSelect} type=\"checkbox\" id={id} name={name}/>\n <label htmlFor={id}>\n <div className=\"cart-ng-checked-icon-container\" style={{ display: checked ? 'inline-flex' : 'none' }}>\n <Icon\n width=\"22px\"\n height=\"22px\"\n name=\"check.svg\"\n />\n </div>\n <span className=\"cart-list-label\">{label}</span>\n </label>\n </div>\n)\n\nexport default observer(CartCheckbox)\n","import React,{useState} from 'react'\nimport { Input, Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport Icon from '$core-components/Icon'\nimport Button from '$core-components/Button'\nimport './EditListNameModal.scss'\nconst EditListNameModal = ({onClose, onSave, value}) => {\n const [newValue, setNewValue] = useState(value);\n\n return (\n <Modal isOpen={true} modalClassName=\"edit-list-name-dialog\">\n <div className=\"close-modal\">\n <p className=\"title\">{t('Cart.Dialog.EditListName.Title')}</p>\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n <p className=\"label\">{t('Cart.Dialog.EditListName.ListNameTitle')}</p>\n <Input type=\"text\" value={newValue} onChange={(e) => setNewValue(e.target.value)}/>\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.EditListName.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n <Button\n text={t('Cart.Dialog.EditListName.Save')}\n className=\"button button-primary\"\n onClick={onSave}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default EditListNameModal\n","import React, { useState } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport Icon from '$core-components/Icon'\nimport Button from '$core-components/Button'\nimport './ConfirmationDialog.scss'\n\nconst ConfirmationDialog = ({\n open,\n confirmationText,\n confirmButtonText,\n rejectButtonText,\n onReject,\n onConfirm,\n itemThumbnail\n}) => {\n const [save, setSave] = useState(false)\n return (\n <Modal isOpen={open} className=\"cart-ng-confirmation-dialog\"\n backdropClassName={save ? 'cart-ng-confirmation-dialog-backdrop' : ''}>\n <div className=\"modal-close\">\n <button className=\"close-btn\" onClick={() => onReject()}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody className=\"cart-ng-dialog-body\">\n {itemThumbnail && (\n <div className=\"thumbnail-wrapper\">\n <img src={itemThumbnail} alt=\"item-thumbnail\" className=\"cart-ng-confirmation-thumbnail\"/>\n </div>\n )}\n <div className=\"cart-ng-confirmation-text\">\n {confirmationText}\n </div>\n <div className=\"buttons-container\">\n <Button\n className=\"button button-primary confirmation-button\"\n onClick={() => {\n setSave(true)\n onConfirm()\n }}\n text={confirmButtonText}\n />\n <Button\n className=\"button button-secondary confirmation-button\"\n onClick={() => onReject()}\n text={rejectButtonText}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ConfirmationDialog\n","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport Icon from '$core-components/Icon'\nimport Button from '$core-components/Button'\n\nimport './ConfirmListDuplicationModal.scss'\n\nconst ConfirmListDuplicationModal = ({ onClose, list, onDuplicate }) => {\n\n //TODO: replace with computed value\n const count = 9999\n\n return (\n <Modal isOpen={true} modalClassName=\"confirm-list-duplication-modal\">\n <div className=\"close-modal\">\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n <p className=\"label\">{t('Cart.Dialog.DuplicateConfirmation.Label1')}</p>\n <p className=\"label\">{t('Cart.Dialog.DuplicateConfirmation.Label2')}</p>\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.DuplicateConfirmation.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n <Button\n text={t('Cart.Dialog.DuplicateConfirmation.Duplicate',{ count })}\n className=\"button button-primary\"\n onClick={() => onDuplicate(list)}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ConfirmListDuplicationModal\n","import React from 'react'\nimport { t } from '$themelocalization'\nimport Dropdown from '$core-components/DropDown'\nimport Icon from '$core-components/Icon'\nimport { observer } from 'mobx-react-lite'\n\nconst showDeleteAction = (list) => !list.isSingleListMode && (!list.isUnassigned || (list.isUnassigned && list.itemsCount > 0))\nconst showAssignTo = (list) => list.isUnassigned && list.itemsCount > 0\n\nexport const MobileCustomListActions = observer((props) => {\n const { showItemsCount, list} = props\n const hasExportedItems = list.isExported\n\n const items = [\n showAssignTo(list) && { name: t('Cart.ListBar.AssignTo'), value: 'onAssignToList', icon: 'link.svg', width:'16px', height:'16px'},\n hasExportedItems && { value: 'onViewExported', component: () =>\n <div className=\"exported-list\"><Icon name=\"exported_list.svg\" width=\"18px\" height=\"18px\"\n wrapperClassName=\"cart-list-bar-export-icon\" title={''}/>\n <a href={list.exportSuccess?.ExternalUrl} target=\"_blank\" rel=\"noreferrer\">{t('Cart.ListBar.ViewExported')}</a></div>\n },\n showDeleteAction(list) && (showAssignTo(list) || hasExportedItems) && { divider: true },\n showDeleteAction(list) && { name: t('Cart.ListBar.Delete'), value: 'onDelete', icon: 'delete.svg' },\n ].filter(i => !!i )\n\n const onChange = (selected) => {\n props[selected.value]()\n }\n\n const dropDownToggle = <Icon name=\"menu_2.svg\" width=\"13px\" height=\"16px\"/>\n return <>\n {list.isModifiedAfterExport && <div className=\"cart-list-bar-mobile-export-icon-container\">\n <Icon name=\"info.svg\" width=\"18px\" height=\"18px\" wrapperClassName=\"cart-list-bar-export-icon\" title={''}/>\n </div>}\n <div className=\"cart-list-bar-mobile-actions-drop-down\">\n <span className=\"cart-items-count\">{showItemsCount && `(${list.itemsCount})`}</span>\n <Dropdown {...{ items, onChange, dropDownToggle }} end disabled={list.isEmpty && list.isUnassigned}/>\n </div>\n </>\n})\n\nexport const DesktopCustomListActions = observer(({ showItemsCount, list, onAssignToList, onDelete }) => {\n const hasExportedItems = list.isExported\n\n return <div className=\"cart-list-bar-desktop-actions-drop-down\">\n {hasExportedItems &&\n <>\n {list.isModifiedAfterExport && <div className=\"cart-list-bar-export-icon-container\">\n <Icon name=\"info.svg\" width=\"18px\" height=\"18px\" wrapperClassName=\"cart-list-bar-export-icon\" title={''}/>\n <div className=\"cart-list-bar-export-tooltip\"> {t('Cart.ListBar.ThereWereChanges')}</div>\n </div>}\n <a className=\"exported-list\" href={list?.exportSuccess.ExternalUrl} target=\"_blank\" rel=\"noreferrer\">{t('Cart.ListBar.ViewExported')}</a>\n </>\n }\n {showAssignTo(list)\n ? <Icon\n name=\"link.svg\"\n width=\"15px\"\n height=\"15px\"\n wrapperClassName=\"cart-list-bar-link-icon\"\n onClick={onAssignToList}\n title={t('Cart.Dialog.AssignToList.Label')}\n />\n : null\n // keep for phase 1.5\n // list.items.length > 0 && <Icon name=\"duplicate_cart.svg\" width=\"15px\" height=\"15px\" wrapperClassName=\"cart-list-bar-link-icon\" onClick={onDuplicateList} />\n }\n {showDeleteAction(list) && (\n <button className={`empty-custom-list-button`} onClick={onDelete}>\n <Icon wrapperClassName=\"empty-cart-button-icon\" name=\"delete.svg\" width=\"14px\" height=\"16px\" title={t('Cart.DeleteTooltip')}/>\n <span className=\"cart-items-count\">{showItemsCount && `(${list.itemsCount})`}</span>\n </button>\n )}\n </div>\n})\n","import React, { useState } from 'react'\nimport { t } from '$themelocalization'\nimport { observer } from 'mobx-react-lite'\nimport Icon from '$core-components/Icon'\nimport CartCheckbox from './CartCheckbox'\nimport EditListNameModal from './EditListNameModal'\nimport ConfirmationDialog from '../ConfirmationDialog'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from './AssignToListModal'\nimport ConfirmListDuplicationModal from './ConfirmListDuplicationModal'\nimport {MobileCustomListActions, DesktopCustomListActions} from './CustomListActions'\nimport './ListBar.scss'\nimport CartListModel from '../model/CartListModel'\n\nconst CustomListTitle = ({ listTitle, onEdit, list, model }) => {\n return (\n <div className=\"cart-list-bar-custom-title\">\n {!model.isSingleListMode && <Icon name=\"arrowDown.svg\" width=\"13px\" height=\"8px\" className=\"cart-list-bar-arrow-down\"/>}\n {listTitle}\n {/* keep for phase 1.5 */}\n {/*{!list.isUnassigned &&*/}\n {/* <div className=\"cart-list-bar-edit\" onClick={onEdit}><Icon name=\"edit.svg\" width=\"13px\" height=\"13px\" /></div>}*/}\n </div>\n )\n}\n\nconst CustomListActions = observer(({\n model,\n list,\n setShowDeleteAllConfirmation,\n setDeleteConfirmationText,\n showItemsCount,\n onAssignToList,\n onDeleteWithNoConfirmation,\n // keep for phase 1.5\n // onDuplicateList\n}) => {\n const onDelete = () => {\n if (!list.isUnassigned && list.itemsCount === 0) {\n onDeleteWithNoConfirmation()\n return\n }\n setDeleteConfirmationText(list.isUnassigned ? t('Cart.Dialog.Delete.ConfirmEmptyUnassignedList') : t('Cart.Dialog.Delete.ConfirmDeleteList'))\n setShowDeleteAllConfirmation(true)\n }\n\n if (!model.isListsMode)\n return null\n\n return <div className=\"cart-list-bar-custom-list-actions\">\n <DesktopCustomListActions {...{showItemsCount, list, onAssignToList, onDelete}}/>\n <MobileCustomListActions onViewExported={() => {}} {...{onDelete, showItemsCount, list, onAssignToList}}/>\n </div>\n})\n\nconst ListBar = ({\n model,\n list,\n listTitle,\n emptyAllText,\n showItemsCount = true,\n onTitleClick,\n}) => {\n const [showDeleteAllConfirmation, setShowDeleteAllConfirmation] = useState(false)\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n const [showDuplicateListModal, setShowDuplicateListModal] = useState(false)\n const [showListNameEdit, setShowListNameEdit] = useState(false)\n const [deleteConfirmationText, setDeleteConfirmationText] = useState(t('Cart.Dialog.Delete.ConfirmDeleteAllCart'))\n\n if (!model) return null\n\n const onTitleEdit = () => {\n setShowListNameEdit(true)\n }\n\n const onAssignToList = () => {\n setShowAssignToListModal(true)\n }\n\n const onDuplicateList = () => {\n setShowDuplicateListModal(true)\n }\n\n const onListNameSave = (newName) => {\n //TODO: put list name change code here\n setShowListNameEdit(false)\n }\n\n const onAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await list.reAssign(value.value)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await list.reAssignToNew(value.value)\n }\n }\n\n //placeholder will not be implemented until phase 1.5\n const onDuplicateListSave = (value) => {\n //TODO: put list name change code here\n setShowDuplicateListModal(false)\n }\n\n const handleDeleteAllDialogConfirm = async () => {\n setShowDeleteAllConfirmation(false)\n if (model.isWishListMode || (model.isListsMode && list.isUnassigned)) {\n await list.emptyList()\n } else if (model.isListsMode) {\n await list.emptyList()\n if (!list.isUnassigned) {\n await list.deleteList()\n }\n }\n }\n\n const handleRevertModification = async () => {\n if (list.isWishList) {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllWishlist'))\n setShowDeleteAllConfirmation(true)\n return\n }\n if (list.isOrderEdit || (list.isDefault && model.hasEditOrApproval)) {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllLists'))\n setShowDeleteAllConfirmation(true)\n return\n }\n await model.revertModifications()\n }\n\n const getContainerClassList = () => {\n const classes = ['cart-list-bar']\n if (model.openedList?.id === list.id && (model.isListsMode || model.isSingleListMode)) {\n classes.push('list-open')\n }\n if (model?.hasEditOrApproval || model.isSingleListMode) {\n classes.push('highlight-bottom-border')\n }\n if (model.isSingleListMode) {\n classes.push('single-list-mode')\n }\n\n return classes.join(' ')\n }\n\n return (\n <>\n <div className={getContainerClassList()}>\n {list.id === CartListModel.CART_LIST_TYPES.WISH_LIST ? <p className=\"wish-list-label\">{listTitle}</p> :\n (\n model.loading === false ? <div\n className={`${model.isListsMode ? 'cart-list-bar-clickable' : ''}`}\n onClick={() => model.isListsMode && onTitleClick()}\n >\n {model.isListsMode || model.isSingleListMode ?\n <CustomListTitle model={model} listTitle={listTitle} onEdit={onTitleEdit} list={list}/>\n :\n <CartCheckbox\n name={`cart-list-bar-checkbox-${list.originalOrderFriendlyId ?? list.id}`}\n id={`cart-list-bar-checkbox-${list.originalOrderFriendlyId ?? list.id}`}\n onSelect={() => list.toggleSelectAll()}\n checked={list?.items?.length === list?.selected?.length && list?.items?.length > 0}\n className=\"cart-list-bar-checkbox-wrapper\"\n label={listTitle}\n />\n }\n </div> : <div/>\n )}\n {model.isListsMode || model.isSingleListMode\n ? <CustomListActions\n {...{\n model,\n list,\n setShowDeleteAllConfirmation,\n setDeleteConfirmationText,\n showItemsCount,\n onAssignToList,\n onDuplicateList,\n }}\n onDeleteWithNoConfirmation={handleDeleteAllDialogConfirm}\n />\n : <div>\n {model.hasEditOrApproval ?\n <button\n className={`empty-cart-button ${list.isOrderEdit ? 'empty-cart-order-approval-icon' : ''}`}\n onClick={handleRevertModification}\n >\n {!list.isOrderApproval && <Icon wrapperClassName=\"empty-cart-button-icon\" name=\"delete.svg\" width=\"14px\" height=\"16px\" title={t('Cart.DeleteTooltip')}/>}\n {list?.id !== CartListModel.CART_LIST_TYPES.DEFAULT && <span className=\"empty-all-text\">{emptyAllText} </span>}\n {!list.isOrderApproval && <> <span className=\"cart-items-count\">{showItemsCount && `(${list.items.length})`}</span></>}\n </button>\n :\n <button\n className=\"empty-cart-button empty-cart-hide-icon\"\n onClick={() => {\n if (list.isWishList) {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllWishlist'))\n } else {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllCart'))\n }\n setShowDeleteAllConfirmation(true)\n }}\n >\n <Icon wrapperClassName=\"empty-cart-button-icon\" name=\"delete.svg\" width=\"14px\" height=\"16px\" title={t('Cart.DeleteTooltip')}/>\n <span className=\"empty-all-text\">{emptyAllText} </span>\n <span className=\"cart-items-count\">{showItemsCount && `(${list.itemsCount})`}</span>\n </button>}\n </div>\n }\n </div>\n <ConfirmationDialog\n confirmationText={deleteConfirmationText}\n confirmButtonText={`${t('Cart.Dialog.Delete.ConfirmDeleteButtonText')} (${list.itemsCount})`}\n rejectButtonText={t('Cart.Dialog.Delete.RejectButtonText')}\n onConfirm={handleDeleteAllDialogConfirm}\n onReject={() => setShowDeleteAllConfirmation(false)}\n open={showDeleteAllConfirmation}\n />\n {showListNameEdit &&\n <EditListNameModal\n onClose={() => setShowListNameEdit(false)}\n onSave={onListNameSave}\n value={list.title}\n />\n }\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={onAssignToListSave}\n model={model}\n list={list}\n count={list.itemsCount}\n />\n }\n {showDuplicateListModal &&\n <ConfirmListDuplicationModal\n onClose={() => setShowDuplicateListModal(false)}\n onDuplicate={onDuplicateListSave}\n list={list}\n />\n }\n </>\n )\n}\n\nexport default observer(ListBar)\n","import { formatNumByLocale } from '$ustoreinternal/services/utils'\n\nexport const formatForCurrencyAndCulture = (amount, formatParams) => {\n const { currencyFormat, symbol, decimalPlaces, decimalSeparator } = formatParams\n // split the amount to Integer and floating, apply toFixed(decimalPlaces) to get correct amount of digits.\n const [intAmount, floating] = amount.toFixed(decimalPlaces).toString().split('.') // in case of decimalPlaces == 0, the 'floating' const will be undefined.\n\n return currencyFormat\n .replace(/{Symbol}/g, symbol)\n // format the given amount to a string according to passed culture definitions\n // apply the formatNumByLocale function only on the Integer part of the amount, and add the floating part only if exist.\n // only show decimalSeparator if floating exist (in case of decimalPlaces == 0, the 'floating' const will be undefined)\n .replace(/{Amount}/g, formatNumByLocale(intAmount, formatParams.languageCode) + (floating ? decimalSeparator + floating : ''))\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { UStoreProvider } from '@ustore/core'\nimport { formatForCurrencyAndCulture } from '../model/utils'\nimport './DisplayPrice.scss'\n\nconst DisplayPrice = ({\n price,\n hasPricing,\n isHighlighted,\n currencyState,\n customPriceFormat\n}) => {\n if (\n price.subtotal == null\n || !hasPricing\n || !currencyState\n || Number.isNaN(price?.subtotal)\n || Number.isNaN(price?.tax)\n )\n return ''\n\n let formatParams = {\n taxFormat: customPriceFormat || currencyState.taxFormat,\n symbol: currencyState.currencySymbol,\n code: currencyState.currencyCode,\n currencyFormat: currencyState.currencyFormat,\n decimalSeparator: currencyState.decimalSeparator,\n decimalPlaces: currencyState.decimalPlaces,\n languageCode: currencyState.languageCode\n }\n\n const { price: itemPrice, tax, priceIncludingTax } = UStoreProvider.state.culture.getConvertedPrices({\n Price: price?.subtotal,\n Tax: price?.tax\n })\n\n if (Number.isNaN(itemPrice) || Number.isNaN(tax) || Number.isNaN(priceIncludingTax))\n return ''\n\n // format the given price and tax amount to a string according to the tax, culture and currency definitions of models in state\n const priceDisplayString = formatParams.taxFormat\n .replace(/{Price}/g, formatForCurrencyAndCulture(itemPrice, formatParams))\n .replace(/{Tax}/g, formatForCurrencyAndCulture(tax, formatParams))\n .replace(/{PriceIncludingTax}/g, formatForCurrencyAndCulture(priceIncludingTax, formatParams))\n\n return (\n <p className={`price${isHighlighted ? ' highlight' : ''}`}>\n {priceDisplayString}\n {currencyState.showCurrencyCode && <span className=\"cart-ng-item-currency-code\"> {formatParams.code}</span>}\n </p>\n )\n}\n\nexport default observer(DisplayPrice)\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport Icon from '$core-components/Icon'\nimport { t } from '$themelocalization'\nimport ConfirmationDialog from '../ConfirmationDialog'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from '../CartList/AssignToListModal'\nimport './CartItemActions.scss'\n\nconst CartItemActions = ({\n editDisabled,\n item,\n setAlertMessage,\n onEdit,\n onMoveItemToWishlist,\n onMoveItemToCart,\n onDelete,\n onDuplicateItem\n}) => {\n const [showConfirmationDialog, setShowConfirmationDialog] = useState(false)\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n\n const { _cartModel, _listModel } = item\n const isListsMode = _cartModel.isListsMode\n const isWishList = _listModel.isWishList\n const isSingleListMode = _cartModel.isSingleListMode\n\n const onAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await item.reAssign(value.value)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await item.reAssignToNew(value.value)\n }\n setShowAssignToListModal(false)\n }\n\n return (\n <div className=\"actions-list\">\n {item.affectsPricing &&\n <button\n className=\"action\"\n disabled={editDisabled}\n onClick={() => onEdit()}\n >\n <Icon name=\"edit.svg\" width=\"20px\" height=\"20px\" title={t('Cart.EditTooltip')}/>\n </button>\n }\n {isListsMode && <>\n <button\n className=\"action\"\n onClick={() => setShowAssignToListModal(true)}\n >\n <Icon name=\"link.svg\" width=\"20px\" height=\"20px\" wrapperClassName=\"cart-list-bar-link-icon\" title={t('Cart.Dialog.AssignToList.Label')}/>\n </button>\n {/* keep for phase 1.5 */}\n {/*<button*/}\n {/* className=\"action\"*/}\n {/* onClick={() => onDuplicateItem()}*/}\n {/*>*/}\n {/* <Icon name=\"duplicate_cart.svg\" width=\"15px\" height=\"15px\" wrapperClassName=\"cart-list-bar-link-icon\"/>*/}\n {/*</button>*/}\n </>}\n {item.affectsPricing && !isListsMode && !isSingleListMode &&\n <button\n className=\"action\"\n onClick={() => {\n setAlertMessage(t('Cart.CartItemMoveToWishList'))\n onMoveItemToWishlist()\n }}\n >\n <Icon name=\"move_to_wish_list.svg\" width=\"20px\" height=\"20px\" title={t('Cart.MoveToWishList')}/>\n </button>}\n {isWishList &&\n <button className=\"action\" onClick={() => {\n setAlertMessage(t('Cart.WishListItemMoveToCart'))\n onMoveItemToCart()\n }}>\n <Icon name=\"move_to_cart.svg\" width=\"20px\" height=\"20px\" title={t('Cart.MoveToCart')}/>\n </button>\n }\n <div className=\"divider\"/>\n <button\n className=\"action\"\n onClick={() => {\n if (!isWishList) {\n setShowConfirmationDialog(true)\n } else {\n setAlertMessage(t('Cart.CartItemDeleted'))\n onDelete()\n }\n }}>\n <Icon name=\"delete.svg\" width=\"20px\" height=\"20px\" title={t('Cart.DeleteTooltip')}/>\n </button>\n <ConfirmationDialog\n open={showConfirmationDialog}\n itemThumbnail={item.thumbnailUrl}\n confirmationText={t('Cart.Dialog.Delete.ConfirmDeleteItem')}\n confirmButtonText={t('Cart.Dialog.Delete.ConfirmDeleteButtonText')}\n rejectButtonText={t('Cart.Dialog.Delete.RejectButtonText')}\n onReject={() => setShowConfirmationDialog(false)}\n onConfirm={() => {\n setShowConfirmationDialog(false)\n }}\n />\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={onAssignToListSave}\n model={item._cartModel}\n list={item._listModel}\n assignSingleItem={true}\n count={1}\n />\n }\n </div>\n )\n}\n\nexport default observer(CartItemActions)\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useState } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport Icon from '$core-components/Icon'\nimport Button from '$core-components/Button'\n\nimport './PromptDialog.scss'\n\nexport const PromptDialog = ({ onClose, nickname, onChange }) => {\n const [newValue, setNewValue] = useState(nickname);\n\n const onSave = () => {\n onChange(newValue?.trim());\n onClose();\n }\n\n return (\n <Modal isOpen={true} className=\"prompt-dialog\" modalClassName=\"nickname-dialog-container\">\n <div className=\"close-modal\">\n <p className=\"title\">{t('Cart.Item.Dialog.Edit')}</p>\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n <p className=\"label\">{t('Cart.Item.Dialog.Title')}</p>\n <input\n className=\"input\"\n placeholder=\"Type Description\"\n value={newValue}\n onChange={(e) => setNewValue(e.target.value)}\n />\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.EditNickname.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n <Button\n text={t('Cart.Dialog.EditNickname.Save')}\n className=\"button button-primary\"\n onClick={onSave}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { useDetectClickOutside } from 'react-detect-click-outside'\nimport { t } from '$themelocalization'\nimport Icon from '$core-components/Icon'\nimport { PromptDialog } from './PromptDialog'\nimport './Nickname.scss'\n\nexport const Nickname = ({ nickname, setNickname, onEditStart, onEditEnd }) => {\n const [nicknameInput, setNicknameInput] = useState(nickname)\n const [isEditing, setIsEditing] = useState(false)\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const inputRef = useRef(null)\n\n useEffect(() => {\n if (isEditing) {\n inputRef.current.focus()\n }\n }, [isEditing])\n\n useEffect(() => {\n setNicknameInput(nickname)\n }, [nickname])\n\n const save = () => {\n setIsEditing(false)\n setNickname(nicknameInput)\n onEditEnd && onEditEnd()\n }\n\n const onClickOutside = (e) => {\n e.stopPropagation()\n if (e.target.id !== 'Shape' && e.target.tagName !== 'svg') {\n save()\n }\n }\n const onEnter = (e) => {\n if (e.key === 'Enter') {\n save()\n }\n }\n\n const inputWrapper = useDetectClickOutside({ onTriggered: onClickOutside })\n\n const handleEditNickname = () => {\n setIsEditing(true)\n onEditStart && onEditStart()\n }\n\n const onDelete = () => {\n setNicknameInput('')\n setIsEditing(false)\n setNickname('')\n onEditEnd && onEditEnd()\n }\n\n return (\n <>\n {nickname === '' && !isEditing &&\n <>\n <div onClick={handleEditNickname} className=\"nickname-edit-desktop\">\n <Icon id=\"nickname-edit-button-icon\" name=\"nickname.svg\" width=\"20px\" height=\"20px\" title={t('Cart.Dialog.Nickname.Add')}/>\n </div>\n <div className=\"nickname-edit-mobile\" onClick={() => setIsDialogOpen(true)}>\n <Icon id=\"nickname-edit-button-icon\" name=\"nickname.svg\" width=\"20px\" height=\"20px\"/>\n </div>\n </>\n }\n {isEditing && (\n <div ref={inputWrapper} className=\"nickname-box\">\n <input\n ref={inputRef}\n className=\"nickname-input\"\n placeholder={t('Cart.NicknamePlaceholder')}\n value={nicknameInput}\n onChange={(e) => setNicknameInput(e.target.value)}\n onKeyDown={onEnter}\n />\n <div className=\"nickname-delete-desktop\" onClick={onDelete}>\n <Icon name=\"delete.svg\" width=\"14px\" height=\"14px\" title={t('Cart.Dialog.Nickname.Delete')}/>\n </div>\n </div>\n )}\n {!isEditing && nickname && (\n <div className=\"nickname-box\">\n <p className=\"nickname\" onDoubleClick={handleEditNickname}>{nickname}</p>\n <div className=\"nickname-edit-desktop\" onClick={handleEditNickname}>\n <Icon name=\"edit.svg\" width=\"14px\" height=\"14px\" title={t('Cart.Dialog.Nickname.Edit')}/>\n </div>\n <div className=\"nickname-edit-mobile\" onClick={() => setIsDialogOpen(true)}>\n <Icon name=\"edit.svg\" width=\"14px\" height=\"14px\"/>\n </div>\n </div>\n )}\n {isDialogOpen && <PromptDialog\n onClose={() => {\n setIsDialogOpen(false)\n }}\n nickname={nicknameInput}\n onChange={(newNickname) => {\n console.log({newNickname})\n setNickname(newNickname)\n }}/>}\n </>\n )\n}\n","import React, { useState, useRef, useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Tooltip } from \"reactstrap\";\nimport { debounce } from \"throttle-debounce\";\nimport { Nickname } from \"./Nickname\";\nimport \"./ProductName.scss\";\n\nconst ProductName = ({ item }) => {\n const [showTooltip, setShowTooltip] = useState(false);\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n const [isEditingNickname, setIsEditingNickname] = useState(false);\n const contentRef = useRef(null);\n const rootRef = useRef(null);\n\n const toggle = () => setIsTooltipOpen(!isTooltipOpen);\n\n useEffect(() => {\n const onResize = debounce(250, () => {\n const element = contentRef?.current;\n if (!element) return;\n const originalOverflow = element.style.overflow;\n const originalTextOverflow = element.style.textOverflow;\n const originalWhiteSpace = element.style.whiteSpace;\n const originalWidth = element.clientWidth;\n\n // Set styles to what would be needed for an ellipsis\n element.style.overflow = \"hidden\";\n element.style.textOverflow = \"ellipsis\";\n element.style.whiteSpace = \"nowrap\";\n\n // Check if the content overflows\n const isOverflowing = element.scrollWidth > originalWidth;\n\n // // Restore the original values\n element.style.overflow = originalOverflow;\n element.style.textOverflow = originalTextOverflow;\n element.style.whiteSpace = originalWhiteSpace;\n\n setShowTooltip(isOverflowing);\n });\n onResize();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, []);\n\n const handleNicknameChange = (nickname) => {\n item.updateNickname(nickname ?? null);\n };\n\n if (!item) return null;\n\n return (\n <div\n className={`title-box ${\n item.nickname || isEditingNickname ? \"has-value\" : \"\"\n }`}\n ref={rootRef}\n >\n <div className=\"title-wrapper\">\n <div className=\"item-title\">\n <h3\n className={`title-content wrap`}\n ref={contentRef}\n id={`tooltip-${item.orderItemId}`}\n style={{\n overflow: \"hidden\",\n }}\n >\n {item.product.name}\n {item.product.catalogNumber && ` / ${item.product.catalogNumber}`}\n </h3>\n </div>\n </div>\n <Nickname\n nickname={item.nickname}\n setNickname={handleNicknameChange}\n onEditStart={() => setIsEditingNickname(true)}\n onEditEnd={() => setIsEditingNickname(false)}\n />\n {showTooltip && (\n <Tooltip\n className=\"product-name-tooltip\"\n placement=\"bottom\"\n isOpen={isTooltipOpen}\n target={contentRef.current}\n toggle={toggle}\n container=\"cart-list\"\n modifiers={[\n {\n name: \"offset\",\n options: {\n offset: ({ placement }) => {\n if (placement === \"top\") {\n return [0, 30];\n } else {\n return [];\n }\n },\n },\n },\n ]}\n >\n {item.product.name}\n </Tooltip>\n )}\n </div>\n );\n};\n\nexport default observer(ProductName);\n","import React, { useState } from 'react'\nimport Icon from '$core-components/Icon'\n\nimport './ExpandableList.scss'\n\nexport const ExpandableList = ({ properties }) => {\n const [showAll, setShowAll] = useState(properties.length <= 3)\n const visibleItems = showAll ? properties : properties.slice(0, 2)\n\n const toggleList = () => {\n setShowAll(!showAll)\n }\n\n return (\n <div>\n <ul className=\"expandable-list\">\n {visibleItems.map((property) => (\n <li className=\"property\" key={property}>{property.name}: {property.value}</li>\n ))}\n </ul>\n {properties?.length > 3 && <button className=\"expandable-list-toggler\" onClick={toggleList}>\n {showAll ? 'View less' : 'View more'}\n <Icon name={showAll ? 'cart_view_less.svg' : 'cart_view_more.svg'} width=\"10px\" height=\"10px\"/>\n </button>}\n </div>\n )\n}","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { ExpandableList } from './ExpandableList'\nimport './ProductProperties.scss'\n\nconst ProductProperties = ({ item, product }) => {\n const getPackSize = () =>\n `${product.unit.quantity} ${product.unit.quantity > 1 ? product.unit.plural : product.unit.singular} / ${product.unit.packSingular}`\n\n return (\n <div className=\"cart-item-properties\">\n {item.properties.length > 0 ? <ExpandableList properties={item.properties}/> : null}\n {product.packSingular && <div className=\"property\">({getPackSize()})</div>}\n {item.numRecipients > 1 && item.quantityPerRecipient && (\n // the condition numRecipients > 1 is there because we can't distinguish between product types\n // it was decided between @Nachman and @Oleksii 07/04/23\n <div className=\"recipients\">\n <div className=\"property\">{t('Cart.Item.Recipients')}: {item.numRecipients}</div>\n <div className=\"property\">{t('Cart.Item.Quantity')}: {item.quantityPerRecipient}</div>\n </div>\n )}\n </div>\n )\n}\n\nexport default observer(ProductProperties)\n","var h = Object.defineProperty;\nvar u = (n, t, e) => t in n ? h(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;\nvar c = (n, t, e) => (u(n, typeof t != \"symbol\" ? t + \"\" : t, e), e);\nimport f, { Component as m, createElement as v, Children as b } from \"react\";\nconst p = (n, t) => typeof getComputedStyle < \"u\" ? getComputedStyle(n, null).getPropertyValue(t) : n.style.getPropertyValue(t), y = (n) => p(n, \"overflow\") + p(n, \"overflow-y\") + p(n, \"overflow-x\"), w = (n) => {\n if (!(n instanceof HTMLElement))\n return window;\n let t = n;\n for (; t && !(t === document.body || t === document.documentElement || !t.parentNode); ) {\n if (/(scroll|auto)/.test(y(t)))\n return t;\n t = t.parentNode;\n }\n return window;\n};\nclass g extends m {\n constructor(e) {\n super(e);\n c(this, \"elementObserver\");\n c(this, \"wrapper\");\n c(this, \"lazyLoadHandler\", (e) => {\n var o, i;\n const {\n onContentVisible: s\n } = this.props, [r] = e, {\n isIntersecting: l\n } = r;\n if (l) {\n this.setState({\n visible: !0\n }, () => {\n s && s();\n });\n const a = (o = this.wrapper) == null ? void 0 : o.current;\n a && a instanceof HTMLElement && ((i = this.elementObserver) == null || i.unobserve(a));\n }\n });\n this.elementObserver = null, this.wrapper = f.createRef(), this.state = {\n visible: !1\n };\n }\n componentDidMount() {\n var o;\n this.getEventNode();\n const {\n offset: e,\n threshold: s\n } = this.props, r = {\n rootMargin: typeof e == \"number\" ? `${e}px` : e || \"0px\",\n threshold: s || 0\n };\n this.elementObserver = new IntersectionObserver(this.lazyLoadHandler, r);\n const l = (o = this.wrapper) == null ? void 0 : o.current;\n l instanceof HTMLElement && this.elementObserver.observe(l);\n }\n shouldComponentUpdate(e, s) {\n return s.visible;\n }\n componentWillUnmount() {\n var s, r;\n const e = (s = this.wrapper) == null ? void 0 : s.current;\n e && e instanceof HTMLElement && ((r = this.elementObserver) == null || r.unobserve(e));\n }\n getEventNode() {\n var e;\n return w((e = this.wrapper) == null ? void 0 : e.current);\n }\n render() {\n const {\n children: e,\n className: s,\n height: r,\n width: l,\n elementType: o\n } = this.props, {\n visible: i\n } = this.state, a = {\n height: r,\n width: l\n }, d = `LazyLoad${i ? \" is-visible\" : \"\"}${s ? ` ${s}` : \"\"}`;\n return v(o || \"div\", {\n className: d,\n style: a,\n ref: this.wrapper\n }, i && b.only(e));\n }\n}\nc(g, \"defaultProps\", {\n elementType: \"div\",\n className: \"\",\n offset: 0,\n threshold: 0,\n width: null,\n onContentVisible: null,\n height: null\n});\nexport {\n g as default\n};\n","'use client';\nimport React from 'react';\n\n/**\n * @internal\n */\nconst SkeletonThemeContext = React.createContext({});\n\n/* eslint-disable react/no-array-index-key */\nconst defaultEnableAnimation = true;\n// For performance & cleanliness, don't add any inline styles unless we have to\nfunction styleOptionsToCssProperties({ baseColor, highlightColor, width, height, borderRadius, circle, direction, duration, enableAnimation = defaultEnableAnimation, }) {\n const style = {};\n if (direction === 'rtl')\n style['--animation-direction'] = 'reverse';\n if (typeof duration === 'number')\n style['--animation-duration'] = `${duration}s`;\n if (!enableAnimation)\n style['--pseudo-element-display'] = 'none';\n if (typeof width === 'string' || typeof width === 'number')\n style.width = width;\n if (typeof height === 'string' || typeof height === 'number')\n style.height = height;\n if (typeof borderRadius === 'string' || typeof borderRadius === 'number')\n style.borderRadius = borderRadius;\n if (circle)\n style.borderRadius = '50%';\n if (typeof baseColor !== 'undefined')\n style['--base-color'] = baseColor;\n if (typeof highlightColor !== 'undefined')\n style['--highlight-color'] = highlightColor;\n return style;\n}\nfunction Skeleton({ count = 1, wrapper: Wrapper, className: customClassName, containerClassName, containerTestId, circle = false, style: styleProp, ...originalPropsStyleOptions }) {\n var _a, _b, _c;\n const contextStyleOptions = React.useContext(SkeletonThemeContext);\n const propsStyleOptions = { ...originalPropsStyleOptions };\n // DO NOT overwrite style options from the context if `propsStyleOptions`\n // has properties explicity set to undefined\n for (const [key, value] of Object.entries(originalPropsStyleOptions)) {\n if (typeof value === 'undefined') {\n delete propsStyleOptions[key];\n }\n }\n // Props take priority over context\n const styleOptions = {\n ...contextStyleOptions,\n ...propsStyleOptions,\n circle,\n };\n // `styleProp` has the least priority out of everything\n const style = {\n ...styleProp,\n ...styleOptionsToCssProperties(styleOptions),\n };\n let className = 'react-loading-skeleton';\n if (customClassName)\n className += ` ${customClassName}`;\n const inline = (_a = styleOptions.inline) !== null && _a !== void 0 ? _a : false;\n const elements = [];\n const countCeil = Math.ceil(count);\n for (let i = 0; i < countCeil; i++) {\n let thisStyle = style;\n if (countCeil > count && i === countCeil - 1) {\n // count is not an integer and we've reached the last iteration of\n // the loop, so add a \"fractional\" skeleton.\n //\n // For example, if count is 3.5, we've already added 3 full\n // skeletons, so now we add one more skeleton that is 0.5 times the\n // original width.\n const width = (_b = thisStyle.width) !== null && _b !== void 0 ? _b : '100%'; // 100% is the default since that's what's in the CSS\n const fractionalPart = count % 1;\n const fractionalWidth = typeof width === 'number'\n ? width * fractionalPart\n : `calc(${width} * ${fractionalPart})`;\n thisStyle = { ...thisStyle, width: fractionalWidth };\n }\n const skeletonSpan = (React.createElement(\"span\", { className: className, style: thisStyle, key: i }, \"\\u200C\"));\n if (inline) {\n elements.push(skeletonSpan);\n }\n else {\n // Without the <br />, the skeleton lines will all run together if\n // `width` is specified\n elements.push(React.createElement(React.Fragment, { key: i },\n skeletonSpan,\n React.createElement(\"br\", null)));\n }\n }\n return (React.createElement(\"span\", { className: containerClassName, \"data-testid\": containerTestId, \"aria-live\": \"polite\", \"aria-busy\": (_c = styleOptions.enableAnimation) !== null && _c !== void 0 ? _c : defaultEnableAnimation }, Wrapper\n ? elements.map((el, i) => React.createElement(Wrapper, { key: i }, el))\n : elements));\n}\n\nfunction SkeletonTheme({ children, ...styleOptions }) {\n return (React.createElement(SkeletonThemeContext.Provider, { value: styleOptions }, children));\n}\n\nexport { SkeletonTheme, Skeleton as default };\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useState, useRef, useEffect } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport LazyLoad from 'react-lazy-load'\nimport Skeleton from 'react-loading-skeleton'\nimport './CartItemThumbnail.scss'\n\nconst CartItemThumbnail = ({ onThumbnailClick, src, orderItemId, editDisabled}) => {\n const [thumbnailLoading, setThumbnailLoading] = useState(true);\n const thumbnailRef = useRef();\n const [isImageVertical, setIsImageVertical] = useState(false)\n\n useEffect(() => {\n if (thumbnailRef.current && window.proofPreview && window.proofPreview[orderItemId] && window.proofPreview[orderItemId].length > 0) {\n thumbnailRef.current.src = URL.createObjectURL(window.proofPreview[orderItemId][0])\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [thumbnailRef.current, orderItemId])\n\n const defineImageOrientation = () => {\n const parentRect = thumbnailRef?.current?.closest('.product-image-container')?.getBoundingClientRect();\n if (parentRect && thumbnailRef?.current?.width/parentRect.width < thumbnailRef?.current?.height/parentRect.height) {\n setIsImageVertical(true)\n }\n setThumbnailLoading(false)\n }\n\n return (\n <div className=\"product-image-container\">\n {src && <LazyLoad className=\"loadWrapper\">\n <img\n style={{ height: `${isImageVertical ? '100%' : 'auto'}`, width: `${isImageVertical ? 'auto' : '100%'}` }}\n alt=\"product_image\"\n src={src}\n ref={thumbnailRef}\n onClick={(e) => !editDisabled && onThumbnailClick(e)}\n onLoad={() => defineImageOrientation()}\n className={`product-image ${thumbnailLoading && 'hide'} ${editDisabled && 'disabled'}`}\n />\n </LazyLoad>}\n {thumbnailLoading && src && (\n <Skeleton className=\"skeleton thumbnail-loader\" width={100} height={100} />\n )}\n </div>\n )\n}\n\nexport default observer(CartItemThumbnail)\n","import React from 'react'\nimport Icon from '$core-components/Icon'\nimport './CartItemAlert.scss'\n\nconst CartItemAlert = ({ message, className }) => (\n <div className={`delete-cart-item ${className}`}>\n <div className=\"content\">\n <div className=\"cart-delete-icon\">\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\" />\n </div>\n <div className=\"text\">{message}</div>\n </div>\n </div>\n);\n\nexport default CartItemAlert\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport Icon from '$core-components/Icon'\nimport './InfoMessage.scss'\n\nconst InfoMessage = ({ type, messages }) => messages?.map?.(({ message }) => (\n <div className=\"cart-item-message\">\n <Icon name={`${type}.svg`} width=\"12px\" height=\"12px\"/>\n <p className={type}>{message}</p>\n </div>\n))\n\nexport default observer(InfoMessage)\n","import React, { useState } from \"react\";\nimport { UStoreProvider } from \"@ustore/core\";\nimport { observer } from \"mobx-react-lite\";\nimport { t } from \"$themelocalization\";\nimport LoadingDots from \"$core-components/LoadingDots\";\nimport CartCheckbox from \"../CartList/CartCheckbox\";\nimport CartErrorModel from \"../model/CartErrorModel\";\nimport DisplayPrice from \"./DisplayPrice\";\nimport CartItemActions from \"./CartItemActions\";\nimport ProductName from \"./ProductName\";\nimport ProductProperties from \"./ProductProperties\";\nimport CartItemThumbnail from \"./CartItemThumbnail\";\nimport CartItemAlert from \"./CartItemAlert\";\nimport InfoMessage from \"./InfoMessage\";\nimport \"./index.scss\";\nimport { Nickname } from \"./Nickname\";\n\nconst Price = observer(({ currencyState, price, hasPricing }) =>\n price ? (\n <DisplayPrice\n price={price}\n hasPricing={hasPricing}\n isHighlighted\n currencyState={currencyState}\n />\n ) : (\n <LoadingDots className=\"loading-dots\" />\n )\n);\n\nconst CartItem = ({ currencyState, item, showSelection = true }) => {\n const {\n orderItemId,\n checked,\n quantity,\n thumbnailUrl,\n quantityPerRecipient,\n numRecipients,\n product,\n errors,\n warnings,\n price,\n _listModel,\n _cartModel,\n properties,\n } = item;\n const [alertMessage, setAlertMessage] = useState(\"\");\n\n const getItemQuantity = () => {\n const totalQuantity =\n numRecipients && quantityPerRecipient\n ? numRecipients * quantityPerRecipient\n : quantity;\n if (product.unit.packSingular) {\n return quantity > 1\n ? `${totalQuantity} ${product.unit.packPlural}`\n : `${totalQuantity} ${product.unit.packSingular}`;\n } else {\n return quantity > 1\n ? `${totalQuantity} ${product.unit.plural}`\n : `${totalQuantity} ${product.unit.singular}`;\n }\n };\n\n //const getItemData = async (manuscriptID) => {};\n\n const onEdit = async () => {\n if (properties.length > 0) {\n const id = properties.find((prop) => prop.name === \"Manuscript ID\");\n await fetch(\n // \"https://acsdevapi.cierant.com/api/SKU/search/\" +\n \"https://xmpiedirector.cierant.com/acsapi/api/sku/search/\" +\n encodeURIComponent(id.value)\n )\n .then((response) => response.json())\n .then((response) => {\n const defaultItems = {\n Article: response[0].manUID,\n Pagecount: response[0].pageCount,\n ArticleName: response[0].articleName,\n };\n UStoreProvider.state.customState.set(\"currentItems\", defaultItems);\n })\n .catch(function (err) {\n // There was an error\n console.warn(\"Something went wrong.\", err);\n });\n }\n\n item.edit();\n };\n\n const onMoveItemToWishlist = () => {\n item.moveItemToWishlist();\n };\n const onMoveItemToCart = () => {\n item.moveItemToCart();\n };\n const onDelete = () => {\n setAlertMessage(t(\"Cart.CartItemDeleted\"));\n item.delete();\n };\n const onDuplicateItem = () => {\n //TODO: implement\n };\n const onAssignToList = ({ listType, value }) => {\n //TODO: implement\n };\n\n const handleTransitionEnd = (e) => {\n if (\n e.target.classList.contains(\"cart-ng-confirmation-dialog-backdrop\") &&\n e.target.classList.contains(\"fade\") &&\n !e.target.classList.contains(\"show\")\n ) {\n onDelete();\n }\n };\n\n const editDisabled =\n item == null ||\n errors.some(\n ({ errorType }) =>\n errorType === CartErrorModel.CART_ERROR_TYPES.ProductNotAvailable\n );\n const itemInListMode = !_listModel.isUnassigned && _cartModel.isListsMode;\n\n return (\n <div\n className={`item-box-container ${\n _listModel.isOrderEdit ? \"item-order-edit\" : \"\"\n } ${alertMessage ? \"close-item\" : \"\"}`}\n onTransitionEnd={handleTransitionEnd}\n >\n <CartItemAlert\n message={alertMessage}\n className={alertMessage ? \"move-right\" : \"\"}\n />\n <div\n className={`item-box ${alertMessage ? \"move-right\" : \"\"} ${\n showSelection ? \"has-selection\" : \"\"\n } `}\n >\n <div className=\"mobile-title-container\">\n <div className=\"mobile-product-name\">\n {showSelection && (\n <div className=\"cart-item-checkbox-cell\">\n <CartCheckbox\n id={orderItemId}\n name={orderItemId}\n className=\"item-checkbox\"\n checked={checked}\n onSelect={() => item.toggleSelect()}\n />\n </div>\n )}\n <ProductName item={item} />\n </div>\n <div className=\"mobile-nickname\">\n {item.nickname && (\n <Nickname\n nickname={item.nickname}\n setNickname={(newNickname) => item.updateNickname(newNickname)}\n />\n )}\n </div>\n </div>\n {showSelection && (\n <div className=\"cart-item-checkbox-cell\">\n <CartCheckbox\n id={orderItemId}\n name={orderItemId}\n className=\"item-checkbox\"\n checked={checked}\n onSelect={() => item.toggleSelect()}\n />\n </div>\n )}\n <CartItemThumbnail\n src={thumbnailUrl}\n onThumbnailClick={() => item.edit()}\n orderItemId={orderItemId}\n editDisabled={editDisabled}\n />\n <div className=\"item-description\">\n <ProductName item={item} />\n <Price\n price={price}\n hasPricing={product.hasPricing}\n currencyState={currencyState}\n />\n <ProductProperties product={product} item={item} />\n <div className=\"total\">\n {t(\"Cart.Item.Total\")}: {getItemQuantity()}\n </div>\n </div>\n <div className=\"item-actions\">\n <Price\n price={price}\n currencyState={currencyState}\n hasPricing={product.hasPricing}\n />\n <div className=\"total\">\n {t(\"Cart.Item.Total\")}: {getItemQuantity()}\n </div>\n <CartItemActions\n {...{\n editDisabled,\n item,\n setAlertMessage,\n onEdit,\n onMoveItemToWishlist,\n onMoveItemToCart,\n onDelete,\n onDuplicateItem,\n onAssignToList,\n }}\n />\n </div>\n {errors?.length || warnings?.length ? (\n <div\n className={`cart-item-warning-error-messages ${\n itemInListMode ? \"warning-in-list-mode\" : \"\"\n }`}\n >\n {errors?.length ? (\n <InfoMessage type=\"error\" messages={errors} />\n ) : null}\n {warnings?.length ? (\n <InfoMessage type=\"warning\" messages={warnings} />\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n );\n};\n\nexport default observer(CartItem);\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport CartSummaryContent from './CartSummaryContent'\nimport CartSummaryButton from './CartSummaryButton'\nimport { CartSummaryError } from './CartSummaryError'\nimport CartSummaryExportSuccess from './CartSummaryExportSuccess'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from '../CartList/AssignToListModal'\nimport './InListsCartSummary.scss'\nimport CartSummaryExportError from './CartSummaryExportError'\nimport CartListModel from '../model/CartListModel'\n\nconst InListCartSummary = ({\n currencyState,\n model,\n loading,\n list\n}) => {\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n\n const handleAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await list.reAssign(value.value, true)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await list.reAssignToNew(value.value, true)\n }\n }\n\n const isEmptyListClass = list?.items?.length === 0 ? 'in-list-cart-summary-empty-list': ''\n const assignToItemCount = () => {\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return model?.summary?.selectedItemsCount\n }\n return 0\n }\n\n return (\n <div className={`in-lists-cart-summary ${isEmptyListClass}`}>\n <CartSummaryContent\n currencyState={currencyState}\n model={model}\n loading={loading}\n />\n <CartSummaryButton model={model} loading={loading} setShowAssignToListModal={setShowAssignToListModal}/>\n {model?.openedList?.exportSuccess\n && <CartSummaryExportSuccess list={list}/>}\n {currencyState.isSecondaryCurrency && <CartSummaryError message={t('Cart.Summary.Warning.PaymentInfo')} />}\n {model?.openedList?.exportError && <CartSummaryExportError model={model} message={t('Cart.Summary.ExportError')} />}\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={handleAssignToListSave}\n model={model}\n list={list}\n count={assignToItemCount()}\n />\n }\n </div>\n )\n}\n\nexport default observer(InListCartSummary)\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { debounce } from \"throttle-debounce\";\nimport { t } from \"$themelocalization\";\nimport CartListModel from \"../model/CartListModel\";\nimport ListBar from \"./ListBar\";\nimport CartItem from \"../CartItem\";\nimport { CART_MODE } from \"../../../services/utils\";\nimport InListsCartSummary from \"../CartSummary/InListsCartSummary\";\n\nconst getItemsCountForLoad = () => {\n const cartItemHeight = 165;\n return Math.floor(window.innerHeight / cartItemHeight);\n};\n\nconst getListTitle = (list) => {\n if (\n list.id === CartListModel.CART_LIST_TYPES.DEFAULT &&\n list._cartModel.hasEditOrApproval\n )\n return t(\"Cart.CartSectionTitle\");\n return list.title;\n};\n\nconst List = ({ model, list, currencyState }) => {\n const [loadedItems, setLoadedItems] = useState(\n list?.items.slice(0, getItemsCountForLoad())\n );\n const [listOpen, setListOpen] = useState(\n model.openedList?.id === list.id || !model.isListsMode\n );\n const listContentRef = useRef(null);\n const showSummary = model.isListsMode;\n const isEmptyList =\n list.itemsCount === 0 && (model.isListsMode || model.isSingleListMode);\n\n useEffect(() => {\n if (list.items) {\n setLoadedItems(list.items);\n setTimeout(() => setMaxHeight(), 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [list.items]);\n\n const setMaxHeight = () => {\n if (model.isListsMode && listContentRef.current) {\n if (model.openedList?.id === list.id) {\n setListOpen(true);\n listContentRef.current.style.maxHeight =\n listContentRef.current.scrollHeight + \"px\";\n } else {\n setListOpen(false);\n listContentRef.current.style.maxHeight = \"0px\";\n }\n }\n };\n\n useEffect(() => {\n const setMaxHeightDebounced = debounce(100, setMaxHeight);\n if (model.isListsMode) {\n window.addEventListener(\"resize\", setMaxHeightDebounced);\n const contentObserver = new MutationObserver(setMaxHeightDebounced);\n contentObserver.observe(listContentRef.current, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n return () => {\n window.removeEventListener(\"resize\", setMaxHeightDebounced);\n contentObserver.disconnect();\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (model._cartMode === CART_MODE.WishList && list.items.length === 0)\n return null;\n\n const onTitleClick = () => {\n if (!model.isListsMode) {\n return;\n }\n model.openList(list.id === model.openedList?.id ? null : list.id);\n };\n\n const getListClasses = () => {\n if (model?.isListsMode) {\n const classes = [\"cart-lists-mode\"];\n if (list.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n classes.push(\"unassigned-list\");\n }\n if (list.id === model?.openedList?.id) {\n classes.push(\"list-is-open\");\n }\n if (isEmptyList) {\n classes.push(\"empty-list\");\n }\n return classes.join(\" \");\n }\n if (\n list.id === CartListModel.CART_LIST_TYPES.DEFAULT ||\n CartListModel.CART_LIST_TYPES.ORDER_APPROVAL\n ) {\n return \"list-is-open\";\n }\n\n return \"\";\n };\n\n const getListContentClasses = () => {\n const classes = [\"list-content\"];\n if (!listOpen) {\n classes.push(\"closed-list\");\n }\n return classes.join(\" \");\n };\n\n const onTransitionEnd = (e) => {\n if (e.target !== listContentRef.current) return;\n setMaxHeight();\n };\n\n return (\n <div className={getListClasses()}>\n <ListBar\n key={`list-bar-${list.id}`}\n model={model}\n list={list}\n emptyAllText={list.emptyAllText}\n listTitle={getListTitle(list)}\n onTitleClick={model.isListsMode ? onTitleClick : null}\n />\n <div\n className={getListContentClasses()}\n ref={listContentRef}\n onTransitionEnd={onTransitionEnd}\n >\n {isEmptyList ? (\n <div className=\"cart-lists-empty-list\">{t(\"Cart.EmptyListText\")}</div>\n ) : (\n loadedItems.map((item) => (\n <CartItem\n key={item.orderItemId}\n currencyState={currencyState}\n item={item}\n showSelection={\n model.isListsMode\n ? list.isUnassigned\n : list.isDefault || list.isOrderApproval || list.isOrderEdit\n }\n properties={item.properties}\n />\n ))\n )}\n {showSummary && (\n <InListsCartSummary\n currencyState={currencyState}\n model={model ?? null}\n loading={!model || model?.summary?.loading}\n list={list}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default observer(List);\n","import React, { useRef } from 'react'\nimport { NavHashLink } from 'react-router-hash-link'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { Icon } from '$core-components/Icon'\nimport List from './List'\nimport CartListModel from '../model/CartListModel'\nimport Slot from '../../widgets/Slot'\nimport './List.scss'\nimport themeVariables from '$styles/_theme.scss'\n\n\nconst CartList = ({ model, currencyState }) => {\n const navHashLinkRef = useRef()\n const headerHeightDesktop = getComputedStyle(document.documentElement).getPropertyValue('--header-height-desktop');\n\n\n const getHeaderOffset = () => {\n return window.innerWidth < parseInt(themeVariables.lg) && headerHeightDesktop ? 0 : parseInt(headerHeightDesktop)\n }\n const scrollWidthOffset = (el) => {\n window.scrollTo({top: el.getBoundingClientRect().top + window.scrollY - getHeaderOffset(), behavior: 'smooth'});\n }\n\n if (!model) return null\n\n return (\n <div className={`list-container ${model.isListsMode ? 'cart-lists-mode' : ''}`} id=\"cart-list\">\n <div className=\"cart-header\">\n <div className=\"list-title\">\n {t('Cart.ShoppingCartTitle')} {model.affectPricingItems.length && model.isWishListMode ? `(${model.affectPricingItems.length})` : null}\n </div>\n {\n model.lists.some((list) => list.id === CartListModel.CART_LIST_TYPES.WISH_LIST) &&\n (\n <NavHashLink ref={navHashLinkRef} to={`#wish-list-${CartListModel.CART_LIST_TYPES.WISH_LIST}`} scroll={el => scrollWidthOffset(el)} >\n <Icon name=\"go_to_wish_list.svg\" width=\"20px\" height=\"20px\" title={t('Cart.GoToWishList')}/>\n </NavHashLink>\n )\n }\n </div>\n <Slot name=\"cart_under_title\" />\n {\n model.shoppingCartText &&\n <div className=\"list-text\" dangerouslySetInnerHTML={{ __html: model.shoppingCartText }}/>\n }\n {\n model.affectPricingItems.length === 0 && model.isWishListMode &&\n <div className=\"list-empty\">\n <div className=\"list-empty-title\">{t('Cart.Wishlist.EmptyCartListText')}</div>\n <div className=\"list-empty-divider\"/>\n </div>\n }\n {\n model.affectPricingLists.map((list) => (\n <List\n key={`list-${list.originalOrderFriendlyId ?? list.id}`}\n model={model}\n list={list}\n currencyState={currencyState}\n />\n ))\n }\n </div>\n )\n}\n\nexport default observer(CartList)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport ListBar from './ListBar'\nimport CartItem from '../CartItem'\nimport CartListModel from '../model/CartListModel'\nimport './List.scss'\nimport './WishList.scss'\n\nconst WishList = ({ model, list }) => (\n <div className=\"list-container wish-list\" id={`wish-list-${CartListModel.CART_LIST_TYPES.WISH_LIST}`}>\n <div className={`cart-header ${list?.items.length === 0 ? 'list-is-empty' : ''}`}>\n <div className=\"list-title\">\n {list.title} ({list.items.length})\n </div>\n </div>\n {list.items.length === 0 ? (\n <div className=\"list-empty\">\n <div className=\"list-empty-title\">{t('Cart.Wishlist.EmptyWishListText')}</div>\n </div>\n ) : (\n <>\n <ListBar\n key={`list-bar-${list.id}`}\n model={model}\n list={list}\n listTitle={t('Cart.Wishlist.ListBarTitle')}\n emptyAllText={t('Cart.Wishlist.EmptyButtonText')}\n sectionTitle={t('Cart.Wishlist.ListBarTitle')}\n />\n <div>\n {list.items.filter((item) => item.listId === list.id).map((item) => (\n <CartItem\n key={item.orderItemId}\n item={item}\n showSelection={false}\n />\n )\n )}\n </div>\n </>\n )}\n </div>\n)\n\nexport default observer(WishList)\n","import React from 'react'\nimport Skeleton from 'react-loading-skeleton'\n\nimport 'react-loading-skeleton/dist/skeleton.css'\nimport './CartItemSkeleton.scss'\n\nexport const CartItemSkeleton = () => (\n <div className=\"cart-item-skeleton\">\n <Skeleton className=\"skeleton thumbnail\"/>\n\n <div className=\"description\">\n <Skeleton className=\"skeleton name\"/>\n <Skeleton className=\"skeleton description-1\"/>\n <Skeleton className=\"skeleton description-2\"/>\n <Skeleton className=\"skeleton description-3\"/>\n </div>\n </div>\n)\n\n","import React from 'react'\nimport { t } from '$themelocalization'\nimport ListBar from './ListBar'\nimport { CartItemSkeleton } from '../CartItem/CartItemSkeleton'\nimport './List.scss'\n\nconst ListContainerSkeleton = ({ itemsCount, title }) => {\n return (\n <div className=\"list-container\">\n <div className=\"cart-list-container\">\n <div className=\"cart-header\">\n <div className=\"list-title\">\n {`${title} (${itemsCount})`}\n </div>\n </div>\n <ListBar\n list={{ loading: true, items: new Array(itemsCount) }}\n emptyAllText={t('Cart.EmptyCartButton')}\n />\n {(new Array(itemsCount)).fill(1).map((_, index) => {\n return <CartItemSkeleton key={`item-skeleton-${index}`} />\n })}\n </div>\n </div>\n )\n}\n\nexport default ListContainerSkeleton\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport CartListModel from '../model/CartListModel'\nimport CartSummaryContainer from '../CartSummary/CartSummaryContainer'\nimport Slot from '../../widgets/Slot'\nimport CartList from './index'\nimport WishList from './WishList'\nimport ListContainerSkeleton from './ListContainerSkeleton'\nimport './ListContainer.scss'\n\nconst ListContainer = ({\n currencyState,\n model,\n itemsCount\n}) => {\n if (\n !model\n || (model.isWishListMode && !model[CartListModel.CART_LIST_TYPES.DEFAULT])\n || (model.isListsMode && !model[CartListModel.CART_LIST_TYPES.UNASSIGNED])\n || model.affectPricingLists.some((list) => list.loading)\n ) {\n return (<div className=\"skelaton-cart-list-container\">\n <ListContainerSkeleton itemsCount={itemsCount} title={t('Cart.ShoppingCartTitle')}/>\n <ListContainerSkeleton itemsCount={5} title={t('Cart.Wishlist.WishListTitle')}/>\n </div>)\n }\n\n return (\n <div className=\"cart-list-container\">\n <CartList currencyState={currencyState} model={model}/>\n {model.affectPricingItems.length > 0 && (\n <div className=\"cart-summary-mobile\">\n <CartSummaryContainer\n model={model ?? null}\n loading={!model || model.loading.summary}\n currencyState={currencyState}\n />\n </div>\n )}\n {model.isWishListMode ? (\n <>\n <Slot name=\"cart_above_wishlist_section\" />\n {model[CartListModel.CART_LIST_TYPES.WISH_LIST]\n ? <WishList\n key={CartListModel.CART_LIST_TYPES.WISH_LIST}\n currencyState={currencyState}\n model={model}\n list={model[CartListModel.CART_LIST_TYPES.WISH_LIST]}\n />\n : <ListContainerSkeleton itemsCount={0} title={t('Cart.Wishlist.WishListTitle')}/>\n }\n </>\n ) : null}\n </div>\n )\n}\n\nexport default observer(ListContainer)\n","import React from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport Button from '$core-components/Button'\nimport './EmptyPage.scss'\n\nconst EmptyPage = ({\n title,\n text,\n buttonText = '',\n buttonUrl = '',\n shoppingCartText = '',\n}) => {\n const navigate = useNavigate();\n\n return (\n <div className=\"no-results\">\n <div className=\"top-section\">\n <div className=\"title no-results-title\">{title}</div>\n <div className=\"no-results-subtitle\">{text}</div>\n {buttonText && buttonUrl ? (\n <Button className=\"cart-ng-empty-cart-button\" text={buttonText} onClick={() => navigate('/')}/>\n ) : null}\n {shoppingCartText ? (\n <div className=\"shopping-cart-text\" dangerouslySetInnerHTML={{__html: shoppingCartText}}/>\n ) : null}\n </div>\n </div>\n );\n};\n\nexport default EmptyPage;","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport LoadingDots from '$core-components/LoadingDots'\nimport './LoadingDots.scss'\n\nconst LoadingDialog = ({ open }) => {\n return (\n <Modal isOpen={open} className=\"cart-ng-loading-dialog\" modalClassName=\"loading-dialog-container\" backdropClassName=\"loading-dialog-modal-backdrop\" wrapClassName=\"cart-ng-loading-dialog-wrapper\">\n <ModalBody className=\"dialog-content\">\n <div className=\"hour-glass-icon\">\n <svg width=\"44px\" height=\"70px\" viewBox=\"0 0 44 70\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" >\n <title>Icon button/20px/process</title>\n <g id=\"Icon-button/20px/process\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\" opacity=\"0.588438488\">\n <g id=\"hourglass\" transform=\"translate(0.000000, 0.000000)\" fill=\"#000000\" fillRule=\"nonzero\">\n <path d=\"M40.8332422,0 L3.5,0 C1.57035156,0 0,1.57035156 0,3.5 C0,5.42964844 1.57035156,7 3.5,7 L40.8333789,7 C42.7630273,7 44.3333789,5.42964844 44.3333789,3.5 C44.3333789,1.57035156 42.7628906,0 40.8332422,0 Z M40.8332422,4.66662109 L3.5,4.66662109 C2.85714844,4.66662109 2.33337891,4.14394531 2.33337891,3.5 C2.33337891,2.85605469 2.85714844,2.33337891 3.5,2.33337891 L40.8333789,2.33337891 C41.4762305,2.33337891 42,2.85605469 42,3.5 C42,4.14394531 41.4760938,4.66662109 40.8332422,4.66662109 Z\" id=\"Shape\"></path>\n <path d=\"M40.8332422,63 L3.5,63 C1.57035156,63 0,64.5703516 0,66.5 C0,68.4296484 1.57035156,70 3.5,70 L40.8333789,70 C42.7630273,70 44.3333789,68.4296484 44.3333789,66.5 C44.3333789,64.5703516 42.7628906,63 40.8332422,63 Z M40.8332422,67.6666211 L3.5,67.6666211 C2.85714844,67.6666211 2.33337891,67.1439453 2.33337891,66.5 C2.33337891,65.8560547 2.85714844,65.3333789 3.5,65.3333789 L40.8333789,65.3333789 C41.4762305,65.3333789 42,65.8560547 42,66.5 C42,67.1439453 41.4760938,67.6666211 40.8332422,67.6666211 Z\" id=\"Shape\"></path>\n <path d=\"M30.4803516,30.6692969 C36.4046484,24.745 39.6666211,16.8687695 39.6666211,8.49214844 L39.6666211,5.83337891 C39.6666211,5.18820313 39.1439453,4.66675781 38.5,4.66675781 L5.83324219,4.66675781 C5.18929688,4.66675781 4.66662109,5.18820313 4.66662109,5.83337891 L4.66662109,8.49214844 C4.66662109,16.87 7.92859375,24.745 13.8517969,30.6692969 L15.0242969,31.8417969 C15.8560938,32.6735938 16.3332422,33.8239453 16.3332422,35 C16.3332422,36.1760547 15.8560938,37.3264062 15.0253906,38.1582031 L13.8528906,39.3307031 C7.92859375,45.255 4.66662109,53.13 4.66662109,61.5078516 L4.66662109,64.1666211 C4.66662109,64.8117969 5.18929688,65.3332422 5.83324219,65.3332422 L38.4998633,65.3332422 C39.1438086,65.3332422 39.6666211,64.8117969 39.6666211,64.1666211 L39.6666211,61.5078516 C39.6666211,53.1312305 36.4045117,45.255 30.4802148,39.3307031 L29.3077148,38.1582031 C28.4641602,37.3146484 27.9998633,36.1935547 27.9998633,35 C27.9998633,33.8064453 28.4641602,32.6853516 29.3077148,31.8417969 L30.4803516,30.6692969 Z M27.6580664,30.1921484 C26.3735938,31.4755273 25.6666211,33.1823242 25.6666211,35 C25.6666211,36.8176758 26.3735938,38.5244727 27.6580664,39.8078516 L28.8305664,40.9803516 C34.3139453,46.4637305 37.3333789,53.7541211 37.3333789,61.5078516 L37.3333789,63 L7,63 L7,61.5078516 C7,53.7530273 10.0192969,46.4637305 15.5014453,40.9803516 L16.6739453,39.8078516 C17.9596484,38.5244727 18.6666211,36.8164453 18.6666211,35 C18.6666211,33.1835547 17.9596484,31.4755273 16.6751758,30.1921484 L15.5026758,29.0196484 C10.0192969,23.5362695 7,16.2457422 7,8.49214844 L7,7 L37.3333789,7 L37.3333789,8.49214844 C37.3333789,16.2458789 34.314082,23.5362695 28.8307031,29.0196484 L27.6580664,30.1921484 Z\" id=\"Shape\"></path>\n <path d=\"M32.0260938,19.6548242 C31.9082422,19.3585547 31.5069727,18.6666211 30.3332422,18.6666211 C24.2712695,18.6666211 21.5703906,17.3680664 20.4993359,16.593418 C19.163457,15.6262695 17.4496875,15.3730664 15.9107813,15.9178906 C14.4420117,16.4370117 13.3663086,17.5920117 12.9614844,19.0853906 C12.8564844,19.4739453 12.8377539,19.725918 12.8377539,19.725918 C12.8202539,19.9557422 12.8704297,20.2042969 12.9836328,20.4060938 C14.0768359,22.3439453 15.3379297,24.3878906 17.1532813,26.2032422 L18.3245508,27.3757422 C20.0500781,29.0989453 20.9997266,31.3925391 20.9997266,33.8332422 C20.9997266,34.478418 21.5224023,34.9998633 22.1663477,34.9998633 C22.810293,34.9998633 23.3329688,34.478418 23.3329688,33.8332422 C23.3329688,31.3937695 24.2826172,29.1000391 26.0069141,27.3757422 L27.1806445,26.2020117 C27.4688477,25.9150391 27.8444141,25.5603906 28.2574414,25.1730664 C31.2735938,22.3369727 32.5417969,20.9567969 32.0260938,19.6548242 Z M26.6571484,23.4733789 C26.2255273,23.8805273 25.8310938,24.251582 25.5301758,24.5525 L24.3564453,25.7262305 C23.45,26.631582 22.715,27.6628516 22.1653906,28.7805273 C21.615918,27.6628516 20.880918,26.631582 19.9743359,25.7262305 L18.8029297,24.5537305 C17.3702539,23.1199609 16.3214844,21.5414063 15.2306055,19.6385547 C15.5188086,18.6644336 16.2654297,18.2676758 16.6889844,18.1171484 C17.5032813,17.8289453 18.4168359,17.9655273 19.1307813,18.4835547 C20.6170508,19.5592578 23.5477539,20.8273242 29.1618359,20.9837305 C28.440918,21.7957031 27.3092969,22.8608789 26.6571484,23.4733789 Z\" id=\"Shape\"></path>\n <path d=\"M34.9194727,59.4089453 C34.6266211,55.6266211 33.11,54.0562695 31.3553516,52.2362695 C31.1185547,51.9900391 30.8712305,51.7346484 30.6180273,51.4639453 C29.1526758,49.8982422 27.0830273,49 24.9375,49 L19.3946484,49 C17.2503516,49 15.1794727,49.8983789 13.7141211,51.4639453 C13.460918,51.7346484 13.2148242,51.9889453 12.9778906,52.2351758 C11.2220117,54.0551758 9.70539063,55.6266211 9.41376953,59.4101758 C9.38806641,59.7344727 9.50003906,60.0541211 9.72056641,60.2933789 C9.9421875,60.5314063 10.2514453,60.6667578 10.5768359,60.6667578 L33.7561328,60.6667578 C34.0804297,60.6667578 34.3907813,60.5314063 34.6124023,60.2922852 C34.8330664,60.0530273 34.9439453,59.7321484 34.9194727,59.4089453 Z M11.9057422,58.3333789 C12.3012695,56.2964063 13.2439453,55.3210547 14.6578906,53.8557031 C14.9028906,53.6014063 15.1571875,53.336582 15.4185938,53.0576758 C16.4441211,51.9610547 17.8930664,51.3333789 19.3946484,51.3333789 L24.9375,51.3333789 C26.4401758,51.3333789 27.8891211,51.9621484 28.9146484,53.056582 C29.1771484,53.3389063 29.4314453,53.6014063 29.6776758,53.8569336 C31.0905273,55.3222852 32.0319727,56.2976367 32.4287305,58.3333789 L11.9057422,58.3333789 Z\" id=\"Shape\"></path>\n <path d=\"M22.1316211,37.3333789 C21.4876758,37.3333789 20.965,37.8548242 20.965,38.5 L20.965,39.6666211 C20.965,40.3117969 21.4876758,40.8332422 22.1316211,40.8332422 C22.7755664,40.8332422 23.2982422,40.3117969 23.2982422,39.6666211 L23.2982422,38.5 C23.2982422,37.8548242 22.7755664,37.3333789 22.1316211,37.3333789 Z\" id=\"Path\"></path>\n <path d=\"M22.1316211,43.1666211 C21.4876758,43.1666211 20.965,43.6880664 20.965,44.3332422 L20.965,45.4998633 C20.965,46.1450391 21.4876758,46.6664844 22.1316211,46.6664844 C22.7755664,46.6664844 23.2982422,46.1450391 23.2982422,45.4998633 L23.2982422,44.3332422 C23.2982422,43.6882031 22.7755664,43.1666211 22.1316211,43.1666211 Z\" id=\"Path\"></path>\n </g>\n </g>\n </svg>\n </div>\n <div className=\"dialog-text\">\n {t('Cart.Dialog.Loading.LoadingDialogText')}\n </div>\n <div>\n <LoadingDots className=\"loading-dots\"/>\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default LoadingDialog\n","import React, { useEffect } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport ListContainer from './CartList/ListContainer'\nimport EmptyPage from './EmptyPage'\nimport LoadingDialog from './LoadingDialog'\nimport CartSummaryContainer from './CartSummary/CartSummaryContainer'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport './CartNG.scss'\n\nconst CartNG = ({\n currencyState,\n model,\n itemsCount\n}) => {\n useEffect(() => {\n window.scrollTo({ top: 0, behavior: 'instant' })\n }, []);\n\n if (\n model?.initiated\n && ((model?.isWishListMode && model.items.length === 0 && model.affectPricingLists.length > 0)\n || (model?.isListsMode && model.listsItemsCount === 0 && model.lists.length === 1))\n && model.affectPricingLists.every((list) => !list.loading)\n ) {\n return <EmptyPage\n title={t('Cart.EmptyCartTitle')}\n text={t('Cart.EmptyCartText')}\n buttonText={t('Cart.EmptyCartButtonText')}\n buttonUrl={urlGenerator.get({page: 'home'})}\n shoppingCartText={model?.shoppingCartText}\n />\n }\n\n return (\n <div className=\"cart-container\">\n <ListContainer\n currencyState={currencyState}\n model={model ?? null}\n itemsCount={itemsCount}\n />\n <div className=\"cart-summary-desktop\">\n <CartSummaryContainer\n currencyState={currencyState}\n model={model ?? null}\n loading={!model || model?.summary?.loading}\n withSticky={true}\n />\n </div>\n <LoadingDialog open={model?.loading ?? false}/>\n </div>\n )\n}\n\nexport default observer(CartNG)\n","import React, { useEffect, useRef, useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { UStoreProvider } from '@ustore/core'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport CartModel from '../components/cart/model/CartModel'\nimport CartNG from '../components/cart/CartNG'\nimport Layout from '../components/layout'\nimport Slot from '../components/widgets/Slot'\nimport { getCartMode, CART_MODE } from '../services/utils'\nimport Legacy from './Legacy'\nimport './Cart.scss'\n\nconst Cart = (props) => {\n const { state: { currentStore, currentCurrency, currentCulture } } = props\n const [currencyState, setCurrencyState] = useState(() => ({\n isSecondaryCurrency: currentCurrency.ID !== currentStore.PrimaryCurrencyID,\n showCurrencyCode: currentStore.ShowCurrencyCode,\n currencyCode: currentCurrency.Code,\n currencySymbol: currentCurrency.Symbol,\n }))\n const { storeBaseUrl, languageCode, apiUrl } = themeContext.get()\n const [cartItemsCount, setCartItemsCount] = useState()\n const navigate = useNavigate()\n const cartModel = useRef()\n\n useEffect(() => {\n setCurrencyState({\n isSecondaryCurrency: currentCurrency.ID !== currentStore.PrimaryCurrencyID,\n showCurrencyCode: currentStore.ShowCurrencyCode,\n currencyCode: currentCurrency.Code,\n currencySymbol: currentCurrency.Symbol,\n taxFormat: currentStore.TaxFormat,\n currencyFormat: currentCulture.CurrencyFormat,\n decimalSeparator: currentCulture.DecimalSeparator,\n decimalPlaces: currentCulture.DecimalPlaces,\n languageCode: currentCulture.LanguageCode,\n })\n }, [\n currentCurrency.Code,\n currentCurrency.ID,\n currentCurrency.Symbol,\n currentStore.ShowCurrencyCode,\n currentStore.PrimaryCurrencyID,\n currentCulture.CurrencyFormat,\n currentCulture.DecimalSeparator,\n currentCulture.DecimalPlaces,\n currentCulture.LanguageCode,\n currentStore.TaxFormat\n ]);\n\n const loadData = async () => {\n cartModel.current = new CartModel({\n cartMode: getCartMode(currentStore),\n UStoreProvider: UStoreProvider,\n storeBaseUrl,\n storeLanguageCode: languageCode,\n storeApiUrl: apiUrl,\n navigate,\n })\n\n cartModel.current.init()\n }\n\n useEffect(() => {\n if (getCartMode(currentStore) !== CART_MODE.Aspx) {\n loadData()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n setCartItemsCount(props.state.cartItemsCount?.ItemsCount)\n }, [props.state.cartItemsCount?.ItemsCount])\n\n if (getCartMode(currentStore) !== CART_MODE.Aspx)\n return (\n <Layout className=\"cart-ng\" {...props}>\n <Slot name=\"cart_under_header\" />\n <CartNG\n currencyState={currencyState}\n model={cartModel.current ?? null}\n itemsCount={\n !cartModel.current\n ? Math.min(props.state.cartItemsCount?.ItemsCount ?? 0, 10)\n : cartItemsCount\n }\n />\n </Layout>\n )\n\n return <Legacy {...props}/>\n}\n\nexport default Cart\n","import React, { useEffect } from 'react'\nimport Legacy from './Legacy'\nimport {UStoreProvider} from '@ustore/core'\n\n\n\nconst CheckoutComplete = (props) => {\n useEffect(() => {\n UStoreProvider.state.store.loadCartItemsCount()\n }, [])\n\n return <Legacy {...props}/>\n}\n\n\nexport default CheckoutComplete\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class CheckoutFinal extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class FileSubmission extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class CheckoutPaymentSubmission extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class MyRecipientLists extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class OrderHistory extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class PersonalInformation extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class Customization extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class uEditCustomization extends Component {\n render () {\n return <Legacy {...this.props} />\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class SplitShippingAddresses extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class OrderDetails extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class SplitShippingItems extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class Recipient extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class ProductUnavailable extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class Drafts extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class EmptyPage extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class ErrorPage extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useEffect, useState } from 'react'\nimport { useParams } from 'react-router-dom'\n\nimport { t } from '$themelocalization'\nimport Slider from '$core-components/Slider'\nimport { UStoreProvider } from '@ustore/core'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport ScrollableGallery from '$core-components/ScrollableGallery'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\nimport Layout from '../components/layout'\nimport { getIsNGProduct } from '../services/utils'\nimport ProductItem from '../components/products/ProductItem'\nimport CategoryItem from '../components/category/CategoryItem'\n\nimport './Search.scss'\n\nconst PRODUCTS_PAGE_SIZE = 8\n\n/**\n * This is the Search page\n * URL : http://<store-domain>/{language-code}/search/{search text}/\n *\n * @param {object} state - the state of the store\n */\n\nconst Search = (props) => {\n const searchValue = useParams().id\n const categories = props.customState?.categories\n const [searchResults, setSearchResults] = useState([])\n const [searchResultsCount, setSearchResultsCount] = useState()\n const galleryTitle = searchResultsCount ? t('SearchResults.Count_products', { count: searchResultsCount }) : ''\n\n useEffect(() => {\n (async () => {\n const { Products: searchResults, Count: searchResultsCount } = await UStoreProvider.api.products.search(searchValue, 1, PRODUCTS_PAGE_SIZE)\n setSearchResults(searchResults)\n setSearchResultsCount(searchResultsCount)\n })()\n }, [searchValue])\n\n const loadProducts = async () => {\n if (props.customState.searchResults?.length === searchResultsCount) return\n\n const nextPage = Math.ceil(searchResults.length / PRODUCTS_PAGE_SIZE) + 1\n const { Products: products } = await UStoreProvider.api.products.search(searchValue, nextPage, PRODUCTS_PAGE_SIZE)\n const joinedProducts = searchResults.concat(products)\n\n UStoreProvider.state.customState.set('searchResults', joinedProducts)\n setSearchResults(joinedProducts)\n }\n\n if (!props.state || !props.state.currentStore || !props.customState) {\n return null\n }\n\n return <Layout {...props} className='search-ng'>\n {searchResults && searchResultsCount > 0\n ? <div className=\"search-results\">\n <div className=\"title main-title\">{t('SearchResults.Title')}</div>\n <ScrollableGallery title={galleryTitle} hasMoreItems={true} onScroll={loadProducts}>\n {searchResults.map((model) => (\n <ProductItem\n key={model.ID}\n model={model} detailed\n productNameLines=\"2\"\n descriptionLines=\"4\"\n url={getIsNGProduct(model)\n ? urlGenerator.get({ page: 'products', id: model.FriendlyID, name: decodeStringForURL(model.Name) })\n : urlGenerator.get({ page: 'product', id: model.FriendlyID, name: decodeStringForURL(model.Name) })\n }\n />\n ))}\n </ScrollableGallery>\n </div>\n : (searchResults && !searchResults.length)\n ? <div className=\"no-results\">\n <div className=\"top-section\">\n <div className=\"title no-results-title\">{t('SearchResults.No_results_title')}</div>\n <div className=\"no-results-subtitle\">{t('SearchResults.No_results_subtitle')}</div>\n </div>\n {categories && categories.length > 0 &&\n <div className=\"bottom-section\">\n <div className=\"divider\"></div>\n <div className=\"title bottom-section-title\">{t('SearchResults.No_results_bottom_section_title')}</div>\n <div className=\"categories-wrapper\">\n <Slider multi>\n {\n categories.map((model) => {\n return <CategoryItem\n key={model.ID}\n model={model}\n url={urlGenerator.get({ page: 'category', id: model.FriendlyID, name: decodeStringForURL(model.Name) })} />\n })\n }\n </Slider>\n </div>\n </div>\n }\n </div>\n : null\n }\n </Layout>\n}\n\nexport default Search\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class OrderApprovalList extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class CustomMain extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class ClearingUnknownOrder extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","import React, { Component } from 'react'\nimport Legacy from './Legacy'\n\nexport default class ProductDetails extends Component {\n render () {\n return <Legacy {...this.props}/>\n }\n}\n","var _defs, _g, _g2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgXmpieLogo(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"a\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 896.82 792.26\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \".b{fill:#0070ae;}.c{fill:#fff;}.d{fill:#9acc65;}\"))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n className: \"c\",\n x: 241.68,\n y: 125.94,\n width: 406.76,\n height: 404.46\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"d\",\n d: \"M656.8,116.43H235.61v421.2h421.19V116.43Zm-16.71,404.48H252.32V133.13h387.77v387.78Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M525.47,306.24h-23.29l-29.07-85.17v68.2h12.14v16.96h-41.25v-16.96h10.15v-82.51h-12.14v-16.97h42.75l31.73,93.15,28.84-93.15h42.25v16.97h-12.14v82.51h11.65v16.96h-44.74v-16.96h9.81v-67.04l-26.68,84Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M339.49,396.22v-37.71h12.85c11.68,0,18.86,6.51,18.86,18.52s-6.34,19.19-18.52,19.19h-13.18Zm-24.36,45.05h-11.52v17.02h47.39v-17.02h-11.51v-28.03h16.36c23.19,0,38.71-15.35,38.71-37.21s-14.52-34.54-42.72-34.54h-48.23v17.02h11.52v82.76Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M430.67,358.51h-10.52v-17.02h45.39v17.02h-10.51v82.76h10.51v17.02h-45.39v-17.02h10.52v-82.76Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M587.08,458.29h-84.26v-17.02h10.51v-82.76h-12.51v-17.02h86.27v34.38h-20.02v-17.35h-29.37v30.7h29.37v18.02h-29.37v34.04h29.37v-19.69h20.02v36.71Z\"\n }), /*#__PURE__*/React.createElement(\"polygon\", {\n className: \"b\",\n points: \"418.42 289.29 379.17 244.9 415.41 206.81 423.9 206.81 423.9 189.82 383.65 189.82 383.65 206.81 394.5 206.81 368.75 233.14 345.35 206.81 356.21 206.81 356.21 189.82 307.62 189.82 307.62 206.81 316.1 206.81 352.7 249.43 313.26 289.29 303.62 289.29 303.62 306.24 346.87 306.24 346.87 289.29 336.55 289.29 363.16 261.64 386.8 289.29 376.48 289.29 376.48 306.24 428.06 306.24 428.06 289.29 418.42 289.29\"\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M610.3,186.72c7.12,0,12.73,5.58,12.73,12.67s-5.62,12.67-12.79,12.67-12.79-5.58-12.79-12.67,5.62-12.67,12.79-12.67h.05Zm-.11,2.15c-5.8,0-10.37,4.63-10.37,10.52s4.57,10.52,10.43,10.52,10.42-4.63,10.42-10.52-4.57-10.52-10.42-10.52h-.06Zm-5.12,3.02h4.57c2.71,0,4.09,.39,5.11,1.1,1,.68,1.63,1.76,1.63,3.19,0,2.33-1.75,3.49-3.31,4.03l4.07,6.48h-3.37l-3.72-6.11h-1.86v6.11h-3.12v-14.8Zm3.12,6.74h2.03c1.79,0,2.9-.91,2.9-2.37,0-1.91-1.66-2.26-3.52-2.26h-1.41v4.63Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M610.3,186.72c7.12,0,12.73,5.58,12.73,12.67s-5.62,12.67-12.79,12.67-12.79-5.58-12.79-12.67,5.62-12.67,12.79-12.67h.05Zm-.11,2.15c-5.8,0-10.37,4.63-10.37,10.52s4.57,10.52,10.43,10.52,10.42-4.63,10.42-10.52-4.57-10.52-10.42-10.52h-.06Zm-5.12,3.02h4.57c2.71,0,4.09,.39,5.11,1.1,1,.68,1.63,1.76,1.63,3.19,0,2.33-1.75,3.49-3.31,4.03l4.07,6.48h-3.37l-3.72-6.11h-1.86v6.11h-3.12v-14.8Zm3.12,6.74h2.03c1.79,0,2.9-.91,2.9-2.37,0-1.91-1.66-2.26-3.52-2.26h-1.41v4.63Z\"\n })))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M165.79,662.49h-5.79c-.67,0-1.21-.17-1.62-.51s-.72-.76-.93-1.28l-5.17-13.46h-24.81l-5.17,13.46c-.18,.47-.49,.88-.93,1.24-.44,.37-.98,.55-1.62,.55h-5.79l22.11-55.74h7.6l22.11,55.74Zm-36.22-20.69h20.64l-8.68-22.68c-.57-1.4-1.12-3.15-1.66-5.25-.28,1.06-.56,2.04-.83,2.94-.27,.89-.53,1.68-.79,2.35l-8.68,22.64Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M226.63,650.97c.41,0,.78,.17,1.12,.51l2.94,3.23c-2.26,2.64-5.01,4.71-8.24,6.18-3.23,1.48-7.12,2.22-11.67,2.22-3.99,0-7.6-.69-10.84-2.08-3.24-1.39-6.01-3.33-8.29-5.84-2.29-2.5-4.07-5.5-5.32-9-1.26-3.5-1.89-7.35-1.89-11.55s.67-8.05,2.02-11.56c1.35-3.5,3.25-6.51,5.69-9.02,2.44-2.51,5.37-4.47,8.78-5.85,3.41-1.39,7.17-2.08,11.28-2.08s7.57,.64,10.51,1.91,5.56,3,7.85,5.17l-2.43,3.46c-.18,.26-.39,.47-.62,.64-.23,.17-.57,.25-1,.25-.33,0-.69-.12-1.06-.37-.37-.25-.82-.55-1.33-.91-.52-.37-1.12-.75-1.82-1.17-.69-.42-1.52-.8-2.47-1.16-.95-.37-2.06-.67-3.32-.92-1.26-.25-2.72-.37-4.36-.37-2.96,0-5.67,.51-8.12,1.53-2.45,1.03-4.57,2.49-6.34,4.38-1.78,1.89-3.16,4.2-4.15,6.92-.99,2.72-1.49,5.77-1.49,9.14s.5,6.57,1.49,9.29c.99,2.72,2.34,5.03,4.05,6.91,1.71,1.88,3.74,3.31,6.07,4.3s4.86,1.48,7.56,1.48c1.64,0,3.12-.09,4.43-.29s2.53-.5,3.65-.92c1.12-.41,2.16-.94,3.13-1.57,.97-.64,1.93-1.4,2.91-2.28,.44-.39,.86-.59,1.27-.59Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M268.14,662.49h-3.05c-.67,0-1.21-.1-1.62-.31-.41-.21-.68-.65-.81-1.32l-.77-3.65c-1.03,.93-2.03,1.77-3.01,2.51-.98,.74-2.01,1.36-3.09,1.87-1.08,.51-2.23,.89-3.45,1.15-1.22,.26-2.58,.39-4.07,.39s-2.94-.21-4.26-.64c-1.32-.43-2.48-1.07-3.45-1.93-.98-.86-1.75-1.95-2.34-3.26-.58-1.31-.87-2.87-.87-4.66,0-1.56,.43-3.06,1.27-4.51,.85-1.44,2.22-2.73,4.11-3.85,1.89-1.12,4.37-2.04,7.43-2.75,3.06-.71,6.8-1.07,11.23-1.07v-3.09c0-3.08-.65-5.41-1.95-6.99-1.3-1.58-3.22-2.37-5.77-2.37-1.68,0-3.08,.21-4.23,.64-1.14,.43-2.13,.91-2.97,1.44s-1.55,1.01-2.16,1.44c-.6,.43-1.2,.64-1.79,.64-.46,0-.87-.12-1.21-.37-.35-.25-.62-.55-.83-.91l-1.23-2.22c2.16-2.1,4.49-3.67,6.98-4.71,2.5-1.04,5.26-1.56,8.3-1.56,2.19,0,4.13,.36,5.83,1.09,1.7,.73,3.13,1.74,4.28,3.03,1.16,1.3,2.03,2.87,2.62,4.71,.59,1.84,.89,3.87,.89,6.07v25.21Zm-17.83-4.24c1.21,0,2.31-.12,3.32-.37,1-.25,1.95-.6,2.83-1.05,.89-.46,1.74-1.01,2.55-1.65,.81-.65,1.6-1.39,2.37-2.22v-8.13c-3.16,0-5.85,.2-8.06,.6-2.21,.41-4.01,.93-5.4,1.58-1.39,.65-2.4,1.42-3.03,2.31-.63,.89-.94,1.88-.94,2.97s.17,1.94,.5,2.7c.33,.76,.78,1.38,1.35,1.86,.57,.48,1.23,.84,2.01,1.06s1.61,.33,2.51,.33Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M278.55,662.49v-39.41h3.93c.75,0,1.26,.14,1.54,.43,.28,.29,.48,.78,.58,1.48l.46,6.15c1.33-2.75,2.99-4.89,4.96-6.44,1.97-1.54,4.28-2.31,6.92-2.31,1.08,0,2.06,.12,2.93,.37,.88,.25,1.69,.59,2.43,1.03l-.89,5.17c-.18,.65-.58,.97-1.19,.97-.36,0-.91-.12-1.66-.37-.75-.25-1.79-.37-3.13-.37-2.39,0-4.39,.7-6,2.1s-2.95,3.44-4.03,6.11v25.09h-6.86Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M325.11,622.46c2.34,0,4.5,.4,6.48,1.19,1.98,.79,3.69,1.93,5.13,3.42,1.44,1.49,2.57,3.33,3.38,5.52,.81,2.19,1.22,4.69,1.22,7.49,0,1.09-.11,1.82-.35,2.18-.23,.36-.67,.54-1.31,.54h-26c.05,2.49,.38,4.66,1,6.5s1.47,3.38,2.55,4.61c1.08,1.23,2.36,2.15,3.86,2.76,1.49,.61,3.16,.91,5.02,.91,1.72,0,3.21-.2,4.46-.6,1.25-.4,2.32-.84,3.22-1.31,.9-.47,1.65-.9,2.26-1.3,.6-.4,1.12-.6,1.56-.6,.57,0,1,.22,1.31,.66l1.93,2.53c-.85,1.04-1.87,1.94-3.05,2.7-1.18,.77-2.45,1.4-3.8,1.89-1.35,.49-2.75,.86-4.19,1.11s-2.87,.37-4.28,.37c-2.7,0-5.19-.46-7.47-1.38-2.27-.92-4.24-2.27-5.9-4.04-1.66-1.78-2.95-3.98-3.88-6.6-.93-2.62-1.39-5.63-1.39-9.02,0-2.75,.42-5.32,1.26-7.7,.84-2.39,2.04-4.45,3.61-6.2,1.57-1.75,3.48-3.13,5.75-4.12,2.26-1,4.81-1.5,7.64-1.5Zm.15,5.1c-3.32,0-5.93,.97-7.83,2.9-1.9,1.93-3.09,4.61-3.55,8.03h21.26c0-1.61-.22-3.08-.66-4.41s-1.08-2.49-1.93-3.46c-.85-.97-1.88-1.73-3.1-2.26-1.22-.53-2.62-.8-4.19-.8Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M396.64,662.49h-5.79c-.67,0-1.21-.17-1.62-.51-.41-.34-.72-.76-.93-1.28l-5.17-13.46h-24.81l-5.17,13.46c-.18,.47-.49,.88-.93,1.24-.44,.37-.98,.55-1.62,.55h-5.79l22.11-55.74h7.6l22.11,55.74Zm-36.22-20.69h20.64l-8.68-22.68c-.57-1.4-1.12-3.15-1.66-5.25-.28,1.06-.56,2.04-.83,2.94-.27,.89-.53,1.68-.79,2.35l-8.68,22.64Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M411.84,639.23v23.26h-7.45v-55.74h15.63c3.49,0,6.52,.36,9.06,1.07,2.55,.71,4.65,1.74,6.31,3.09,1.66,1.35,2.89,2.97,3.68,4.88s1.19,4.04,1.19,6.4c0,1.97-.31,3.81-.93,5.52s-1.51,3.25-2.68,4.61-2.6,2.52-4.28,3.48c-1.69,.96-3.6,1.69-5.73,2.18,.93,.55,1.75,1.34,2.47,2.37l16.13,22.13h-6.64c-1.36,0-2.36-.53-3.01-1.6l-14.35-19.92c-.44-.62-.91-1.07-1.43-1.34-.52-.27-1.29-.41-2.31-.41h-5.67Zm0-5.48h7.83c2.19,0,4.11-.26,5.77-.8,1.66-.53,3.05-1.28,4.17-2.26,1.12-.97,1.96-2.13,2.53-3.48,.56-1.35,.85-2.84,.85-4.48,0-3.32-1.09-5.82-3.26-7.51-2.17-1.69-5.41-2.53-9.7-2.53h-8.18v21.04Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M507.16,650.97c.41,0,.78,.17,1.12,.51l2.93,3.23c-2.26,2.64-5.01,4.71-8.23,6.18-3.23,1.48-7.12,2.22-11.68,2.22-3.98,0-7.6-.69-10.84-2.08-3.24-1.39-6.01-3.33-8.3-5.84-2.29-2.5-4.06-5.5-5.32-9s-1.89-7.35-1.89-11.55,.68-8.05,2.03-11.56c1.35-3.5,3.24-6.51,5.69-9.02,2.44-2.51,5.37-4.47,8.78-5.85,3.41-1.39,7.17-2.08,11.28-2.08s7.57,.64,10.51,1.91c2.95,1.27,5.56,3,7.85,5.17l-2.43,3.46c-.19,.26-.39,.47-.62,.64-.24,.17-.57,.25-1,.25-.34,0-.69-.12-1.06-.37-.37-.25-.82-.55-1.33-.91-.51-.37-1.11-.75-1.81-1.17s-1.52-.8-2.47-1.16c-.95-.37-2.06-.67-3.32-.92-1.26-.25-2.71-.37-4.36-.37-2.96,0-5.66,.51-8.12,1.53-2.45,1.03-4.57,2.49-6.34,4.38s-3.16,4.2-4.15,6.92c-.99,2.72-1.49,5.77-1.49,9.14s.5,6.57,1.49,9.29c.99,2.72,2.34,5.03,4.05,6.91,1.72,1.88,3.74,3.31,6.08,4.3s4.87,1.48,7.56,1.48c1.64,0,3.12-.09,4.43-.29s2.53-.5,3.65-.92c1.12-.41,2.16-.94,3.13-1.57,.96-.64,1.93-1.4,2.91-2.28,.43-.39,.86-.59,1.27-.59Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M535.79,622.46c2.86,0,5.43,.48,7.74,1.44,2.3,.96,4.26,2.32,5.86,4.08,1.61,1.77,2.84,3.9,3.7,6.4,.86,2.5,1.3,5.3,1.3,8.38s-.43,5.91-1.3,8.4c-.86,2.49-2.1,4.62-3.7,6.38-1.61,1.77-3.56,3.12-5.86,4.07-2.3,.95-4.88,1.42-7.74,1.42s-5.43-.47-7.74-1.42c-2.3-.94-4.26-2.3-5.88-4.07-1.62-1.76-2.87-3.89-3.74-6.38-.88-2.49-1.31-5.29-1.31-8.4s.44-5.88,1.31-8.38c.87-2.5,2.12-4.63,3.74-6.4,1.62-1.76,3.58-3.13,5.88-4.08,2.3-.96,4.88-1.44,7.74-1.44Zm0,35.17c3.86,0,6.74-1.3,8.64-3.91,1.9-2.6,2.85-6.24,2.85-10.91s-.95-8.35-2.85-10.97c-1.91-2.62-4.79-3.93-8.64-3.93-1.96,0-3.65,.34-5.09,1.01-1.44,.68-2.64,1.65-3.61,2.92-.97,1.27-1.69,2.84-2.16,4.69-.47,1.86-.71,3.95-.71,6.28s.24,4.42,.71,6.27c.48,1.84,1.2,3.39,2.16,4.65,.96,1.26,2.16,2.22,3.61,2.9,1.44,.68,3.14,1.01,5.09,1.01Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M562.87,662.49v-39.41h4.09c.98,0,1.59,.48,1.85,1.44l.5,4.04c1.44-1.79,3.05-3.25,4.84-4.4,1.79-1.14,3.86-1.71,6.23-1.71,2.65,0,4.79,.74,6.42,2.22,1.64,1.48,2.81,3.48,3.53,5.99,.54-1.43,1.26-2.66,2.14-3.7,.89-1.03,1.88-1.89,2.99-2.57,1.11-.68,2.28-1.17,3.53-1.48s2.52-.47,3.8-.47c2.06,0,3.89,.33,5.5,.99,1.61,.66,2.97,1.63,4.09,2.9,1.12,1.27,1.97,2.84,2.57,4.69,.59,1.86,.89,3.98,.89,6.36v25.09h-6.87v-25.09c0-3.09-.67-5.43-2.01-7.02-1.33-1.6-3.28-2.39-5.82-2.39-1.13,0-2.21,.2-3.22,.6s-1.91,.99-2.68,1.77-1.38,1.76-1.83,2.94-.67,2.55-.67,4.1v25.09h-6.87v-25.09c0-3.16-.63-5.52-1.89-7.08s-3.1-2.33-5.51-2.33c-1.7,0-3.28,.46-4.73,1.38-1.45,.92-2.78,2.17-3.99,3.75v29.37h-6.87Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M626.22,675.83v-52.75h4.09c.98,0,1.59,.48,1.85,1.44l.58,4.67c1.67-2.05,3.58-3.69,5.73-4.94,2.15-1.24,4.62-1.87,7.42-1.87,2.24,0,4.27,.43,6.1,1.3s3.38,2.15,4.67,3.85c1.28,1.7,2.27,3.81,2.97,6.32,.7,2.51,1.04,5.41,1.04,8.67,0,2.91-.38,5.61-1.16,8.11-.77,2.5-1.88,4.67-3.32,6.5-1.44,1.83-3.21,3.27-5.3,4.32-2.1,1.05-4.46,1.58-7.08,1.58-2.42,0-4.48-.41-6.19-1.21-1.71-.8-3.22-1.94-4.53-3.42v17.43h-6.87Zm17.4-47.85c-2.24,0-4.2,.52-5.88,1.56-1.68,1.04-3.23,2.5-4.65,4.4v19.06c1.26,1.71,2.64,2.92,4.14,3.61,1.51,.7,3.19,1.05,5.04,1.05,3.62,0,6.42-1.31,8.37-3.93,1.95-2.62,2.93-6.35,2.93-11.2,0-2.57-.23-4.77-.67-6.61-.45-1.84-1.1-3.35-1.95-4.53-.85-1.18-1.89-2.04-3.13-2.59-1.23-.55-2.64-.82-4.21-.82Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M697.51,662.49h-3.05c-.67,0-1.21-.1-1.62-.31-.41-.21-.68-.65-.81-1.32l-.77-3.65c-1.03,.93-2.03,1.77-3.01,2.51-.98,.74-2.01,1.36-3.09,1.87-1.08,.51-2.23,.89-3.46,1.15-1.22,.26-2.58,.39-4.07,.39s-2.94-.21-4.26-.64c-1.32-.43-2.48-1.07-3.45-1.93-.98-.86-1.76-1.95-2.34-3.26-.58-1.31-.87-2.87-.87-4.66,0-1.56,.42-3.06,1.27-4.51,.85-1.44,2.22-2.73,4.11-3.85,1.89-1.12,4.37-2.04,7.43-2.75,3.06-.71,6.8-1.07,11.23-1.07v-3.09c0-3.08-.65-5.41-1.95-6.99-1.3-1.58-3.22-2.37-5.77-2.37-1.67,0-3.08,.21-4.22,.64-1.14,.43-2.13,.91-2.97,1.44s-1.56,1.01-2.16,1.44c-.61,.43-1.2,.64-1.79,.64-.46,0-.87-.12-1.22-.37-.35-.25-.62-.55-.83-.91l-1.23-2.22c2.16-2.1,4.49-3.67,6.98-4.71,2.49-1.04,5.26-1.56,8.3-1.56,2.19,0,4.13,.36,5.82,1.09,1.7,.73,3.13,1.74,4.28,3.03,1.16,1.3,2.03,2.87,2.62,4.71,.59,1.84,.89,3.87,.89,6.07v25.21Zm-17.82-4.24c1.21,0,2.31-.12,3.32-.37,1-.25,1.95-.6,2.83-1.05,.89-.46,1.74-1.01,2.54-1.65,.81-.65,1.6-1.39,2.38-2.22v-8.13c-3.16,0-5.85,.2-8.06,.6-2.21,.41-4.01,.93-5.4,1.58s-2.4,1.42-3.03,2.31c-.63,.89-.94,1.88-.94,2.97s.17,1.94,.5,2.7c.33,.76,.78,1.38,1.35,1.86,.56,.48,1.23,.84,2.01,1.06s1.61,.33,2.51,.33Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M707.92,662.49v-39.41h4.09c.98,0,1.59,.48,1.85,1.44l.54,4.28c1.7-1.89,3.6-3.42,5.69-4.59,2.1-1.17,4.52-1.75,7.27-1.75,2.13,0,4.02,.36,5.65,1.07s3,1.73,4.09,3.04c1.09,1.31,1.92,2.88,2.49,4.72s.85,3.88,.85,6.11v25.09h-6.87v-25.09c0-2.98-.67-5.3-2.03-6.94-1.35-1.65-3.41-2.47-6.19-2.47-2.03,0-3.93,.49-5.69,1.48-1.76,.98-3.39,2.32-4.88,4v29.02h-6.87Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M761.04,674.12c-.23,.52-.52,.93-.87,1.24s-.88,.47-1.6,.47h-5.09l7.14-15.64-16.12-37.11h5.94c.59,0,1.05,.15,1.39,.45s.58,.63,.74,.99l10.45,24.82c.23,.57,.43,1.14,.6,1.71s.32,1.15,.44,1.75c.18-.6,.36-1.18,.54-1.75s.39-1.15,.62-1.75l10.15-24.78c.15-.42,.42-.76,.79-1.03,.37-.27,.78-.41,1.21-.41h5.48l-21.8,51.04Z\"\n }))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgXmpieLogo);\nexport default __webpack_public_path__ + \"static/media/xmpieLogo.fcafdaf26b9875e82c2eb836f4a7b4e4.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\nimport { useSearchParams } from 'react-router-dom'\nimport xmpieLogo from '$assets/images/xmpieLogo.svg'\n\nconst ConnectLoggedOut = () => {\n const [params] = useSearchParams()\n const containerStyle = {\n width: '100vw',\n height: '100vh',\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n flexDirection: 'column',\n fontSize: 'var(--text-size-h4)'\n }\n const imageStyle = {\n marginTop: '100px',\n }\n\n return <div style={containerStyle}>\n\n <img style={imageStyle} src={xmpieLogo} width=\"200px\" height=\"200px\" alt=\"logout\"/>\n <div>{params.get('message')}</div>\n </div>\n}\n\nexport default ConnectLoggedOut\n","export const productIDs = {\n DEV: 13520,\n STG: 6564,\n PROD: 7569,\n};\n\nexport const envs = {\n DEV: \"xmpiedev\",\n STG: \"xmpiestaging\",\n PRODTest: \"xmpiedirector\",\n PROD: \"pubstore.acs\",\n};\n","import React from \"react\";\r\n\r\nconst SearchResults = ({ articles, onClick }) => {\r\n return (\r\n <>\r\n {articles.map((article) => {\r\n const { articleName, id, manUID, pageCount } = article;\r\n return (\r\n <tr key={id}>\r\n <td>{id}</td>\r\n <td>\r\n <div\r\n onClick={() => onClick(manUID, pageCount, articleName)}\r\n style={{ color: \"blue\", cursor: \"pointer\" }}\r\n >\r\n {manUID}\r\n </div>\r\n </td>\r\n <td>{articleName}</td>\r\n <td>{pageCount}</td>\r\n </tr>\r\n );\r\n })}\r\n </>\r\n );\r\n};\r\n\r\nexport default SearchResults;\r\n","var _excluded = [\"className\", \"cssModule\", \"size\", \"bordered\", \"borderless\", \"striped\", \"dark\", \"hover\", \"responsive\", \"tag\", \"responsiveTag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Adds border to all sides of table */\n bordered: PropTypes.bool,\n /** Removes all borders */\n borderless: PropTypes.bool,\n /** Adds custom class name to component */\n className: PropTypes.string,\n /** */\n cssModule: PropTypes.object,\n /** Makes the table dark */\n dark: PropTypes.bool,\n /** Enables a hover state on the rows within `<tbody>` */\n hover: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.object]),\n /** Responsive tables allow tables to be scrolled horizontally with ease */\n responsive: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n responsiveTag: tagPropType,\n /** Make tables more compact by cutting cell padding in half when setting size as sm. */\n size: PropTypes.string,\n /** Adds zebra-striping to any table row within the `<tbody>` */\n striped: PropTypes.bool,\n /** Add custom tag to the component */\n tag: tagPropType\n};\nfunction Table(props) {\n var className = props.className,\n cssModule = props.cssModule,\n size = props.size,\n bordered = props.bordered,\n borderless = props.borderless,\n striped = props.striped,\n dark = props.dark,\n hover = props.hover,\n responsive = props.responsive,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'table' : _props$tag,\n _props$responsiveTag = props.responsiveTag,\n ResponsiveTag = _props$responsiveTag === void 0 ? 'div' : _props$responsiveTag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'table', size ? 'table-' + size : false, bordered ? 'table-bordered' : false, borderless ? 'table-borderless' : false, striped ? 'table-striped' : false, dark ? 'table-dark' : false, hover ? 'table-hover' : false), cssModule);\n var table = /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n if (responsive) {\n var responsiveClassName = mapToCssModules(responsive === true ? 'table-responsive' : \"table-responsive-\".concat(responsive), cssModule);\n return /*#__PURE__*/React.createElement(ResponsiveTag, {\n className: responsiveClassName\n }, table);\n }\n return table;\n}\nTable.propTypes = propTypes;\nexport default Table;","import React, { useState, useEffect } from \"react\";\r\nimport urlGenerator from \"$ustoreinternal/services/urlGenerator\";\r\nimport { useNavigate } from \"react-router-dom\";\r\n\r\nimport { UStoreProvider } from \"@ustore/core\";\r\nimport Layout from \"../components/layout\";\r\nimport { productIDs, envs } from \"../components/consts\";\r\nimport SearchResults from \"../components/Search/SearchResults\";\r\nimport { Table } from \"reactstrap\";\r\nimport \"./Articles.scss\";\r\nimport \"bootstrap/dist/css/bootstrap.min.css\";\r\n\r\nconst Articles = (props) => {\r\n const [articles, setArticles] = useState([]);\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const [productID, setProductID] = useState([]);\r\n const navigate = useNavigate();\r\n\r\n useEffect(() => {\r\n getProductId(window.location.host);\r\n });\r\n\r\n const getProductId = (url) => {\r\n if (url.includes(envs.DEV)) {\r\n setProductID(productIDs.DEV);\r\n } else if (url.includes(envs.STG)) {\r\n setProductID(productIDs.STG);\r\n } else if (url.includes(envs.PRODTest) || url.includes(envs.PROD)) {\r\n setProductID(productIDs.PROD);\r\n } else {\r\n setProductID(productIDs.DEV);\r\n }\r\n };\r\n\r\n const show = (manID, price, articleName) => {\r\n const defaultItems = {\r\n Article: manID,\r\n Pagecount: price,\r\n ArticleName: articleName,\r\n };\r\n UStoreProvider.state.customState.set(\"currentItems\", defaultItems);\r\n\r\n navigate(\r\n urlGenerator.get({\r\n page: \"products\",\r\n id: productID,\r\n name: \"Article-Report\",\r\n })\r\n );\r\n };\r\n\r\n const setInput = (e) => {\r\n setInputValue(e.target.value);\r\n };\r\n\r\n const search = () => {\r\n if (inputValue.length > 3) {\r\n fetch(\r\n // \"https://acsdevapi.cierant.com/api/SKU/search/\" +\r\n \"https://xmpiedirector.cierant.com/acsapi/api/sku/search/\" +\r\n encodeURIComponent(inputValue)\r\n )\r\n .then((response, data) => response.json())\r\n .then((data) => {\r\n if (data.length > 0) {\r\n setArticles(data);\r\n } else {\r\n setArticles([]);\r\n }\r\n })\r\n .catch(function (err) {\r\n // There was an error\r\n console.warn(\"Something went wrong.\", err);\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <Layout {...props} className=\"Articles\">\r\n <div className=\"container-fluid\">\r\n <div class=\"wrap\" id=\"section1\">\r\n <div class=\"row\">\r\n <div className=\"Article-Title\">Articles</div>\r\n <div className=\"body-text\">\r\n Article Reprints* are produced on-demand by our production\r\n partner, Cierant Corporation, and will be billed to you by\r\n Cierant. All orders will be processed at the time that the article\r\n is published in an issue. Please allow 10-15 business days for\r\n shipments within the continental United States and an additional 5\r\n business days for shipments outside the continental United States.\r\n </div>\r\n\r\n <div className=\"body-text\">\r\n To search for an article, please enter the article DOI or\r\n manuscript ID listed on the article in the box below.\r\n </div>\r\n <div className=\"body-text\">\r\n It may take a few seconds to load your article. To place an order,\r\n press the Manuscript ID link.\r\n </div>\r\n </div>\r\n <div class=\"search\">\r\n <input\r\n class=\"form-control\"\r\n id=\"search\"\r\n onChange={setInput}\r\n onKeyUp={() => search(inputValue)}\r\n placeholder=\"Please Enter your manuscript ID or DOI to search\"\r\n type=\"text\"\r\n value={inputValue}\r\n />\r\n </div>\r\n {articles.length === 0 && inputValue !== \"\" ? (\r\n <div>\r\n <label>\r\n There are currently no Search Results. Please update your search\r\n Criteria\r\n </label>\r\n </div>\r\n ) : null}\r\n {articles.length > 0 ? (\r\n <div>\r\n <Table striped>\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">#</th>\r\n <th scope=\"col\">ManuscriptID</th>\r\n <th scope=\"col\">Article Title</th>\r\n <th scope=\"col\">Page Count</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"tbody\">\r\n <SearchResults articles={articles} onClick={show} />\r\n </tbody>\r\n </Table>\r\n </div>\r\n ) : null}\r\n <div class=\"row\">\r\n <div className=\"note-text\">\r\n NOTE:{\" \"}\r\n <i>\r\n Author Use Reprints are made available at special pricing to\r\n authors listed on the original publication beginning January\r\n 2024. This special pricing can only be obtained via the\r\n invitation email sent at the time of issue publication. Should\r\n you need assistance in retrieving a previous email invitation,\r\n please contact ACS Sales Support at{\" \"}\r\n <a href=\"mailto:acs_pub_assist@acs.org\">\r\n acs_pub_assist@acs.org\r\n </a>\r\n .\r\n </i>\r\n </div>\r\n <div className=\"note-footnote\">\r\n * <i>Minimum purchase of 250 copies is required.</i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </Layout>\r\n );\r\n};\r\n//Need to clear the state before setting new values\r\n\r\n//Need to clear the state before setting new values\r\nif (UStoreProvider && UStoreProvider.state.customState.currentItems !== null) {\r\n const defaultItems = [\r\n { id: 1, Name: \"Article\", value: \"\" },\r\n { id: 2, Name: \"Pagecount\", value: \"\" },\r\n { id: 3, Name: \"ArticleName\", value: \"\" },\r\n ];\r\n UStoreProvider.state.customState.set(\"currentItems\", defaultItems);\r\n}\r\nconst currentItems = [\r\n { id: 1, Name: \"Article\", value: \"TestID\" },\r\n { id: 2, Name: \"Pagecount\", value: \"14\" },\r\n { id: 3, Name: \"ArticleName\", value: \"Hey I have a cool article Name!\" },\r\n];\r\nUStoreProvider.state.customState.set(\"currentItems\", currentItems);\r\n\r\nexport default Articles;\r\n","import Home from \"./Home\";\nimport Category from \"./Category\";\nimport Product from \"./Product\";\nimport Products from \"./Products\";\nimport OrderFinalStep from \"./OrderFinalStep\";\nimport Addresses from \"./Addresses\";\nimport Cart from \"./Cart\";\nimport CheckoutComplete from \"./CheckoutComplete\";\nimport CheckoutFinal from \"./CheckoutFinal\";\nimport FileSubmission from \"./FileSubmission\";\nimport CheckoutPaymentSubmission from \"./CheckoutPaymentSubmission\";\nimport MyRecipientLists from \"./MyRecipientLists\";\nimport OrderHistory from \"./OrderHistory\";\nimport PersonalInformation from \"./PersonalInformation\";\nimport Customization from \"./Customization\";\nimport UeditCustomization from \"./uEditCustomization\";\nimport SplitShippingAddresses from \"./SplitShippingAddresses\";\nimport OrderDetails from \"./OrderDetails\";\nimport SplitShippingItems from \"./SplitShippingItems\";\nimport Recipient from \"./Recipient\";\nimport ProductUnavailable from \"./ProductUnavailable\";\nimport Drafts from \"./Drafts\";\nimport EmptyPage from \"./EmptyPage\";\nimport ErrorPage from \"./ErrorPage\";\nimport Search from \"./Search\";\nimport OrderApprovalList from \"./OrderApprovalList\";\nimport CustomMain from \"./CustomMain\";\nimport ClearingUnknownOrder from \"./ClearingUnknownOrder\";\nimport ProductDetails from \"./ProductDetails\";\nimport ConnectLoggedOut from \"./ConnectLoggedOut\";\nimport Articles from \"./Articles\";\nimport ContactUs from \"./ContactUs\";\nimport FAQ from \"./FAQ\";\n\n\nconst routes = {\n Home,\n Category,\n Product,\n Products,\n OrderFinalStep,\n Addresses,\n Cart,\n CheckoutComplete,\n CheckoutFinal,\n FileSubmission,\n CheckoutPaymentSubmission,\n MyRecipientLists,\n OrderHistory,\n PersonalInformation,\n Customization,\n UeditCustomization,\n SplitShippingAddresses,\n OrderDetails,\n SplitShippingItems,\n Recipient,\n ProductUnavailable,\n Drafts,\n EmptyPage,\n ErrorPage,\n Search,\n OrderApprovalList,\n CustomMain,\n ClearingUnknownOrder,\n ProductDetails,\n ConnectLoggedOut,\n Articles,\n ContactUs,\n FAQ\n \n};\n\nexport default routes;\n","import React, { useState, useEffect } from \"react\";\r\nimport urlGenerator from \"$ustoreinternal/services/urlGenerator\";\r\nimport { useNavigate } from \"react-router-dom\";\r\n\r\nimport { UStoreProvider } from \"@ustore/core\";\r\nimport Layout from \"../components/layout\";\r\nimport \"./ContactUs.scss\";\r\n\r\nconst ContactUs = (props) => {\r\n return (\r\n <Layout {...props} className=\"contact-us\">\r\n <div className=\"container-fluid\">\r\n <h2 className=\"text-center\">Contact Us</h2>\r\n <div className=\"textArea\">\r\n <div className=\"contactusmain\">\r\n <p> </p>\r\n <p><strong>Print Production and Delivery Questions</strong></p>\r\n <p>This site is managed by our production partner, Cierant Corporation. If you have a question or need assistance while using the site or while placing your order, or want to inquire about an order that you have already placed, you may send us a note using the IEEE Pubstore Inquiry Form below. </p>\r\n <p><strong>Need Immediate Help?</strong></p>\r\n <p>You may call the IEEE Pubstore Customer Service Desk at one of the numbers below:</p>\r\n <p><strong>+1 (833) 263-4333 (US) or</strong></p>\r\n <p><strong>+1 (203) 731-3555 (Worldwide)</strong></p>\r\n <p>Or email us at:<a href=\"acspubs@cierant.com\">acspubs@cierant.com</a></p>\r\n <p>The Pubstore Customer Service Desk is staffed between the hours of 9:00AM and 5:00PM Eastern Time</p>\r\n <p>Please note that this number should be used only for inquiries about an IEEE Publications Journal back issue order. All other questions should be directed to the normal IEEE Customer Service which can be found\r\n <a href=\"https://supportcenter.ieee.org/\" target=\"_blank\"> Here</a>\r\n </p>\r\n \r\n </div>\r\n <div className=\"col-sm-7\">\r\n <div className=\"row\">\r\n <div className=\"col-sm-6 form-group\">\r\n <input className=\"form-control\" id=\"name\" name=\"name\" placeholder=\"Name\" type=\"text\" required />\r\n </div>\r\n <div className=\"col-sm-6 form-group\">\r\n <input className=\"form-control\" id=\"email\" name=\"email\" placeholder=\"Email\" type=\"email\" required />\r\n </div>\r\n </div>\r\n <textarea className=\"form-control\" id=\"comments\" name=\"comments\" placeholder=\"Comment\" rows=\"5\"></textarea><br />\r\n <div className=\"row\">\r\n <div className=\"col-sm-12 form-group\">\r\n <button className=\"maxbutton\" type=\"submit\">Contact Cierant</button>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n\r\n </div>\r\n </Layout>\r\n )\r\n}\r\n \r\nexport default ContactUs\r\n","import React, { useState, useEffect } from \"react\";\r\nimport urlGenerator from \"$ustoreinternal/services/urlGenerator\";\r\nimport { useNavigate } from \"react-router-dom\";\r\n\r\nimport { UStoreProvider } from \"@ustore/core\";\r\nimport Layout from \"../components/layout\";\r\nimport \"./FAQ.scss\";\r\n\r\nconst FAQ = (props) => {\r\n return (\r\n <Layout {...props} className=\"FAQ\">\r\n <div className=\"container-fluid\">\r\n <h2 className=\"HeaderText\">Frequently Asked Questions</h2>\r\n <p className=\"QuestionText\">Who owns this site?</p>\r\n <p className=\"AnswerText\">This site is owned by IEEE and managed by Cierant Corporation, the print services provider responsible for processing orders, producing the journals and shipping orders to our customers. </p>\r\n <p className=\"QuestionText\">I am looking for journals other than the ones listed in the Browse Journals menu. What do I do?</p>\r\n <p className=\"AnswerText\">If you are searching for a journal that is not available on this site, please contact us directly at 833-263-4333 so we can help you locate your desired products.</p>\r\n <p className=\"QuestionText\">What kind of reprints can I order from the pubstore?</p>\r\n <p className=\"AnswerText\">We only offer physical copies of journal and article reprints. If you are interested in obtaining PDF versions of IEEE material, please contact xxxxx.</p>\r\n <p className=\"QuestionText\">How can I pay for my order?</p>\r\n <p className=\"AnswerText\">The only payment method we accept for orders is credit card. Charges will appear as 'Cierant Corporation' on your credit card statement and will be posted when your order is shipped.</p>\r\n <p className=\"QuestionText\">Why do I have to pay sales tax?</p>\r\n <p className=\"AnswerText\">Cierant Corporation is the vendor for your online purchase through IEEE’s pubstore. We are required to charge sales tax for orders shipped to states in which we have a business interest or location. The states that we currently charge sales tax is: CT, NC, NY, PA, VA</p>\r\n <p className=\"QuestionText\">What shipping methods are available for my order?</p>\r\n <p className=\"AnswerText\">We offer UPS Ground or IMEX International.</p>\r\n <p className=\"QuestionText\">How will I know when my order has shipped?</p>\r\n <p className=\"AnswerText\">Once your order ships, an email will be sent to the email address on your account with the tracking information for your order.</p>\r\n <p className=\"QuestionText\">How quickly will I receive my order?</p>\r\n <p className=\"AnswerText\">Journal reprint orders are produced once per week on Tuesdays. Once orders are put into production, they require 8 business days to be printed on demand, prepared for mail and shipped. Once orders are shipped, the shipping time depends on your location. Most US orders will arrive within 5-7 business days. International orders will take longer.</p>\r\n <p className=\"QuestionText\">WHAT KIND OF REPRINTS CAN I ORDER FROM THE PUBSTORE?</p>\r\n <p className=\"AnswerText\">We only offer physical copies of journals. If you are interested in obtaining PDF versions of IEEE material, please contact apcinquiries@ieee.org</p>\r\n\r\n\r\n </div>\r\n </Layout>\r\n )\r\n}\r\n \r\nexport default FAQ\r\n","import React, { useEffect, useReducer, useRef, useState } from 'react'\nimport { UStoreProvider } from '@ustore/core'\nimport pages from '$themepages/index'\nimport { camelToPascal, dashToCamel } from '$ustoreinternal/services/utils'\nimport { initialLoad } from '$ustoreinternal/services/initialLoad'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\nimport { getVariableValue } from '$ustoreinternal/services/cssVariables'\nimport '$styles/index.scss'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\n\nconst renewTokenIntervalSec = 60 * 20\n\nexport const Generic = () => {\n const [initialProps, setInitialProps] = useState({})\n const doRenewToken = useRef(null)\n // eslint-disable-next-line\n const [ignored, forceUpdate] = useReducer(x => x + 1, 0)\n\n const location = useLocation()\n const query = useSearchParams()\n const params = useParams()\n const navigate = useNavigate()\n\n params.page = params.page || 'Home'\n\n const apiUrl = UStoreProvider.contextService.getValue('apiUrl')\n\n useEffect(() => {\n themeContext.updateRouteParams(params)\n themeContext.init(params)\n /* eslint-disable react-hooks/exhaustive-deps */\n },[location])\n\n useEffect(() => {\n const run = async () => {\n await initialLoad(params)\n // In a B2C store when user is anonymous - do renew token every 20 minuts to keep the session alive\n const { currentStore, currentUser } = UStoreProvider.state.get()\n if (currentStore && currentStore.StoreType === 2 && currentUser.IsAnonymous && !doRenewToken.current) {\n doRenewToken.current = setInterval(async () => {\n // getting new token\n const newToken = await UStoreProvider.api.store.renewToken()\n // updating new token\n UStoreProvider.contextService.setValue('securityToken', newToken.Token)\n CookiesManager.setCookie({key: storefrontCookies.token, value: newToken.Token})\n themeContext.set('securityToken', newToken.Token)\n }, 1000 * renewTokenIntervalSec)\n }\n\n // If current url contains http and store is ssl, redirect to https\n const sslOption = currentStore && currentStore.Attributes.find((attribute) => attribute.Name === 'SslOption')\n if (window.location.href.indexOf('http://') === 0 && sslOption && sslOption.Value === 'SecureAll') {\n console.log('redirecting to https')\n window.location.href = window.location.href.replace('http://', 'https://')\n }\n }\n\n const unsubscribe = UStoreProvider.state.subscribe(() => {\n // This prevents the storeFriendlyID from being null on reload in legacy page.\n if (UStoreProvider.state.get().currentStore) {\n themeContext.set('storeFriendlyID', UStoreProvider.state.get().currentStore.FriendlyID)\n }\n\n forceUpdate()\n })\n\n run()\n\n return () => {\n unsubscribe()\n legacyIframeHandler.unmount()\n if (doRenewToken.current) { clearInterval(doRenewToken.current) }\n }\n }, [])\n\n useEffect(() => {\n const favIcon = document.getElementById('favicon')\n if (favIcon) {\n favIcon.href = getVariableValue('--favicon-url', '', true)\n }\n\n const asPath = window.location.href\n\n // remove params added by legacy login page.\n // in order not to interfere with query params used by legacy pages like customization and finalize,\n // we dont remove all params, just the one being passed to us from login page.\n if (asPath.includes('?')) {\n let href = asPath\n\n href = href.replace(/(ShowRibbon|CurrencyID|SecurityToken|StoreGuid)=[a-zA-Z0-9-]*&?/ig, '')\n\n href = href.replace(/[&?]$/, '')\n\n if (asPath !== href) {\n let currentState = window.history.state\n // in Safari, history.state is NULL, so we need to replace it with an object.\n if (currentState === null || currentState === undefined) {\n currentState = { url: '', as: '', options: {} }\n }\n currentState.url = href\n currentState.as = href\n\n window.history.replaceState(currentState, '', href)\n }\n }\n })\n\n useEffect(() => {\n const run = async () => {\n if (params) {\n const pageComponentName = camelToPascal(dashToCamel(params.page))\n const pageComponent = pages[pageComponentName]\n if (pageComponent && pageComponent.getInitialProps) {\n const initialProps = await pageComponent.getInitialProps({ query: params })\n setInitialProps(initialProps || {})\n }\n }\n }\n\n if (UStoreProvider.contextService.getValue('apiUrl')) {\n run()\n }\n }, [params, apiUrl])\n\n useEffect(() => legacyIframeHandler.handleRoute(`${location.pathname}/${location.search}`), [location])\n\n const getPageComponentName = (page) => {\n return camelToPascal(dashToCamel(page))\n }\n\n // in client only will redirect when the url is missing the page name\n if ((location.pathname.match(/\\//g) || []).length < 2) {\n if (location.pathname === '/') {\n navigate(urlGenerator.get({page:'home'}))\n } else {\n window.location.href = window.location.href + '/' + window.location.search\n }\n }\n\n\n // in client if security token is missing get it from the theme context\n if (!query.SecurityToken) {\n query.SecurityToken = themeContext.get('securityToken')\n }\n\n if (!params || !params.page) {\n return null\n }\n\n const pageComponentName = camelToPascal(dashToCamel(params.page === 'pages'? params.id : params.page))\n\n // modify state that is sent to the page with out modifying the state in the uStoreProvider\n const state = UStoreProvider ? UStoreProvider.state.get() : {}\n\n // create all properties needed from the page component\n const newProps = { state, customState: { ...initialProps, ...state.customState } }\n\n if (pageComponentName === 'ConnectLoggedOut') {\n return React.createElement(pages[pageComponentName], {})\n }\n\n if (state.initState) return null\n\n return React.createElement(pages[pageComponentName], newProps)\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { BrowserRouter as Router, Route, Routes } from 'react-router-dom'\nimport reportWebVitals from './reportWebVitals'\nimport { Generic } from './generic'\nimport routes from './routeList'\nimport './index.css'\n\nconst AppendTrailingSlash = (props) => {\n if (!window.location.pathname.endsWith('/')) {\n window.history.replaceState(window.history.state,document.title, window.location.pathname + '/' + window.location.search)\n }\n return <Generic {...props}/>\n}\n\n\nReactDOM.render(\n // <React.StrictMode>\n <Router>\n <Routes>\n { routes.map((route, i) => <Route key={i} path={route} element={<AppendTrailingSlash/>} trailing/> )}\n </Routes>\n </Router>,\n // </React.StrictMode>,\n document.getElementById('root')\n)\n\nif (module.hot) {\n module.hot.accept()\n}\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"names":["_desc","_g","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgDarkLeftArrow","_ref","svgRef","title","titleId","props","width","height","viewBox","xmlns","xmlnsXlink","ref","undefined","id","stroke","strokeWidth","fill","fillRule","d","transform","ForwardRef","SvgDarkRightArrow","_style","_path","SvgError","x","y","style","enableBackground","xmlSpace","type","className","SvgLeftArrow","opacity","fillOpacity","SvgPencilSection","SvgProof","strokeLinecap","cx","cy","r","SvgRightArrow","SvgTick","e","t","module","exports","self","__webpack_modules__","globalThis","window","g","Promise","n","Symbol","o","Map","a","Set","s","WeakMap","WeakSet","u","DataView","c","iterator","l","toStringTag","p","entries","f","getPrototypeOf","Array","w","b","String","h","isArray","location","document","navigator","mimeTypes","plugins","HTMLElement","tagName","RegExp","Date","toString","slice","Buffer","from","isBuffer","get","has","set","add","Function","m","Boolean","valueOf","buffer","getTime","Number","flags","_","v","S","keys","push","getOwnPropertySymbols","customizer","defineProperty","enumerable","value","__esModule","create","default","prefixColors","_setPrefixRegExps","localStorage","getItem","_prefixRegExps","split","forEach","trim","substr","_prepareRegExpForPrefixSearch","regExp","_getNextPrefixColor","_getDecoratedPrefix","opts","prefix","prefixColor","_prepareOutput","markdown","parse","text","concat","styles","_isPrefixAlreadyInUse","_getInstanceByPrefix","_normalizeOpts","state","_getInitialState","_decorateLoggerMethods","_instances","transports","replace","some","filter","TypeError","logger","console","plaintext","isEnabled","_getEnableState","test","join","instance","level","args","msg","renderer","match","tag","pop","indexOf","documentElement","userAgent","global","getGlobal","ob","pb","qb","eval","__webpack_module_cache__","__webpack_require__","__webpack_exports__","UStoreProvider","ye","http","constructor","context","getValue","setValue","clear","_logger","log","warn","info","error","static","Accept","auth","Authorization","reduce","async","json","download","headers","method","body","JSON","stringify","fetch","blob","ok","TypeName","status","toPrimitive","getOwnPropertyDescriptor","configurable","writable","getOwnPropertyDescriptors","defineProperties","observable","Math","random","substring","INIT","REPLACE","PROBE_UNKNOWN_ACTION","Error","splice","dispatch","subscribe","getState","replaceReducer","next","unsubscribe","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","__REDUX_DEVTOOLS_EXTENSION__","withExtraArgument","currentStore","currentUser","initState","customState","cultures","currentCulture","currencies","currentCurrency","assets","O","C","E","$","T","j","U","I","A","P","V","D","R","L","k","N","M","map","encodeURIComponent","B","F","data","userOrdersSummary","categories","Category","categoriesTree","subCategories","cartItemsCount","LanguageCode","ID","PrimaryCurrencyID","currentCategory","products","name","selectedAsset","AssetID","q","store","setInitState","setCustomState","setBulkCustomState","deleteCustomState","mergeCustomState","W","config","configInit","isInit","G","webComponents","componentId","setTimeout","values","setAttribute","register","ustoreBindingId","addEventListener","_ref2","unregister","z","Headers","FormData","append","redirect","then","catch","all","H","X","pageNumber","pageSize","J","K","Y","Q","Z","ee","te","re","ne","oe","ae","delete","se","ie","getTopCategories","getSubCategories","getCategoryIDByFriendlyID","getCategory","getCategoryTree","orders","getUserOrdersSummary","addOrderItem","post","getOrderItem","updateOrderItem","put","getPriceOrderItem","reorder","getLastOrder","addToCart","saveForLater","getDeliveryServices","getProperties","updateProperties","updatePropertiesState","getRepositoryDetails","uploadFile","deleteFiles","getCartInfo","getWishListInfo","deleteCartItem","clearCart","OrderItemIDs","ListID","clearWishlist","validateCart","validateWishList","getCartPricingInfo","getWishListPricingInfo","updateCartItem","updateWishListItem","updateCart","createCartList","Name","ExternalID","ExternalUrl","getListId","getListInfo","getLists","deleteList","exportList","revertModifications","getProductIDByFriendlyID","getProducts","getProductByID","productType","Undefined","Dynamic","Static","Email","Uploaded","Composite","DynamicWithPurl","EmailWithPurl","CircleProject","PrintTouchPoint","EmailTouchPoint","WebTouchPoint","PdfOnDemandTouchPoint","TriggeredEmailTouchPoint","Kit","getProductsByIDs","getProductThumbnails","search","createProofPreview","properties","downloadProofPreview","getProofPreview","createProof","downloadProof","getCurrentStore","getCurrentUser","getCultures","getCurrencies","renewToken","getCartItemsCount","loginBySSOToken","Token","getAssets","getAsset","deleteAsset","uploadAsset","ue","loadUserOrdersSummary","RequireOrderApproval","loadCartItemsCount","ce","loadCurrentStore","loadCurrentUser","loadStoreCultures","loadStoreCurrencies","le","setCurrentCurrency","setCurrentCultureByLanguage","getConvertedPrices","price","Price","ConversionRate","tax","Tax","priceIncludingTax","pe","loadInitialState","_t$Attributes","Attributes","find","Value","FriendlyID","parseInt","ge","loadCategoriesTree","Categories","loadSubCategories","loadCurrentCategory","fe","de","culture","setBulk","merge","stateService","binding","initialState","configService","contextService","init","api","IS_UNITLESS","animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridColumn","fontWeight","lineClamp","lineHeight","order","orphans","tabSize","widows","zIndex","zoom","stopOpacity","strokeDashoffset","strokeOpacity","core_1","require","draft7_1","discriminator_1","draft7MetaSchema","META_SUPPORT_DATA","META_SCHEMA_ID","Ajv","_addVocabularies","super","addVocabulary","discriminator","addKeyword","_addDefaultMetaSchema","meta","metaSchema","$data","$dataMetaSchema","addMetaSchema","refs","defaultMeta","getSchema","validate_1","KeywordCxt","codegen_1","str","nil","CodeGen","validation_error_1","ref_error_1","_CodeOrName","IDENTIFIER","emptyStr","names","_Code","code","_items","item","_a","_str","_names","strs","_len","_key","addCodeArg","plus","expr","safeStringify","_len2","_key2","res","mergeExprItems","optimize","arg","c1","c2","_templateObject","_taggedTemplateLiteral","_templateObject2","rx","code_1","scope_1","code_2","strConcat","getProperty","regexpCode","scope_2","Scope","ValueScope","ValueScopeName","varKinds","GT","GTE","LT","LTE","EQ","NEQ","NOT","OR","AND","ADD","Node","optimizeNodes","optimizeNames","_constants","Def","varKind","rhs","render","es5","_n","var","constants","optimizeExpr","Assign","lhs","sideEffects","addExprNames","AssignOp","op","_ref3","Label","label","_ref4","Break","_ref5","Throw","_ref6","AnyCode","_ref7","ParentNode","nodes","subtractNames","addNames","BlockNode","Root","Else","kind","If","condition","else","cond","ns","not","For","ForLoop","iteration","ForRange","to","ForIter","loop","iterable","Func","_async","Return","Try","finally","_b","Catch","Finally","replaceName","items","_templateObject4","par","extScope","_values","_blockStarts","lines","_extScope","_scope","parent","_nodes","_root","scopeName","scopeValue","prefixOrName","getScopeValue","keyOrRef","scopeRefs","scopeCode","_def","nameOrPrefix","constant","toName","_leafNode","const","_constant","let","operators","object","keyValues","if","thenBody","elseBody","_blockNode","endIf","elseIf","_elseNode","_endBlockNode","_for","node","forBody","endFor","for","forRange","forOf","arr","forIn","obj","ownProperties","_templateObject3","break","return","try","tryBody","catchCode","finallyCode","_currNode","throw","block","nodeCount","endBlock","len","toClose","func","funcBody","endFunc","N1","N2","andCode","mappend","orCode","_templateObject5","_templateObject6","_len3","_key3","ValueError","UsedValueState","prefixes","_prefixes","_parent","_newName","ng","_nameGroup","index","nameStr","property","itemIndex","scopePath","line","scope","valueKey","vs","_name","_reduceValues","usedValues","getCode","valueCode","nameSet","Started","def","Completed","util_1","names_1","addError","gen","errObj","err","_templateObject14","vErrors","_templateObject15","_templateObject16","_templateObject17","errors","returnErrors","it","errs","validateName","schemaEnv","$async","_templateObject18","ValidationError","_templateObject19","message","keyword","schemaType","cxt","keywordError","errorPaths","overrideAllErrors","compositeRule","allErrors","errorObjectCode","errsCount","schemaValue","_templateObject7","_templateObject8","_templateObject9","instancePath","errorPath","_templateObject10","_templateObject11","errSchemaPath","verbose","_templateObject12","_templateObject13","schemaPath","params","propertyName","schema","parentSchema","createErrors","_templateObject20","errorInstancePath","errorSchemaPath","_ref8","topSchemaRef","_templateObject24","messages","_templateObject25","extraErrorProps","errorObject","instPath","_templateObject21","getErrorPath","Type","Str","schPath","_templateObject22","_templateObject23","resolve_1","SchemaEnv","env","dynamicAnchors","schemaId","root","baseId","normalizeId","localRefs","compileSchema","sch","_sch","getCompilingSchema","rootId","getFullPath","uriResolver","_ValidationError","schemaCxt","parentData","parentDataProperty","dataNames","dataPathArr","dataLevel","dataTypes","definedProperties","jtd","sourceCode","_compilations","validateFunctionCode","validateCode","process","validate","makeValidate","scopeValues","unevaluated","evaluated","dynamicProps","dynamicItems","inlineOrCompile","inlineRef","inlineRefs","schEnv","s2","s1","resolve","schemas","resolveSchema","refPath","_getFullPath","getJsonPointer","schOrRef","schId","resolveUrl","schOrFunc","PREVENT_SCOPE_CHANGE","parsedRef","fragment","part","partSchema","unescapeFragment","$ref","schemaHasRulesButRef","RULES","valCxt","rootData","jsonPos","jsonLen","jsonPart","MissingRefError","resolver","missingRef","missingSchema","equal","traverse","SIMPLE_INLINED","limit","hasRef","countKeys","REF_KEYWORDS","count","Infinity","eachItem","serialize","TRAILING_SLASH_HASH","ANCHOR","baseIds","pathPrefix","schemaRefs","allKeys","jsonPtr","parentJsonPtr","fullPath","addRef","_resolve","ambiguos","checkAmbiguosRef","addAnchor","anchor","$anchor","$dynamicAnchor","sch1","sch2","jsonTypes","groups","number","rules","string","array","types","integer","boolean","null","keywords","checkUnknownRules","strictSchema","checkStrictMode","schemaHasRules","escapeJsonPointer","unescapeJsonPointer","makeMergeEvaluated","mergeNames","mergeToName","mergeValues","resultToName","evaluatedPropsToName","ps","setEvaluated","hash","decodeURIComponent","xs","max","snippets","mode","dataProp","dataPropType","jsPropertySyntax","isNumber","Num","shouldUseGroup","group","rule","shouldUseRule","definition","implements","kwd","errors_1","boolError","falseSchemaError","schemaCode","reportError","valid","rules_1","applicability_1","DataType","getJSONTypes","ts","every","isJSONType","includes","nullable","coerceTo","coerceTypes","COERCIBLE","coerceToTypes","checkTypes","schemaHasRulesForType","wrongType","checkDataTypes","strictNumbers","Wrong","dataType","coerced","coerceSpecificType","reportTypeError","assignParentData","coerceData","checkDataType","strictNums","correct","Correct","numCond","_templateObject26","_templateObject27","_cond","and","_templateObject28","_templateObject29","toHash","notObj","_templateObject30","_templateObject31","typeError","_templateObject32","_templateObject33","schemaRefOrVal","getTypeErrorContext","assignDefault","prop","defaultValue","childData","useDefaults","ty","boolSchema_1","dataType_1","dataType_2","defaults_1","keyword_1","subschema_1","validateFunction","funcSourceUrl","dynamicRef","destructureValCxtES5","destructureValCxt","subschemaCode","isSchemaObj","checkKeywords","schemaCxtHasRules","$comment","commentKeyword","updateContext","checkAsyncSchema","typeAndKeywords","subSchemaObjCode","boolOrEmptySchema","ignoreKeywordsWithRef","checkRefsAndKeywords","schemaKeywords","getSchemaTypes","coerceAndCheckDataType","rootName","typeErrors","groupKeywords","iterateKeywords","strictTypes","includesType","strictTypesError","withTypes","narrowSchemaTypes","checkContextTypes","allowUnionTypes","checkMultipleTypes","hasApplicableType","checkKeywordTypes","checkStrictTypes","keywordCode","assignDefaults","schTs","kwdT","checkNoDefault","resetEvaluated","assignEvaluated","returnResults","topSchemaObjCode","topBoolOrEmptySchema","validateKeywordUsage","getData","validSchemaType","allowUndefined","trackErrors","result","successAction","failAction","failResult","pass","fail","fail$data","_templateObject34","or","invalid$data","errorParams","setParams","_error","reportExtraError","$dataError","keyword$DataError","reset","resetErrorsCount","block$data","codeBlock","$dataValid","check$data","_templateObject35","validateSchema","st","_templateObject36","wrong$DataType","validateSchemaRef","_templateObject37","invalid$DataSchema","subschema","appl","getSubschema","extendSubschemaData","extendSubschemaMode","nextContext","mergeEvaluated","mergeValidEvaluated","ruleType","funcKeywordCode","macroKeywordCode","compile","JSON_POINTER","RELATIVE_JSON_POINTER","jsonPointer","matches","exec","up","errorMsg","segments","segment","_templateObject38","_templateObject39","pointerType","modifyData","useKeyword","macroSchema","macro","schemaRef","checkAsyncKeyword","validateRef","assignValid","_await","passCxt","passContext","passSchema","callValidateCode","modifying","reportErrs","ruleErrs","validateAsync","validateErrs","validateSync","extendErrors","addErrs","deps","dependencies","errorsText","schemaProp","escapeFragment","dpType","dataContextProps","_nextData","jtdDiscriminator","jtdMetadata","compile_1","codegen_2","$dataRefSchema","uri_1","defaultRegExp","META_IGNORE_OPTIONS","EXT_SCOPE_NAMES","removedOptions","errorDataPath","format","jsonPointers","extendRefs","missingRefs","processCode","strictDefaults","strictKeywords","uniqueItems","unknownFormats","cache","ajvErrors","deprecatedOptions","unicode","requiredOptions","strict","_optz","_c","_d","_f","_e","_h","_k","_j","strictTuples","_m","_l","strictRequired","_p","_o","loopRequired","_q","loopEnum","_r","_s","_t","_u","_v","addUsedSchema","_w","_x","validateFormats","_y","unicodeRegExp","_z","int32range","_0","formats","_loading","_cache","noLogs","getLogger","formatOpt","getRules","checkOptions","_metaOpts","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addInitialSchemas","_dataRefSchema","$id","schemaKeyRef","_meta","_addSchema","_compileSchemaEnv","compileAsync","loadSchema","runCompileAsync","_schema","loadMetaSchema","$schema","_compileAsync","checkLoaded","loadMissingSchema","_loadSchema","addSchema","_validateSchema","_checkUnique","throwOrLogError","keyRef","getSchEnv","removeSchema","_removeAllSchemas","cacheKey","definitions","kwdOrDef","checkKeyword","addRule","keywordMetaschema","getKeyword","removeKeyword","findIndex","addFormat","separator","dataVar","keywordsJsonPointers","seg","schemaOrData","regex","getSchemaRefs","startsWith","_compileMetaSchema","currentOpts","checkOpts","options","opt","optsSchemas","defs","metaOpts","KEYWORD_NAME","ruleGroup","before","addBeforeRule","_rule","$dataRef","anyOf","ucs2length","pos","charCodeAt","uri","ajv","validation","validateAdditionalItems","alwaysValidSchema","validateItems","additionalProperty","removeAdditional","allSchemaProperties","patProps","patternProperties","deleteAdditional","additionalPropertyCode","applyAdditionalSchema","definedProp","propsSchema","isOwnProperty","usePattern","isAdditional","schCxt","validateUnion","min","minContains","maxContains","validateItemsWithCount","schValid","checkLimits","_valid","depsCount","property_ies","missingProperty","propDeps","schDeps","propertyDeps","schemaDeps","splitDependencies","validatePropertyDeps","validateSchemaDeps","missing","hasProperty","propertyInData","depProp","checkReportMissingProp","checkMissingProp","reportMissingProp","ifClause","hasThen","hasSchema","hasElse","validateIf","validateClause","additionalItems_1","prefixItems_1","items_1","items2020_1","contains_1","dependencies_1","propertyNames_1","additionalProperties_1","properties_1","patternProperties_1","not_1","anyOf_1","oneOf_1","allOf_1","if_1","thenElse_1","draft2020","applicator","validateTuple","validateArray","extraItems","schArr","fullTuple","minItems","maxItems","checkStrictTuple","prefixItems","passing","util_2","patterns","alwaysValidPatterns","checkProperties","allowMatchingProperties","checkMatchingProperties","pat","validateProperties","alwaysValid","validatePatternProperties","additionalProperties","allProps","hasDefault","applyPropertySchema","hasPropFunc","noPropertyInData","schemaMap","dataAndSchema","newRegExp","pattern","useFunc","validArr","notValid","id_1","ref_1","core","callRef","callRootRef","schOrEnv","resolveRef","getValidate","callValidate","schName","inlineRefSchema","addErrorsFrom","addEvaluatedFrom","schEvaluated","callAsyncRef","types_1","discrError","DiscrError","Tag","oneOf","mapping","applyTagSchema","oneOfMapping","topRequired","hasRequired","tagRequired","propSch","addMappings","required","addMapping","enum","tagValue","getMapping","Mapping","validateMapping","validation_1","applicator_1","format_1","metadata_1","draft7Vocabularies","metadataVocabulary","contentVocabulary","fmts","fDef","fType","callFormat","validData","invalidFmt","validate$DataFormat","formatDef","unknownMsg","unknownFormat","fmtType","fmtRef","fmtDef","fmt","getFormat","validCondition","validateFormat","equal_1","useLoop","eql","getEql","vSchema","equalCode","limitNumber_1","multipleOf_1","limitLength_1","pattern_1","limitProperties_1","required_1","limitItems_1","uniqueItems_1","const_1","enum_1","comp","ucs2length_1","ops","KWDs","maximum","okStr","minimum","exclusiveMaximum","exclusiveMinimum","prec","multipleOfPrecision","invalid","loopAllRequired","allErrorsMode","loopUntilMissing","exitOnErrorMode","requiredKey","itemTypes","loopN","indices","loopN2","outer","hasOwn","classNames","classes","argType","inner","factory","commonjsGlobal","promiseExists","globalObject","symbolExists","mapExists","setExists","weakMapExists","weakSetExists","dataViewExists","symbolIteratorExists","symbolToStringTagExists","setEntriesExists","mapEntriesExists","setIteratorPrototype","mapIteratorPrototype","arrayIteratorExists","arrayIteratorPrototype","stringIteratorExists","stringIteratorPrototype","toStringLeftSliceLength","toStringRightSliceLength","typeDetect","typeofObj","stringTag","objPrototype","isBufferExists","isBufferFromExists","copy","detectType","collectionTypeSet","collection","isCollection","freeGlobalThis","freeGlobal","freeSelf","copyArrayBuffer","copyBoolean","copyDataView","copyBuffer","copyDate","copyNumber","copyRegExp","copyString","copyTypedArray","shallowCopy","getEmptyArray","getEmptyMap","getEmptyObject","getEmptySet","copyMap","noop","copy$1","valueType","copyFunction","deepcopy","recursiveCopy","copiedValue","clone","references","visited","collectionKey","collectionValue","collectionValueType","copiedCollectionValue","toCamelCase","addPxToStyle","element","camel","cssProp","detect","cssText","each","cb","_traverse","pre","rootSchema","parentKeyword","keyIndex","arrayKeywords","propsKeywords","skipKeywords","additionalItems","contains","propertyNames","allOf","$defs","multipleOf","maxLength","minLength","maxProperties","minProperties","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","freeExports","nodeType","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","setter","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","size","overArg","replaceHolders","placeholder","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","unicodeToArray","asciiToArray","charAt","unescapeHtmlChar","runInContext","defaults","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","uid","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","now","ctxSetTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","reverse","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entry","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","lower","upper","baseClone","bitmask","stack","isDeep","isFlat","isFull","input","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","computed","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","seen","baseInvoke","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othProps","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","getIteratee","criteria","comparer","sort","baseSortBy","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","baseShuffle","baseSlice","end","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","fn","arrLength","oldArray","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","flatten","otherFunc","isKeyable","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","defer","delay","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isString","lt","lte","toArray","done","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","camelCase","word","toLowerCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","position","escape","escapeRegExp","findKey","findLastKey","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","unescape","uniqueId","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","define","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","getOwnPropertyNames","arrLen","createUTC","locale","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","val","momentPropertiesLen","_isAMomentObject","_i","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","output","_calendar","zeroFill","targetLength","forceSign","absNumber","abs","zerosToFill","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","defaultLongDateFormat","LTS","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","unit","shorthand","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","toISOString","keepOffset","toDate","inspect","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","field","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","getNanoSeconds","hrtime","loadTime","moduleLoadTime","nodeLoadTime","upTime","performance","hr","uptime","div","createElement","titleCase","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","any","arrayOf","elementType","instanceOf","objectOf","oneOfType","shape","exact","checkPropTypes","PropTypes","vendors","raf","caf","queue","_now","cp","cancelled","handle","polyfill","requestAnimationFrame","cancelAnimationFrame","renderViewDefault","_react2","renderTrackHorizontalDefault","_objectWithoutProperties","finalStyle","right","bottom","left","borderRadius","renderTrackVerticalDefault","top","renderThumbHorizontalDefault","cursor","backgroundColor","renderThumbVerticalDefault","_react","_createClass","descriptor","Constructor","protoProps","staticProps","_raf2","_raf3","_interopRequireDefault","_domCss2","_propTypes2","_isString2","_getScrollbarWidth2","_returnFalse2","_getInnerWidth2","_getInnerHeight2","_styles","_defaultRenderElements","Scrollbars","_Component","_classCallCheck","_this","ReferenceError","_possibleConstructorReturn","__proto__","getScrollLeft","getScrollTop","getScrollWidth","getScrollHeight","getClientWidth","getClientHeight","getValues","getThumbHorizontalWidth","getThumbVerticalHeight","getScrollLeftForOffset","getScrollTopForOffset","scrollLeft","scrollTop","scrollToLeft","scrollToTop","scrollToRight","scrollToBottom","handleTrackMouseEnter","handleTrackMouseLeave","handleHorizontalTrackMouseDown","handleVerticalTrackMouseDown","handleHorizontalThumbMouseDown","handleVerticalThumbMouseDown","handleWindowResize","handleScroll","handleDrag","handleDragEnd","didMountUniversal","subClass","superClass","setPrototypeOf","_inherits","addListeners","componentDidMountUniversal","universal","setState","removeListeners","requestFrame","hideTracksTimeout","clearInterval","detectScrollingInterval","scrollWidth","scrollHeight","clientWidth","clientHeight","_ref2$scrollLeft","_ref2$scrollTop","_ref2$scrollWidth","_ref2$scrollHeight","_ref2$clientWidth","_ref2$clientHeight","_props","thumbSize","thumbMinSize","_view","trackWidth","trackHorizontal","_props2","_view2","trackHeight","trackVertical","_view3","_view4","thumbHorizontal","thumbVertical","removeEventListener","teardownDragging","event","_this2","_props3","onScroll","onScrollFrame","viewScrollLeft","viewScrollTop","detectScrolling","onScrollStart","handleScrollStartAutoHide","autoHide","showTracks","onScrollStop","handleScrollStopAutoHide","hideTracks","forceUpdate","preventDefault","clientX","targetLeft","getBoundingClientRect","thumbWidth","clientY","targetTop","thumbHeight","handleDragStart","offsetWidth","prevPageX","offsetHeight","prevPageY","disableSelectStyle","onselectstart","disableSelectStyleReset","dragging","stopImmediatePropagation","setupDragging","handleDragEndAutoHide","trackMouseOver","handleTrackMouseEnterAutoHide","handleTrackMouseLeaveAutoHide","_this3","scrolling","autoHideTimeout","_this4","handleScrollStart","setInterval","lastViewScrollLeft","lastViewScrollTop","handleScrollStop","_this5","_this6","_update","_props4","onUpdate","hideTracksWhenNotNeeded","trackHorizontalWidth","thumbHorizontalWidth","thumbHorizontalStyle","trackVerticalHeight","thumbVerticalHeight","thumbVerticalStyle","trackHorizontalStyle","visibility","trackVerticalStyle","_this7","scrollbarWidth","_props5","renderView","renderTrackHorizontal","renderTrackVertical","renderThumbHorizontal","renderThumbVertical","autoHideDuration","autoHeight","autoHeightMin","autoHeightMax","children","containerStyle","containerStyleDefault","containerStyleAutoHeight","minHeight","maxHeight","viewStyle","viewStyleDefault","marginRight","marginBottom","viewStyleAutoHeight","viewStyleUniversalInitial","trackAutoHeightStyle","transition","trackHorizontalStyleDefault","display","trackVerticalStyleDefault","container","cloneElement","thumbHorizontalStyleDefault","thumbVerticalStyleDefault","Component","propTypes","defaultProps","WebkitOverflowScrolling","userSelect","_Scrollbars","_Scrollbars2","el","_getComputedStyle","getComputedStyle","paddingTop","paddingBottom","paddingLeft","paddingRight","MsOverflowStyle","appendChild","removeChild","_domCss","maybe","onTriggered","disableClick","disableTouch","disableKeys","allowAnyKey","triggerKeys","react","useRef","keyListener","useCallback","clickOrTouchListener","eventsConfig","useMemo","useEffect","eventConfigItem","isDisabled","eventName","listener","hasElementType","Element","hasMap","hasSet","hasArrayBuffer","isView","$$typeof","InfiniteScroll","scrollListener","eventListenerOptions","mousewheelListener","pageLoaded","pageStart","attachScrollListener","isReverse","loadMore","parentElement","getParentElement","scrollComponent","beforeScrollHeight","beforeScrollTop","detachScrollListener","detachMousewheelListener","passive","testOptions","useCapture","isPassiveSupported","loader","defaultLoader","scrollEl","useWindow","parentNode","scrollParent","getScrollParent","hasMore","initialLoad","deltaY","doc","pageYOffset","offsetParent","calculateTopPosition","innerHeight","offsetTop","renderProps","filterProps","childrenArray","unshift","_interopDefaultLegacy","React__default","_setPrototypeOf","canvasStyle","border","mirrorProps","_excluded","hookNode","basedOn","TEXT_NODE","frag","createDocumentFragment","textContent","span","dummySpan","replaceChild","ELEMENT_NODE","childNodes","unwrapTextNode","createTextNode","removeFollowingElementLeaves","nextElementSibling","findBlockAncestor","ndAncestor","affectLayout","ndUnit","component","unsafeHTML","maxLine","ellipsis","ellipsisHTML","onReflow","winWidth","usedProps","HTMLEllipsis","_React$Component","html","clamped","canvas","nlUnits","_proto","componentDidMount","initCanvas","reflow","componentDidUpdate","prevProps","copyStyleToCanvas","componentWillUnmount","targetStyle","innerHTML","newState","putEllipsis","calcIndexes","querySelectorAll","nd1stLayoutUnit","ndPrevUnit","ndEllipsis","makeEllipsisSpan","_this$props","isClamped","_this$state","_this$props2","excluded","sourceKeys","_objectWithoutPropertiesLoose","omittedKeys","dangerouslySetInnerHTML","__html","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","__self","__source","_owner","Fragment","jsx","jsxs","i18n","Translator","translator","me","translate","contexts","globalContext","defaultNumOrFormatting","numOrFormattingOrContext","formattingOrContext","defaultText","formatting","num","translateHash","translateText","_ref1","_results","setContext","ext","extension","clearContext","resetData","resetContext","contextData","useOriginalText","getContextData","findTranslation","triple","applyNumbers","applyFormatting","ind","trans","space","letter","hasSpace","hasSeparator","separatorSplitter","unseparate","hasCamel","camelSplitter","uppers","uncamelize","clean","sets","xl","subexp","typeOf","buildExps","isIRI","ALPHA$$","DIGIT$$","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","SCHEME$","USERINFO$","UNRESERVED$$","DEC_OCTET_RELAXED$","H16$","LS32$","IPV4ADDRESS$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","ZONEID$","IPV6ADDRESS$","IP_LITERAL$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","HOST$","REG_NAME$","PORT$","AUTHORITY$","PCHAR$","SEGMENT$","SEGMENT_NZ$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","PATH_ABSOLUTE$","QUERY$","PATH_NOSCHEME$","PATH_ROOTLESS$","PATH_EMPTY$","IPRIVATE$$","FRAGMENT$","HIER_PART$","URI$","RELATIVE_PART$","RELATIVE$","URI_PROTOCOL","IRI_PROTOCOL","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","stringFromCharCode","fromCharCode","error$1","RangeError","mapDomain","ucs2decode","counter","extra","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","decode","inputLength","bias","basic","oldi","baseMinusT","fromCodePoint","encode","_step","_iteratorNormalCompletion","_iterator","_currentValue2","basicLength","handledCPCount","_step2","_iteratorNormalCompletion2","_iterator2","currentValue","handledCPCountPlusOne","_step3","_iteratorNormalCompletion3","_iterator3","_currentValue","qMinusT","toUnicode","toASCII","punycode","toConsumableArray","SCHEMES","pctEncChar","pctDecChars","newStr","il","c3","_normalizeComponentEncoding","components","protocol","decodeUnreserved","decStr","UNRESERVED","scheme","PCT_ENCODED","NOT_SCHEME","userinfo","NOT_USERINFO","host","NOT_HOST","NOT_PATH","NOT_PATH_NOSCHEME","query","NOT_QUERY","NOT_FRAGMENT","_stripLeadingZeros","_normalizeIPv4","IPV4ADDRESS","address","_normalizeIPv6","IPV6ADDRESS","_matches2","_address$toLowerCase$2","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","longestZeroFields","acc","lastLongest","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","uriString","iri","port","schemeHandler","unicodeSupport","domainHost","_recomposeAuthority","uriTokens","$1","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","authority","absolutePath","resolveComponents","relative","tolerant","baseURI","relativeURI","schemelessOptions","normalize","uriA","uriB","escapeComponent","ESCAPE","unescapeComponent","handler","secure","handler$1","isSecure","wsComponents","handler$2","resourceName","_wsComponents$resourc2","handler$3","ATEXT$$","VCHAR$$","SOME_DELIMS$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","handler$4","mailtoComponents","unknownHeaders","hfields","hfield","toAddrs","_xl","subject","_x2","_xl2","addr","toAddr","atIdx","localPart","domain","URN_PARSE","handler$5","urnComponents","nid","nss","urnScheme","uriComponents","UUID","handler$6","uuidComponents","uuid","is","useState","useLayoutEffect","useDebugValue","getSnapshot","inst","useSyncExternalStore","warning","webpackAsyncContext","req","ids","React","strings","raw","freeze","moduleId","cachedModule","loaded","leafPrototypes","getProto","chunkId","promises","miniCssF","inProgress","dataWebpackPrefix","url","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","timeout","nc","src","onScriptComplete","prev","onerror","onload","doneFns","nmd","installedChunks","installedChunkData","promise","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","ReactDOM","Action","PopStateEventType","invariant","getHistoryState","usr","idx","createLocation","pathname","parsePath","createPath","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","defaultView","v5Compat","globalHistory","history","Pop","getIndex","handlePop","nextIndex","createURL","origin","href","URL","replaceState","listen","encodeLocation","Push","historyState","pushState","DOMException","Replace","go","ResultType","matchRoutes","routes","locationArg","basename","stripBasename","branches","flattenRoutes","siblings","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","matchRouteBranch","safelyDecodeURI","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","joinPaths","computeScore","_route$path","exploded","explodeOptionalSegments","isOptional","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","compiledParams","regexpSource","paramName","compilePath","captureGroups","memo","splatValue","safelyDecodeURIComponent","decodeURI","startIndex","nextChar","getInvalidPathError","char","dest","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","fromSegments","toSegments","routePathnameIndex","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","isRouteErrorResponse","statusText","internal","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","routePathnamesJson","UNSAFE_getResolveToMatches","useNavigateUnstable","useParams","routeMatch","useResolvedPath","_temp2","useRoutesImpl","dataRouterState","parentMatches","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","renderedMatches","_renderMatches","Provider","navigationType","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","useRouteError","lightgrey","preStyles","padding","fontStyle","defaultErrorElement","RenderErrorBoundary","revalidation","getDerivedStateFromError","getDerivedStateFromProps","componentDidCatch","errorInfo","routeContext","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState2","_dataRouterState","errorIndex","renderFallback","fallbackIndex","v7_partialHydration","HydrateFallback","hydrateFallbackElement","loaderData","shouldRenderHydrateFallback","alreadyWarned","getChildren","hookName","ctx","useRouteContext","thisRoute","Route","Router","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","useRoutes","createRoutesFromChildren","treePath","hasErrorBoundary","shouldRevalidate","lazy","createSearchParams","URLSearchParams","ViewTransitionContext","isTransitioning","startTransitionImpl","BrowserRouter","historyRef","setStateImpl","v7_startTransition","isBrowser","ABSOLUTE_URL_REGEX","Link","absoluteHref","onClick","reloadDocument","preventScrollReset","unstable_viewTransition","UNSAFE_NavigationContext","isExternal","currentUrl","targetUrl","_temp","joinedPathname","useHref","internalOnClick","replaceProp","button","metaKey","altKey","ctrlKey","shiftKey","isModifiedEvent","shouldProcessLinkClick","useLinkClickHandler","defaultPrevented","NavLink","ariaCurrentProp","classNameProp","styleProp","_excluded2","routerState","UNSAFE_DataRouterStateContext","vtContext","useViewTransitionState","currentPath","currentLocation","nextPath","nextLocation","nextLocationPathname","navigation","endSlashPosition","isActive","isPending","ariaCurrent","UNSAFE_DataRouterContext","useSearchParams","defaultInit","defaultSearchParamsRef","hasSetSearchParamsRef","searchParams","locationSearch","defaultSearchParams","getAll","getSearchParamsForLocation","setSearchParams","nextInit","navigateOptions","newSearchParams","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","timeoutID","_ref$noTrailing","noTrailing","_ref$noLeading","noLeading","_ref$debounceMode","debounceMode","lastExec","clearExistingTimeout","arguments_","elapsed","_ref2$upcomingOnly","upcomingOnly","_ref$atBegin","atBegin","USTORE_THEME_PREFIX","assetPrefix","_exec$","_exec","_exec$2","_exec2","_exec$3","_exec4","_exec3","lexer","defaultPattern","escapeString","tryConsume","mustConsume","nextType","consumeText","modifier","name_1","sensitive","stringToRegexp","endsWithRe","delimiterRe","tokens_1","endToken","isEndDelimited","tokensToRegexp","pathToRegexp","groupsRegex","execResult","regexpToRegexp","arrayToRegexp","dashToCamel","camelToPascal","decodeStringForURL","queryOrCookieStrToObj","splitter","splitBy","extractPathParams","routesArray","asPath","pathParams","formatNumByLocale","amount","Intl","NumberFormat","formatDateByLocale","utcDate","DateTimeFormat","getNextConfig","publicRuntimeConfig","apiUrl","classicUrl","themeCustomizationUrl","serverDomain","hostname","baseUrl","getBaseUrlComponents","storeBaseURL","assetsPrefix","cultureCode","storefrontCookies","storeID","userID","cartUrl","logoutUrl","language","currencyID","currencyGUID","cookieRibbonNotShownYet","showThemeAsDraft","CookiesManager","_class","_cookieType","StrictlyNecessary","Preferences","_cookiePermission","_strictlyNecessaryStorefrontCookies","_preferencesStorefrontCookies","isCookieAllowed","isStrictlyNecessary","isPreferences","_setCookie","expires","toUTCString","sameSite","cookie","setCookie","cookieData","getCookie","deleteCookie","cookieName","reactCookiesForRibbon","expiration","description","legacyCookiesForRibbon","getCookiesForRibbon","cookiesData","additional","redirectToGenericErrorPage","redirectToLegacy","legacyURL","themeContext","redirectToFullURL","newURL","loginByUrl","storeBaseFromURL","shouldCookieRibbonBeShown","loginResponse","deleteKey","FullURL","UserID","loginByUrlCall","StoreID","saveInfoFromApi","setCookies","USER_ID_EXPIRATION_DAYS","returnURL","returnToUrl","reload","initAndLogin","securityTokenFromUrl","cultureCodeFromURL","storedCultureCode","replaceCultureCodeInURL","newCultureCode","newSecurityToken","storeBaseFromMem","searchStr","SecurityToken","ShowRibbon","shouldCallLoginByUrl","onAccessDenied","securityToken","storeFriendlyID","languageCode","storeType","StoreType","redirectToLogout","onStoreNotAvailable","onGeneralError","firstLevelCategories","requireOrderApproval","initiateThemeState","ctxParam","createContext","updateRouteParams","fullUrl","page","initialPropsFunctionName","userInitialProps","routedPage","pages","getInitialProps","Home","getUserInitialProps","userCustomState","CultureCode","StoreGuid","currencyFriendlyID","CurrencyID","SsoToken","ssoToken","fixTranslation","fixTranslationValues","localizations","NO_LOCALIZATION","globalLocalization","uStoreLocalization","globalTranslation","bundledTranslation","getSEO","Title","Description","concatenate","pageTitle","storeTitle","storeDescription","SeoConfiguration","titleAdditionFormat","titleAdditionText","TitleTagType","TitleTag","currentProduct","metaTag","querySelector","urlGenerator","encodedValue","Icon","wrapperClassName","importedIcon","setImportedIcon","ReactComponent","_jsx","importIcon","svg","classList","productTypes","getIsNGProduct","product","NGCompatible","attribute","CART_MODE","Aspx","WishList","Lists","SingleList","getCartMode","NGCart","CartMode","convertProductPropertiesFormIntoArray","currentProductProperties","excelPricingEnabled","formData","JSONSchema","UISchema","propertyDefinition","widget","toAPIValue","uStoreDucs","duc","custom","preparingFormDataToSendToServer","propertiesSchema","updatedProperties","isJsonString","_UStoreProvider$state","connectCartUrl","storeItemsCount","ItemsCount","setCartItemsCount","isCartLists","_UStoreProvider$state2","cartComponent","_jsxs","ManagerReferenceNodeContext","ManagerReferenceNodeSetterContext","Manager","_React$useState","referenceNode","setReferenceNode","hasUnmounted","handleSetReferenceNode","unwrapArray","safeInvoke","setRef","fromEntries","getWindow","ownerDocument","isHTMLElement","isShadowRoot","ShadowRoot","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","offsetLeft","getWindowScroll","win","pageXOffset","getNodeName","nodeName","getDocumentElement","getWindowScrollBarX","isScrollParent","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","scroll","offsets","getNodeScroll","clientLeft","clientTop","getLayoutRect","getParentNode","assignedSlot","listScrollParents","list","_element$ownerDocumen","isBody","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","css","perspective","contain","willChange","getContainingBlock","auto","basePlacements","clippingParents","viewport","popper","variationPlacements","placement","placements","modifierPhases","modifiers","requires","requiresIfExists","dep","depModifier","pending","DEFAULT_OPTIONS","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","orderedModifiers","modifiersData","elements","attributes","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","merged","existing","mergeByName","enabled","_ref$options","effect","cleanupFn","noopFn","_state$elements","rects","_state$orderedModifie","_state$orderedModifie2","_options","destroy","onFirstUpdate","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","dpr","devicePixelRatio","roundOffsetsByDPR","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","getOppositePlacement","getOppositeVariationPlacement","child","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","axis","within","mathMax","mathMin","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrow","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","globalCssModule","createPopper","_options$scroll","_options$resize","resize","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","removeAttribute","initialStyles","margin","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","check","_loop","fittingPlacement","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","EMPTY_MODIFIERS","NOOP","NOOP_PROMISE","Popper","_ref$placement","_ref$strategy","_ref$modifiers","referenceElement","innerRef","popperElement","setPopperElement","_React$useState2","setArrowElement","_usePopper","prevOptions","optionsWithDefaults","updateStateModifier","popperOptions","newOptions","popperInstanceRef","popperInstance","defaultCreatePopper","usePopper","childrenProps","hide","arrowProps","_typeof","setScrollbarWidth","conditionallyUpdateScrollbar","scrollDiv","getScrollbarWidth","fixedContent","bodyPadding","innerWidth","mapToCssModules","cssModule","omitKeys","warned","warnOnce","DOMElement","targetPropType","tagPropType","TransitionTimeouts","TransitionPropTypeKeys","TransitionStatuses","keyCodes","esc","enter","tab","down","home","canUseDOM","findDOMElements","isReactRefObj","selection","isArrayOrNodeList","els","getTarget","allElements","focusableElements","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","initialStatus","appear","isMounting","appearStatus","in","unmountOnExit","mountOnEnter","nextCallback","prevState","updateStatus","nextStatus","cancelNextCallback","getTimeouts","exit","mounting","nodeRef","forceReflow","performEnter","performExit","appearing","maybeNode","maybeAppearing","timeouts","enterTimeout","safeSetState","onEntered","onEnter","onEntering","onTransitionEnd","onExit","onExiting","onExited","nextState","setNextCallback","active","doesNotHaveTimeoutOrListener","addEndListener","maybeNextCallback","childProps","TransitionGroupContext","only","contextType","sourceSymbolKeys","ownKeys","enumerableOnly","symbols","sym","_objectSpread","_defineProperty","baseClass","baseClassActive","Fade","_props$tag","_props$baseClass","_props$baseClassActiv","_props$innerRef","otherProps","transitionProps","pickKeys","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_defineProperties","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_assertThisInitialized","popperClassName","placementPrefix","arrowClassName","hideArrow","isOpen","boundariesElement","onClosed","fade","PopperContent","_super","setTargetNode","getTargetNode","getRef","_element","focus","targetNode","_arrowClassName","_popperClassName","attrs","modifierNames","baseModifiers","extendedModifiers","popperTransition","ReactPopper","popperPlacement","renderChildren","getContainerNode","disabled","innerClassName","toggle","autohide","show","trigger","DEFAULT_DELAYS","isInDOMSubtree","subtreeRoot","isInDOMSubtrees","subtreeRoots","subTreeRoot","TooltipPopoverWrapper","_targets","currentTargetElement","addTargetEvents","handleDocumentClick","removeTargetEvents","showWithDelay","hideWithDelay","onMouseOverTooltipContent","onMouseLeaveTooltipContent","onEscKeyDown","_isMounted","updateTarget","clearShowTimeout","clearHideTimeout","triggers","_hideTimeout","_popover","_showTimeout","persist","getDelay","getCurrentTarget","currentTarget","composedPath","isBubble","addEventOnTargets","removeEventOnTargets","newTarget","popperClasses","role","onMouseOver","onMouseLeave","onKeyDown","Popover","arrowClasses","PopoverBody","NavigationMenu","selectedCategory","selected","getSubCategoriesMapped","categoryTreeNode","countInColumn","category","SubCategories","subCategoriesMapped","HasSubCategories","countAll","categoryTreeNodeL2","categoryL2","subCategoriesL2","groupSize","HasProducts","countBlankSpaces","indexInColumn","showFeaturedProducts","categoryL3Node","viewShowAll","viewShowOnlyAllPanel","subCategoriesTreeNode","DIV_VIEW_COLUMNS_HEIGHT","categoryL3","ImageUrl","alt","CategoriesNavbar","mouseOverElement","categoryChanged","isOverlayOpen","popoverTarget","keepNavigationOpen","handleMouseOut","handleMouseOver","onMouseOut","CategoriesSidebar","subCategoriesTree","drillIn","currentCategoryNode","drillOut","onRedirect","DropdownContext","divider","header","DropdownItem","getTabIndex","_this$props$toggle","menuRole","tabIndex","getRole","_omit","_omit$tag","InputGroupContext","a11y","nav","dropup","inNavbar","setActiveFromChild","preventDefaultKeys","Dropdown","addEvents","handleKeyDown","removeEvents","handleMenuRef","handleToggleRef","containerRef","menuRef","toggleRef","handleProps","which","getContainer","menu","getMenu","targetIsToggle","getToggle","clickIsInMenu","clickIsInInput","isTargetMenuItem","isTargetMenuCtrl","getMenuCtrl","isTab","_this2$getMenuItems$","getMenuItems","_this$getMenuItems$","click","$menuitems","_$menuitems","_$menuitems3","charPressed","onMenuRef","onToggleRef","_$menuCtrl","menuContainer","getItemType","_classNames","subItemIsActive","dropdownItem","insideInputGroup","getContextValue","Reference","refHandler","variant","CloseButton","close","color","outline","Button","ariaLabel","_props$color","btnOutlineColor","caret","DropdownToggle","tagRef","propType","explanation","dark","updateOnSelect","directionPositionMap","DropdownMenu","_this$props$tag","_this$props$flip","_this$props$modifiers","position1","position2","poperPlacement","poperModifiers","persistStyles","combinedStyle","showTitle","goToUrl","showRibbon","userIDfromStore","tempUserId","isDraft","pageURL","attr","connectEnterpriseLogoutURL","FirstName","deleteCookies","cn","sLogoutUrl","onLogoutClicked","createLink","anonymous","loginURL","LinkComponent","pageName","IsAnonymous","loginPage","Profile","isDropdownOpen","userIDFromStore","isUStoreConnectEnterprise","isSingleList","rejectedOrderCount","RejectedOrderCount","pendingApprovalOrderCount","PendingApprovalOrderCount","SignIn","SignOut","Roles","Shopper","Approver","_Fragment","InputGroup","searchValue","setSearchValue","ga","onSearchClicked","onChange","onKeyPress","overlayClicked","Switcher","onSelected","classNameStr","icon","Flag","getVariableValue","varName","isImageURL","isURL","varValue","getPropertyValue","imagePrefix","qs","paramsObj","setVarValue","ngToLegacyConversions","reg","generateURL","legacyToNGConversions","legacyIframeHandler","handleRoute","_currentStore$Attribu","iframeElm","postMessage","iframeURLWithMobileBreak","getLegacyUrl","isCartPage","newCartPage","hideIframe","isIframeVisible","setIframeSrc","handleClickingIframe","iframeContainer","handleResize","iframeSrc","getIframeSrc","urlWithMobileBreak","appendMessagingParams","adaptIframeToContainer","viewMobileState","_iframeElm","iframeID","clearContentSrc","buildType","getElementById","setNavigate","navigateFn","contentWindow","removeRandParamFromUrl","randIndex","ampersandIndex","mobileViewChanged","pathnameAfterCategoryFix","ngurl","convertUrlLegacyToNG","desktopBreakpoint","variables","lg","viewMobileVal","addViewMobile","legacyUrl","convertUrlNGToLegacy","queryString","createCleanQueryString","ngUrl","queryParamsJson","adaptContainerToIframe","onRedirectRequested","previousPath","onScrollParentRequested","scrollX","scrollY","onscroll","scrollTo","onRequestScrollPosition","response","changeRouteOrDimensions","changeRouteResult","isRoutingFromLegacy","messageHandled","nextUrl","handleScrolling","withRouter","widgetComponents","setWidgetComponents","xmpie_uStore_widgets","instances","WidgetComponent","widgetConfig","uStoreWidgetsConfiguration","atob","uStoreProvider","Header","setLogoImage","variableForLogoImg","matchMedia","theme","logoImageUrl","onResize","createRef","drawerOpen","mobileSearchVisible","overlayActive","drawerStateChange","open","burgerClicked","getFlagFromCode","currenciesViewModel","Code","culturesViewModel","CountryCode","currencySelected","selectedCurrency","cultureSelected","selectedCulture","pathWithNewLangugageCode","searchString","hashString","currentLogo","Slot","draweropen","Search","Cart","pageParams","Overlay","Footer","onCookiesPolicyClicked","onCloseCookiesConsentClicked","CrossCloseButton","localizeCookiesConsent","stringArray","onCloseCookiesPolicyClicked","showCookiesPolicy","setShowCookiesPolicy","CookiesPolicy","closeCookiesPolicy","CookiesConsent","closeCookiesRibbon","openCookiesPolicy","MapShim","class_1","__entries__","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","leadingCall","trailingCall","resolvePending","proxy","timeoutCallback","timeStamp","addObserver","observer","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","observe","childList","characterData","subtree","disconnect","getInstance","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","getBordersSize","positions","getHTMLElementContentRect","paddings","positions_1","getPaddings","horizPad","vertPad","boxSizing","isDocumentElement","vertScrollbar","horizScrollbar","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","bbox","getSVGContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","broadcastRect","ResizeObserverEntry","rectInit","contentRect","Constr","DOMRectReadOnly","createReadOnlyRect","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","unobserve","clearActive","observation","ResizeObserver","Layout","_debounce","timer","isConnectStore","resizeObserver","resizeElement","currentHeight","isPreviewMode","showHeaderFooter","HeadSEO","CookiesRibbon","showCookieRibbon","RouteChangeListener","imageUrl","HTMLLinesEllipsis","whiteSpace","isOutOfStock","quantity","minQuantity","AllowOutOfStockPurchase","hideInStock","pluralName","singleName","Quantity","formatForCurrencyAndCulture","formatParams","currencyFormat","decimalPlaces","decimalSeparator","intAmount","WrappedComponent","ConnectedComponent","preRender","preRenderedState","isMinimumPrice","showCurrency","overridePriceFormat","taxFormat","TaxFormat","CurrencyFormat","DecimalSeparator","DecimalPlaces","priceDisplayString","isPriceValid","MAX_VALUE","BaseQuantity","getValueFromRange","onValueChange","updatedQuantity","onClickPlusMinus","reduceOrAdd","quantityConfig","additionalClassName","showMinimalDisplay","selectedDropDownItem","Options","Changeable","onWheel","Tooltip","ProductItemQuantity","errorMessage","showErrorTooltip","errorTooltipTarget","getValidationErrorMessage","productModel","Configuration","Minimum","Maximum","Inventory","supportsInventory","inventory","MinimumQuantity","MaximumQuantity","InventoryQuantity","onQuantityChange","orderModel","targetExist","elementRef","titleRef","isTargetElement","pricePerItem","PackType","ItemType","ItemQuantity","ItemTypePluralName","PluralName","PackTypePluralName","PackTypeName","isLoading","LoadingDots","ImageLoader","imageOnLoad","img","image","previousSibling","isStretched","borderWidth","adjustedContainerWidth","adjustedContainerHeight","naturalWidth","naturalHeight","imageOnError","imageElem","complete","onError","onLoad","currentOrderItem","setCurrentOrderItem","isPriceCalculating","setIsPriceCalculating","calculatedPriceModel","setCalculatedPriceModel","addToCartShowSuccess","setAddToCartShowSuccess","setQuantity","isQuantityValid","setIsQuantityValid","addToCartShowSuccessTimer","setAddToCartShowSuccessTimer","descriptionLines","productNameLines","detailed","onCalculatePrice","MinimumPrice","orderItemForApi","priceModel","newQuantity","onAddToCartClick","success","updated","productNameAndCatalog","CatalogNumber","showQuickAddToCart","AllowQuickAddToCart","priceModelToDisplay","quantityToShow","ShortDescription","HasPricing","UnitsOfMeasure","Unit","subTitle","buttonText","promotionItem","setButtonSize","md","goTo","LEFT","RIGHT","UP","DOWN","preventScrollOnSwipe","rotationAngle","trackMouse","trackTouch","swipeDuration","touchEventOptions","swiping","xy","mouseMove","mouseUp","touchEnd","touchMove","touchStart","rotateXYByAngle","angle","angleInRadians","PI","cos","sin","getHandlers","handlerProps","onStart","isTouch","touches","onMove","onUp","onTouchStartOrOnMouseDown","deltaX","absX","absY","velocity","sqrt","vxvy","getDirection","eventData","onSwipeStart","onSwiping","cancelablePageSwipe","onSwiped","cancelable","onEnd","onSwipedDir","onTap","onTouchEndOrOnMouseUp","attachTouch","cleanup","baseOptions","tls","addState","cleanUpTouch","onMouseDown","useSwipeable","transientState","transientProps","previousProps","defaultKey","handlers","stateSetter","updateTransientState","Swipeable","Slider","slider","childrenLength","currentPosition","currentPage","displayedItems","lastClonedItemRight","lastClonedItemLeft","lastItemWidth","arrowsActive","slide","multi","addPosition","setButtons","sliderClientWidth","leftBtn","rightBtn","itemsInRow","getItemsInRow","clonedNodes","cloneNode","justifyContent","createInitRightSection","createInitLeftSection","setSliderPosition","setDotsPosition","initDots","clonedNodesToAppend","itemsTofill","clonedNodesToPrepend","firstItem","firstChild","insertBefore","reorderItems","isForward","lastClonedItem","isTransition","sliderWidth","isReorder","setActiveDot","dots","dot","getCssContent","content","preventDefaultTouchmoveEvent","onSwipedLeft","onSwipedRight","isMobile","promotionItemButtonUrl","clearCustomState","defaultURL","homeFeaturedProducts","homeFeaturedCategory","promotionItemImageUrl","promotionItemTitle","promotionItemSubtitle","promotionItemButtonText","PromotionItem","Count","Products","ScrollableGallery","hasMoreItems","categoryFriendlyID","setIsMobile","categoryID","setCategoryID","setCurrentCategory","setSubCategories","categoryFeaturedProducts","setCategoryFeaturedProducts","categoryProductsCount","setCategoryProductsCount","_await$UStoreProvider","newCategoryID","galleryTitle","activeTreeCheck","itm","generateTree","itemInner","CategoryItem","nextPage","joinedProducts","ProductItem","handleFrameMessage","changeRouteOrDimensionsHandled","Product","Legacy","productFriendlyID","productID","KitQuantity","KitItemQuantity","kitQuantity","itemUnitName","UnitPluralName","TotalQuantity","CarouselContext","CarouselItem","startAnimation","isAppearing","dispatchEvent","CustomEvent","isIn","_this$props$slide","directionClassName","orderClassName","itemClasses","activeIndex","keyboard","pause","ride","interval","mouseEnter","mouseLeave","enableTouch","propsToOmit","Carousel","handleKeyPress","renderItems","hoverStart","hoverEnd","handleTouchStart","handleTouchEnd","touchStartX","touchStartY","indicatorClicked","evt","keyCode","changedTouches","screenX","screenY","currentX","currentY","diffX","_setInterval","cycleInterval","_clearInterval","carouselItems","_this$props3","outerClasses","innerClasses","onMouseEnter","_carouselItems","_controlLeft","_controlRight","indicators","wrappedIndicators","onClickHandler","controlLeft","controlRight","onTouchStart","onTouchEnd","nextProps","REGULAR","SMALLER","SMALLEST","HIDDEN","images","onDotClick","setDots","filterDots","class","newDots","nextActiveDot","actualActiveDot","PADDING","renderDots","visible","SMALLER_WIDTH","onImageZoomed","zoomed","setZoomed","backgroundPosition","setBackgroundPosition","backgroundSize","setBackgroundSize","zoomAllowed","setZoomAllowed","checkIfZoomAllowed","imgWidth","imgHeight","mouseMoveHandler","offsetX","offsetY","nativeEvent","canBeZoomed","triggerZoomed","onMouseMove","backgroundImage","backgroundRepeat","getItemsPerSlide","responsive","breakpoints","leftArrow","rightArrow","hideDisabledArrows","itemWidth","itemHeight","marginBetween","onItemHovered","onItemClicked","activeImage","carouselWidth","setCarouselWidth","setActiveIndex","setChildren","leftPos","setLeftPos","calculateLeftPos","itemsPerSlide","dif","getHideArrows","calculateLeftPosCallbackRef","getHideArrowsCallbackRef","calculateCarouselWidth","rightArrowDisabled","leftArrowDisabled","itemsLeft","calculateSlideTo","LeftArrow","RightArrow","showLoaderDots","animating","setAnimating","setActiveImage","activeHoveredImage","setActiveHoveredImage","showArrows","setShowArrows","hoveredImageTimeout","setHoveredImageTimeout","slides","imageZoomed","ImageZoom","Url","getThumbnailTitleWrapper","_images$activeImage","_images$activeImage2","_images$activeImage2$","DisplayName","MultiItemsCarousel","DotCarousel","Portal","defaultNode","FadePropTypes","autoFocus","backdrop","backdropClassName","backdropTransition","centered","contentClassName","external","fullscreen","labelledBy","modalClassName","modalTransition","onOpened","returnFocusAfterClose","scrollable","trapFocus","unmountOnClose","wrapClassName","Modal","_originalBodyPadding","getFocusableChildren","handleBackdropClick","handleBackdropMouseDown","handleEscape","handleStaticBackdropAnimation","handleTab","manageFocusAfterClose","clearBackdropAnimationTimeout","showStaticBackdropAnimation","setFocus","_mouseDownElement","stopPropagation","_dialog","modalIndex","openCount","focusableChildren","totalFocusable","currentFocus","getFocusedChild","focusedIndex","_backdropAnimationTimeout","activeElement","ev","_triggeringElement","_mountContainer","getOriginalBodyPadding","originalBodyOverflow","modalOpenClassName","modalOpenClassNameRegex","dialogBaseClass","isModalHidden","modalAttributes","onKeyUp","hasTransition","Backdrop","renderModalDialog","closeAriaLabel","wrapTag","ModalHeader","closeButton","_props$wrapTag","WrapTag","_props$closeAriaLabel","ModalBody","ModalFooter","kitChangeType","KitItem","onMessageRecieved","kitItemOrderItemModel","orderItemID","onValidateIframeReturn","kitItemViewModel","iframeLoading","setKitViewModel","iframeLoaded","isPropsModalLoading","shouldValidateModal","externalValidation","iframeElementModal","modalBody","scrollableContainer","scrollbars","iframeElement","togglePreviewModal","onClickCancel","onClickSave","onClickEditOptions","onRemove","onAdd","onModalCarouselChange","onResizeHandler","isPropertiesOpen","isPreviewOpen","activeModalImage","isMediumBreak","getElementsByClassName","scrollIntoView","kitItemProductModel","IsIncluded","isPropertiesValid","hasProperties","Properties","doValidate","kitViewModel","modalIsOpen","currentModalIsOpen","propsWasOpened","renderEditLink","renderInventoryLabel","propertiesModalOnOpened","kitItemPriceModel","doLoadIframe","Thumbnails","kitItemClasses","showPropsNotOpenedWarning","OutOfStock","itemName","priceNotZero","IsMinimumPrice","frameBorder","ImageCarousel","activeSlide","KitItemsList","doLoadIframes","onItemChange","changeType","kitProduct","kitOrderItem","kitOrderItemPriceModel","lastChangedOrderItemID","Items","productItems","orderItems","orderItem","productItem","kitProductItem","ProductID","orderItemPriceModel","OrderItemID","isPriceCalculatingForItem","KitProduct","currentOrderItemId","orderProduct","lastOrder","activeCarouselSlide","isKitQuantityValid","showLoadingOnContinue","isLoadingReorder","showWarningPopover","showErrorPopover","initialDataLoaded","firstPriceCalculated","ContinueErrorProperties","ContinueErrorQuantity","quantityChangeTriggered","showItemsErrorOnKit","onClickContinue","onClickContinueAnyway","onCarouselImageChange","toggleWarningPopover","toggleErrorPopover","routeToCustomization","onReorder","itemsWithNoProperties","includedItemsWithIframe","includedItems","allIncludedIframesAreLoaded","allItemsValidationReturned","setAllKitViewModel","nonValidItems","carousel","footer","stickyPanel","kitViewModelToMerge","currentState","isvalid","updatedKitOrderItem","requestID","locked","lastChangeRequestID","kitOrderItemForPrice","notEdited","newOrder","currentOrderItemPriceModel","showReorderLink","quantityError","catalogNumber","hasIncluded","showQuantity","OrderSubmittedDate","SubmittedDate","Total","popperPositions","refElementSelector","tipPosition","rotation","isInViewport","setPopperPosition","popperData","popperWrapper","stickPriceRef","topPriceRef","bottomPriceRef","forceAddToCartButton","getPosition","refElement","setProperty","locationPoint","errorCode","resetError","popperAffectedSections","setPopperData","setPosition","setPositionCallbackRef","sections","newPopperData","ErrorIcon","Section","forwardRef","sectionRef","section","setOpenSection","isLastSection","onNext","changed","sectionToScrollTo","sectionErrors","sectionContentRef","hasBeenOpened","setHasBeenOpened","hasChanged","setHasChanged","contentObserver","onHeaderClick","hasErrors","TickIcon","PencilIcon","transitionEnd","isIntegerNumber","isPositiveAndFinite","alphabetChars","saltChars","transformed","codePointAt","fromAlphabet","inputChars","carry","BigInt","throwIfBigIntNotAvailable","safeToParseNumberRegExp","makeAnyOfCharsRegExp","Hashids","salt","alphabet","seps","sepsChars","uniqueAlphabet","charsToExclude","filteredSeps","onlyChars","keepChars","sepsLength","guardCount","guards","guardsRegExp","sepsRegExp","allowedCharsRegExp","makeAtLeastSomeCharRegExp","inputNumbers","numbers","int10","safeParseInt10","_encode","_decode","encodeHex","inputHex","hex","splitAtIntervalAndMap","decodeHex","isValidId","numbersIdInt","lottery","toAlphabet","alphabetLength","charCode","extraNumber","prefixGuardIndex","suffixGuardIndex","halfLength","excess","halfOfExcess","idGuardsArray","idBreakdown","lotteryChar","idArray","lastAlphabet","subId","nextAlphabet","withCustomProps","onDucChange","skipValidation","newDucValue","schemaErrors","uiSchema","errSchema","__errors","hashedID","readonly","widgets","checkIfPropertyDependersHaveDefaultValueSelected","depended","Property","handlePropertyChange","internalFormData","htmlFor","features","formContext","onBlur","errorsFromProperty","propertySchema","sectionToOpen","setInternalFormData","openSection","setSections","changedSections","setChangedSections","sectionsRef","sectionSplitter","nameOfSectionToKeepOpen","lastSectionName","firstSectionWithErrors","getFirstSectionWithErrors","sectionWithErrors","scrollToElement","sectionIndex","updatedErrors","propertyId","onNextSection","sectionProps","sectionChanges","changedPropList","currentErrors","nextSectionIndex","getSectionErrors","sectionNumber","headerHeight","targetPosition","startPosition","animation","currentTime","timeElapsed","run","ease","smoothScroll","poofPreviewError","ErrorBalloon","reorderModel","langCode","displayName","groupName","selectedValue","checked","ProductDeliveryMethod","deliveryOptions","onDeliveryChanged","onDeliveryChange","selectedDelivery","isMailing","currentDeliveryServiceID","currentDeliveryMethod","snapshot","deliveryServices","Delivery","Shipping","Enabled","MailingServices","service","Mailing","enabledOptions","RadioGroup","currency","deliveryMethod","taxFormatType","ProductPrice","MailingFee","addToCartBtnText","longPrice","isPriceLoading","showMinimumPrice","productThumbnails","onImageClick","lastViewImageId","thumbnails","setImages","handleImageZoom","ProofErrorBalloon","isModalOpen","onCloseModal","onImageChange","DynamicImageViewer","showRefreshPreview","onProofPreviewClick","setIsDisabled","dynamic","onToggle","hideLink","orderItemId","hasThumbnails","fileUrl","Proof","isDownloadProof","MimeType","handleModalToggle","ProofIcon","PriceDisplay","convertPropertiesFromApiToPropertiesObject","propertiesFromApi","dependenciesObject","sortedPropertiesObject","displayOrder","createNestedDependencyTree","dependees","propertiesObject","getDependenciesObject","excelPricing","dependenciesObjectWithValues","dependentPropertyId","dependant","dependantValue","timeoutCall","ready","proof","breakCurrentLoop","onProof","Status","PreviewID","Message","ProductQuantity","initialChange","packDesc","isProofPdf","checkboxText","errorText","isimage","approved","setApproved","showError","setShowError","onAddClicked","initialPropertiesSchema","setErrors","errorsExist","setErrorsExist","visibleErrorsExist","setVisibleErrorsExist","initialSchemaLoaded","setInitialSchemaLoaded","excelPricingError","setExcelPricingError","checkIfThereArePropertyErrors","checkIfThereAreVisiblePropertyErrors","getAjvErrors","schemaWithDeps","getDependentSchema","depTree","parentKey","depProps","propSchema","flat","propsMap","combineAjvErrorsWithUiSchema","isPropertyForError","ajvError","errorObj","combineApiErrorsWithFormErrors","formErrors","apiErrors","getErrorsObject","newErrors","combineOnFormChangeErrorsWithFormErrors","propertyErrors","processErrorsOnApiResponse","propertiesToShowErrors","excelError","affectPrice","updatedFormErrors","processErrorsOnFormChange","changedPropertyId","changedPropertyValue","errorsObject","processErrorsOnAddToCart","showErrors","errorsToUse","showAll","hideErrors","propertiesToHideErrors","showAllErrors","useUpdateProperties","setPromises","loading","setLoading","lastPromise","lastCallback","promiseToResolve","resolvePromises","addPromise","isPDF","DesktopProofPreview","_proof$Items","Format","MobileProofPreview","onDownloadPDFClick","proofError","proofType","setProof","setShowLoaderDots","setProofError","fileNames","hasError","file","fileBlob","createObjectURL","fileName","itemToDownload","downloadLink","useSticky","topMarkerRef","bottomMarkerRef","showStickyPrice","setShowStickyPrice","topIntersecting","setTopIntersecting","bottomIntersecting","setBottomIntersecting","topObserver","bottomObserver","observeCallback","isIntersecting","stickyConnect","IntersectionObserver","rootMargin","stickyDisconnect","State","_product$Proof","TaxFormatType","loadingData","setLoadingData","inputDataLoaded","setInputDataLoaded","pageState","setPageState","setOrderItem","setProduct","setProductThumbnails","setPrice","setProperties","setPropertiesObject","setExcelPricingEnabled","productDeliveries","setProductDeliveries","currentDeliveryServices","setDeliveryMethod","deliveryService","setDeliveryService","priceError","setPriceError","setQuantityError","proofUrl","setProofUrl","proofModalOpen","setProofModalOpen","approvalModalOpen","setApprovalModalOpen","thumbnailModalOpen","setThumbnailModalOpen","setPopperAffectedSections","popperError","setPopperError","postLoadingProcedures","setPostLoadingProcedures","forceAddToCartButtonPopper","setForceAddToCartButtonPopper","htmlDataUpdateTimeout","setHtmlDataUpdateTimeout","disabledRefreshPreviewButton","setDisabledRefreshPreviewButton","setLastViewImageId","setSectionToOpen","setPoofPreviewError","useErrors","setShowRefreshPreview","stickyPriceRef","productErrors","propertiesToUse","checkIfThereAreSectionErrors","calculateProperties","usedQuantity","updatedOrderItem","updatedPrice","setPricingError","ErrorCode","_updatedProperties$JS","changedProperties","recalculatePrice","formDataForApi","dataToPush","pushPropertiesState","updatedPropertiesFromApi","updatedPropertiesObject","updatedErrorsFromApi","_response$JSONSchema$","createPreview","propsFromApiToPropsObject","propsForProof","proofPreview","proofedDownloaded","hadError","firstProof","handleFormChange","_updatedFormData$JSON3","_updatedFormData$JSON4","_propertyErrors$prope","propertyValue","formChanges","resetPopperError","updatedPropertiesSchema","updatedFormData","_updatedFormData$JSON","_updatedFormData$JSON2","affectProof","_updatedPropertiesSch","_updatedPropertiesSch2","_updatedPropertiesSch3","loadProductData","_productFromApi$Confi","_productFromApi$Confi2","productFromApi","fastPreviewEnabled","FastPreviewEnabled","productThumbnailsFromApi","orderItemFromApi","DeliveryMethod","DeliveryServiceID","lastOrderFromApi","loadProductDeliveries","loadProductProofUrl","loadProductProperties","currentProductThumbnails","onFormChange","loadProductDataCallbackRef","cleanCustomState","demiState","triggerFormPropertyChange","formValues","newHtmlUpdateTimeout","getInitialData","currentItems","manuscriptID","articleData","articleName","pageCount","fetchArticleData","Article","Pagecount","ArticleName","deliveriesFromApi","initialQuantity","addToCartOrSave","skipPropertiesPush","productStockQuantity","allowOutOfStockPurchase","orderId","pushSavedForLater","_window$proofPreview$","pushProperties","pushOrderItem","pushCart","reRouteToCart","decoded","handleAddToCartButtonClick","distinctSections","sectionsAffectedByErrorsWithIndexes","RequireProofApproval","getContinueButtonText","proofModal","ProductLayout","PreviewErrorBalloon","RefreshPreviewButton","ProductDetails","minimumQuantity","lastOrderId","getReorder","reRouteToNewOrder","newOrderId","OrderItemId","showInStock","DynamicForm","newDeliveryMethod","newDeliveryServiceId","ProductOrderSummary","ProductProof","DynamicProductApproval","ProofApprovalText","ProofApprovalValidationMessage","ProductApproval","ProductThumbnailsPreview","ProductStickyPrice","renderLoader","StaticProduct","checkRedirectToLegacyProduct","writeHead","Location","productDetails","OrderFinalStep","Addresses","die","mockGlobal","getDescriptor","objectPrototype","EMPTY_ARRAY","EMPTY_OBJECT","hasProxy","plainObjectString","assertProxies","invoked","isStringish","protoConstructor","isGenerator","addHiddenProp","addHiddenFinalProp","createInstanceofPredicate","theClass","isES6Map","thing","isES6Set","hasGetOwnPropertySymbols","hasProp","storedAnnotationsSymbol","createDecoratorAnnotation","annotation","is20223Decorator","decorate_20223_","storeAnnotation","annotationType_","OVERRIDE","isOverride","$mobx","Atom","name_","isPendingUnobservation_","isBeingObserved_","diffValue_","lastAccessedBy_","lowestObserverState_","IDerivationState_","NOT_TRACKING_","onBOL","onBUOL","onBO","onBUO","reportObserved","reportChanged","startBatch","propagateChanged","endBatch","isAtom","createAtom","onBecomeObservedHandler","onBecomeUnobservedHandler","arg3","atom","interceptHook","ON_BECOME_OBSERVED","onBecomeUnobserved","structural","deepEqual","shallow","deepEnhancer","isObservable","isAction","isFlow","autoAction","referenceEnhancer","createActionAnnotation","options_","make_","make_$1","extend_","extend_$1","decorate_20223_$1","adm","_this$options_","bound","target_","actionDescriptor","createActionDescriptor","proxyTrap","defineProperty_","mthd","addInitializer","ann","_this$options_2","_ann$options_$name","_ann$options_","_ann$options_$autoAct","_ann$options_2","createAction","_createAction","isMobxAction","safeDescriptors","globalState","_adm$proxy_","_annotation$options_","proxy_","_annotation$options_$","_annotation$options_2","_annotation$options_$2","_annotation$options_3","_annotation$options_4","_adm$proxy_2","isPlainObject_","createFlowAnnotation","make_$2","extend_$2","decorate_20223_$2","flowDescriptor","createFlowDescriptor","_this$options_3","isMobXFlow","createComputedAnnotation","make_$3","extend_$3","decorate_20223_$3","assertComputedDescriptor","defineComputedProperty_","asObservableObject","values_","ComputedValue","getObservablePropValue_","createObservableAnnotation","make_$4","extend_$4","decorate_20223_$4","assertObservableDescriptor","defineObservableProperty_","_this$options_$enhanc","enhancer","desc","initializedObjects","initializeObservable","ObservableValue","_ann$options_$enhance","setObservablePropValue_","AUTO","autoAnnotation","createAutoAnnotation","make_$5","extend_$5","decorate_20223_$5","autoBind","observableAnnotation","deep","_this$options_4","_this$options_5","_this$options_6","defaultCreateObservableOptions","defaultDecorator","asCreateObservableOptions","observableRefAnnotation","observableShallowAnnotation","isObservableObject","isObservableArray","isObservableMap","isObservableSet","observableStructAnnotation","oldValue","observableDecoratorAnnotation","getEnhancerFromOptions","getEnhancerFromAnnotation","createObservable","arg2","box","equals","initialValues","useProxies","createLegacyArray","createObservableArray","ObservableMap","ObservableSet","decorators","initObservable","extendObservable","_target$$mobx$proxy_","_target$$mobx","objectProxyTraps","asDynamicObservableObject","struct","COMPUTED","computedAnnotation","computedStructAnnotation","arg1","currentActionId","nextActionId","isFunctionNameConfigurable","_getDescriptor$config","_getDescriptor","tmpNameDescriptor","actionName","executeAction","canRunAsDerivation","runInfo","notifySpy_","startTime_","prevDerivation_","trackingDerivation","runAsAction","prevAllowStateChanges_","allowStateChanges","untrackedStart","allowStateChangesStart","prevAllowStateReads_","allowStateReadsStart","runAsAction_","actionId_","parentActionId_","_startAction","error_","suppressReactionErrors","allowStateChangesEnd","allowStateReadsEnd","untrackedEnd","_endAction","_Symbol$toPrimitive","_Atom","notifySpy","hasUnreportedChange_","interceptors_","changeListeners_","value_","dehancer","_inheritsLoose","dehanceValue","prepareNewValue_","UNCHANGED","setNewValue_","checkIfStateModificationsAreAllowed","hasInterceptors","change","interceptChange","UPDATE","hasListeners","notifyListeners","intercept_","registerInterceptor","observe_","fireImmediately","observableKind","debugObjectName","registerListener","_Symbol$toPrimitive$1","TraceMode","dependenciesState_","observing_","newObserving_","runId_","UP_TO_DATE_","unboundDepsCount_","CaughtException","triggeredBy_","isComputing_","isRunningSetter_","derivation","setter_","isTracing_","NONE","scope_","equals_","requiresReaction_","keepAlive_","compareStructural","requiresReaction","keepAlive","onBecomeStale_","POSSIBLY_STALE_","propagateMaybeChanged","inBatch","shouldCompute","prevTrackingContext","trackingContext","trackAndCompute","STALE_","propagateChangeConfirmed","warnAboutUntrackedRead_","computeValue_","isCaughtException","cause","wasSuspended","track","trackDerivedFunction","disableErrorBoundaries","suspend_","clearObserving","prevValue","autorun","prevU","isComputedValue","prevAllowStateReads","prevUntracked","obs","changeDependenciesStateTo0","runId","prevTracking","prevObserving","observing","lowestNewObservingDerivationState","i0","_dep","_dep2","bindDependencies","untracked","allowStateReads","MobXGlobals","mobxGuid","pendingUnobservations","pendingReactions","isRunningReactions","enforceActions","spyListeners","globalReactionErrorHandlers","computedRequiresReaction","reactionRequiresObservable","observableRequiresReaction","verifyProxies","canMergeGlobalState","isolateCalled","__mobxInstanceCount","__mobxGlobals","queueForUnobservation","runReactions","Reaction","onInvalidate_","errorHandler_","requiresObservable_","isDisposed_","isScheduled_","isTrackPending_","isRunning_","schedule_","isScheduled","runReaction_","reportExceptionInDerivation_","prevReaction","dispose","getDisposer_","abortSignal","trace","enterBreakPoint","MAX_REACTION_ITERATIONS","reactionScheduler","runReactionsHelper","allReactions","iterations","remainingReactions","isReaction","ACTION","AUTOACTION","DEFAULT_ACTION_NAME","actionAnnotation","actionBoundAnnotation","autoActionAnnotation","autoActionBoundAnnotation","createActionFactory","reaction","_opts$name","_opts","scheduler","reactionRunner","requiresObservable","createSchedulerFromOptions","_opts2","_opts2$signal","signal","aborted","_opts3","ON_BECOME_UNOBSERVED","hook","getAtom","listenersKey","hookListeners","NEVER","ALWAYS","OBSERVED","configure","isolateGlobalState","ea","baseScheduler","setReactionScheduler","annotations","descriptors","getDependencyTree","nodeToDependencyTree","generatorId","FlowCancellationError","flowAnnotation","flowBoundAnnotation","generator","rejector","pendingPromise","stepId","onFulfilled","onRejected","cancelPromise","_res","yieldedPromise","_isObservable","transaction","getAdm","has_","get_","_getAdm$set_","set_","deleteProperty","_getAdm$delete_","delete_","_getAdm$definePropert","ownKeys_","preventExtensions","interceptable","interceptors","listenable","listeners","makeObservable","collectStoredAnnotations","SPLICE","arrayTraps","getArrayLength_","arrayExtensions","setArrayLength_","ObservableArrayAdministration","owned_","legacyMode_","atom_","enhancer_","lastKnownLength_","newV","oldV","dehanceValue_","dehanceValues_","added","addedCount","removed","removedCount","newLength","currentLength","newItems","spliceWithArray_","updateArrayLength_","oldLength","reserveArrayBuffer","deleteCount","lengthDelta","spliceItemsIntoValues_","notifyArraySplice_","_this$values_","oldItems","notifyArrayChildUpdate_","notify","owned","spliceWithArray","addArrayExtension","funcFactory","simpleFunc","dehancedValues","mapLikeFunc","reduceLikeFunc","isObservableArrayAdministration","ObservableMapMarker","DELETE","_Symbol$iterator","_Symbol$toStringTag","initialData","data_","hasMap_","keysAtom_","newEntry","hasKey","updateValue_","addValue_","_change","_this3$hasMap_$get","_this4$hasMap_$get","makeIterable","_keys$next","_keys$next2","_createForOfIteratorHelperLoose","_step$value","getPlainObjectKeys","replacementMap","dataStructure","convertToMap","orderedData","keysReportChangedCalled","_step4","_iterator4","_step4$value","_value","keyExisted","_value2","iter1","iter2","next1","next2","ObservableSetMarker","_Symbol$iterator$1","_Symbol$toStringTag$1","callbackFn","_change2","observableValues","descriptorCache","REMOVE","ObservableObjectAdministration","defaultAnnotation_","appliedAnnotations_","pendingKeys_","assertAnnotable","_this$target_$storedA","outcome","recordAnnotationApplied","deleteOutcome","notifyPropertyAddition_","cachedDescriptor","getCachedObservablePropDescriptor","_this$pendingKeys_","_this$pendingKeys_$ge","_this$pendingKeys_2","_this$pendingKeys_2$g","keys_","_options$name","_options$defaultDecor","getAnnotationFromOptions","isObservableObjectAdministration","_adm$target_$storedAn","ctor","ENTRY_0","createArrayEntryDescriptor","safariPrototypeSetterInheritanceBug","OBSERVABLE_ARRAY_BUFFER_SIZE","StubArray","LegacyObservableArray","_StubArray","createArrayBufferItem","getDebugName","_observable","getAdministration","named","aStack","bStack","unwrap","areArrays","aCtor","bCtor","getSelf","__MOBX_DEVTOOLS_GLOBAL_HOOK__","injectMobx","spy","extras","CartListModel","cartModel","emptyAllText","affectPricing","originalOrderFriendlyId","itemsCount","exportedList","skipLoading","orderApproval","sortingDate","modificationDate","_cartModel","_itemsCount","exportSuccess","justLoaded","exportError","exportSuccessMessage","isModified","noPricing","isDefault","isUnassigned","isWishList","isModifiedAfterExport","isExported","isOrderEdit","isOrderApproval","toggleSelectAll","emptyList","reAssign","reAssignToNew","updateListFromApi","export","clearExportError","clearExportSuccessMessage","touchSortingDate","listId","subtotal","hasPricing","_this$_cartModel$open","openedList","listOpening","CART_LIST_TYPES","DEFAULT","UNASSIGNED","WISH_LIST","ORDER_EDIT","ORDER_APPROVAL","ExportDate","moment","_cartActionsModel","toggleSelectList","orderItemIds","affectPricingLists","removeItems","checkedOnly","reAssignList","lists","updateListId","targetList","_uStoreProvider","touchModificationDate","openList","addList","newList","RedirectUrl","touchLists","totalItemsCount","selectedItemsCount","totalWishListItemsCount","showTax","hasWarnings","presentablePrices","_this$_cartModel$item","affectsPricing","_this$_cartModel$open2","_this$_cartModel$open5","_this$_cartModel$item3","_this$_cartModel$open3","_this$_cartModel$open4","_this$_cartModel$Cart","_this$_cartModel$item2","isListsMode","openedListItems","isSingleListMode","_this$_cartModel$Cart2","_this$_cartModel$Cart3","_this$_cartModel$Cart4","WISHLIST","_list$items","_list$items$every","_this$_cartModel$open6","_this$_cartModel$open7","_this$_cartModel$open8","_this$_cartModel$open9","warnings","_this$_cartModel$open10","_this$_cartModel$item4","_this$_cartModel$open11","_this$_cartModel$open12","_this$_cartModel$open13","_this$_cartModel$open14","_this$_cartModel$open15","_this$_cartModel$item5","_this$_cartModel$open16","_this$_cartModel$open17","_this$_cartModel$open18","_this$_cartModel$open19","_this$subtotal","_this$tax","_this$total","CartErrorModel","errorLevel","CART_ERROR_LEVELS","WARNING","ERROR","CART_ERROR_TYPES","InventoryExceeded","InventoryOutOfStock","InventoryDelayed","ProductNotAvailable","ProductComponentNotAvailable","MaxUnitsExceeded","MinUnitsNotReached","ProductUnitChanged","MaxUnitsExceededForOrder","RecipientListModelInvalid","DeliveryMethodInvalid","GdprFilesDeleted","ProductOptionsChanged","ProductPriceChanged","CartItemPriceModel","itemModel","isChanged","_itemModel","updateFromApi","setIsChangedWarning","priceItem","_priceItem$IsChanged","_priceItem$IsValid","_priceItem$Price","_priceItem$Tax","IsChanged","IsValid","listModel","thumbnailUrl","editUrl","nickname","quantityPerRecipient","numRecipients","defaultQuantity","_listModel","addValidation","toggleSelect","moveItemToWishlist","moveItemToCart","updateNickname","updateValidations","Level","updateItem","runInAction","deleteItem","moveItemToWishList","listIdOrNull","reAssignItemToList","reAssignItemToNewList","edit","_storeData","validations","priceChangedWarning","newValidations","productId","singular","plural","packSingular","packPlural","intervalId","apiCallEmitted","startTimer","emitApiCall","endApiCall","stopTimer","summary","IsChecked","Nickname","itemsIds","selectedOnly","cartItemsFromApi","wishlistItemsFromApi","updateCartItems","cartPricing","wishlistPricing","pricingItems","cartPricingUnchecked","wishlistPricingUnchecked","updateCartPricing","cartValidation","wishlistValidation","validationItems","cartValidationUnchecked","wishlistValidationUnchecked","updateCartValidation","oldListId","targetListId","_this$_cartModel$list","_this$_cartModel$list2","_this$_cartModel$list3","updateLists","selectedItem","currentList","CartOrderApprovalModel","originalOrderId","_CartListModel$CART_L","_CartListModel$CART_L2","_CartListModel$CART_L3","CartModel","cartMode","storeBaseUrl","storeLanguageCode","storeApiUrl","CartActionsModel","_cartMode","_openedListId","_lists","shoppingCartText","checkoutUrl","CartSummaryModel","initiated","initialLoadItemsFromApi","loadListsItemsFromApi","loadSingleListItemsFromApi","loadCartItemsFromApi","updateListItemsFromApi","loadPricingFromApi","loadWishListItemsFromApi","addCartError","hasEditOrApproval","affectPricingItems","isWishListMode","listsItemsCount","initialLoadCartModeWishList","cartPricingFromApiChecked","cartPricingFromApiUnchecked","cartValidationFromApiChecked","loadValidationFromApi","cartValidationFromApiUnchecked","initialLoadCartModeLists","initialLoadCartModeSingleList","initialLoadWishlist","wishListValidationFromApi","wishListPricingFromApi","OriginalOrderFriendlyID","SortingDate","ModificationDate","openListId","singleList","convertItemsToCartItemsObject","CheckoutUrl","OrderApproval","OriginalOrderID","editSections","cartList","selectedListItems","itemsNotInList","pricingInfo","validationInfo","orderNumber","cartItem","validationItem","CartItemModel","convertItemToCartItemObject","_item$ListID","_item$Thumbnail","_item$Product$Unit$Pa","_item$Product$Unit$Pa2","Checked","Thumbnail","EditUrl","QuantityPerRecipient","NumRecipients","CartProductModel","CartProductUnitModel","defaultList","convertItemsToWishlistItemsObject","wishList","wishListItems","_this$openedList","itemsFromApi","itemFromApi","priceItems","itemValidations","unassignedListIndex","_this$_lists$find","_this$_lists$find2","_this$_lists$find3","_this$_lists$find4","checkout","CART_ACTIONS","TOGGLE_SELECT_ALL","TOGGLE_SELECT_ITEM","EMPTY_LIST","MOVE_ITEM_TO_WISH_LIST","MOVE_ITEM_TO_CART","DELETE_ITEM_FROM_CART","EDIT_CART_ITEM","CHANGE_NICKNAME","CART_MODELS","CART","CART_VALIDATION","WISH_LIST_VALIDATION","PRICING","PRICING_NO_API","defaultNoopBatch","printDebugValue","globalIsUsingStaticRendering","isUsingStaticRendering","TimerBasedFinalizationRegistry","finalize","maxAge","sweepTimeout","registrations","registration","registeredAt","scheduleSweep","sweep","observerFinalizationRegistry","FinalizationRegistry","getServerSnapshot","createReaction","stateVersion","onStoreChange","useObserver","baseComponentName","admRef","adm_1","renderResult","exception","hasSymbol","ReactForwardRefSymbol","ReactMemoSymbol","baseComponent","useForwardRef","observerComponent","contextTypes","hoistBlackList","compare","observerBatching","batch","currencyState","currencySymbol","showCurrencyCode","currencyCode","SummaryTitle","getSummaryTitle","_model$openedList","_model$openedList2","_model$summary4","_model$summary5","_model$summary6","_model$openedList3","_model$openedList4","_model$summary7","_model$summary7$prese","_model$summary$showTa","_model$summary8","_model$summary9","_model$summary9$prese","_model$summary10","_model$summary10$pres","_model$summary11","_model$openedList5","_model$openedList6","CartSummaryPriceBlock","_model$summary","_model$summary2","_model$summary3","onOk","onCancel","isListModel","_model$openedList7","_model$summary17","setShowAssignToListModal","isWarningShown","setIsWarningShown","isErrorShown","setIsErrorShown","disabledStatus","getCheckoutButtonText","_model$openedList8","_model$openedList9","_model$summary12","_model$summary13","_model$summary14","_model$summary15","CartTooltip","_model$openedList10","_model$summary16","CartSummaryError","formatDate","dateStr","getLocaleTimeString","exportDate","modifiedDate","rel","bsSize","addon","Input","_this$props$type","checkInput","selectInput","rangeInput","formControlClass","SearchMenuItem","onChangeHandler","onClearSearchHandler","searchable","dropDownToggle","searchPlaceholder","dropdownOpen","setDropdownOpen","filteredItems","Item","_item$width","_item$height","ASSIGN_LIST_TYPE","onClose","onSave","selectedListType","setSelectedListType","setNewValue","selectedList","setSelectedList","firstValue","noCustomLists","moreThan100Error","sameNameError","assignToButtonDisabled","onTypeChange","DropDown","listType","withSticky","summaryRef","footerObserver","showAssignToListModal","marginTop","footerElement","_footerObserver$curre","_footerObserver$curre2","isExportErrorClass","CartSummaryContent","CartSummaryButton","CartSummaryExportSuccess","CartSummaryExportError","isSecondaryCurrency","AssignToListModal","assignToItemCount","onAction","setShowAll","toggleArrow","_model$summary$presen","showSticky","setShowSticky","refContainer","CartSummary","CartSummaryStickyBlock","__assign","hashFragment","asyncTimerId","scrollFunction","isInteractiveElement","hasAttribute","getElAndScroll","originalTabIndex","preventScroll","blur","genericHashLink","As","linkHash","passDownProps","isExact","filteredProps","__rest","elementId","smooth","behavior","NavHashLink","onSelect","confirmationText","confirmButtonText","rejectButtonText","onReject","onConfirm","itemThumbnail","save","setSave","onDuplicate","showDeleteAction","showAssignTo","MobileCustomListActions","showItemsCount","hasExportedItems","_list$exportSuccess","DesktopCustomListActions","onAssignToList","onDelete","CustomListTitle","listTitle","onEdit","CustomListActions","setShowDeleteAllConfirmation","setDeleteConfirmationText","onDeleteWithNoConfirmation","onViewExported","_list$originalOrderFr","_list$originalOrderFr2","_list$selected","_list$items2","onTitleClick","showDeleteAllConfirmation","showDuplicateListModal","setShowDuplicateListModal","showListNameEdit","setShowListNameEdit","deleteConfirmationText","handleDeleteAllDialogConfirm","getContainerClassList","onTitleEdit","CartCheckbox","onDuplicateList","ConfirmationDialog","EditListNameModal","newName","ConfirmListDuplicationModal","isHighlighted","customPriceFormat","itemPrice","editDisabled","setAlertMessage","onMoveItemToWishlist","onMoveItemToCart","onDuplicateItem","showConfirmationDialog","setShowConfirmationDialog","assignSingleItem","PromptDialog","setNickname","onEditStart","onEditEnd","nicknameInput","setNicknameInput","isEditing","setIsEditing","isDialogOpen","setIsDialogOpen","inputRef","inputWrapper","useDetectClickOutside","handleEditNickname","onDoubleClick","newNickname","showTooltip","setShowTooltip","isTooltipOpen","setIsTooltipOpen","isEditingNickname","setIsEditingNickname","contentRef","rootRef","originalOverflow","originalTextOverflow","textOverflow","originalWhiteSpace","originalWidth","isOverflowing","ExpandableList","visibleItems","toggleList","onContentVisible","elementObserver","getEventNode","lazyLoadHandler","shouldComponentUpdate","SkeletonThemeContext","defaultEnableAnimation","styleOptionsToCssProperties","baseColor","highlightColor","circle","enableAnimation","Skeleton","Wrapper","customClassName","containerClassName","containerTestId","originalPropsStyleOptions","contextStyleOptions","propsStyleOptions","styleOptions","inline","countCeil","thisStyle","fractionalPart","fractionalWidth","skeletonSpan","onThumbnailClick","thumbnailLoading","setThumbnailLoading","thumbnailRef","isImageVertical","setIsImageVertical","LazyLoad","defineImageOrientation","_thumbnailRef$current","_thumbnailRef$current2","_thumbnailRef$current3","_thumbnailRef$current4","parentRect","closest","_messages$map","DisplayPrice","showSelection","alertMessage","getItemQuantity","totalQuantity","itemInListMode","CartItemAlert","ProductName","CartItemThumbnail","ProductProperties","CartItemActions","defaultItems","manUID","InfoMessage","isEmptyListClass","getListTitle","loadedItems","setLoadedItems","listOpen","setListOpen","listContentRef","showSummary","isEmptyList","setMaxHeight","setMaxHeightDebounced","getListClasses","ListBar","getListContentClasses","CartItem","InListsCartSummary","navHashLinkRef","headerHeightDesktop","themeVariables","scrollWidthOffset","List","sectionTitle","CartItemSkeleton","ListContainerSkeleton","CartList","CartSummaryContainer","buttonUrl","_model$loading","EmptyPage","ListContainer","LoadingDialog","_props$state$cartItem2","_cartModel$current","_props$state$cartItem3","_props$state$cartItem4","setCurrencyState","ShowCurrencyCode","loadData","_props$state$cartItem","CartNG","CheckoutFinal","FileSubmission","CheckoutPaymentSubmission","MyRecipientLists","OrderHistory","PersonalInformation","Customization","uEditCustomization","SplitShippingAddresses","OrderDetails","SplitShippingItems","Recipient","ProductUnavailable","Drafts","ErrorPage","_props$customState","searchResults","setSearchResults","searchResultsCount","setSearchResultsCount","_props$customState$se","OrderApprovalList","CustomMain","ClearingUnknownOrder","ConnectLoggedOut","alignItems","flexDirection","fontSize","xmpieLogo","productIDs","envs","articles","article","bordered","borderless","hover","responsiveTag","striped","Table","_props$responsiveTag","ResponsiveTag","table","responsiveClassName","CheckoutComplete","UeditCustomization","Articles","setArticles","inputValue","setInputValue","setProductID","getProductId","SearchResults","manID","ContactUs","rows","FAQ","Generic","initialProps","setInitialProps","doRenewToken","ignored","useReducer","newToken","sslOption","unmount","favIcon","pageComponentName","pageComponent","newProps","AppendTrailingSlash","reportWebVitals"],"sourceRoot":""}